我已经开始研究一个动态表单脚本,它允许用户通过 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 方面我需要知道
- 表单域的类型
- 表单域的值
- 表单字段的唯一 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
由此我知道标识符和它所属的数组、类型和值,但我也知道数据提交的顺序。
从那里我可以将我的数据包装在标记中,执行任何其他操作,然后将数据插入数据库。