动态表单并通过表单数组循环插入到Mysql中

时间:2013-11-29 20:13:48

标签: php mysql arrays forms

我有一个动态构建的表单:

foreach($xml->config->popup as $popup_item){
    <input class="fm-req" id="fm-popup_name[]" name="fm-popup_name[]" type="text"  value="" />
    <textarea class="fm-req" rows="4" cols="50" id="fm-popup_desc[]" name="fm-popup_desc[]" /></textarea>
    <input class="fm-req" id="fm-popup_image[]" name="fm-popup_image[]" type="file" />
}

我之前没有使用过表单名中的数组,但是我在另一篇关于堆栈溢出的文章中看到你可以做到这一点,看起来这是一个比我计划好得多的方法,就是将$ i添加到名称的结尾和每个循环的增量,所以我最终得到:

fm-popup_name1
fm-popup_name2
fm-popup_name3 etc etc

然后我可以在构建表单时进行循环计数,将计数作为隐藏字段传递,然后使用for循环,其中x&lt; = count并按此方式插入。但是为了改进代码并使其更加紧凑和易于理解,我认为它值得这样做,但我无法找到一个好方法:

foreach($_POST['fm-popup_name'] as $index => $value) {
// get the value of name
}   

foreach($_POST['fm-popup_desc'] as $index => $value) {
    // get the value of name
}

foreach($_POST['fm-popup_image'] as $index => $value) {
    // get the value of name
}  

我可以访问我需要的所有数据,但我不想为1条记录分别进行3次插入。

我如何获取上述信息,例如:

foreach($_POST['fm-popup_name,fm-popup_desc,fm-popup_image'] as $index => $value) {

INSERT INTO mytable(
    popup_name, 
    popup_desc,
    popup_image
)
VALUES(
'$popup_name',
'$popup_desc'
'$popup_image'
    )";

}

有什么想法吗?希望代码是可以的,我过滤掉了所有其他无关的垃圾,所以希望所有id等匹配,但我只是寻找一个粗略的例子,我可以转换回我的代码。

1 个答案:

答案 0 :(得分:1)

您可以使用以下内容,但存在风险(您能发现它吗?):

$entries = count($_POST['fm-popup_name']);
for($i = 0; $i < entries; ++$i) {
   $name = $_POST['fm-popup_name'];
   $desc = $_POST['fm-popup_desc'];

   // other processing

}

如果你没有发现它,那么风险在于并不是所有的数组元素都会被填充,所以你可能无法为每一行获得正确的映射,除非你在前端强制执行它并在处理你的循环之前验证它