Ankündigung

Einklappen
Keine Ankündigung bisher.

Login Script -> Wie oft eingeloggt?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Nokes
    hat ein Thema erstellt Login Script -> Wie oft eingeloggt?.

    Login Script -> Wie oft eingeloggt?

    Hallo

    Ich habe ein Login Script. Dazu finde ich nichts in Google oder sonstige Foren.
    Nun möchte ich ne kleine Tabelle machen wo steht wie oft sich ein User eingeloggt hat.

    Die Tabellen Namen:
    -username
    -logincount
    -passwort

    Hier Login Code:

    PHP-Code:
    <?php
    $dbHost 
    "localhost";
    $dbUser "xxxx";
    $dbPass "xxxx";
    $dbName "xxxx";
    $connect = @mysql_connect($dbHost$dbUser$dbPass) or die("Konnte keine Verbindung zum Datenbankserver aufbauen!");
    $selectDB = @mysql_select_db($dbName$connect) or die("Konnte die Datenbank <b>$dbName</b> nicht auswählen!");

    $username $_POST["username"];
    $passwort md5($_POST["password"]);

    $abfrage "SELECT username, passwort FROM login WHERE username LIKE '$username' LIMIT 1";
    $ergebnis mysql_query($abfrage);
    $row mysql_fetch_object($ergebnis);

    if(
    $row->passwort == $passwort)
        {
        
    $_SESSION["username"] = $username;
        echo 
    "Willkommen <b>$username</b>, dein Login war erfolgreich.";
        echo 
    "<br />Du kannst jetzt auf alle Seiten zugreifen.<br /><br />";
        
        }
    else
        {
        echo 
    "Benutzername und/oder Passwort waren falsch. <a href=\"/login.php\">Login</a>";
        }

    ?>
    Wie muss ich danun ändern, oder was hinzu fügen damit in der Datenbank ein Wert immer
    einen höher gezählt wird?

  • BlackScorp
    antwortet
    ja das stimmt schon.. habe nicht drauf geachtet.. aber die problemstellung bezog sich ja nicht auf das richtige escapen. sondern um zu verstehen dass man entweder bestimmte datensätze aus der datenbank ausliest oder in die datenbank einträgt. also benötigt man 2 querys, mit einer kommt man da nicht weiter, und dass Update query eigentlich nichts zurückgibt außer höchstens ob die query erfolgreich ausgeführt wurde...

    Einen Kommentar schreiben:


  • Wolla
    antwortet
    Zitat von BlackScorp Beitrag anzeigen
    schau dir die erste zeile an $username = mysql_real_escape_string($_POST["username"]); also wird $username escaped
    Das ist sinnbefreit. Wenn du $username im Script weiterbenutzt, dann hast du den zermatschten String. Richtig ist z.B:

    PHP-Code:
    $erg sprintf("SELECT username,countlog FROM users WHERE username = '%s'",mysql_real_escape_string($username); 
    oder

    PHP-Code:
    $erg "SELECT username,countlog FROM users WHERE username = '"  mysql_real_escape_string($username) . "'"
    oder gleich so:

    PHP-Code:
    $erg "SELECT
                username,
                countlog 
            FROM 
                users 
            WHERE 
                username = '"  
    mysql_real_escape_string($username) . "'"

    Einen Kommentar schreiben:


  • BlackScorp
    antwortet
    schau dir die erste zeile an $username = mysql_real_escape_string($_POST["username"]); also wird $username escaped

    Einen Kommentar schreiben:


  • ByStones
    antwortet
    PHP-Code:
    sprintf("SELECT username,countlog FROM users WHERE username = '%s'",$username 
    Warum benutzt Ihr sprintf ? Welchen Vorteil hat das, denn die Parameter werden ja nicht escaped, oder ?

    Grüße

    Einen Kommentar schreiben:


  • PhillKill12
    antwortet
    warum überhaupt eine separate Tabelle? Mach doch ne Spalte anzahl_logins in die Usertabelle rein.
    genau, und der proffesionalitäts habler einfach noch eine spalte mit last_login ... wenn wir gleich bei deinem login sind ... und evtl. die anzahl der fehlgeschlagenen logins, wenn die > 5 dann kann man sich z.b. 5 min net einloggen, wenn danach noch immer unkorrektes passwort dann 10 min und dann sperre ... nur so nebenbei ^^

    Einen Kommentar schreiben:


  • Wolla
    antwortet
    warum überhaupt eine separate Tabelle? Mach doch ne Spalte anzahl_logins in die Usertabelle rein.

    Einen Kommentar schreiben:


  • BlackScorp
    antwortet
    PHP-Code:
    $username mysql_real_escape_string($_POST['username']);

    //gemischte SQL anweisung.
    $sql sprintf("UPDATE users 
    SET countlog = countlog+1
    WHERE id = (SELECT id 
                     FROM users 
                     WHERE username = '%s') "
    ,
    $username);
    //SQL anweisung ausführen
    mysql_query($sql) or die(mysql_error());


    //Sql anweisung um alle daten , die zu dem benutzer gehören, auszulesen
    $sql mysql_query(sprintf("SELECT username,countlog FROM users WHERE username = '%s'",$username)) or die(mysql_error());
    while(
    $row mysql_fetch_object($sql)){
    //ausgabe
     
    echo "Hallo ".$row->username." du hast dich bereits ".$row->countlog." eingelogt";

    natürlich muss diese prozedur nach einem erfolgreichen login, erfolgen.

    Einen Kommentar schreiben:


  • ByStones
    antwortet
    PHP-Code:
    $count "UPDATE logcount SET countlog = countlog + 1 WHERE username = '"$hierDenUsernamenHin."'"
    Ich weiß nicht wie deine logcount-Tabelle aussieht, aber theoretisch könnte es dann so funktionieren.
    Ein UPDATE-Statement gibt keinen Datensatz zurück, das musste du extra holen.

    Ähm die Reihenfolge in der du das machen solltest:

    1. Einhaben einholen
    2. Nachsehen ob der Login korrekt war
    2a. Wenn ja, dann Anzahl von Logins +1 und in SESSION die Werte ablegen, weiterleiten
    2b. Wenn nein, Fehler ausgeben und das Formular anzeigen

    Einen Kommentar schreiben:


  • wolf29
    antwortet
    Schau mal hier, wie du mit mysql_fetch_object überhaupt korrekt arbeitest:

    PHP: mysql_fetch_object - Manual

    Wolf29

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    @Wolf29
    Danke für den Tipp. Ich habe das über einen Generator gemacht, darum ist das automatisch mit drinne.

    @ByStones & @xm22
    Danke für den Tipp mit LIKE. Habs geändert.

    ------
    So wie ich es verstanden habe, habe ich das nun mal gemacht, klappt aber ,wie es auch sein soll beim Anfänger,
    nicht. Hier ist das was ich zusammen gecodet habe:

    PHP-Code:
    # Log Counter

    $username $_POST["username"];
    $countlog $_POST["countlog"];

    $count "UPDATE logcount SET countlog = countlog + 1 WHERE username = ''";
    $answer mysql_query($count);
    $row mysql_fetch_object($answer);

    if(
    $row->username == $username)
        {
        
    $_SESSION["username"] = $username;
        echo 
    "Du hast dich bereits ".$countlog." eingeloggt. ";
        echo 
    "<br />Du kannst jetzt auf alle Seiten zugreifen.<br /><br />";
        
        } 
    Folgende Fehlermeldung kommt raus:
    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /users/....
    Ist das überhaupt richtig so?

    Einen Kommentar schreiben:


  • wolf29
    antwortet
    ...und warum benutzt Du das @ Zeichen? Nimm das mal raus, sonst unterdrückst Du mögliche Fehler, die Dir momentan noch nicht auffallen.

    Wolf29

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Nimm statt dem LIKE den Gleichheits-Operator. LIKE brauchst Du nur, wenn Du, wie der Name impliziert, einen ähnlichen String vergleichen willst.

    Einen Kommentar schreiben:


  • ByStones
    antwortet
    Hallo,
    erstmal SQL-Injection-Gefahr.
    Warum nimmst du "username LIKE " und nicht "username=" ?

    Wie muss ich danun ändern, oder was hinzu fügen damit in der Datenbank ein Wert immer
    einen höher gezählt wird?
    1. Meinst du eine Auto-Increasement-Spalte ?

    2. Nachher einfach mit einem
    Code:
    UPDATE login SET anzahl_eingeloggt = anzahl_eingeloggt + 1 WHERE username = ''
    den Wert erhöhen.

    Grüße

    Einen Kommentar schreiben:

Lädt...
X