61

jQuery datepickerを使用している場合、datepickerの形式は次のとおりです。08/25/2012

データベースに挿入するときにエラーが発生します。挿入するのは0000-00-00000000のみです。

私のコードは

<?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';
?>

私の挿入が正しいと確信しています...

4

11 に答える 11

181

日付と時刻のリテラルで述べられているように:

MySQLDATEは次の形式の値を認識します。

  • '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'ます。

  • 数値が日付として意味をなす場合は、いずれYYYYMMDDYYMMDDの形式の数値として。たとえば、19830905830905はとして解釈され'1983-09-05'ます。

したがって、文字列'08/25/2012'は有効なMySQL日付リテラルではありません。4つのオプションがあります(要件の詳細情報なしで、漠然とした優先順位で):

  1. オプションaltFieldとともにを使用して、サポートされている形式で日付を提供するようにDatepickerを構成します。altFormat

    <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"
    });
    
  2. MySQLのSTR_TO_DATE()関数を使用して、文字列を変換します。

    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    
  3. DateTimejQueryから受け取った文字列を、オブジェクトなど、PHPが日付として理解できるものに変換します。

    $dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
    

    そして次のいずれか:

    • 適切なフォーマットされた文字列を取得します。

      $date = $dt->format('Y-m-d');
      
    • UNIXタイムスタンプを取得します。

      $timestamp = $dt->getTimestamp();
      

      FROM_UNIXTIME()次に、これはMySQLの関数に直接渡されます。

      INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
      
  4. 文字列を手動で操作して有効なリテラルにします。

    $parts = explode('/', $_POST['date']);
    $date  = "$parts[2]-$parts[0]-$parts[1]";
    

警告

  1. コードはSQLインジェクションに対して脆弱です。実際には、SQLで評価されないパラメーターとして変数を渡すプリペアドステートメントを使用する必要が あります。私が何について話しているのか、またはそれを修正する方法がわからない場合は、BobbyTablesのストーリーを読んでください

  2. また、関数に関するPHPマニュアルの章の概要で述べたようにmysql_*

    この拡張機能はPHP5.5.0で非推奨になり、将来削除されるため、新しいコードの記述にはお勧めしません。代わりに、mysqliまたはPDO_MySQL拡張機能のいずれかを使用する必要があります。MySQL APIを選択する際の詳細については、MySQLAPIの概要も参照してください。

  3. DATETIME日付値を保持するためにまたはTIMESTAMP列のいずれかを使用しているようです。代わりにMySQLのDATEタイプの使用を検討することをお勧めします。、、およびタイプで説明されているDATEDATETIMETIMESTAMPように:

    このDATE型は、日付部分はあるが時間部分はない値に使用されます。MySQLは、DATE値を取得して'YYYY-MM-DD'フォーマットで表示します。サポートされる範囲は'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日付と時刻の両方の部分を含む値に使用されます。UTCからUTCTIMESTAMPの範囲があります。'1970-01-01 00:00:01''2038-01-19 03:14:07'

于 2012-08-25T08:33:20.977 に答える
10

その日付からタイムスタンプを作成することを検討する必要がありますwitkmktime ()

例えば:

$date = explode('/', $_POST['date']);
$time = mktime(0,0,0,$date[0],$date[1],$date[2]);
$mysqldate = date( 'Y-m-d H:i:s', $time );
于 2012-08-25T08:33:32.023 に答える
8
$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());
于 2015-04-06T10:50:22.820 に答える
1

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() );
于 2012-08-25T08:35:18.443 に答える
1

を使用してjquery日付ピッカーから日付オブジェクトを取得します

var myDate = $('element').datepicker('getDate')

mysqlの場合、日付は適切な形式である必要があります。タイムゾーンの問題を処理する1つのオプションは、moment.jsを使用することです。

moment(myDate).format('YYYY-MM-DD HH:mm:ss')
于 2015-08-17T08:14:22.280 に答える
0

最も簡単な方法は

$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());
于 2014-12-15T02:42:35.293 に答える
0

HTML:

<div class="form-group">
  <label for="pt_date" class="col-2 col-form-label">Date</label>
  <input class="form-control" type="date" value=<?php echo  date("Y-m-d") ;?> id="pt_date" name="pt_date">
</div>

SQL

$pt_date = $_POST['pt_date'];

$sql = "INSERT INTO `table` ( `pt_date`) VALUES ( '$pt_date')";
于 2020-02-06T13:13:31.073 に答える
0

クリスマスの日付:2021年12月25日(25 de Diciembredelaño2021)を文字列形式で受け取ったとします:「dmY」、たとえば「12-25-2021」。まずDateTime、受け取った形式から有効なオブジェクトを作成します。

var_dump(DateTime::createFromFormat("d-m-Y","25-12-2021", new DateTimeZone("America/Argentina/Buenos_Aires")));

これは出力として生成されます:

object(DateTime)#2 (3) {
  ["date"]=>
  string(26) "2021-12-25 10:21:11.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(30) "America/Argentina/Buenos_Aires"
}

次に、 format( "Ymd H:i:s"))を使用してDateTimeオブジェクトから日付フィールドを取得する準備をします。

var_dump(DateTime::createFromFormat("d-m-Y","25-12-2021",new DateTimeZone("America/Argentina/Buenos_Aires"))->format("Y-m-d H:i:s"));

これにより、値を挿入する準備ができた出力が生成されます。

string(19) "2021-12-25 10:56:30"

要約すると、次のようにフォーマットされた日付('DD-MM-YYYY')をMySQLに挿入できます。

<?php
//string input post like "25-12-2021"
$date_input = $_POST['date_input']; 
//create DateTime object
$date_time_obj=DateTime::createFromFormat("d-m-Y","25-12-2021",new DateTimeZone("America/Argentina/Buenos_Aires"));
//format date ready to insert as string at MySQL
$str_date=$date_time_obj->format("Y-m-d H:i:s");
?>

次に、PHPからMySQLにクエリとして直接実行します。

<?php
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'world');

//verify connection
if (mysqli_connect_errno()) {
    printf("Error de conexión: %s\n", mysqli_connect_error());
    exit();
}
//prepare the query to execute
$stmt = $mysqli->prepare("INSERT INTO table_example (DATE_FIELD) VALUES (?)");
//prevent sql injection
$stmt->bind_param('s', $str_date);
//execute prepared statements
$stmt->execute ();
?>
于 2021-06-17T14:37:09.470 に答える
0

最近はデートが苦手です。次の作業のおかげで、希望の形式で日付を印刷できます。

$year = $_POST['year'];
$month = $_POST['month'];
$day = $_POST['day'];
$scr = strtotime($year . '-' . $month . '-' . $day);
$gelis_tarihi = date('Y-m-d', $scr);

$yil = $_POST['yil'];
$ay = $_POST['ay'];
$gun = $_POST['gun'];
$birlestir = strtotime($yil . '-' . $ay . '-' . $gun);
$gelis_tarihi = date('Y-m-d', $birlestir);
于 2022-01-13T14:54:17.120 に答える
-2

このようなものを試してみてください。

echo "The time is " . date("2:50:20");
$d=strtotime("3.00pm july 28 2014");
echo "Created date is " . date("d-m-y h:i:sa",$d);
于 2014-07-28T09:48:14.450 に答える
-2

まずはお店$date=$_POST['your date field name'];

insert into **Your_Table Name** values('$date',**other fields**);

単一のコートに日付を含める必要があります('')

お役に立てば幸いです。

于 2016-05-04T05:20:44.910 に答える