sql >> Base de Datos >  >> RDS >> Mysql

PHP insertando múltiples matrices de casillas de verificación Y cuadros de texto en la base de datos MySQL

No deberías usar implode . Eso coloca una lista separada por comas de todo en el formulario en cada fila que inserta, y repite esto para cada casilla que está marcada. Solo debe insertar un elemento en cada fila, indexando las matrices.

Sin embargo, cuando tiene una casilla de verificación en un formulario, solo envía las que están marcadas. El resultado de esto es que los índices del $_POST['checkbox'] la matriz no coincidirá con el $_POST['item'] correspondiente y $_POST['quantity'] elementos. Debe poner índices explícitos en la checkbox nombres para que puedas relacionarlos.

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

Entonces su código PHP puede ser así:

$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();
}

Por cierto, poner los precios en tu HTML parece una mala idea. Nada impide que el usuario modifique HTML usando el inspector web antes de enviar el formulario, por lo que podría reducir el precio. Debe obtener los precios de la base de datos al procesar el formulario.

Además, observe que en su código original abrió la conexión de la base de datos usando MySQLi, pero luego intentó hacer la inserción usando mysql_query en lugar de $conn->query() . No puedes mezclar APIs así; myql_query solo se puede usar cuando abre la conexión con mysql_connect .