问题:
在网页上,用户以“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开箱即用的最佳实践。
答案 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();
在失败时返回false
:
http://www.php.net/manual/en/datetime.createfromformat.php
一般,如果发生错误,php中的大多数方法都会返回false