Datumsformatierung "Date" aus SQL in PHP mit str_to_date()/date_format()

Davicito

Erfahrenes Mitglied
Hallo,
ich hab ein Problem mit der Datumsumformatierung 0000-00-00 in SQL von Datensatzausgaben einer Tabelle, in PHP.

Folgender Sachverhalt. Wenn ich ein Datum in der Form 00.00.0000 eingebe bzw. 0.0.00, mit str_to_date(), so wird das ja in einer SQL-Abfrage realisiert und mit mysql_query() in die Datenbank geschoben und im festgelegten Format 0000-00-00 richtig abgespeichert. Das funktioniert auch prima!

Zwei Beispiele mit Insert und Update
PHP:
...
       mysql_query("INSERT INTO 
						mitarbeiter 
				          SET 
						Anrede_ID='".$_POST["anr"]."', 
						Vorname='".$_POST["vn"]."', 	
						Nachname='".$_POST["nn"]."',
						Straße='".$_POST["str"]."',	
						PLZ='".$_POST["plz"]."',
					        Ort='".$_POST["ort"]."',
						Telefon='".$_POST["tel"]."',
						Handy='".$_POST["mobi"]."',
						Email='".$_POST["mail"]."',
						Geburtsdatum = str_to_date('".$_POST['geb']."','%d.%m.%Y')
			    ")OR DIE ("Fehler: ".mysql_error());
...

bzw. mit UPDATE
PHP:
...
        $update = " UPDATE 
					mitarbeiter AS ma, anrede AS anr										
				SET 
					ma.Anrede_ID = '".$_POST["anr"]."',
					ma.Vorname = '".$_POST["vn"]."',
					ma.Nachname = '".$_POST["nn"]."',
					ma.Straße = '".$_POST["str"]."',
					ma.PLZ = '".$_POST["plz"]."',
					ma.Ort = '".$_POST["ort"]."',
					ma.Telefon = '".$_POST["tel"]."',
					ma.Handy = '".$_POST["mobi"]."',
					ma.Email = '".$_POST["mail"]."',									
					ma.Geburtsdatum = str_to_date('".$_POST['geb']."','%d.%m.%Y')
				WHERE	 	
					ma.Anrede_ID = anr.Anrede_ID
				AND
					Vorname = \"".$_POST['vn']."\"
				AND
					Nachname = \"".$_POST['nn']."\"
				";										
								
	mysql_query($update) OR die("Error: $update <br>".mysql_error());
...

Nun habe ich aber die Schwierigkeit, dass ich alle Datensätze durch eine While-Schleife ausgebe und dabei soll das Datum nicht wie in der DB hinterlegt "0000-00-00" ausgegeben werden, sondern so "00.00.0000". Siehe folgenden Ansatz.

PHP:
...
      // SELECT-Abfrage für den Zugriff auf die einzelnen Datensätze durch die While-Iteration
      $res = mysql_query("SELECT 
						ma.*, 
						anr.* 
					FROM 
						Mitarbeiter AS ma,
						Anrede AS anr
					WHERE									
						ma.Anrede_ID = anr.AnredeID");

     // While-Iteration
     while($dsatz = mysql_fetch_assoc($res))
    {					
  	 echo "<tr>";
	 echo "<td>$if</td>";
	 echo "<td>". $dsatz["Anrede"] 		."</td>";
	 echo "<td>". $dsatz["Vorname"] 		."</td>";
	 echo "<td>". $dsatz["Nachname"]		."</td>";
	 echo "<td>". $dsatz["Straße"]		."</td>";
	 echo "<td>". $dsatz["PLZ"]			."</td>";
	 echo "<td>". $dsatz["Ort"]			."</td>";
	 echo "<td>". $dsatz["Telefon"]		."</td>";
	 echo "<td>". $dsatz["Handy"]		."</td>";
	 echo "<td>". $dsatz["Email"] 		."</td>";
	 echo "<td>". mysql_query("SELECT date_format('".$dsatz["Geburtsdatum"]."','%d.%m.%Y')")."</td>";
      //echo "<td>". mysql_query("SELECT str_to date('".$dsatz["Geburtsdatum"]."','%d.%m.%Y')")."</td>";				
      //echo "<td>". mysql_query(".SELECT str_to_date(sysdate(),'%d.%m.%Y')")."</td>";
         echo "</tr>";
	$if++;	
    }

Egal welche unteren Zeilen ich verwende, ich bekomme immer den Fehler:

Datenbankzugriffsfehler!
Unknown column 'anr.AnredeID' in 'where clause'

Wenn ich statt dessen "echo "<td>". $dsatz["Email"] ."</td>";" hinschreibe, werden alle Datensätze korrekt ausgegeben.
Nur ebend, dass das Datum in der Schreibweise: 0000-00-00 ausgegeben wird

Habt ihr irgend eine Idee?

Vielen Dank in Voraus.
 
Model das lieber mit php um, ist doch viel eifnacher ;) DateTime::createFromFormat()->format(d.m.Y) wäre da nen Ansatz.
 
Hi saftmeister,
ja das war ein dummer Fehler von mir. jetzt werden die Datensätze ausgegeben, jedoch wird in der Spalte Geburtsdatum ein Resource id #5 ausgegeben.

Hallo alxy, ich werd DateTime mal ausprobieren.
 
Hi saftmeister,
ja das war ein dummer Fehler von mir. jetzt werden die Datensätze ausgegeben, jedoch wird in der Spalte Geburtsdatum ein Resource id #5 ausgegeben.

Ja, das ist auch logisch. mysql_query() liefert einen Ergebnissatz zurück, den man erstmal mit mysql_fetch_xxx() in einen Datensatz umwandeln muss. Aber an dieser Stelle wäre es wirklich besser, direkt mit PHP zu arbeiten, statt das Ergebnis einer Abfrage noch mal an die Datenbank zu senden. Ich könnte dir hier erklären, wie man es innerhalb einer einzigen macht. Ändere den oberen SELECT-Query so ab:

PHP:
$res = mysql_query("SELECT 
                        ma.*, 
                        anr.*,
                        date_format(ma.Geburtsdatum,'%d.%m.%Y') as Geburtsdatum_formatiert
                    FROM 
                        Mitarbeiter AS ma,
                        Anrede AS anr
                    WHERE                                    
                        ma.Anrede_ID = anr.Anrede_ID");

Danach passt du die Ausgabe an:

PHP:
     echo "<td>". $dsatz["Email"]         ."</td>";
     echo "<td>". $dsatz["Geburtsdatum_formatiert"] . "</td>";
 
Morgen saftmeister,
das ist ja geil... das funktioniert gut. Ich wäre nie im Leben auf solch einen SELECT-Ausdruck gekommen. Hab echt schon viel ausprobiert. Werde das gleich auch noch mal mit der PHP-Anweisung von alxy versuchen.

Also vielen lieben Dank******
 
Wenn an gerne in beiden System mit Date rechnet (0000-00-00 in MySQL und Timestamp in PHP)
http://wiki.yaslaw.info/wikka/PhpMySqlDate

Konvertieren in PHP
PHP:
$mysqldate = date( 'Y-m-d H:i:s', $phpdate );
$phpdate = strtotime( $mysqldate );


Oder direkt in MySQL mit der
SQL:
UPDATE mytable SET datetimefield = FROM_UNIXTIME($phpdate);
SELECT UNIX_TIMESTAMP(datetimefield) FROM mytable;
 
Zurück