Ho creato uno script PHP che dovrebbe estrarre tutti i prefissi telefonici mondiali recuperandoli da una tabella MySQL e inserirli in un tag option che poi inserisco dinamicamente in una pagina HTML (tra i tag select) tramite <?php echo $option ?>: il problema è che, quando visualizzo la pagina HTML, tra i tag option non visualizzo tutti i record presenti nella tabella MySQL (debuggando l'array $cac, proveniente da database.php, contiene solo 111 array mentre la tabella MySQL contiene 222 record).
Posto il codice del file create.php:
codice:
<?php require 'database.php';
$sql = "SELECT * FROM dialing_codes";
$execute = array();
$fetch = FALSE;
$fetch_array = TRUE;
$exe = new Database();
$exe->crud($sql, $execute, $fetch, $fetch_array);
$option = NULL;
for($i = 0; $i < count($cac); $i++) {
$codes = $cac[$i]['Code'];
$countries = $cac[$i]['Country'];
$option .= "<option value=\"$codes\">$countries</option>";
}
if (!empty($_POST)) {
// keep track validation errors
$nameError = null;
$emailError = null;
$mobileError = null;
// keep track post values
$name = htmlentities($_POST['name']);
$email = htmlentities($_POST['email']);
$prefix = $_POST['prefix'];
$mobile = htmlentities($_POST['mobile']);
// validate input
$valid = true;
if (empty($name)) {
$nameError = 'Please enter Name';
$valid = false;
}
if (empty($email)) {
$emailError = 'Please enter Email Address';
$valid = false;
} else if (!filter_var($email,FILTER_VALIDATE_EMAIL) ) {
$emailError = 'Field contains a sintax error. Please enter a valid Email Address';
$valid = false;
}
if (empty($mobile)) {
$mobileError = 'Please enter Mobile Number';
$valid = false;
} else if (!ctype_digit($mobile)) {
$mobileError = 'Field don\'t contains only nubers. Please enter a valid Mobile Number';
$valid = false;
}
$prefixMobile = "$prefix$mobile";
$sql = "SELECT * FROM php_crud_grid_db WHERE email = '".$email."' OR mobile = '".$prefixMobile."'";
$execute = array();
$fetch = TRUE;
$exe = new Database();
$exe->crud($sql, $execute, $fetch, FALSE);
/*$pdo = Database::connect();
$sql = "SELECT * FROM php_crud_grid_db WHERE email = '".$email."' OR mobile = '".$mobile."'";
$q = $pdo->prepare($sql);
$q->execute();
$data = $q->fetch(PDO::FETCH_ASSOC);
Database::disconnect();*/
$e = $data['email'];
$m = $data['mobile'];
// insert data
if ($valid) {
if ($email != $e && $prefixMobile != $m) {
$sql = "INSERT INTO php_crud_grid_db (name, email, mobile) values(?, ?, ?)";
$execute = (array($name, $email, $prefixMobile));
$exe = new Database();
$exe->crud($sql, $execute, FALSE, FALSE);
/*$pdo = Database::connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO php_crud_grid_db (name, email, mobile) values(?, ?, ?)";
$q = $pdo->prepare($sql);
$q->execute(array($name, $email, $mobile));
Database::disconnect();*/
header("Location:grid.php");
} else {
echo '<script>alert("Email address and/or Mobile number already exist!")</script>';
}
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.4/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<div class="span10 offset1">
<div class="row">
<h3>Create a Customer</h3>
</div>
<form class="form-horizontal" action="create.php" method="post">
<div class="control-group <?php echo !empty($nameError)?'error':'';?>">
<label class="control-label">Name</label>
<div class="controls">
<input name="name" type="text" placeholder="Name" value="<?php echo !empty($name)?$name:'';?>">
<?php if (!empty($nameError)): ?>
<span class="help-inline"><?php echo $nameError;?></span>
<?php endif; ?>
</div>
</div>
<div class="control-group <?php echo !empty($emailError)?'error':'';?>">
<label class="control-label">Email Address</label>
<div class="controls">
<input name="email" type="text" placeholder="Email Address" value="<?php echo !empty($email)?$email:'';?>">
<?php if (!empty($emailError)): ?>
<span class="help-inline"><?php echo $emailError;?></span>
<?php endif;?>
</div>
</div>
<div class="control-group <?php echo !empty($mobileError)?'error':'';?>">
<label class="control-label">Mobile Number</label>
<div class="controls">
<select name="prefix">
<?php echo $option ?>
</select>
<input name="mobile" type="text" placeholder="Mobile Number" value="<?php echo !empty($mobile)?$mobile:'';?>">
<?php if (!empty($mobileError)): ?>
<span class="help-inline"><?php echo $mobileError;?></span>
<?php endif;?>
</div>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-success">Create</button>
<a class="btn" href="grid.php">Back</a>
</div>
</form>
</div>
</div>
</body>
</html>
e il file database.php:
codice:
<?phpclass Database
{
private static $dbName = 'test' ;
private static $dbHost = 'localhost' ;
private static $dbUsername = 'root';
private static $dbUserPassword = '';
private static $cont = null;
public function __construct() {
if (connection_status() != CONNECTION_NORMAL) {
die('Init fuction is not allowed');
}
}
public function connect()
{
// One connection through whole application
if ( null == self::$cont )
{
try
{
self::$cont = new PDO( "mysql:host=".self::$dbHost.";"."dbname=".
self::$dbName, self::$dbUsername, self::$dbUserPassword);
}
catch(PDOException $e)
{
die($e->getMessage());
}
}
return self::$cont;
}
public function disconnect()
{
self::$cont = null;
}
public function crud/*execute*/($sql, $execute, $fetch, $fetch_array) {
try {
$exe = new Database();
$pdo = $exe->connect();
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql;
$q = $pdo->prepare($sql);
$q->execute($execute);
if ($fetch) {
global $data;
$data = $q->fetch(PDO::FETCH_ASSOC);
}
if ($fetch_array) {
global $cac;
while ($data = $q->fetch(PDO::FETCH_ASSOC)) {
$cac[] = $q->fetch(PDO::FETCH_ASSOC);
}
}
$exe->disconnect();
} catch (PDOException $e) {
error_log($e->getMessage());
}
}
}
?>
Ps La seconda query del file create.php funziona correttamente...