udo: Datum aus Textfeld in mysql Datenbankfeld date schreiben

Hallo,

ich habe hier schon einiges durchgesucht... auch gefunden. Nur funktioniert das nicht richtig.

Ich bin sicher der Fehler sitzt ca. 40cm vor dem Rechner, komme aber nicht drauf.

Ich möchte in einem Textfeld ein Datum im Format "01.01.2008" eingeben.
Dieses soll in einer Datenbank Tabelle (beachen) in der Spalte "date" eingetragen werden.
Nun möchte ich das bei Aufruf der Seite alle Datensätze die älter als "jetzt" sind gelöscht werden.
Ich gehe davon aus, dass ich die Spalte "date" in der Tabelle als Typ date hinterlege.
Darum wollte ich diese jetzt wandeln und danach die Löschabfrage auf diese Spalte beziehen.

Jetzt habe ich hier schon mehere Variationen gefunden bekomme aber kein Ergebnis oder besser nur falsche

Ich habe z.B. 07.05.2008 eingeben gespeichert wird aber 2007-05-20.

Hier mal der Code:

/* Übernahme aus einem Formular */

$datum = $_POST["datum"];
  $datemysql = $_POST["datum"];
  $uhrzeit = $_POST["uhrzeit"];
  $uhrzeit = $_POST["uhrzeit"];
  $teilnehmer = $_POST["teilnehmer"];
  $gesendetdate = $_POST["gesendetdate"];
  $gesendettime = $_POST["gesendettime"];

/* Test Datum anpassen */

/**
* date_german2mysql
* wandelt ein traditionelles deutsches Datum
* nach MySQL (ISO-Date).
*/
/*  echo $datemysql;    */
function date_german2mysql($datemysql) {
list($tag, $monat, $jahr) = explode(".", $datemysql);

return sprintf("%04d-%02d-%02d", $jahr, $monat, $tag);
}

echo $datemysql;

/* Eintrag in DB */

$eintrag = "INSERT INTO beachen (datum, uhrzeit, teilnehmer,gesendetdate,gesendettime,date)
  VALUES ('$datum', '$uhrzeit','$teilnehmer','$gesendetdate','$gesendettime','$datemysql')";

$eintragen = mysql_query($eintrag);

Währe toll wenn mir jemand helfen könnte !

  1. ich habs jetzt nicht genau gelesen, nur überflogen - aber es sieht nach php/mysql und einer selber gebastelten funktion

    ersetze deine eigene funktion "date_german2mysql" durch mktime() und date() damit fängst du zwar keine eingabefehler ab, stellst aber eine richtige konvertierung des datums sicher

    sprintf ist eine denkbar schlechte variante um einen string umzuschlichten ;)

    1. Hallo

      sprintf ist eine denkbar schlechte variante um einen string umzuschlichten ;)

      ich bin ganz anderer Ansicht: sprintf ist hierfür hervorragend geeignet.
      Ein geeignetes Eingabeformat wird bei der Funktion ja vorausgesetzt.

      Freundliche Grüße

      Vinzenz

  2. Danke...

    habe eine Lösung gefunden!

    $split = explode(".", $datemysql);
    $datum1 = $split[0];
    $datum2 = $split[1];
    $datum3 = $split[2];
    $datemysql = $datum3.'-'.$datum2.'-'.$datum1;

    mfg
    Udo

    1. echo $begrüßung;

      habe eine Lösung gefunden!

      $split = explode(".", $datemysql);
      $datum1 = $split[0];
      $datum2 = $split[1];
      $datum3 = $split[2];
      $datemysql = $datum3.'-'.$datum2.'-'.$datum1;

      Diese "Lösung" funktioniert auch mit Eingaben wie "08.15.annodazumal" hervorragend. Und wenn nicht mindestens zwei Punkte in der Eingabe enthalten sind, gibt es anschließend Zugriffe auf nicht vorhandene Array-Elemente, denn dann hat $split weniger als drei Elemente. Du solltest dein Script mit allerlei unsinnigen Eingaben füttern, und es darufhin so umschreiben, dass es und deine Datenhaltung auch diese unbeschadet überstehen. Das error_reporting auf E_ALL zu stellen hilft dann die dabei enstehenden Folgefehler zu finden. Außerdem gibt es die Funktion checkdate(), mit der man ein Datum auf Gültigkeit prüfen kann.

      echo "$verabschiedung $name";

    2. n'abend,

      $split = explode(".", $datemysql);
      $datum1 = $split[0];
      $datum2 = $split[1];
      $datum3 = $split[2];
      $datemysql = $datum3.'-'.$datum2.'-'.$datum1;

      Bist du schon über die Funktionen checkdate() und strtotime() gestolpert?

      weiterhin schönen abend...

      --
      #selfhtml hat ein Forum?
      sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|