Datum beim Login speichern
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
befehl
code
dank
date
datenbank
eigentlichen thema
ergebnis
letzter login
log
login
page
set
standard
tabelle
url
zahl
zeile
zeitstempel
zeitzone
-
Hallo ich bin neu in Sachen PHP und MySQL,
ich habe folgendes Problem: Ich habe folgendes Login Script für meine HP möchte gern beim anmelden die Zeit in meiner MySQL DB sichern und sie beim nächsten mal ausgeben damit derjenige weiß wann er sich zuletzt angemeldet hat. Könntet ihr mir einen Rat geben wie ich das mache?
PHP-Code:
<?php session_start(); $verhalten = 0; if(!isset($_SESSION["username"]) and !isset($_GET["page"])) { $verhalten = 0; } if($_GET["page"] == "log") { /* $user = $_POST["user"]; $passwort = $_POST["passwort"]; */ $user = strtolower($_POST["user"]); $passwort = md5($_POST["passwort"]); $verbindung = mysql_connect("localhost", "meinewelt", "Passwort") or die ("Fehler im System"); mysql_select_db("manuel") or die ("Verbidung zur Datenbank war nicht möglich..."); $control = 0; $abfrage = "SELECT * FROM login WHERE user = '$user' AND passwort = '$passwort'"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { $control++; } if($control != 0) { $_SESSION["username"] = $user; $verhalten = 1; } else { $verhalten = 2; } } ?> <html> <head> <title>Login</title> <?php if($verhalten == 1) { ?> <meta http-equiv="refresh" content="3; URL=seite2.php" /> <?php } ?> </head> <body> <?php if($verhalten == 0) { ?> Bitte logge dich ein:<br /> <form method="post" action="index.php?page=log"> User:<input type="text" name="user" /><br /> Passwort:<input type="password" name="passwort" /><br /> <input type="submit" value="Einloggen" /> </form> <p><a href="register.php">Noch nicht dabei? Jetzt registrieren...</a></p> <?php } if($verhalten == 1) { ?> Du hast dich richtig eingeloggt und wirst nun weitergeleitet.... <?php } if($verhalten == 2) { ?> Du hast dich nicht richtig eingeloggt, <a href="index.php">zurück</a>. <?php } ?> </body> </html>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo,
bevor ich zum eigentlichen Thema komme muss ich erst ein paar sachen über deinen Code los werden:
Zeile 3 - 7:
$verhalten = 0; if(!isset($_SESSION["username"]) and !isset($_GET["page"])) { $verhalten = 0; }
Du weist $verhalten den Wert 0 zu und machst dann eine if-Abfrage, nur um $verhalten wieder den Wert 0 zuzuweisen. Entweder ist die if-Abfrage überflüssig, oder einer der beiden $verhalten-Werte ist falsch (ich tippe auf letzteres).
Zeile 3 - 36:
$verhalten = 0; [...] if($control != 0) { $_SESSION["username"] = $user; $verhalten = 1; } else { $verhalten = 2; }
Du weist $verhalten den Wert 0 zu. Wo ich mein [...] gesetzt hab, wird nicht mehr auf $verhalten zugegriffen. Anschließend weist du entweder den Wert 1 oder 2 zu. 0 wird also nie verwendet. Ich vermute, dass hier noch eine Abfrage in der Art $_GET["page"] == "log" hin muss.
Zeile 25-28:
while($row = mysql_fetch_object($ergebnis)) { $control++; }
Das geht auch einfacher mit
$control = mysql_num_rows($ergebnis);
Zeile 32:
$_SESSION["username"] = $user;
Du erleichterst dir spätere Abfragen deutlich, wenn du statt des Usernamens eine UserID in der Session hinterlegst.
Jetzt zum eigentlichen Thema:
Ein Datum wird im Computer normalerweise als "Vergangene Zeit seit Zeitpunkt X" dargestellt. In PHP z.B. "Vergangene Sekunden seit dem 1. Januar 1970 um 00:00:00 Uhr". Diese Zahl nennt man einen Zeitstempel. Da es sich hierbei um eine Zahl handelt, kannst du diese dann Problemlos in der Datenbank ablegen.
Den aktuellen Zeitstempel bekommst du mit dem PHP-Befehl time()
Das abspeichern des letzten Logins sieht also so aus:
if (login erfolgreich) { $jetzt = time(); mysql_query("UPDATE login SET lastlogin = $jetzt WHERE user='$user';"); }
Zum Anzeigen des letzten Logins musst du natürlich noch den Zeitstempel in ein für Menschen lesbares Format überführen. Das geht mit dem date()-Befehl.
Das sieht dann so aus:
$lesbaresDatum = date("d.M.Y H:i:s", $zeitstempel); echo "Letzter Login: $lesbaresDatum";
Eine Tabelle, was man in den ersten Parameter von date() alles reinschreiben kann findest du hier: http://www.php.net/manual/de/function.date.php
Achtung: Die Lösung berücksichtigt keine Zeitzonen. Zeitzonen können ein ordentliches gefrickel sein und ich hab da grade keine Muse dazu, aber es finden sich zu dem Thema sicher schon adäquate Vorlagen im Internet.
Ich hoffe das hat dir soweit weitergeholfen (wenn nicht melde dich gern nochmal ;)) -
War ich wohl doch zu unkonkret. :-)
Bei der Datenbank hätte ich einfach zur Tabelle login die Spalte last_login hinzugefügt.
Anschließend würde ich das
$control = 0; $abfrage = "SELECT * FROM login WHERE user = '$user' AND passwort = '$passwort'"; $ergebnis = mysql_query($abfrage); while($row = mysql_fetch_object($ergebnis)) { $control++; }
in das ändern:
$control = 0; $abfrage = "SELECT * FROM login WHERE user = '$user' AND passwort = '$passwort'"; $ergebnis = mysql_query($abfrage); if (($row = mysql_fetch_object($ergebnis)) !== false) { $control = 1; $lastLogin = $row["last_login"]; }
Hier:
Hängst du das an:if($control != 0) { $_SESSION["username"] = $user; $verhalten = 1;
$jetzt = time(); mysql_query("UPDATE login SET last_login = $jetzt WHERE user = '$user';");
Und hier:
Hängst du das an:if($verhalten == 1) { ?> Du hast dich richtig eingeloggt und wirst nun weitergeleitet.... <?php
echo "Letzter Login: ".date("d.m.Y H:i:s", $lastLogin);
So sollte es gehen.
Was mir eben noch auffällt. Du solltest deiner HTML-Datei einen Doctype geben. Der Doctype sagt dem Browser, nach welchem Standard er deine Seite inerpretieren soll. Fehlt der, fällt der Browser in den sogenannten Quiks-Mode und fängt an deine Seite zu interpretieren, wie er gerade lustig ist (mit dem Resultat, dass sie in verschiedenen Browsern unterschiedlich aussieht). Der Doctype des aktuellen HTML-Standards HTML5 ist
<!DOCTYPE html>
Schreib das einfach an den Anfang deiner HTML-Seite um das zu verhinden - also vor den <html>-Tag, also so:
<!DOCTYPE html> <html>
Beitrag zuletzt geändert: 25.7.2013 23:30:56 von dustboy -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage