使用动态命名循环遍历多个POST变量

时间:2013-01-08 19:07:30

标签: php for-loop environment-variables

我希望这与标题和我想要达到的目标有关,所以这里有......

我有一个表单,显示要输入的1到30个字段 - 字段数由用户在前一阶段确定(它不会总是相同的数量)。

如果用户有5个要填写的字段,则它们必须全部包含数据 - 如果他们设置了15个字段或30个字段,则相同。

我希望能够做的是遍历表单中的POST变量,确保它们都已设置并将数据插入数据库,或显示错误。

我打算使用嵌套的if语句执行30个if语句:

if ($numberOfFields == 1){
    if (!$_POST["field1_text"]){$error = 1;}
};

if ($numberOfFields == 2){
    if (!$_POST["field1_text"]){$error = 1;}
    if (!$_POST["field2_text"]){$error = 1;}
};

但这似乎是一个非常漫长的方式,我想知道是否有人有任何建议或指示。

我想知道这样的事情是否有效:

for ($q = 1; $q <= $numberOfFields; $q ++){
    if (!$_POST["field'".$q."'_text"]){
        $error = 1;
    }   
}

但是我在使用$ q引用变量/字段名称时遇到错误。这应该是[$ q]还是其他什么?

我很难找到任何答案,但可能没有问正确的问题,但任何帮助都会受到赞赏。

由于

2 个答案:

答案 0 :(得分:4)

可以这样做,使用foreach代替for

if($_SERVER['REQUEST_METHOD'] == 'POST')
{
    $error = false;
    foreach($_POST as $key => $value)
    {
        if(strpos($key, 'field') === 0)
        {
            if($value == '')
            {
                $error = true;
                break;
            }
        }
    }

    if($error)
    {
        // not all fields have a value - show message
    }
}

如果在表单上使用输入数组,而不是使用连接的数字手动填充输入名称,则会容易得多。例如:

<input type="text" name="field[]" />
<input type="text" name="field[]" />
<input type="text" name="field[]" />

在PHP方面,只需循环遍历它们:

foreach($_POST['field'] as $field)
{
    if($field == '')
    {
        // error - doesn't have a value
    }
}

答案 1 :(得分:2)

使用此:

for ($q = 1; $q <= $numberOfFields; $q++){
    if (!$_POST["field".$q."_text"]){
        $error = 1;
    }   
}

在你自己的代码中,你有一些奇怪的额外'