sql >> Databáze >  >> RDS >> Mysql

PHP vkládání více polí zaškrtávacích polí A textových polí do databáze MySQL

Neměli byste používat implode . To vloží čárkami oddělený seznam všeho ve formuláři do každého řádku, který vložíte, a zopakuje to pro každé zaškrtnuté políčko. Do každého řádku byste měli vložit pouze jednu položku indexováním polí.

Pokud však ve formuláři máte zaškrtávací políčko, odešle pouze ty, které jsou zaškrtnuté. Výsledkem toho je, že indexy $_POST['checkbox'] pole se nebude shodovat s odpovídajícím $_POST['item'] a $_POST['quantity'] Prvky. Musíte zadat explicitní indexy do checkbox jména, abyste je mohli spojit.

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

Pak může být váš PHP kód takto:

$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, vkládat ceny do HTML vypadá jako špatný nápad. Nic nebrání uživateli upravit HTML pomocí webového inspektora před odesláním formuláře, takže by mohli snížit cenu. Ceny byste měli získat z databáze při zpracování formuláře.

Všimněte si také, že ve svém původním kódu jste otevřeli připojení k databázi pomocí MySQLi, ale poté jste se pokusili provést vložení pomocí mysql_query místo $conn->query() . Nemůžete takto míchat API; myql_query lze použít pouze při otevření připojení pomocí mysql_connect .




  1. Porovnání řetězců SQL, větší a menší než operátory

  2. Jak extrahovat dvě po sobě jdoucí číslice z textového pole v MySQL?

  3. Jak funguje funkce INSERT() v MariaDB

  4. Zkrátit všechny tabulky v databázi MySQL jedním příkazem?