web-dev-qa-db-ger.com

PHP Einfügungsdatum für MySQL

Ich benutze jQuery Datepicker Das Format des Datepickers lautet 08/25/2012

ich habe Fehler beim Einfügen in meine Datenbank, es wird nur 0000-00-00 00 00 00 eingefügt

meine Codes sind

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

ich bin sicher, dass mein Einsatz korrekt ist ....

55
Butternut

Wie in Date and Time Literals angegeben:

MySQL erkennt DATE Werte in folgenden Formaten:

  • Als Zeichenfolge im Format 'YYYY-MM-DD' oder 'YY-MM-DD'. Eine "entspannte" Syntax ist zulässig: Jedes Interpunktionszeichen kann als Trennzeichen zwischen Datumsteilen verwendet werden. Zum Beispiel sind '2012-12-31', '2012/12/31', '2012^12^31' und '[email protected]@31' äquivalent.

  • Als Zeichenfolge ohne Begrenzer im Format 'YYYYMMDD' oder 'YYMMDD', sofern die Zeichenfolge als Datum sinnvoll ist. Zum Beispiel werden '20070523' und '070523' als '2007-05-23' interpretiert, aber '071332' ist illegal (es hat unsinnige Monats- und Tagesteile) und wird '0000-00-00'.

  • Als Zahl im Format YYYYMMDD oder YYMMDD, sofern die Zahl als Datum sinnvoll ist. Beispielsweise werden 19830905 und 830905 als '1983-09-05' interpretiert.

Daher ist die Zeichenfolge '08/25/2012' kein gültiges MySQL-Datumsliteral. Sie haben vier Möglichkeiten (in einer vagen Reihenfolge, ohne weitere Angaben zu Ihren Anforderungen):

  1. Konfigurieren Sie Datepicker so, dass Datumsangaben in einem unterstützten Format bereitgestellt werden, indem Sie altField zusammen mit der Option altFormat verwenden:

    <input type="hidden" id="actualDate" name="actualDate"/>
    
    $( "selector" ).datepicker({
        altField : "#actualDate"
        altFormat: "yyyy-mm-dd"
    });
    

    Wenn Sie möchten, dass Benutzer das Datum im YYYY-MM-DD -Format sehen, setzen Sie stattdessen einfach die Option dateFormat :

    $( "selector" ).datepicker({
        dateFormat: "yyyy-mm-dd"
    });
    
  2. Verwenden Sie die Funktion STR_TO_DATE() von MySQL, um den String zu konvertieren:

    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    
  3. Konvertieren Sie die von jQuery empfangene Zeichenfolge in eine Zeichenfolge, die PHP als Datum versteht, z. B. ein DateTime -Objekt:

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

    und dann entweder:

    • erhalten Sie eine geeignete formatierte Zeichenfolge:

      $date = $dt->format('Y-m-d');
      
    • erhalten Sie den UNIX-Zeitstempel:

      $timestamp = $dt->getTimestamp();
      

      das wird dann direkt an die FROM_UNIXTIME() -Funktion von MySQL übergeben:

      INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
      
  4. Manuelles Manipulieren der Zeichenfolge in ein gültiges Literal:

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

Warnung

  1. Ihr Code ist anfällig für SQL-Injection. Sie sollten wirklich vorbereitet sein Anweisungen , an die Sie Ihre Variablen als Parameter übergeben, die für SQL nicht ausgewertet werden. Wenn Sie nicht wissen, wovon ich spreche oder wie Sie das Problem beheben können, lesen Sie die Geschichte von Bobby Tables .

  2. Wie in der Einführung zum Handbuchkapitel PHP zu den Funktionen mysql_* angegeben:

    Diese Erweiterung ist ab PHP 5.5.0 veraltet und wird nicht zum Schreiben von neuem Code empfohlen, da sie in Zukunft entfernt wird. Stattdessen sollte entweder die Erweiterung mysqli oder PDO_MySQL verwendet werden. Weitere Hilfe bei der Auswahl einer MySQL-API finden Sie auch in der MySQL-API-Übersicht .

  3. Sie verwenden anscheinend entweder eine DATETIME- oder eine TIMESTAMP-Spalte, um einen Datumswert zu speichern. Ich empfehle Ihnen, stattdessen den MySQL-Typ DATE zu verwenden. Wie unter Die Typen DATE, DATETIME und TIMESTAMP erläutert:

    Der Typ DATE wird für Werte mit einem Datumsanteil, aber ohne Zeitanteil verwendet. MySQL ruft DATE-Werte im 'YYYY-MM-DD' -Format ab und zeigt sie an. Der unterstützte Bereich reicht von '1000-01-01' bis '9999-12-31'.

    Der Typ DATETIME wird für Werte verwendet, die sowohl Datums- als auch Zeitangaben enthalten. MySQL ruft DATETIME -Werte im 'YYYY-MM-DD HH:MM:SS' -Format ab und zeigt sie an. Der unterstützte Bereich reicht von '1000-01-01 00:00:00' bis '9999-12-31 23:59:59'.

    Der Datentyp TIMESTAMP wird für Werte verwendet, die sowohl Datums- als auch Zeitangaben enthalten. TIMESTAMP hat einen Bereich von '1970-01-01 00:00:01' UTC bis '2038-01-19 03:14:07' UTC.

168
eggyal

Sie sollten in Betracht ziehen, aus diesem Datum einen Zeitstempel mit mktime () zu erstellen.

z.B:

$date = explode('/', $_POST['date']);
$time = mktime(0,0,0,$date[0],$date[1],$date[2]);
$mysqldate = date( 'Y-m-d H:i:s', $time );
10
Mihai Iorga
$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());
6
Kishan Chauhan

Sie müssen sicherstellen, dass das Datumsformat JYYY-MM-DD in Ihrer jQuery-Ausgabe lautet. Ich kann sehen, dass jQuery MM-DD-JJJJ zurückgibt, was nicht das gültige MySQL-Datumsformat ist und deshalb einen Fehler zurückgibt.

Um es in das richtige umzuwandeln, können Sie folgendes tun:

$dateFormated = split('/', $date);
$date = $dateFormated[2].'-'.$dateFormated[0].'-'.$dateFormated[1];

Dann erhalten Sie ein formatiertes Datum, das das gültige MySQL-Format ist, das JJJJ-MM-TT ist, d. H. 2012-08-25.

Ich würde auch die Verwendung von mysql_real_escape_string empfehlen, da Sie Daten in die Datenbank einfügen, um SQL-Injektionen als schnelle Lösung oder besser als PDO oder MySQLi zu verhindern.

Ihre Einfügeabfrage mit mysql_real_escape_string sollte eher wie folgt aussehen:

$sql = mysql_query( "INSERT INTO user_date VALUE( '', '" .mysql_real_escape_string($name). "', '" .mysql_real_escape_string($date). "'" ) or die ( mysql_error() );
1
Ilia Rostovtsev

Rufen Sie ein Datumsobjekt aus der Jquery-Datumsauswahl mit ab

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

Für mysql muss das Datum im richtigen Format vorliegen. Eine Option, die alle Zeitzonenprobleme behandelt, ist die Verwendung von moment.js

moment(myDate).format('YYYY-MM-DD HH:mm:ss')
0
ykay

Die einfachste Methode ist

$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());
0
William Worley