Dirk D: Datum aus DB auslesen

Hallöle,

habe ein kleines Problem beim Auslesen eines Datums
aus einer mySQL-Datenbank.

Ich schreibe ein paar Daten in eine Tabelle
und füge zusätzlich das aktuelle Datum mit ein:

mysql_query ("INSERT INTO auftrag(dl,knr,annahme) VALUES (
'".$ausgabe1."',
'".$_POST['kundennr']."',
'".date("d.m.Y")."')");

Bis hier kein Problem. In der Tabelle sieht es dann so aus:
dl | knr | annahme
Färben | 5023 | 29.03.2007

Nun möchte ich aber diese Daten auch wieder anzeigen lassen.

$ergebnis=mysql_db_query("salon",
"SELECT dl,knr,annahme FROM auftrag WHERE knr=$kwert");
$anzahl=mysql_num_rows($ergebnis);
for($i=0;$i<$anzahl;$i++)
{
 $nr      = mysql_result($ergebnis, $i, "knr");
 $dienstl = mysql_result($ergebnis, $i, "dl");
 $ann     = mysql_result($ergebnis, $i, "annahme");
 echo $nr."<br>";
 echo $dienstl."<br>";
 echo $annahme."<br>";
}

Bis auf das Datum (annahme) ist alles OK.
Nur beim Datum trägt er gar nichts ein.

Wie muss ich da vorgehen?

Ach so, hier noch die Erstellung der Tabelle:
$create6 = @mysql_query ("CREATE TABLE IF NOT EXISTS
auftrag (id INT(8) unsigned NOT NULL auto_increment,
dl LONGTEXT,
knr LONGTEXT,
annahme LONGTEXT,
PRIMARY KEY (ID))");

Danke
Dirk D

  1. Sup!

    Nun möchte ich aber diese Daten auch wieder anzeigen lassen.

    $ergebnis=mysql_db_query("salon",
    "SELECT dl,knr,annahme FROM auftrag WHERE knr=$kwert");
    $anzahl=mysql_num_rows($ergebnis);
    for($i=0;$i<$anzahl;$i++)
    {
    $nr      = mysql_result($ergebnis, $i, "knr");
    $dienstl = mysql_result($ergebnis, $i, "dl");
    $ann     = mysql_result($ergebnis, $i, "annahme");
    echo $nr."<br>";
    echo $dienstl."<br>";
    echo $annahme."<br>";
    }

    Statt $annahme $ann schreiben...

    Gruesse,

    Bio

    --
    Never give up, never surrender!!!
  2. Hallo Dirk,

    CREATE TABLE IF NOT EXISTS
    auftrag (id INT(8) unsigned NOT NULL auto_increment,

    [...]

    annahme LONGTEXT,

    das ist keine gute Idee. Nimm einen Datumstyp des Datenbankmanagementsystems, z.B. DATE.

    Freundliche Grüße

    Vinzenz

  3. Hallo Dirk,

    Ach so, hier noch die Erstellung der Tabelle:
    $create6 = @mysql_query ("CREATE TABLE IF NOT EXISTS
    auftrag (id INT(8) unsigned NOT NULL auto_increment,
    dl LONGTEXT,
    knr LONGTEXT,
    annahme LONGTEXT,
    PRIMARY KEY (ID))");

    Bio hat Dir ja schon gesagt, dass Du einfach die falsche Variable genommen hast, allerdings möchte ich dennoch kurz auf Dein Datenbankdesign eingehen, insbesondere auf die Spaltentypen, denn da kann man in meinen Augen einiges verbessern:

    »dl« ist vermutlich eine Beschreibung oder ein Titel. Es ist ok, dass Du deswegen ein Textfeld nimmst, allerdings dürfte VARCHAR(250) oder ähnlich ausreichend sein - TEXT und insbesondere LONGTEXT ist in meinen Augen Overkill für so ein Feld.

    »knr« - damit meinst Du vermutlich die Kundennummer. Bei dem Feld ist zwar auch nichts daran auszusetzen, dass es ein Textfeld ist (numerische Felder kürzen z.B. führende Nullen) - allerdings stellt sich hier in meinen Augen die Frage, ob es überhaupt sinnvoll ist, die Kundennummer direkt in der Tabelle zu speichern - Du wirst ja schließlich noch eine separate Kundentabelle haben, die außer der Kundennummer (die für "außen" gedacht ist) noch eine id-Spalte hat - insofern wäre es sinnvoll, die id-Spalte der Kundentabelle hier einzutragen und die Kundennummer (und u.U. Namen etc.) dann über einen JOIN zu erhalten, wenn Du die Datenbank abfragst. Achja, und falls Du doch die Kundennummer direkt in der Tabelle speichern willst - nimm BITTE ein VARCHAR(10) oder VARCHAR(20) oder sowas - wenn bei der Beschreibung LONGTEXT schon Overkill ist, dann ist das hier definitiv der Fall.

    »annahme« - das ist ganz klar ein Datumsfeld - MySQL bietet nämlich einen eigenen Datentypen für Datumsfelder an, die dafür gedacht sind, Datumswerte zu speichern.

    Welchen Vorteil bringt es, spezialisierte Feldtypen anstelle von immer nur LONGTEXT zu verwenden?

    * Speicherplatz - LONGTEXT braucht relativ viel Speicher in der Datenbank,
       auch wenn man nur wenig drin abspeichert.
     * Performance - LONGTEXT ist gegenüber "einfacheren" Datentypen wie
       DATE oder VARCHAR langsamer
     * Fehlererkennung - Wenn aus Versehen ein Script Amok läuft und irgend
       welchen Mist in die Datenbank reinschreiben will, dann wird es durch
       Restriktionen über das, was in die Felder reingeschrieben wird,
       eventuell davon abgehalten, eben diesen Mist zu tun.
     * Bei Feldern wie Datumsfeldern: Möglichkeit, bestimmte Datenbankfunktionen
       zu nutzen - z.B. funktioniert ORDER BY annahme DESC in Deinem obigen
       Beispiel nicht richtig, weil das Datum als Text in der Spalte drin
       steht (in Deinem Fall mit Tag zuerst), während bei einem Datumsfeld die
       Datenbank weiß, wie sie das Feld sortieren muss. Zudem kann man in
       der Datenbank auch Abfragen tätigen wie "Welche Datensätze gibt es denn
       zwischen dem 20.3.2007 und dem 25.3.2007?"

    Die MySQL-Doku zu den verschiedenen Datentypen findest Du hier:
    http://dev.mysql.com/doc/refman/5.1/de/data-type-overview.html

    Viele Grüße,
    Christian