私はjQueryのdatepickerを使用してdatepickerの形式はこれです08/25/2012
データベースに挿入するときにエラーが発生します0000-00-00 00 00 00のみを挿入します
私のコードは
<?php
$id = $_POST['id'];
$name = $_POST['name'];
$date = $_POST['date'];
$sql = mysql_query( "INSERT INTO user_date VALUE( '', '$name', '$date')" ) or die ( mysql_error() );
echo 'insert successful';
?>
私の挿入物が正しいことを確認してください....
日付と時刻のリテラル で述べたように:
MySQLは、次の形式の
DATE
値を認識します。
'YYYY-MM-DD'
または'YY-MM-DD'
形式の文字列として。 「緩和された」構文が許可されます。句読点文字は、日付部分間の区切り文字として使用できます。たとえば、'2012-12-31'
、'2012/12/31'
、'2012^12^31'
、および'2012@12@31'
は同等です。文字列が日付として意味がある場合は、
'YYYYMMDD'
または'YYMMDD'
形式の区切り文字のない文字列として。たとえば、'20070523'
と'070523'
は'2007-05-23'
として解釈されますが、'071332'
は違法で(無意味な月と日の部分があります)、'0000-00-00'
になります。
YYYYMMDD
またはYYMMDD
形式の数値として。ただし、数値は日付として意味があります。たとえば、19830905
と830905
は'1983-09-05'
として解釈されます。
したがって、文字列'08/25/2012'
は有効なMySQL日付リテラルではありません。次の4つのオプションがあります(要件の詳細情報なしで、漠然とした好みの順序で)。
altField
と altFormat
オプション を使用して、サポートされている形式で日付を提供するようにDatepickerを構成します。
<input type="hidden" id="actualDate" name="actualDate"/>
$( "selector" ).datepicker({
altField : "#actualDate"
altFormat: "yyyy-mm-dd"
});
または、ユーザーがYYYY-MM-DD
形式で日付を確認できる場合は、代わりに dateFormat
オプション を設定します。
$( "selector" ).datepicker({
dateFormat: "yyyy-mm-dd"
});
MySQLの STR_TO_DATE()
関数を使用して文字列を変換します。
INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
JQueryから受け取った文字列を、 DateTime
オブジェクトなど、PHPが日付として理解できるものに変換します。
$dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
そして、次のいずれか:
適切なフォーマットされた文字列を取得します。
$date = $dt->format('Y-m-d');
uNIXタイムスタンプを取得します。
$timestamp = $dt->getTimestamp();
次に、MySQLの FROM_UNIXTIME()
関数に直接渡されます。
INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
文字列を有効なリテラルに手動で操作します。
$parts = explode('/', $_POST['date']);
$date = "$parts[2]-$parts[0]-$parts[1]";
コードはSQLインジェクションに対して脆弱です。本当にを使用する必要があります準備されたステートメント 。SQLに対して評価されないパラメーターとして変数を渡します。私が何を話しているのか、またはそれを修正する方法がわからない場合は、 Bobby Tables のストーリーを読んでください。
また、mysql_*
関数のPHPマニュアルの章の 紹介 で述べられているように:
この拡張機能はPHP 5.5.0で非推奨になり、将来削除されるため、新しいコードを記述することはお勧めしません。代わりに、 mysqli または PDO_MySQL 拡張機能を使用する必要があります。 MySQL APIを選択する際の詳細なヘルプについては、 MySQL API Overview も参照してください。
日付値を保持するためにDATETIME
またはTIMESTAMP
列を使用しているようです。代わりにMySQLのDATE
タイプの使用を検討することをお勧めします。 DATE
、DATETIME
、およびTIMESTAMP
タイプ で説明されているとおり:
DATE
型は、日付部分はあるが時刻部分はない値に使用されます。 MySQLは、'YYYY-MM-DD'
形式でDATE値を取得して表示します。サポートされる範囲は'1000-01-01'
から'9999-12-31'
です。
DATETIME
型は、日付と時刻の両方の部分を含む値に使用されます。 MySQLはDATETIME
の値を'YYYY-MM-DD HH:MM:SS'
形式で取得して表示します。サポートされる範囲は'1000-01-01 00:00:00'
から'9999-12-31 23:59:59'
です。
TIMESTAMP
データ型は、日付と時刻の両方の部分を含む値に使用されます。TIMESTAMP
の範囲は'1970-01-01 00:00:01'
UTCから'2038-01-19 03:14:07'
UTCです。
その日付からタイムスタンプを作成することを検討する必要があります mktime()
例えば:
$date = explode('/', $_POST['date']);
$time = mktime(0,0,0,$date[0],$date[1],$date[2]);
$mysqldate = date( 'Y-m-d H:i:s', $time );
$date_field = date('Y-m-d',strtotime($_POST['date_field']));
$sql = mysql_query("INSERT INTO user_date (column_name,column_name,column_name) VALUES('',$name,$date_field)") or die (mysql_error());
JQuery出力の日付形式がYYYY-MM-DDであることを確認する必要があります。 jQueryがMM-DD-YYYYを返すことがわかりますが、これは有効な MySQLの日付形式 ではないため、エラーが返されます。
それを正しいものに変換するには、これを行うことができます:
$dateFormated = split('/', $date);
$date = $dateFormated[2].'-'.$dateFormated[0].'-'.$dateFormated[1];
次に、有効なMySQL形式であるフォーマットされた日付を取得します。これはYYYY-MM-DD、つまり2012-08-25です。
また、 mysql_real_escape_string を使用してデータベースにデータを挿入し、 SQLインジェクション を迅速な解決策として使用するか、より適切に使用することをお勧めします PDO または- MySQLi 。
mysql_real_escape_string
を使用した挿入クエリは、次のようになります。
$sql = mysql_query( "INSERT INTO user_date VALUE( '', '" .mysql_real_escape_string($name). "', '" .mysql_real_escape_string($date). "'" ) or die ( mysql_error() );
を使用してjquery日付ピッカーから日付オブジェクトを取得します
var myDate = $('element').datepicker('getDate')
Mysqlの場合、日付は適切な形式である必要があります。タイムゾーンの問題を処理する1つのオプションは、moment.jsを使用することです
moment(myDate).format('YYYY-MM-DD HH:mm:ss')
最も簡単な方法は
$dateArray = explode('/', $_POST['date']);
$date = $dateArray[2].'-'.$dateArray[0].'-'.$dateArray[1];
$sql = mysql_query("INSERT INTO user_date (column,column,column) VALUES('',$name,$date)") or die (mysql_error());