【问题标题】:Quickly Validate Form Fields in PHP在 PHP 中快速验证表单字段
【发布时间】:2011-07-17 22:11:03
【问题描述】:

当我在form 标签下有字段时,我使用isset() 函数,如下所示:

if(isset($_POST) and isset($_POST['title']) and $_POST['date'])
{
   //something;
}

当我验证更多字段时它会变得更大。我正在寻找任何简单的方法来验证它们是否都用 PHP 在服务器端填充。

也许可以浏览所有字段并检查它们是否按要求填写。

【问题讨论】:

    标签: php forms validation


    【解决方案1】:
    <?php
    
    $fields = array('field1', 'field2', 'field3', ...etc...); //  Array of fields
    
    $valid = true;  //Assume all fields are correct and set this to false if not
    
    foreach($fields as $field) {
        if(!array_key_exits($field, $_POST)) { 
            $valid = false; // At least one key isn't set
            break;
        }
    }
    
    if($valid) {
        // All fields are good
    } else {
        //Your user failed...
    }
    

    【讨论】:

    • 在使用 array_key_exists reset($array); array_key_exists($needle,$array);之前必须重置 $array
    • 而且,它不是内置函数。应该是array_key_exists
    • @Braveyard:实际上,你没有。此外,他正在使用array_keyS_exists()(复数)!
    • @hakre:是的,但它似乎不接受数组作为键。
    • 稍微调整了我的答案。原件使用的是我不久前使用的功能。原理是一样的
    【解决方案2】:
    // required fields
    $fields = array('title', 'date', 'email');
    
    // optionally ignore blank posted values
    $_POST = array_filter(array_map('trim', $_POST), 'strlen');
    
    if (count(array_intersect_key($_POST, array_flip($fields))) == count($fields))
    {
        // all the required fields were posted
    }
    
    else
    {
        // ...not
    }
    

    【讨论】:

      【解决方案3】:

      $_POST 是一个数组,因此您可以使用foreach 获取其元素,然后测试每个元素是否为空,如果存在则收集错误,最后发送一条错误消息。

      【讨论】:

        【解决方案4】:

        我在 PHP 手册的评论部分找到了它...

        一个以数组为键的小函数:

        <?php
        //note the s in the function name (keys)
        function array_keys_exists($array,$keys) {
            foreach($keys as $k) {
                if(!isset($array[$k])) {
                return false;
                }
            }
            return true;
        }
        ?>
        //useful to validate a form for example
        <form>
            <input type="text" name="field1" /><br />
            <input type="text" name="field2" /><br />
            <input type="text" name="field3" /><br />
            <input type="text" name="field4" /><br />
            <input type="text" name="field5" /><br />
        </form>
        <?php
        if(!array_keys_exists($_POST,
        array("field1","field2","field3","field4","field5")
        )) {
            //some fields are missing, dont do anything (maybe hacking)
        } else {
            //code ...
        }
        ?>
        

        【讨论】:

          【解决方案5】:

          更可重用的解决方案是编写一个小函数来验证键列表是否存在,例如

          function array_keys_exist($keys, $search) {
              // If we were passed a single key, use existing function
              if (!is_array($keys)) {
                  return array_key_exists($keys, $search);
              }
              // If there are no keys in $search that are not in $keys
              // We have all the keys
              return 0 == count(array_diff($keys, array_keys($search)));
          }
          

          然后可以将其用于您的所有表单,如下所示:

          $requiredFields = array('title', 'date', 'details');
          if (array_keys_exist($requiredFields, $_POST)) {
              // Do your thing
          }
          

          坦率地说,我不确定为什么这还不是内置函数

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-08-31
            • 2016-11-18
            • 1970-01-01
            • 2014-03-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多