J'ai établi le code PHP suivant qui traite les données d'une forme de la manière suivante:Quel est le meilleur moyen de valider une liste de valeurs?
- Ajoute tous les noms sont entrés dans un tableau.
- Vérifie si l'un des noms est dans une table MySQL.
- Si ce n'est pas le cas, renvoie une erreur.
- Si oui, ajoute des données à une colonne appelée «atelier» dans le tableau pour les noms soumis.
$emailFrom = "";
$emailTo = "";
$subject = "Booking(s) for Workshop";
$body = "The following people have booked their workshops:" . "\n\n";
$row_count = count($_POST['name']);
if ($row_count > 0) {
mysql_select_db($database, $connection);
$name = array();
$workshop = array();
for($i = 0; $i < $row_count; $i++) {
// variable sanitation...
$name[$i] = mysql_real_escape_string(ucwords($_POST['name'][$i]));
$workshop[$i] = mysql_real_escape_string($_POST['workshop'][$i]);
}
$names = "('".implode("','",$name)."')";
$query = "SELECT 1 FROM conference WHERE Name In $names";
$result = mysql_query($query);
if ($result) {
$rowcount = mysql_num_rows($result);
if ($rowcount == 0) {
$errorString = "No bookings found";
}
else {
for($i = 0; $i < $row_count; $i++) {
$sql = "UPDATE conference SET Workshop = '$workshop[$i]' WHERE Name LIKE '$name[$i]'";
mysql_query($sql);
}
}
}
}
include 'workshops.php';
// send email
$success = mail($emailTo, $subject, $body, "From: <$emailFrom>");
// redirect to success page
if ($success){
print "<meta http-equiv=\"refresh\" content=\"0;URL=thanks-workshop.html\">";
}
else{
print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
//}
La question que je suis maintenant face est de savoir comment ajouter un contrôle d'erreur plus sophistiqué. Je veux que PHP vérifie chaque nom soumis sur le formulaire. S'il trouve tous les noms, soumettez les données à la colonne de l'atelier. Si aucun nom n'est trouvé, le message d'erreur serait "Les noms suivants n'ont pas été trouvés sur notre base de données: [noms listés]". L'utilisateur serait alors obligé d'entrer les noms corrects ou supprimer les noms fautifs, avant que le formulaire puisse être soumis. J'ai eu la tête dans un peu d'enchevêtrement en essayant de trouver comment y parvenir.
Dois-je exécuter une requête distincte sur la première boucle pour chaque nom, puis si le nom n'est pas trouvé dans la table, ajoutez ce nom à une variable qui serait alors incluse dans le message d'erreur? Ensuite, si après toutes les boucles la variable d'erreur est "", le formulaire pourrait être soumis (parce que tous les noms ont été trouvés), mais sinon le message d'erreur montrerait les noms qui ont besoin d'être modifiés?
Serait-ce la meilleure méthode, ou existe-t-il un meilleur moyen?
Merci pour votre aide Cela fonctionne bien. Entaille – Nick