将多个表单数组插入MySQL数据库的最佳方法是什么?

时间:2016-10-27 14:05:42

标签: php mysql arrays

我编写了一个自动生成和填充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行,但这对我来说并不适合我感觉非常混乱。我确定这不是最好的方法。

处理此问题的正确方法是什么?

2 个答案:

答案 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]