sql >> Database teknologi >  >> RDS >> Mysql

PHP indsætter flere afkrydsningsfelter OG tekstboksarrays i MySQL-databasen

Du bør ikke bruge implode . Det sætter en kommasepareret liste over alt i formularen i hver række, du indsætter, og gentager dette for hver boks, der er markeret. Du skal blot indsætte et element i hver række ved at indeksere arrays.

Men når du har et afkrydsningsfelt i en formular, indsender den kun dem, der er markeret. Resultatet af dette er, at indekserne for $_POST['checkbox'] array vil ikke matche den tilsvarende $_POST['item'] og $_POST['quantity'] elementer. Du skal sætte eksplicitte indekser i checkbox navne, så du kan relatere dem.

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

Så kan din PHP-kode være sådan her:

$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, at sætte priserne i din HTML virker som en dårlig idé. Intet forhindrer brugeren i at ændre HTML ved hjælp af webinspektøren, før de indsender formularen, så de kunne sænke prisen. Du bør få priserne fra databasen, når du behandler formularen.

Bemærk også, at du i din originale kode åbnede databaseforbindelsen ved hjælp af MySQLi, men så forsøgte du at lave indsættelsen ved hjælp af mysql_query i stedet for $conn->query() . Du kan ikke blande API'er på den måde; myql_query kan kun bruges, når du åbner forbindelsen med mysql_connect .




  1. Tilknytte tabeller ved hjælp af Room-database i Android Studio

  2. Find det sidste indeks af en streng i Oracle

  3. Fix:"BACKUP LOG kan ikke udføres, fordi der ikke er nogen aktuel database backup." i SQL Server/SQL Edge

  4. Hvordan gemmer man adgangskoder sikkert i databasen?