具有无限字段的表单

Posted

技术标签:

【中文标题】具有无限字段的表单【英文标题】:Form With Unlimited Fields 【发布时间】:2013-05-09 04:57:01 【问题描述】:

我有一个带有 [添加字段] 选项的表单,可以添加几乎无限的项目编号和描述。

这些字段被命名为:item[]desc[](数组的括号)。

我的问题是,我将如何使用 phpmysql 提交这些信息,以便将每一行(项目和描述)作为数据库中自己的行提交?

我尝试了多种方法,例如提交 item[0] 和 desc[0] 都无济于事:(

提前感谢您的所有帮助!

编辑:下面是我一直在尝试使用的...(对不起,数组不是很好...)

$count = 0
foreach ($_POST['item'] as $item) 
    $query = "INSERT INTO items (item, desc) VALUES ('" . $item[$count] . "', '" . $_POST['desc'][$count] . "')";
        // Script simplified as it is quite complex.
    if ($query_result) 
        $count++;
    

【问题讨论】:

为什么同时提交item[0]desc[0]会失败? 使用 for 或 foreach 循环。同时向我们展示您尝试过的 PHP 代码。 有趣 - 我现在实际上正在构建一个几乎相同的系统。 【参考方案1】:

为了进一步帮助您,我可能会提出以下建议。

这样命名你的字段:

line[1][item]
line[1][desc]

line[2][item]
line[2][desc]

etc...

然后在 PHP 中查看数据时数据会更“有意义”:

<?php
$count = 0;
foreach ($_POST['line'] as $line => $vals) 
  $item = $vals['item']; /* do some kind of input validation here */
  $desc = $vals['desc']; /* do some kind of input validation here */

  /* if no errors, continue */

  $sql = "INSERT INTO `items` (`item`,`desc`) VALUES ('$item', '$desc')";
  if (mysql_query ($sql)) 
    $count++;
  

?>

我发现这种方法更灵活。只是我的两分钱。

卢克

【讨论】:

【参考方案2】:

您可以使用 foreach 循环遍历任一输入字段,然后访问其他字段。

foreach($_POST['item'] as $key => $item)
    //your code
    $desc = $_POST['desc'][$key];

编辑:根据您的代码脚本将像

$count = 0
foreach ($_POST['item'] as $key => $item) 
    $query = "INSERT INTO items (item, desc) VALUES ('" . $item . "', '" . $_POST['desc'][$key] . "')";
        // Script simplified as it is quite complex.
    if ($query_result) 
        $count++;
    

【讨论】:

这会给我 $item[0] 和 $desc[0]、$item[1] 和 $desc[1] 等吗? 是的,它会以提交的形式为您提供所有行。 虽然这行得通 - 我建议做一些不同的事情......这种方式可能会有点令人困惑,看起来和理解(即快速查看 desc 的值来自哪里)......见我对替代方案的回答。

以上是关于具有无限字段的表单的主要内容,如果未能解决你的问题,请参考以下文章

具有来自两个不同模型的字段的 Django 表单

发布具有相同名称属性的表单字段

仅为具有特定 Memberpress 订阅的用户隐藏重力表单字段

从具有不同结构的表单中提取字段

如何从具有相同名称的字段的表单创建 JSON 文件?

使用具有动态生成的字段的表单测试控制器