使用动态创建的输入字段插入多条记录

Posted

技术标签:

【中文标题】使用动态创建的输入字段插入多条记录【英文标题】:multiple records insertion with dynamically created input fields 【发布时间】:2016-01-04 05:11:06 【问题描述】:

基本上这就是我在将新记录保存到我的数据库时使用 eloqouent 所做的事情(请参阅下文)

$item = new item();
$item->name = $request->name;
$item->description = $request->description;
$item->rating = $request->rating;
$item->save();

但我遇到了动态创建输入字段的场景,所以这是我的脚本

$(document).on("click", "#create_input", function()
    $("form fieldset").append('<input type="text" name="name" value="" /><input type="text" name="description" value="" /><input type="text" name="rating" value="" />');
);

我的默认形式是(参考下文)

<button id="#create_input">Create new field</button>
<form action=" url('/item/add') " method="post">
    <input type="hidden" name="_token" value=" csrf_token() ">
    <fieldset>
        <input type="text" name="name" value="" />
        <input type="text" name="description" value="" />
        <input type="text" name="rating" value="" />
    </fieldset>
    <button>Save</button>
</form>

因此,如果用户单击“创建新字段”按钮,另一个输入字段(名称、描述、评级)将添加到表单字段集中。

那么我怎样才能像同时保存 2 条记录一样保存它(假设我有 2 组名称、描述、评级的字段集)?取决于表单中当前存在的字段数量,然后还取决于插入的数量,例如我有 4 个评级、描述、评级的字段集,然后将插入 4 条记录。有什么想法,帮忙?

【问题讨论】:

使用输入数组。并使用循环。 请问您可以发布参考或示例吗? 【参考方案1】:

使用输入数组。并使用循环。定义字段,如 -

<fieldset>
    <input type="text" name="name[]" value="" />
    <input type="text" name="description[]" value="" />
    <input type="text" name="rating[]" value="" />
</fieldset>

jQuery -

$(document).on("click", "#create_input", function()
    $("form fieldset").append('<input type="text" name="name[]" value="" /><input type="text" name="description[]" value="" /><input type="text" name="rating[]" value="" />');
);

当表单发布时,您将获得类似的值 -

array(
   name -> array(
              0 -> 'aaa',
              1 -> 'bbb',
              2 -> 'ccc',
           )
   description -> array(
              0 -> 'aaa',
              1 -> 'bbb',
              2 -> 'ccc',
           )
...........
)

然后你可以遍历它们并相应地保存它们。

【讨论】:

请提供任何示例或参考如何进行循环?【参考方案2】:

只需将[] 与输入字段的名称放在一起,例如name="discription[]" 在您的表单以及 javascript 点击事件处理程序中。

然后在保存部分使用循环

$c = count($request->name[]);
for($i=0;$i<$c;$i++)
   $item = new item();
   $item->name = $request->name[$i];
   $item->description = $request->description[$i];
   $item->rating = $request->rating[$i];
   $item->save();

【讨论】:

不幸的是,我收到了这个错误,在尝试您的代码后无法使用 [] 进行阅读 你试过var_dump($c);var_dump($request-&gt;name);吗?它们的输出是什么?

以上是关于使用动态创建的输入字段插入多条记录的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Codeigniter 中插入动态数据?

如果数据库失败,如何保留动态创建的输入字段值?

仅当一个字段作为数组提供时,Laravel Eloquent 才插入多条记录

如何在单击 PHP 中的按钮时动态插入列表框?

JavaScript-如何使用输入字段动态创建多个 div

如何循环动态生成的按钮并相应地创建输入字段