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

Php 使用动态命名循环多个POST变量,php,for-loop,environment-variables,Php,For Loop,Environment Variables,我希望这对于标题和我想要达到的目标来说是有意义的,所以这里是 我有一个表单,其中显示了1到30个要输入的字段-字段的数量由用户在前一阶段确定(不总是相同的数量) 如果用户有5个字段需要填写,则所有字段都必须包含数据-如果用户设置了15个字段或30个字段,则相同 我希望能够循环表单中的POST变量,确保它们都已设置,然后将数据插入数据库,或者显示错误 我打算用嵌套的if语句执行30个if语句: if ($numberOfFields == 1){ if (!$_POST["field1_t

我希望这对于标题和我想要达到的目标来说是有意义的,所以这里是

我有一个表单,其中显示了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=1;$q使用以下选项:

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

对于($q=1;$q可以这样做,使用
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[]" />

除了在中连接
$q
,您还添加了不必要的(有害的)单引号。此外,我只会使用简单的“双引号插值”,如:
if(!$\u POST[“field{$q}\u text”])){
.2个小时的生命就这样结束了-感谢你的快速反应-我认为我的思路是正确的。你能对变量进行同样的设置吗?例如$var.$q=$\u POST[“field”.$q.“\u text”]@Paul对于变量,我还建议将它们分配到一个数组,如:$myvars=array();$myvars[$q]=$\u POST[“field.”$q.'u text'];
foreach($_POST['field'] as $field)
{
    if($field == '')
    {
        // error - doesn't have a value
    }
}