2014-02-08 34 views
1

問題:如何處理非法用戶輸入使用PHP導致的錯誤?

在網頁上,用戶輸入格式爲「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

怎麼樣的strtotime($ _ POST [ 'userdate'])

+0

它無法解析特殊輸入語法並返回任何結果。 – tangens

+0

然後讀取用戶輸入並手動分割,然後從中創建日期格式 – ramesh

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中的大多數方法typicaly返回false如果發生錯誤