Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PHP inserindo várias matrizes de caixa de seleção E caixa de texto no banco de dados MySQL


Você não deveria estar usando implode . Isso coloca uma lista separada por vírgulas de tudo no formulário em cada linha que você insere e repete isso para cada caixa marcada. Você deve apenas inserir um item em cada linha, indexando os arrays.

No entanto, quando você tem uma caixa de seleção em um formulário, ele envia apenas as que estão marcadas. O resultado disso é que os índices do $_POST['checkbox'] array não corresponderá ao $_POST['item'] correspondente e $_POST['quantity'] elementos. Você precisa colocar índices explícitos na checkbox nomes para que você possa relacioná-los.
<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>

Então seu código PHP pode ser assim:
$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, colocar os preços em seu HTML parece uma má ideia. Nada impede que o usuário modifique o HTML usando o inspetor da web antes de enviar o formulário, para que possa reduzir o preço. Você deve obter os preços do banco de dados ao processar o formulário.

Além disso, observe que em seu código original você abriu a conexão de banco de dados usando MySQLi, mas depois tentou fazer a inserção usando mysql_query em vez de $conn->query() . Você não pode misturar APIs assim; myql_query só pode ser usado quando você abre a conexão com mysql_connect .