sql >> Database >  >> RDS >> Mysql

PHP voegt meerdere checkbox- EN tekstboxarrays in MySQL-database in

Je zou implode niet moeten gebruiken . Dat plaatst een door komma's gescheiden lijst van alles in het formulier in elke rij die u invoegt, en herhaalt dit voor elk vakje dat is aangevinkt. U hoeft slechts één item in elke rij in te voegen door de arrays te indexeren.

Wanneer u echter een selectievakje in een formulier heeft, worden alleen de aangevinkte vakjes verzonden. Het resultaat hiervan is dat de indexen van de $_POST['checkbox'] array komt niet overeen met de corresponderende $_POST['item'] en $_POST['quantity'] elementen. U moet expliciete indexen in het checkbox plaatsen namen zodat u ze kunt relateren.

<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>

Dan kan je PHP-code er zo uitzien:

$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, de prijzen in je HTML zetten lijkt een slecht idee. Niets houdt de gebruiker tegen om HTML te wijzigen met behulp van de webinspecteur voordat ze het formulier indienen, zodat ze de prijs kunnen verlagen. U zou de prijzen uit de database moeten halen bij het verwerken van het formulier.

Merk ook op dat u in uw oorspronkelijke code de databaseverbinding opende met MySQLi, maar dat u vervolgens probeerde de invoeging uit te voeren met behulp van mysql_query in plaats van $conn->query() . Zo kun je API's niet combineren; myql_query kan alleen worden gebruikt als u de verbinding opent met mysql_connect .




  1. Meerdere rijen invoegen met pg-promise

  2. Hoe meerdere kolommen zoeken in MySQL?

  3. Hoe om te gaan met Ruby on Rails-fout:installeer de postgresql-adapter:`gem install activerecord-postgresql-adapter'

  4. Lijst met talen die door Oracle Database worden ondersteund