【问题标题】:Loop through multiple POST variables using dynamic naming使用动态命名循环多个 POST 变量
【发布时间】:2012-12-22 17:37:53
【问题描述】:

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

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

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

谢谢

【问题讨论】:

  • 除了连接$q 之外,您还添加了不必要的(有害的)单引号。另外,我会像这样使用简单的“双引号插值”:if (!$_POST["field{$q}_text"]) {

标签: php for-loop environment-variables


【解决方案1】:

可以这样做,使用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
    }
}

【讨论】:

    【解决方案2】:

    使用这个:

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

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

    【讨论】:

    • 我的生命因此而消逝了 2 小时 - 感谢您的快速响应 - 我认为我的思路是正确的。你能做同样的事情来设置变量吗?例如 $var.$q = $_POST["field".$q."_text"]
    • @Paul 对于变量,我还建议将它们分配给一个数组,例如: $myvars = array(); $myvars[ $q ] = $_POST['field'.$q.'_text'];
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 2021-08-26
    • 2015-06-09
    • 1970-01-01
    • 2015-02-09
    相关资源
    最近更新 更多