【问题标题】:Replace isset for each $_POST using foreach使用 foreach 替换每个 $_POST 的 isset
【发布时间】:2014-10-27 08:58:42
【问题描述】:

我一直在尝试使用 foreach 替换 $_POST(s) 的每个 isset。

这是对每个 $_POST 使用 isset 的真实代码:

<form method='post'>

    <input type='text' name='name'> <br>
    <input type='text' name='address'> <br>
    <input type='submit' name='send'> 

</form>

<?php

if (isset($_POST['name']) && isset($_POST['address']) && isset($_POST['send']))
{
   echo "All elements have been submitted";
}
   else
{
   echo "You forget some elements, try checking name or address";
}

?>

有没有一种方法可以将上面的 4 个 isset 替换为每个使用的单个 isset? 我做了这个,但它出错了。

<form method='post'>

    <input type='text' name='nama'> <br>
    <input type='text' name='alamat'> <br>
    <input type='submit' name='kirim'> 

</form>

<?php

foreach($_POST as $value)
{
    if (isset($value))
    {
      echo "All elements have been submitted";
    }
    else
    {
      echo "You forget some elements, try checking name or address";
    }
}
?>

需要帮助,如果我必须为通过 post/get 发送的每个元素一个一个地编写 isset,那只是在浪费时间。我以前在visual basic中看到过这样的东西,我的朋友做了一个foreach结构来验证表单中的所有文本框,所以他不再需要创建这样的东西了:

if textbox1.text="" && textbox.2.text="" and so on

【问题讨论】:

    标签: php


    【解决方案1】:

    编辑: jbrahy 刚刚打错了字。他的答案现在很好。

    我认为 jbrahy 的方法是正确的总体思路......但我认为它实际上并不奏效。

    我会这样做。

        $requiredFields = ["nama","alamat","kirim"];
    
        $allElementsSet = true;
        foreach ($requiredFields as $requiredField)
        {
             if (!isset($_POST[$requiredField]))
             {
                 $allElementsSet = false;
                 break;
             }
        }
        if ($allElementsSet)
        {
            echo "All elements have been submitted";
        } else {
            echo "You forget some elements, try checking name or address";
        }
    

    【讨论】:

      【解决方案2】:

      $_POST 将只有传入的变量,并且有一些 HTML 元素可能不会通过提交来传入。最好创建一个 $required_fields 数组,如果您可以获得一些字段验证,那就更好了,但这不是您在这里要求的。您需要获取 $_POST 的键和值。

      $required_fields = array("name" => FALSE, "alamat" => FALSE, "kirim" => FALSE);
      
      foreach ($required_fields as $key => $value){
          if (isset($_POST[$key])){
              $required_fields[$key] = TRUE;
          }
      }
      
      foreach ($required_fields as $key => $value){
           if (!$required_fields[$key]){
               echo "Missing value for " . $key;
           }
      }
      

      如果您想弄清楚传入的每个键是否都有值,那么类似的方法也可以。

      foreach ($_POST as $key => $value){
          if ($value == ""){
              echo "Value(s) are missing";
              break;
          }
      }        
      

      【讨论】:

      • 我刚刚有了一个想法。我可以用 HTML5 表单中的必需属性完全替换 isset 吗?不管怎样,先谢谢了。我正在使用您编写的代码,试图先理解它:)
      • 当然,但最好使用 jquery 的 attr 来完成。问另一个问题,我会发布和示例。它不属于这个。
      • 我不明白if (isset($required_fields)){这行...在这个例子中它总是返回true,除非我遗漏了什么。
      • 谢谢埃文,你是对的。我混合了两个数组。现已修复。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 1970-01-01
      相关资源
      最近更新 更多