【问题标题】:PHP checking if empty fieldsPHP检查是否为空字段
【发布时间】:2012-02-21 20:52:21
【问题描述】:

我有一个包含大约 10 个字段的注册表单,它们都需要在处理之前填写,所以如果我想出了这个,请尽量避免所有这些,这是一个好方法吗?

foreach($list as $items) {
   if(empty($items)) {
      $error[] = "All fields are required.";
      break;
   }
}

或者我应该 if(empty($field_1) || empty($field_2) etc.. 然后输出错误?

【问题讨论】:

  • 您应该注意empty 也为'0'(仅包含字符0 的字符串)返回true。

标签: php field


【解决方案1】:

没关系。如果您只想显示消息“所有字段都是必需的”。没有在空白中显示哪个字段。

否则,如果您检查并显示哪个字段为空,将会更加用户友好。

【讨论】:

    【解决方案2】:

    假设您的数据来自$_GET$_POST,则所有数据字段都是字符串。这意味着您应该能够在single function call 中进行检查:

    if (in_array('', $list, TRUE)) {
      $error[] = "All fields are required.";
    }
    

    这会查找 完全 等于空字符串的字符串。如果您想让比较松散(或多或少与empty() 所做的检查相同),只需删除最后的TRUE

    编辑考虑一下,您不需要严格的比较。我这样做是为了允许'0' 的合法字段值(empty() 不允许),但由于'0' != '',这也将允许松散比较。

    ANOTHER EDIT如果你想检查sting的长度是否大于2,你将不得不循环:

    foreach ($list as $item) {
      if (strlen($item) < 2) {
        $error[] = "All fields are required.";
        break;
      }
    }
    

    这也将“清除0”,假设您的意思是“不允许值为0”。如果您还想禁止'00'(或任何其他导致0 的字符串),您可以将if 子句更改为:

    if (strlen($item) < 2 || (!(int) $item)) {
    

    【讨论】:

      【解决方案3】:

      像您一样将其放入循环中是个好主意,但请注意,即使用户输入 0 也会失败,并且将传递仅包含空格的字符串,因此您可能希望进行比 empty() 更好的检查

      【讨论】:

      • 我可以检查 strlen() 是否至少为 2?也从那里清除0?
      • 您可以检查所有您想要的内容,具体取决于您拥有的字段以及他们想要输入的内容。除了strlen,你可能还需要trim
      【解决方案4】:

      我会通过 in_array 检查来解决这个问题。

      <?php
      $fields=array('name','age','yadayada','something_else');
      
      foreach ($_POST as $key=>$value){
          if(in_array($key,$fields) && $value!=''){
              $$key=$value;
          }else{
              $error[$key]='This field is required.';
          }
      }
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-02
        • 2011-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多