【问题标题】:PHP form validation for year一年的 PHP 表单验证
【发布时间】:2010-12-13 15:15:18
【问题描述】:

在表单数据提交到 MySQL 数据库之前,我使用 PHP 来验证表单输入。

仅验证一年的表单输入的最佳方法是什么?我有一个表单输入,用户应该在其中输入日期,仅以年份的形式。显然我可以检查输入的数字并且只有 4 个字符,但是确保输入的数字是日期的合理数字的最佳方法是什么?

【问题讨论】:

    标签: php validation forms date


    【解决方案1】:

    此功能检查输入的年份是否在当前年份和 100 年前之间。

    function isValidYear($year)
    {
         // Convert to timestamp
         $start_year         =   strtotime(date('Y') - 100); //100 Years back
         $end_year           =   strtotime(date('Y')); // Current Year
         $received_year      =   strtotime($year);
    
        // Check that user date is between start & end
        return (($received_year >= $start_year) && ($received_year <= $end_year));
    }
    

    【讨论】:

      【解决方案2】:

      你可以只使用一个验证库:

      http://validatious.org/learn/examples

      并使用min-valmax-val 来限制选项。或者,更简单,只需给他们一个包含有效年份的组合框 (html <select> tag)

      请记住,有效年份取决于您的有效概念。如果我们谈论用户的年龄(date(Y) - 110),今年之前的 110 年可能有效,但对于其他一些东西可能无效。

      【讨论】:

      • 给人们一个下拉列表(一个组合框是一个你也可以输入...)并不能确保你会得到一个预定义为有效的值。永远不要相信表单输入,即使你有很棒的客户端验证。
      【解决方案3】:

      这对于简单的检查就足够了;

          $input = (int)$input;
          if($input>1000 && $input<2100)
          {
            //valid
          }
      

      【讨论】:

      • 这正是我会做的,除了我会使用 PHP 的内置过滤机制if (filter_input(INPUT_GET /* or INPUT_POST depending */, "year", FILTER_VALIDATE_INT, array ("options" =&gt; array ("min" =&gt; 1900, "max" =&gt; 2100))) != false) ...
      • @Jordan S. Jones:哎呀,无论你如何缩进,它仍然无法阅读。一些 PHP 的内置函数实际上确实“无用”,而你找到了一个。
      【解决方案4】:

      “明智”是必须由您的应用程序的业务规则和/或您的存储介质定义的东西。

      在 MySQL 中,DATETIME 列类型的有效范围为“1000-01-01 00:00:00”到“9999-12-31 23:59:59”,而 TIMESTAMP 的有效范围为“1970” -01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC。

      如果您要询问用户他们的出生年份,那么您需要能够一直追溯到 1900 年左右。但是,如果您让他们设置未来的约会,那么只有 2009+ 年有效.

      【讨论】:

        【解决方案5】:

        我会检查日期在您的申请中是否有意义。例如,它是您的用户的出生年份,可能 1900 年之前的任何日期都是不可能的,在这种情况下,任何大于当前年份的日期都是无意义的

        【讨论】:

        • 谢谢大家 - 答案真的很有用。在这种情况下(我应该说)日期是书籍的出版日期。我想唯一的附带条件是日期不大于当前年份。大多数年份将在 20 世纪(或当前)世纪之内,但完全有可能有些年份可能更早(尽管我不确定要早多少 - 我想这取决于公众作为应用程序的阅读品味in question 是一个供人们跟踪他们读过、想读等的书籍的工具。再次感谢大家。你们的回答给了我很多思考。
        【解决方案6】:

        使用strtotime

        成功返回时间戳,否则返回 FALSE。在 PHP 5.1.0 之前,此函数将在失败时返回 -1。

        你可以这样做

        <?php
        $year = '-1222';
        
        $valid = true;
        
        if (strtotime($year) === false) {
          $valid = false;
        }
        // more of your code
        ?>
        

        【讨论】:

        • 如果年份是 1970 年之前,这将不起作用,如果表格是出生年份,这可能会很糟糕。
        • 不过,我 100% 支持你的方向……总是最好尽可能使用内置函数,而不是重新发明轮子。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-13
        • 1970-01-01
        • 1970-01-01
        • 2013-11-16
        • 1970-01-01
        相关资源
        最近更新 更多