Les en-têtes de mes colonnes sont id, nom, téléphone. Si j'ai donné le nom dans la colonne id, les données ne sont pas insérées mais le message s'affiche comme "importation réussie". Je veux afficher le message comme "les données ne sont pas correctement définies". Comment valider le code avant d'importer dans mysql?
J'ai essayé de vérifier avec les conditions if et else mais je n'ai pas obtenu le résultat réel dont j'ai besoin.
$sql = "INSERT IGNORE INTO `all`(`id`, `name`,`phone`) VALUES ('".$getData[0]."','".$getData[1]."','".$getData[2]."')"; $result = mysqli_query($conn, $sql); if($result) { echo "<script type=\"text/javascript\">alert(\"CSV File has been successfully Imported.\"); }</script>"; else { echo "<script type=\"text/javascript\"> alert(\"Invalid File Format/ Data Please check file is csv and data as per headings.\"); }</script>"; }
J'attends le message d'alerte comme "données incorrectes" mais obtenant une "importation réussie".
3 Réponses :
vous pouvez utiliser is_int (), pour vérifier si la valeur (dans votre cas $ getData [0]) est un entier ou non.
avant d'ajouter une valeur dans la requête
if(!is_int($getData[0]) { echo "<script type=\"text/javascript\"> alert(\"Improper Data.\"); }</script>"; } else { // insert query code here }
La validation doit être faite avant tout INSERT, de cette façon vous pouvez le faire:
function validateCsvRow($data)
le code ci-dessus utilise le typage, si vous utilisez un ancien changement de version de php
function validateCsvRow(array $data) : bool
à:
<?php //validation of csv if (false === validateCsvRow($getData)) { echo "data is not properly defined"; // or better to throw an exception - uncomment to see difference // throw new \InvalidArgumentException("data is not properly defined"); die; //end script execution } // if validation is okay script continues. $sql = "INSERT IGNORE INTO `all`(`id`, `name`,`phone`) VALUES ('".$getData[0]."','".$getData[1]."','".$getData[2]."')"; $result = mysqli_query($conn, $sql); if($result) { echo "<script type=\"text/javascript\">alert(\"CSV File has been successfully Imported.\"); }</script>"; else { echo "<script type=\"text/javascript\"> alert(\"Invalid File Format/ Data Please check file is csv and data as per headings.\"); }</script>"; } function validateCsvRow(array $data) : bool { $result = 1; //check if id is not set if (!isset($data[0]) { $result *= 0; } //check if id is not integer if (!is_int($data[0]) { $result *= 0; } //check if name is not set if (!isset($data[1]) { $result *= 0; } //check if name is not string if (!is_string($data[1]) { $result *= 0; } $minimumNameLength = 1; //number of characters //check if name has at least n characters if (!strlen($data[1]) < $minimumNameLength) { $result *= 0; } //return 1 => true if all was ok //or 0 => false if at least one check was not ok. return (bool) $result; }
L'ordre des champs dans CSV peut varier, par exemple. la colonne 0 ne doit pas toujours être "id".
Considérez ce CSV:
$sql = "INSERT IGNORE INTO `all`(`id`, `name`,`phone`) VALUES (?, ?, ?)"; $stmt = $db->prepare($sql); $header = null; while($row = fgetcsv($handle)) { if ($header == null) { $header = $row; continue; } $data = array_combine($header, $row); // $data is now an assoziative array, eg. you can grab "id" by name $stmt->execute([ $data['id'], $data['name'], $data['phone'] ]); }
et ce code:
name, id, phone 'Alice', 1, 1234 'Bob', 2, 5678
p>