微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何调试我的PHP验证功能?

我正在为我的工作创建一个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 举报,一经查实,本站将立刻删除。

相关推荐