2

我希望这对标题和我想要实现的目标有意义,所以这里......

我有一个显示 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] 还是其他?

我正在努力寻找任何答案,但可能没有提出正确的问题,但我们将不胜感激。

谢谢

4

2 回答 2

4

可以这样做,使用 aforeach而不是 a 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
    }
}
于 2013-01-08T19:12:04.423 回答
3

用这个:

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

在您自己的代码中,您有奇怪的额外 '

于 2013-01-08T19:10:08.050 回答