我正在为我的工作创建一个Web表单,正在使用PHP对其进行验证.但是,当我测试页面时,输入有效信息后,我会不断收到所有错误消息,而表单没有正确提交.以下是代码的一小部分(包括HTML部分).
<?PHP
$date =""
$dateerror = ""
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["date"])) {
$dateerror = "Date is required";
} else {
$date = test_input($_POST["date"]);
$array = explode("/", $date);
$day = $array[1];
$month = $array[0];
$year = $array[2];
if (!checkdate($month, $day, $year)) {
$dateerror = "Date mustbe in M/D/Y format";
} else {
date_default_timezone_set("America/Anchorage");
$today = strtotime("Now");
if (strtotime($date)>=$today) {
$date = test_input($_POST["date"]);
} else {
$dateerror = "Date is before present day";
}
}
}
<input type="text" size="9" name="date" id="date" required title="Please enter current date"><?PHP echo $dateerror; ?><br>
同样,即使日期是当前日期,PHP代码也只会返回“日期在当前日期之前”.
解决方法:
如果要在PHP中验证日期,最好的方法是使用DateTime类,尤其是createFromFormat
方法.
该调用将创建一个DateTime对象,该对象以给定的格式设置为指定的日期,如果为无效日期,则返回false.
因此,例如:
<?PHP
$input = "05/08/2015";
$test = DateTime::createFromFormat('d/m/Y', $input);
if (!$test) {
print "You entered an invalid date";
die;
}
$Now = new DateTime();
if ($test < $Now) {
print "Date is before present.";
die;
}
?>
就那么简单.不需要正则表达式,也不需要展开输入等.只是一个简单的测试.而且,一旦确定日期有效,您就可以使用$test变量处理日期,因为它是标准的DateTime对象.
[编辑]我在代码中添加了一些内容,以使用DateTime类处理日期比较,以给出“之前存在”错误.
这里的重点是,如果您有一个DateTime对象,则需要将其与另一个DateTime对象进行比较.较早的strtotime()会产生与DateTime不同的日期资源,并且您不能将它们一起使用(至少不能一直使用它们).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。