PHP + [SQL]: Datum auswerten und ausgeben:

el dios

Ensign
Registriert
Mai 2008
Beiträge
162
Hallo zusammen,

ich beschäftige mich derzeit mit der Portierung einer Website auf PHP und MySQL.
Dabei wollte ich im nächsten Schritt die Termine, welche 2014 anstehen, in eine Datenbank schreiben und diese später automatisch ausgeben lassen.

Die Datenbank steht soweit, nur bereitet mir die Ausgabe noch Probleme.
Ziel ist eine Tabelle mit zwei Spalten in der links die Daten stehen und rechts die Bezeichnungen.

Dazu benutze ich das folgende Skript:
PHP:
$today = date("d.m.Y",time());
$query = "SELECT * FROM termine ORDER BY start_date";
$result = mysql_query($query);
while ($line = mysql_fetch_array($result)) { 
echo "<tr>";
	if ($now <= $line[end_date]) {
		echo "<td>".$line[start_date];
		if ($line[start_date] != $line[end_date]) {
			echo " - ".$line[end_date];
		}
		echo "</td><td>".$line[name]."</td>";
	} else {
		echo "<td><s>".$line[start_date];
		if ($line[start_date] != $line[end_date]) {
			echo " - ".$line[end_date];
		}
		echo "</s></td><td><s>".$line[name]."</s></td>";
	}
echo "</tr>";
$test = $line[start_date];
}
echo "</table>";

Jetzt kommt die Probleme:
Die Daten aus $line[start_date] stehen dort im falschen Format (Bsp.: 2014-07-12 anstatt des gewünschten 12.07.2014).
Weiterhin vermute ich, dass meine Abfrage "if ($now <= $line[end_date])" dank unterschiedlicher Formatierungen nicht gelingt.
Die Daten werden dabei in der Datenbank als "DATE" gespeichert (was laut Internetrecherche das Problem sein sollte) und können ohne weiteres nicht formatiert werden.

Habe ein paar Sachen getestet, doch leider will es nicht funktionieren.
Es wäre super, wenn ihr mir nun weiterhelfen könntet :)

Danke schon mal im Voraus!

Gruß eL dios
 
strtotime ist dein Freund (gibt einen Timestamp des übergebenen Datums zurück, der dann mit z.B. date() weiter verarbeitet werden kann)
z.B.
Code:
date("d.m.Y", strtotime("2014-07-12"));
 
Die Daten werden dabei in der Datenbank als "DATE" gespeichert (was laut Internetrecherche das Problem sein sollte)
Schau dir mal die MySQL Funktion "date_format()" an. In das Select eingebaut, bekommst du das Datum dann direkt in deinem gewünschten Format zurückgeliefert. Gleiches sollte mit PHP Bordmitteln ebenfalls ohne große Probleme möglich sein.
 
Kannst du Datum/Uhrzeit nicht in Unix Timestamp umwandeln? Ist doch deutlich hübscher zu verarbeiten.

Ansonsten:
1.) Wenn du keine Events hast, hast du beim aktuellen Konstrukt evtl. eine <table> ohne <tr>. ich glaube, das ist nicht valide.
2.) Die prozedurale Notation mit mysql_query ist deutlich veraltet und krankt an so mancher Sicherheitslücke. Arbeite lieber direkt mit PDO's.
3.) Semantisch sinnvoller wäre, statt einer Tabelle, meiner Meinung nach eher eine Liste. Tabellen wären gut für eine Kalender-Ansicht, aber wenn du einfach nur zukünftige Events auflistest, ist <table> falsch. Außerdem vermisse ich da den exzessiven Gebrauch von <time>, dafür isses da.
 
Danke für die schnellen Antworten. Habe nun rumbalottes Antwort eingebaut und es funktioniert ;)

Nun aber an Daarons Antwort:
1.) Ist ein theoretisch vollkommen richtig, doch in meinem Fall uninteressant, da es immer Events geben wird, die extrem früh feststehen.
2.) PDO sagt mir bisher gar nichts (bin neu im PHP-Gebiet) und kannte aus Tutorials nur diese Vorgehensweise, werde mir das mal angucken.
3.) Damit hast du vollkommen recht, doch finde ich die bündige Ausrichtung von Datum UND Bezeichnung sehr ansprechend. Gibt es da auch eine Möglichkeit in List-Elementen quasi einen Tabstopp einzubauen? Insbesondere da manchmal nur ein Datum angegeben wird, sollte es nicht hin und her springen.
 
Die meisten PHP-Tutorials verbreiten noch diese miese alte prozedurale Herangehensweise, und keines weist auf die eklatanten Schwächen hin. Oftmals wird da nicht einmal mit mysql_real_escape_string() gearbeitet sonden schööööön der GET-Parameter direkt in den Query eingebaut...

Was die Ausrichtung angeht: <li> ist ein Blockelement. Da kannst du natürlich jedes andere (legitime) Block- oder Inlineelement rein packen, die du wiederum nach deinem Gusto stylen kannst.
Lös es mit CSS statt mit Tabellen. Das macht es dir später mal viel leichter, wenn du ein Display ansprechen willst, das zu schmal für deine Tabelle ist. Denk nur an ne Smart Watch...
 
Zurück
Oben