Insertion de plusieurs tableaux de cases à cocher et de zones de texte dans une base de données MySQL : résolution des problèmes courants
Les requêtes impliquant plusieurs tableaux de cases à cocher et de zones de texte peuvent poser des défis en PHP. Cet article aborde deux problèmes spécifiques : pourquoi les cases à cocher s'affichent comme cochées même lorsqu'elles ne le sont pas, et pourquoi les données ne parviennent pas à être insérées dans la base de données.
Problème d'affichage des cases à cocher
Le coupable est l'utilisation d'implode, qui génère une chaîne de toutes les valeurs de case à cocher séparées par des virgules. Cette approche insère incorrectement la liste entière dans chaque ligne de la base de données, qu'une case spécifique soit cochée ou non.
Pour remédier à cela, attribuez des index explicites aux noms des cases à cocher dans le code HTML du formulaire. Ce faisant, les valeurs des cases à cocher correspondantes dans le tableau $_POST['checkbox'] peuvent être facilement liées aux éléments $_POST['item'] et $_POST['quantity'] qui les accompagnent sans recourir à l'implosion.
Échec d'insertion de la base de données
Un autre problème survient en raison du fait que les cases à cocher ne soumettent que les valeurs des éléments cochés. Cela conduit à une inadéquation entre les index du tableau $_POST['checkbox'] et les éléments $_POST['item'] et $_POST['quantity'] correspondants.
Pour résoudre ce problème, utilisez les index attribués aux noms de cases à cocher sous la forme modifiée. Cela permet d'associer correctement les valeurs, garantissant que chaque ligne de la base de données contient le bon ensemble de données.
De plus, au lieu d'utiliser mysql_query, utilisez la méthode $conn->query(), qui est cohérent avec l'API MySQLi utilisée pour la connexion à la base de données.
Code PHP mis à jour :
<br>$stmt = $conn->prepare(" INSÉRER DANS les achats (Produit, Quantité, Prix) VALUES (?, ?, ?)");<br>$stmt->bind_param("sis", $name, $quantity, $price);<br>foreach ( $_POST['checkbox'] as $i => $price) {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$name = $_POST['name'][$i]; $quantity = $_POST['quantity'][$i]; $stmt->execute();
}
Mesure de sécurité supplémentaire
Par mesure de sécurité, il est généralement conseillé de récupérer les prix depuis la base de données plutôt que de les stocker dans le HTML. Cela empêche les utilisateurs de modifier les prix dans l'inspecteur Web avant de soumettre le formulaire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!