Mysql
 sql >> Base de données >  >> RDS >> Mysql

PHP insère plusieurs tableaux de cases à cocher ET de zones de texte dans la base de données MySQL

Vous ne devriez pas utiliser implode . Cela place une liste séparée par des virgules de tout ce qui se trouve dans le formulaire dans chaque ligne que vous insérez, et le répète pour chaque case cochée. Vous devez juste insérer un élément dans chaque ligne, en indexant les tableaux.

Cependant, lorsque vous avez une case à cocher dans un formulaire, il ne soumet que celles qui sont cochées. Le résultat est que les index du $_POST['checkbox'] le tableau ne correspondra pas au $_POST['item'] correspondant et $_POST['quantity'] éléments. Vous devez mettre des index explicites dans la checkbox noms afin que vous puissiez les relier.

<form method = "POST">

<input type = "hidden" name = "item[]" value = "cupcake">
<input type = "text" name = "items" value = "cupcake" readonly><br>
<b>Price :</b> <span name = "price" value = "3.00">$17.00</span><br>
Quantity: <input tabindex="1" name="quantity[]" min="0" max="5" type="number" class="quantity" value="1" /><br>
<input tabindex="1" name="checkbox[0]" type="checkbox" value="17" /><span>Add to Cart</span></label></div></div></td><br>

<input type = "hidden" name = "item[]" value = "cake">
<input type = "text" name = "items" value = "cake" readonly><br>
<b>Price :</b> <span name = "price" value = "20.00">$20.00</span><br>
Quantity: <input tabindex="1" name="quantity[]" min="0" max="5" type="number" class="quantity" value="1" /><br>
<input tabindex="1" name="checkbox[1]" type="checkbox" value="20" /><span>Add to Cart</span></label></div></div></td><br>

<input type = "submit" name = "insertBT"><br>
</form>

Alors votre code PHP peut ressembler à ceci :

$stmt = $conn->prepare("INSERT INTO purchases (Product, Quantity, Price) VALUES (?, ?, ?)");
$stmt->bind_param("sis", $name, $quantity, $price);
foreach ($_POST['checkbox'] as $i => $price) {
    $name = $_POST['name'][$i];
    $quantity = $_POST['quantity'][$i];
    $stmt->execute();
}

BTW, mettre les prix dans votre HTML semble être une mauvaise idée. Rien n'empêche l'utilisateur de modifier le HTML à l'aide de l'inspecteur Web avant de soumettre le formulaire, afin qu'il puisse baisser le prix. Vous devriez obtenir les prix de la base de données lors du traitement du formulaire.

Notez également que dans votre code d'origine, vous avez ouvert la connexion à la base de données à l'aide de MySQLi, mais vous avez ensuite essayé de faire l'insertion à l'aide de mysql_query au lieu de $conn->query() . Vous ne pouvez pas mélanger les API comme ça ; myql_query ne peut être utilisé que lorsque vous ouvrez la connexion avec mysql_connect .