表单提交处理和生成

时间:2011-05-12 09:42:55

标签: php mysql forms

我有这个表单,我需要提交一些带有隐藏值的问题并将它们全部链接在一起。

我目前使用问题的ID附加名称,然后添加_然后是答案数。

<form>
    <span>1:Question goes here </span>
    <input type=hidden name=t_1 value=10>
    <input type=hidden name=f_1 value=20>
    <input type=checkbox name=a1_1>value1
    <input type=checkbox name=a1_2>value2
    <input type=checkbox name=a1_3>value3
    <span>2:Question goes here </span>
    <input type=hidden name=t_2 value=40>
    <input type=hidden name=f_2 value=20>
    <select name=a2_1>
        <option>blah</option>
        <option>etc</option>
    </select>
</form>

在服务器端,我爆炸提交的字段并将它们放在一起:

foreach ($_POST as $var => $val) {
    switch ($var[0]) {
        case "a" :
            $b = substr($var, 1); // remove first char to get number following
            $pos = strpos($b, "_");
            if ($pos !== false) {
                $i = explode("_", $b); // separating question number from choice number (for multi select questions)
                $answer[$i[0]][] = $val;
                break;
            }
            else {
                $answer[$b][] = $val;
                break;
            }
        case "t" :
            $b = substr($var, 1);
            $target[$b] = $val;
            break;
    }
}

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

您可以按以下方式命名标记:

<input name="question[1][answer]" type="text" value="someValue" />

这将为您的问题创建数组,您可以通过它们进行迭代,而无需爆炸或子串。“

答案 1 :(得分:1)

您可以使用

f[] or f[1], f[2]

这样做,$ _POST将包含一个数组。