PHP在MySQL数据库中插入多个复选框和文本框数组

PHP在MySQL数据库中插入多个复选框和文本框数组,php,mysql,Php,Mysql,我的php中的数组结果有问题。我的第一个问题是: 即使未选中复选框,它也会显示所有内容。我的第二个问题是,即使它已连接到数据库,它也不会将值插入数据库(正如您在上一个屏幕截图中看到的,它表示“已成功连接”) 这是我的html表单: <form method="POST"> <input type="hidden" name="item[]" value="cupcake"> <input type="text" name="items" value

我的php中的数组结果有问题。我的第一个问题是:

即使未选中复选框,它也会显示所有内容。我的第二个问题是,即使它已连接到数据库,它也不会将值插入数据库(正如您在上一个屏幕截图中看到的,它表示“已成功连接”)

这是我的html表单:

<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[]" 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[]" type="checkbox" value="20" /><span>Add to Cart</span></label></div></div></td><br>

    <input type="submit" name="insertBT"><br>
</form>


价格:$17.00
数量:
添加到购物车

价格:$20.00
数量:
添加到购物车

PHP:

if(isset($\u POST['insertBT']))
{
类数据库连接
{
公共函数create_conn($servername、$username、$password、$db)
{
全球$conn;
$conn=newmysqli($servername、$username、$password、$db);
}
公共功能检查连接()
{
全球$conn;
如果($conn->connect\u错误)
{
die(“连接失败:”.$conn->connect\U错误);
}
其他的
{
echo(“连接成功
”; } } 公共职能插入() { 如果(isset($_POST['checkbox'])){ foreach($_POST['checkbox']作为$check){ $check=内爆(“,”,$_POST['checkbox']); $name=内爆(“,”,$_POST['item']); $quantity=内爆(',',$_POST['quantity']); } 回显$check.“
”; echo$name。“
”; 回显$quantity.“
”; mysql_查询(“插入采购(产品、数量、价格)值('$name'、'$Quantity'、'$check'); } } } $obj1=新的数据库连接; $obj1->create_conn(“本地主机”、“根目录”、“数据库测试”); $obj1->检查连接(); $obj1->insert(); }
您不应该使用
内爆
。这将把表单中所有内容的逗号分隔列表放入插入的每一行,并对选中的每个框重复此操作。您应该通过索引数组在每行中插入一项

但是,当表单中有复选框时,它只提交选中的复选框。其结果是
$\u POST['checkbox']
数组的索引将与相应的
$\u POST['item']
$\u POST['quantity']
元素不匹配。您需要将显式索引放入
复选框
名称中,以便将它们关联起来

<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>
顺便说一句,把价格放在HTML中似乎是个坏主意。没有任何东西可以阻止用户在提交表单之前使用web inspector修改HTML,因此他们可以降低价格。您应该在处理表单时从数据库中获取价格


另外,请注意,在原始代码中,您使用MySQLi打开了数据库连接,但随后尝试使用
mysql\u query
而不是
$conn->query()
进行插入。你不能像那样混合API
myql\u查询
只能在使用
mysql\u connect
打开连接时使用

您不应该使用
内爆
。这将把表单中所有内容的逗号分隔列表放入插入的每一行,并对选中的每个框重复此操作。您应该通过索引数组在每行中插入一项

但是,当表单中有复选框时,它只提交选中的复选框。其结果是
$\u POST['checkbox']
数组的索引将与相应的
$\u POST['item']
$\u POST['quantity']
元素不匹配。您需要将显式索引放入
复选框
名称中,以便将它们关联起来

<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>
顺便说一句,把价格放在HTML中似乎是个坏主意。没有任何东西可以阻止用户在提交表单之前使用web inspector修改HTML,因此他们可以降低价格。您应该在处理表单时从数据库中获取价格


另外,请注意,在原始代码中,您使用MySQLi打开了数据库连接,但随后尝试使用
mysql\u query
而不是
$conn->query()
进行插入。你不能像那样混合API
myql\u query
只能在使用
mysql\u connect
打开连接时使用。对不起,我不是问如何将php文件连接到数据库,我已经知道如何使用面向对象编程连接它。我问的是一个完全不同的问题。为什么要使用全局变量
$conn
而不是类属性?既然要在复选框上循环,为什么还要在循环内执行
内爆(',',$\u POST['checkbox'))
?我使用内爆是因为我在没有它的情况下运行页面时会收到通知。比如说“注意:数组到字符串的转换”对不起,我不是问如何将php文件连接到数据库,我已经知道如何使用面向对象编程来连接它。我问的是一个完全不同的问题。为什么要使用全局变量
$conn
而不是类属性?既然要在复选框上循环,为什么还要在循环内执行
内爆(',',$\u POST['checkbox'))
?我使用内爆是因为我在没有它的情况下运行页面时会收到通知。比如说“注意:数组到字符串的转换”,那么原始查询的问题是什么?哦,是的,我提到了这一点,但很快就被告知(更像是被解雇了),这不是问题所在,混合了MySQL API。所以我最终删除了我对它的评论。啊,我明白了,这就是问题所在。看来弗雷德是对的。现在可以用了,谢谢。另外,我不知道prepare()是什么,但我猜它在发送表单时只是一个就绪查询。但是,我可以问一下“姐姐”是干什么的吗?还有她们的o
$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();
}