0

我正在使用 jQuery 插件来动态添加输入文本字段。name输入元素的变为name="cl[]", name="ingredient[]"

现在我需要以某种方式将这些字段提交到数据库......
如果只有一个应该添加的文本字段,我想我可以foreach像这样做一个简单的循环:

foreach($ingredient as $val){
    //  do an ordinary PDO sql insert statement on each of them
}

但我需要在每个字段上提交两个文本字段,以及上一个查询中最后插入的 ID。如果我添加两个字段,我将总共提交三个字段;像这样:

<input type="text" name="oz[]" id="cl_1" placeholder="cl" class="cl" >
<input type="text" name="ingredient[]" id="ingredient_1" placeholder="ingredient name" class="ingredient" />

<input type="text" name="oz[]" id="cl_2" placeholder="cl" class="cl" >
<input type="text" name="ingredient[]" id="ingredient_2" placeholder="ingredient name" class="ingredient" />

<input type="text" name="oz[]" id="cl_3" placeholder="cl" class="cl" >
<input type="text" name="ingredient[]" id="ingredient_3" placeholder="ingredient name" class="ingredient" />

这些字段是插入单独表中的饮料成分,最后一个 id 是关系键。

关于我如何做到这一点的任何建议?

更新:我只是尝试添加一个带有名称的隐藏文本字段并在该字段raw_materials[]上执行 ẁhile`-loop。
然后在这个 while 循环中执行一个 sql insert 语句。也许我正在做某事,但这没有用:

while($raw_materials){
    $ins_ingredients = $con->prepare(
        'INSERT INTO recipes_ingredients (
            recipe_id, raw_material_id, amount
        ) VALUES (
            :last_id, :material, :amount
        )'
    );
    $ins_ingredients->bindValues(':last_id',$last_id);
    $ins_ingredients->bindValues(':material',$ingredient);
    $ins_ingredients->bindValues(':amount',$oz);
    $ins_ingredients->execute();
}
4

2 回答 2

2

看看这个:

$values = array_map(null, $_POST['oz'], $_POST['ingredient']);  // You can add other arrays after this
foreach ($values as $value)
{
    list($oz, $ingredient) = $value;
    // Insert data in DB
}
于 2012-08-24T07:06:35.393 回答
1

一组中的 cl 和成分字段具有相同的数字,因此您应该使用 for 循环而不是 foreach 循环:

for($x=0, $x<count($_POST['cl']); $x++) {
    // now you can use $_POST['cl'][$x] and $_POST['ingredients'][$x]
}
于 2012-08-23T23:11:29.423 回答