2009-11-05 89 views
1

我在表单数据提交给MySQL数据库之前使用PHP验证表单输入。年的PHP表单验证

什么是验证了只有一年表单输入的最佳方式?我有一个表单输入,用户只能输入一个日期,只能以一年的形式输入。很明显,我可以检查输入的数字,并且只有4个字符,但确保输入的数字是一个合理的数字的最佳方法是什么?

回答

10

这对简单检查就足够了;

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

这正是我要做的,除了我会用PHP的内置过滤机制 'if(filter_input(INPUT_GET/* or INPUT_POST depends * /,“year”,FILTER_VALIDATE_INT,array(“options”=> array(“min”=> 1900,“max”=> 2100 )))!= false)......' – 2009-11-05 22:47:09

+2

@Jordan S. Jones:Eeks,无论你如何缩进,它仍然是不可读的.PHP内置的Som实际上做了“无用”的riek,并且你找到了一个。 – Kris 2009-11-06 00:51:16

1

使用strtotime

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

你可以做到这一点

<?php 
$year = '-1222'; 

$valid = true; 

if (strtotime($year) === false) { 
    $valid = false; 
} 
// more of your code 
?> 
+2

如果年份在1970年以前,如果表格是出生年份,这可能是不好的。 – RyanY 2009-11-05 22:56:35

+0

@Phage你是对的。似乎我没有正确地认为这是 – 2009-11-05 23:11:17

+0

虽然...我的100%与您的方向...总是更好地使用内置功能,而不是重新发明车轮。 – RyanY 2009-11-06 02:34:44

1

我会检查的日期有意识在您的应用程序。例如,它是你的用户的出生年份,很可能在1900年之前的任何日期将是不可能的,任何比当年更加具有废话在这方面

+0

非常感谢 - 答案非常有用。在这种情况下(我应该说)日期是书籍的出版日期。我想唯一的限制条件是日期不会大于当年。大多数年份都将在20世纪(或当前)世纪之内,但一些人可能更早(尽管我不确定早些时候有多少 - 我猜这取决于作为应用程序的公众的阅读口味问题是人们可以跟踪他们阅读的书籍,想要阅读的内容等等。再次感谢大家。您的回答给了我很多想法。 – BlissC 2009-11-06 18:58:22

3

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

在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+是有效。

2

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

http://validatious.org/learn/examples

而且使用min-valmax-val限制的选项。或者,更容易,只需给他们一个有效年限的组合框(html <select> tag

请记住,有效年限取决于您的有效概念。如果我们谈论用户的年龄(date(Y) - 110),也许在今年之前的110年可能是有效的,但它可能不适用于其他一些东西。

+0

给人一个下拉n列表(一个组合框是您可以输入的组合框)不能确保您将获得预定义的有效值。永远不要信任表单输入,即使你有很棒的客户端验证。 – Kris 2009-11-06 00:53:09

0

该功能检查输入的年份是否在当年之间&百年了。

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)); 
}