我编写了一个自动生成和填充HTML表单的PHP脚本。
HTML输出是这样的:
<form action="process.php" method="post">
<input type="hidden" name="product_name[]" value="product-1">
<input type="hidden" name="product_price[]" value="0.99">
<input type="hidden" name="product_name[]" value="product-2">
<input type="hidden" name="product_price[]" value="1.39">
<input type="submit" name="submit" value="submit">
</form>
我的MySQL数据库格式为:product_name, product_price
我应该在process.php
中使用哪种方法将此信息插入MySQL数据库?
如果它只是一个数组(例如,product_name
),那么我将编写以下代码:
$product_name = $_POST['product_name'];
foreach ($product_name as $n){
$sql = "INSERT INTO orders (product_name)
VALUES ('$n')";
$conn->query($sql)
}
但是当然这种foreach方法不适用于多个数组。我想到并尝试首先填充product_name
,然后创建foreach循环以更新product_price
行,但这对我来说并不适合我感觉非常混乱。我确定这不是最好的方法。
处理此问题的正确方法是什么?
答案 0 :(得分:1)
您使用其中一个post数组来控制循环,然后使用从foreach获得的索引,即$i
来访问任何/所有其他数组
PDO
$sql = "INSERT INTO orders (product_name, price) VALUES (:name,:price)";
$stmt = $conn->prepare($sql);
foreach ($_POST['product_name'] as $i => $n){
$stmt->execute( array(':name'=> $n,
':price'=>$_POST['product_price'][$i])
)
);
}
的mysqli
$sql = "INSERT INTO orders (product_name, price, qty) VALUES (?,?,?)";
$stmt = $conn->prepare($sql);
foreach ($_POST['product_name'] as $i => $n){
$stmt->bind_param("sdi",
$n,
$_POST['product_price'][$i]
$_POST['product_qty'][$i]
);
$stmt->execute();
}
答案 1 :(得分:-1)
假设您完全并行构建表单,以便任意索引Bar
也始终与相同的索引product_name[x]
相关联,那么只需使用foreach的扩展密钥=&gt; val语法并使用该键访问&#34; parallel&#34;其他数组中的值:
product_price[x]