通过迭代从PHP的html表单中获取输入


get input from html form in PHP by iterations

我正在创建一个显示16个问题的表单的网页,每一行输入看起来像:

<li>*question 1*</li>
<input type="text" name="answerswer1" style="height: 40px;" size="50" dir="rtl">
<li>*question 2*</li>
    <input type="text" name="answerswer2" style="height: 40px;" size="50" dir="rtl">

等等——我有16行这样的(html)行(顺便问一下,有没有办法防止这种代码重复?这段代码闻起来…),最后是一个"提交"按钮。

我的php脚本应该接收这些答案,并把每个答案在一个名为"答案(i)"的变量中,例如,我可以写16行这样的:

if (isset($_POST['submit'])) {
        $answer1 = $_POST['answer1'];
        $answer2 = $_POST['answer2'];
        ...ect.
        ...
   }

这(也)感觉像是大量的代码重复。有没有一种方法可以使它更通用、更有效,这样如果我想添加一些新问题,我就不必再重复一遍了?我是PHP和HTML的新手,我想声明一些函数并每次调用它们,但当我搜索关键词时,如"HTML函数"等。我没有找到有用的信息。编辑:答案标签可能不同于"answerswer1, answer2…",可以是一组不同的单词('age', 'gender'…)

对于HTML,使用如下代码:

$questions = array(
    'question1',
    'question2',
    //...
);
foreach($question as $id => $qText){
    ?>
    <li>
        <?php echo $qText ?>
        <input type="text" name="answerswers[]" style="height: 40px;" size="50" dir="rtl">
    </li>
    <?php
}

在PHP方面,你会有你的答案在$_POST['answers'],它将是一个数组。相信我,如果你想把这些值从数组到单独的变量,这是一个危险的信号:你的代码有问题。您不希望将一组答案作为独立变量。

您可以运行一个循环来遍历POST数组并将信息提取到另一个数组中。

foreach ($_POST as $k => $v) {
      $$k = $v;
}

这将把所有的$_POST数据放入PHP变量中,命名与生成它们的表单字段相同(注意,您还将从触发表单的按钮中获得$submit)。

这是你要找的吗?

foreach (range(0,16) as $i)
{
    ${'answer'.$i} = $_POST['answer'.$i];
}

或使用extract(),如果您在$_POST上应用,则$_POST变量中的键被分配为变量。

这是官方文档