【发布时间】:2010-12-13 15:15:18
【问题描述】:
在表单数据提交到 MySQL 数据库之前,我使用 PHP 来验证表单输入。
仅验证一年的表单输入的最佳方法是什么?我有一个表单输入,用户应该在其中输入日期,仅以年份的形式。显然我可以检查输入的数字并且只有 4 个字符,但是确保输入的数字是日期的合理数字的最佳方法是什么?
【问题讨论】:
标签: php validation forms date
在表单数据提交到 MySQL 数据库之前,我使用 PHP 来验证表单输入。
仅验证一年的表单输入的最佳方法是什么?我有一个表单输入,用户应该在其中输入日期,仅以年份的形式。显然我可以检查输入的数字并且只有 4 个字符,但是确保输入的数字是日期的合理数字的最佳方法是什么?
【问题讨论】:
标签: php validation forms date
此功能检查输入的年份是否在当前年份和 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));
}
【讨论】:
你可以只使用一个验证库:
http://validatious.org/learn/examples
并使用min-val 和max-val 来限制选项。或者,更简单,只需给他们一个包含有效年份的组合框 (html <select> tag)
请记住,有效年份取决于您的有效概念。如果我们谈论用户的年龄(date(Y) - 110),今年之前的 110 年可能有效,但对于其他一些东西可能无效。
【讨论】:
这对于简单的检查就足够了;
$input = (int)$input;
if($input>1000 && $input<2100)
{
//valid
}
【讨论】:
if (filter_input(INPUT_GET /* or INPUT_POST depending */, "year", FILTER_VALIDATE_INT, array ("options" => array ("min" => 1900, "max" => 2100))) != false) ...
“明智”是必须由您的应用程序的业务规则和/或您的存储介质定义的东西。
在 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+ 年有效.
【讨论】:
我会检查日期在您的申请中是否有意义。例如,它是您的用户的出生年份,可能 1900 年之前的任何日期都是不可能的,在这种情况下,任何大于当前年份的日期都是无意义的
【讨论】:
使用strtotime。
成功返回时间戳,否则返回 FALSE。在 PHP 5.1.0 之前,此函数将在失败时返回 -1。
你可以这样做
<?php
$year = '-1222';
$valid = true;
if (strtotime($year) === false) {
$valid = false;
}
// more of your code
?>
【讨论】: