PHP MySQL Datumsformat einfügen

Lesezeit: 6 Minuten

Ich verwende jQuery Datepicker, das Format des Datepickers ist dieses 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 ist

<?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 mir sicher, dass meine Einfügung richtig ist….

PHP MySQL Datumsformat einfugen
eggyal

Wie angegeben in Datums- und Zeitliterale:

MySQL erkennt DATE Werte in diesen Formaten:

  • Als String in entweder 'YYYY-MM-DD' oder 'YY-MM-DD' Format. Eine „entspannte“ Syntax ist zulässig: Als Trennzeichen zwischen Datumsteilen darf ein beliebiges Satzzeichen verwendet werden. Zum Beispiel, '2012-12-31', '2012/12/31', '2012^12^31'und '2012@12@31' sind gleichwertig.

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

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

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

  1. Konfigurieren Sie Datepicker so, dass Datumsangaben in einem unterstützten Format mithilfe von bereitgestellt werden altField zusammen mit seinen altFormat Möglichkeit:

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

    Oder wenn Sie möchten, dass die Benutzer das Datum in sehen YYYY-MM-DD Format, stellen Sie einfach das ein dateFormat Möglichkeit stattdessen:

    $( "selector" ).datepicker({
        dateFormat: "yyyy-mm-dd"
    });
    
  2. Verwenden Sie MySQL STR_TO_DATE() Funktion zum Konvertieren des Strings:

    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    
  3. Wandeln Sie den von jQuery erhaltenen String in etwas um, das PHP als Datum versteht, wie etwa a DateTime Objekt:

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

    und dann entweder:

    • Erhalten Sie eine geeignet formatierte Zeichenfolge:

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

      $timestamp = $dt->getTimestamp();
      

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

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

    $parts = explode("https://stackoverflow.com/", $_POST['date']);
    $date  = "$parts[2]-$parts[0]-$parts[1]";
    

Warnung

  1. Ihr Code ist anfällig für SQL-Injection. Sie Ja wirklich sollten vorbereitete Anweisungen verwenden, 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. Auch wie in angegeben die Einleitung zum Kapitel des PHP-Handbuchs auf der mysql_* Funktionen:

    Diese Erweiterung ist seit PHP 5.5.0 veraltet und wird nicht zum Schreiben von neuem Code empfohlen, da sie in Zukunft entfernt wird. Stattdessen entweder die mysql oder PDO_MySQL Erweiterung verwendet werden soll. Siehe auch die MySQL-API-Übersicht für weitere Hilfe bei der Auswahl einer MySQL-API.

  3. Sie scheinen entweder a DATETIME oder TIMESTAMP Spalte zum Halten eines Datumswertes; Ich empfehle Ihnen, MySQL zu verwenden DATE geben Sie stattdessen ein. Wie in erklärt Die DATE, DATETIMEund TIMESTAMP Typen:

    Die DATE Typ wird für Werte mit einem Datumsteil, aber ohne Zeitteil verwendet. MySQL ruft DATE-Werte ab und zeigt sie an in 'YYYY-MM-DD' Format. Der unterstützte Bereich ist '1000-01-01' zu '9999-12-31'.

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

    Die TIMESTAMP Der Datentyp wird für Werte verwendet, die sowohl Datums- als auch Uhrzeitteile enthalten. TIMESTAMP hat eine Reihe von '1970-01-01 00:00:01' UTC zu '2038-01-19 03:14:07' KOORDINIERTE WELTZEIT.

Sie sollten erwägen, einen Zeitstempel von diesem Datum an zu erstellen mktime()

z.B:

$date = explode("https://stackoverflow.com/", $_POST['date']);
$time = mktime(0,0,0,$date[0],$date[1],$date[2]);
$mysqldate = date( 'Y-m-d H:i:s', $time );

PHP MySQL Datumsformat einfugen
Kishan Chauhan

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

  • danke, du gibst mir einen hinweis date('Y-m-d',strtotime($_POST['date_field'])); Es funktioniert und das ist genau das, was ich will.

    – Christhofer Natalius

    5. Oktober 2015 um 8:45 Uhr


  • Gibt es eine Möglichkeit dies höher zu schieben? Es ist ganz einfach und funktioniert. Die akzeptierte Antwort ist gründlich, scheint diese Option jedoch nicht zu haben.

    – Salzmann

    15. Juni 2016 um 0:33 Uhr

1646604292 283 PHP MySQL Datumsformat einfugen
Ilia

Sie müssen sicherstellen, dass das Datumsformat Ihrer jQuery-Ausgabe JJJJ-MM-TT ist. Ich kann sehen, dass jQuery MM-TT-JJJJ zurückgibt, was nicht gültig ist MySQL-Datumsformat und deshalb gibt es einen Fehler zurück.

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

$dateFormated = split("https://stackoverflow.com/", $date);
$date = $dateFormated[2].'-'.$dateFormated[0].'-'.$dateFormated[1];

Dann erhalten Sie ein formatiertes Datum, das ein gültiges MySQL-Format ist, nämlich JJJJ-MM-TT, dh 2012-08-25

Ich würde auch die Verwendung empfehlen mysql_real_escape_string beim Einfügen von Daten in die Datenbank, um SQL-Injections als schnelle Lösung oder bessere Verwendung zu verhindern PDO oder MySQLi.

Ihre Einfügeabfrage mit mysql_real_escape_string sollte eher so aussehen:

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

Holen Sie sich ein Datumsobjekt aus der jquery-Datumsauswahl mit

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

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

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

1646604292 722 PHP MySQL Datumsformat einfugen
William Worley

Die einfachste Methode ist

$dateArray = explode("https://stackoverflow.com/", $_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());

PHP MySQL Datumsformat einfugen
Sergij T.

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')";

  • id=”pt_date” name=”pt_date”>

    – Pupan Poulkaew

    6. Februar 2020 um 13:14 Uhr

  • Bitte fügen Sie Ihrer Antwort eine Erklärung hinzu, damit andere daraus lernen können. Geben Sie außerdem alle Informationen in Ihre Antwort ein und verwenden Sie den Kommentarbereich nicht, um weitere Informationen zu enthalten

    – Nico Haase

    6. Februar 2020 um 13:32 Uhr

  • Kein Forscher sollte diese Abfrage verwenden – sie ist unsicher/instabil.

    – mickmackusa

    18. Juni 2021 um 11:55 Uhr

960120cookie-checkPHP MySQL Datumsformat einfügen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy