Datum aus Datenbank formatieren
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
april
code
dank
date
datenbank
datensatz
datum
euro
feld
format
garnichts
http
login
set
setzen
spalte
uhr
update
url
versucht code
-
Hallo,
auf meine Webseite soll für jedes Profil das Datum des Letzten Logins gespeichert werden.
Also loggt man sich ein wir das aktuelle Datum so in die Datenbank geschrieben:
$username = $_POST['username']; mysql_query("UPDATE login SET letzterlogin = NOW() WHERE name = '$username' ");
Das Feld letzterlogin ist ein Feld vom Typ DATETIME
Bis hier funktioniert das auch ganz gut, es wird zB. 2011-04-23 15:18:54 in die Spalte eingetragen.
Dann will ich das ganze Formatiert ausgeben. Es sollte so dargestellt werden: 23. April 2011 15:18 Uhr
Bis jetzt geb ich das Datum so aus:
$sql = "SELECT * FROM login WHERE name='$username'"; $abfrageergebnis = mysql_query( $sql); while ($datensatz = mysql_fetch_array( $abfrageergebnis )) { $mitgliedsletzterlogin=htmlspecialchars( $datensatz['letzterlogin'] ); } echo $mitgliedsletzterlogin;
Hab etwas gesucht und bin auf date() gestoßen. Ganze Monatsnamen kann man aber nur mit strftime() ausgeben also hab ichs so versucht:
echo strftime("%d. %B %Y %R", $mitgliedsletzterlogin);
allerdings wird der 01. January 1970 01:33 angezeigt.
Ich vermute es liegt an der Variable $mitgliedsletzterlogin. Aber ich weis nicht wie ich es anders schreiben soll dass er den Inhalt der Variable in das Format umwandeln soll ? Die Beispiele die ich für strftime() gefunden hab hatten alle keine Variable :D
Ich hoffe ihr könnt mir helfen
Danke
LG Pami
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Statt das mit PHP umzumodeln würde ich das Datum gleich formatiert abfragen (siehe MySQL-Doku zu DATE_FORMAT).
-
benutz doch statt now(), die php funktion time() und speicher diese in der Datenbank.
dann bekommst du einen Timestamp, mithilfe dessen kannst du dann mit der date() funktion das datum ermitteln...
z.B.
$mitgliedsletzterlogin = //timestamp aus der DB holen echo date('d.m.Y', $mitgliedsletzterlogin)
...also so würde ich es zumindestens machen
ps: dazu aber das Tabellen feld von DATETIME auf z.b. INT umstellen -
okay habs jetzt mal so :
$sql = "SELECT DATE_FORMAT('letzterlogin', '%e %M %Y') FROM login WHERE name='$username'"; $abfrageergebnis = mysql_query( $sql); while ($datensatz = mysql_fetch_array( $abfrageergebnis )) { $mitgliedsletzterlogin=htmlspecialchars( $datensatz['letzterlogin'] ); } echo $mitgliedsletzterlogin;
aber jetzt gibt er garnichts mehr aus. Die Variable ist "leer". Stimmt das denn so?
das mit dem time() hab ich auch versucht :
mysql_query("UPDATE login SET letzterlogin = time() WHERE name = '$username' ");
die Spalte letzterlogin ist jetzt INT
allerdings wird dann garnichts gespeichert... -
vesuchmal eine variable vorher zu definieren also in etwa so...
$zeit = time() mysql_query("UPDATE login SET letzterlogin = '$zeit' WHERE name = '$username' ");
-
srftime kann mittels setlocale übersetzt werden:
setlocale(LC_TIME, "de_DE");
oder
setlocale(LC_TIME, "de_DE@euro", "de_DE", "deu_deu");
Rein über MySQL müsstest du das vorran setzen:
mysql_query("SET lc_time_names = 'de_DE'");
Alternativ könnte man die Ausgabe auch mittels SELECT REPLACE vorformatieren, das halte ich aber für inperformant. -
also ich habs mal so umgeschrieben:
$zeit = time() mysql_query("UPDATE login SET letzterlogin = '$zeit' WHERE name = '$username' ");
jetzt steht in der DB bei letzter login 1303574094 ?!
Das mit dem Übersetzen probier ich sobald ichs geschafft habe, dass das richtige Datum dransteht danke :) -
fp08 schrieb:
jetzt steht in der DB bei letzter login 1303574094 ?!
ja das ist der Timestamp (vergangene sekunden vom 1.1.1970 , glaube ich )
denn kannst du wie oben schon geschrieben mit date() umwandeln z.b. date('d.m.Y', $zeit)
und $zeit ist hier bei der wert aus der datenbank -
aaaaaaaaaah okay also jetzt zeigts schonmal 23. April 2011 18:14 an :) hab den Wochentag noch davor damit man erkennt obs englisch oder deutsch ist.
Leider englisch ..
mit den 3 Codes von fabo ändert sich daran nichts..
vllt liegt es an dem hier:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
wegen dem EN ? Das ist bei mir im head..
-
Es wäre gut möglich, dass setlocale nicht funktioniert.
Das lässt sich so ganz gut rausfinden:
<?php if (setlocale(LC_TIME, "de_DE@euro", "de_DE", "deu_deu") === false) { echo "setlocale konnte nicht angewandt werden."; } ?>
In diesem Falle bliebe dir nichts anderes übrig, als die Ausgabe mittels PHP zu formatieren.
Die Auswahl der Sprachen hängt vom verwendeten Server ab. Auf meinem Server erzeugt
<?php setlocale(LC_TIME, 'de_DE'); echo strftime("%A, %d. %B %Y - %R Uhr"); ?>
beispielsweise
Samstag, 23. April 2011 - 18:41 Uhr
Es wäre nicht auszuschließen, dass auf Lima-City die locales nicht definiert sind.
Beitrag zuletzt geändert: 23.4.2011 18:42:52 von fabo -
hmm er gibt aus "setlocale konnte nicht angewandt werden."
schade ^^
habs jetzt mit Hilfe von Arrays gemacht. Aufwändiger aber geht :)
Danke danke :) -
Du könntest Lima auch vorschlagen, Locales zu setzen ;) Ist nix großartiges und ich schätze, dass es hier einige Leute gibt, denen das lieber ist, als die prinzipiell unnötige Veerwendung von Arrays.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage