2011-01-25 10 views

答えて

1

この使用されるだろうおそらく最良の方法:のようなhttp://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date

SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y'); 
-> '2004-04-31' 

または同等のPHPの関数:(PHP 5.3から) http://www.php.net/manual/en/function.date-parse-from-format.php

一般的なPHPの関数は

function convertDate($dateString) { 
    return date('Y-m-d H:i:s',strtotime(str_replace('/','-',$dateString))); 
} 
ようになります。

または

function convertDate($dateString) { 
    $a = explode($dateString('/')); 
    return "{$a[2]}-{$a[1]}-{$a[0]} 00:00:00"; 
} 
+0

おかげで、私はdatetime型に文字列ではなく、SQL関数を変換するために、PHPの関数が必要です。.. –

+0

なぜいけないのでしょうか? INSERT/UPDATEクエリでMySQL関数を使用することはできます。とにかく、私は分で一般的なPHP関数で答えを更新します。 – Mchl

0

最初に、必要な書式の日付の設定を保存する必要があります。 ISO_DATE形式が「Y-m-d」であることを知っています 何らかの形で出力設定を保存する必要があります。 区切り記号がわかっていて、日付の入力形式がわかっている場合は、checkdate()を使用して日付を入力する形式を確認し、あらかじめ定義された区切り記号で値を分解してISO標準に変換します。

フィールドが特定の型(String、Date、Datetime、Integer、Float)であるかどうかを確認する検証オブジェクトがあり、次にSQLに送信されるパラメータを書式設定します: 例として、

$_POST["DATA"] = array("name"=>"Koko bongo","age"=>12,"graduation_date"=>"12/06/1986"); 

と、このように私たちは、検証の配列を定義します:

$validator= array("name"=>"string","age"=>"integer","graduation_date"=>"date"); 

私は、これは自動化されますが、あなたがでcustomlyインプレース、それを行うことができ、各テーブルの構成を有しているPHPに私のHTMLフォームからworというevalAndFormatType関数を持つこの

function evalAndFormatType($value,$type) { 

switch strtolower($type) { 


    case "integer": 

     $item = is_numeric($value) && !strstr($value,DECIMAL_SEPARATOR) ? intval($item) :false; 

    break; 
    case "Date":/*we suppose that somehow we now the order, how you do it it is your decision: configuration array,constants etc*/ 
     $check = explode(DATE_SEPARATOR,$value); 
     $item = sizeof($check) == 3 && checkdate(intval($check[1]),intval($check[0]),intval($check[2])) ? $check[2]."-".$check[1]."-".$check[0] : false; 
    break; 
    default: 
     throw Exception("Unknown type ".$type); 
    break; 

} 

    return $item; 
} 

now, in your code you can say 


$_DATA = $_POST["DATA"]; // the previously defined array 

$errMsg = array(); 

foreach($_DATA as $k=>$v) { 
    $_DATA[$k] = evalAndFormat($v,$validator[$k]); 

    if($_DATA[$k] === false) { 

     $errMsg[$k] = "requires type ".$validator[$k]; 

    } 

} 

if(empty($errMsg)){ 

    $sql= ....WHATEVER USING THE INFO 

} else { 

    return $errMsg; 


/*this can be used to show errors nicely near your text boxes by parsing the expected keys or sending it by JSON etc 
or 
you could create a string out of it by using locale data that you might have which could output something like 
Required fields: Graduation date[invalid type],Name,Age ... etc 
"/ 

などのKSは、私は、これは、あなたの質問に答えると、さらにその上に、私の「奇妙な」アプローチを説明したいと考えています。

}

関連する問題