kostenloser Webspace werbefrei: lima-city


Datum beim Login speichern

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    manu-php

    manu-php hat kostenlosen Webspace.

    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>

    :sound:
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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 ;))
  4. Autor dieses Themas

    manu-php

    manu-php hat kostenlosen Webspace.

    Danke.:biggrin:

    Wo muss ich das einbauen.? :angel:

    Wie heiß die Datenbank Tabelle.? :angel:

  5. 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:
    if($control != 0) {
    $_SESSION["username"] = $user;
    $verhalten = 1;
    Hängst du das an:
    $jetzt = time();
    mysql_query("UPDATE login SET last_login = $jetzt WHERE user = '$user';");


    Und hier:
    if($verhalten == 1) {
    ?>
    Du hast dich richtig eingeloggt und wirst nun weitergeleitet....
    <?php
    Hängst du das an:
    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
  6. Autor dieses Themas

    manu-php

    manu-php hat kostenlosen Webspace.

  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!