如何处理因使用php输入非法用户而导致的错误?

时间:2014-02-08 08:01:28

标签: php validation

问题:

在网页上,用户以“07.02.14,14:00”的形式输入日期。在服务器上,我使用以下代码解析用户输入:

$myDate = DateTime::createFromFormat( 'd.m.y, H:i', $_POST['userdate'] );
$mysqlDate = $myDate->format( 'Y-m-d H:i:s' );
// use $mysqlDate for SQL queries...

有效。但是,如果用户输入的字符串与输入模式不匹配,PHP将使用错误

终止脚本
PHP Fatal error: Call to a member function format() on a non-object

问题:

PHP处理这类错误的最佳做法是什么?我应该检查createFromFormat的返回值,是否应该使用try-catch块围绕用户输入处理脚本的整个部分,还是有其他更好的解决方案?

环境:

脚本在托管Web服务器上运行,我不容易集成第三方库。所以我正在寻找一种适用于PHP 5.3开箱即用的最佳实践。

2 个答案:

答案 0 :(得分:0)

strtotime怎么样($ _ POST ['userdate'])

答案 1 :(得分:0)

有点(太?)迟到但是,在这种情况下你可以这样做:

<?php
    $myDate = DateTime::createFromFormat( 'd.m.y, H:i', $_POST['userdate'] );
    if($myDate == false){
        //Handle Validation stuff
    }

    $mysqlDate = $myDate->format( 'Y-m-d H:i:s' );
    // use $mysqlDate for SQL queries...
?>

这是有效的,因为根据此处的文档,方法DateTime::createFromFormat();在失败时返回falsehttp://www.php.net/manual/en/datetime.createfromformat.php

一般,如果发生错误,php中的大多数方法都会返回false