1

我已经开始研究一个动态表单脚本,它允许用户通过 Jquery 添加表单元素,然后将其提交给 PHP 脚本。

我只是在对实现这一目标的方法进行一些反馈之后。目前我有以下内容:

当用户添加表单元素时,该元素将添加以下名称数组:

<textarea name="element[text][123]">
<input type="text" name="element[input][456]" />

因为我需要知道提交的表单元素的类型,所以我使用了一个名为“element[][]”的多维数组,其中数组的第一级是元素的类型,数组的第二个元素是唯一的 ID和价值。

当我 var_dump() 这在提交 PHP 输出后:

array
text => array
123 => string 'The textarea value'

input => array
456 => string 'The input field value'

我现在在脚本的 PHP 端工作,只是想知道是否有更好的方法来做到这一点。

有什么想法吗?

更新

我必须改变我这样做的方式,因为数组键名不是唯一的。如果用户添加两个文本区域

<textarea name="element[text][123]">
<textarea name="element[text][456]">

当用户添加表单元素时,可以拖动元素,以便在创建元素后更改位置。这允许用户添加一个元素,然后将其移动到他们希望它出现的位置。

PHP 可以很好地处理此排序并按照提交表单的顺序接受数组,但是如上所述,如果键名相同,则顺序将被破坏。

在 PHP 方面我需要知道

  1. 表单域的类型
  2. 表单域的值
  3. 表单字段的唯一 ID,它只是一个时间戳

我想我可能需要做 Cole 提到的事情,将名称分配为:

element[text_123]

然后我可以分解“_”上的键名以确定类型和标识符。

更新

我拿了杰克发布的脚本并稍作修改

$vars = $_POST['element'];

foreach ($vars as $id => $vals)
    {
    // $vars[id] outputs the ID number
    // $vars[vals] is the array containing the type and value
    echo "This fields ID is $id. ";
    foreach($vals as $key => $value)
        {
        echo "Type was: $key and the value was: $value <br />";
        }
    }

对此输出的快速测试

This fields ID is 1338261825063. Type was: heading and the value was: xzczxczxczxczxczxc
This fields ID is 1338261822312. Type was: heading and the value was: asdasdasdasdad 

由此我知道标识符和它所属的数组、类型和值,但我也知道数据提交的顺序。

从那里我可以将我的数据包装在标记中,执行任何其他操作,然后将数据插入数据库。

4

1 回答 1

1

看起来不错;你也可以考虑这样的事情(虽然它引入了更多的领域,所以你必须真的认为这样的好处是值得的):

<input type="hidden" name="element[123][type]" value="text" />
<input type="hidden" name="element[456][type]" value="input" />

<textarea name="element[123][value]">
<input type="text" name="element[456][value]" />

然后你可以这样做:

foreach ($_POST['element'] as $name => $info) {
    // $info['type'] is 'text' or 'input'
    // $info['value'] is the user input
}
于 2012-05-29T03:10:14.420 回答