Zähler für Login

Babangida

Grünschnabel
Hallo,

ich habe ein einfaches Login Skript den ich erweitern möchte.
Bei falsches Passwort bekommt man eine Meldung.
Ich hätte es gerne das beim 3.Versuch der Benutzer gespert wird.
Wie kann man so etwas erstellen

Vielen Dank


PHP:
<?php 
session_start(); 
$sid = session_id(); 

mysql_connect($db_host, $db_user, $db_password) or die 
("Es konnte keine Verbindung zur Datenbank hergestellt werden."); 
mysql_select_db($db) or die 
("Es konnte keine Verbindung zur Datenbank hergestellt werden."); 

$password = $_POST['pass']; 
$user = $_POST['name']; 

$query = "SELECT * FROM login WHERE Passwort = '$password' AND Name='$user'"; 
$result = mysql_query($query) or die(mysql_error()); 

while($row = mysql_fetch_array($result)){ 
  $checkuser = $row['Name']; 
  $checkpassword = $row['Passwort'];} 


  if($user == $checkuser && $password ==  $checkpassword) { 

     session_register("user","pass"); 

    echo "Du bist eingeloggt "; 
    } else { 
    echo "Eingabe ist falsch !"; 
  } 
?>
 
Sorry, nimms mir nicht übel, aber das halte ich für ziemlich Sinnlos soetwas zu machen. Wenn du einen User hast, der den anderen nicht leiden kann, dann gibt der für diesen Usernamen drei mal ein falsches Passwort ein und dann ist der User gesperrt, ziemlich blöd, oder?

Aber für den fall das du das trotzdem machen willst:

1. Lege eine neue Spalte mit loginfail oder so an, und dann baust du in diesen Teil:

PHP:
else { 
    echo "Eingabe ist falsch !"; 
  }

einfach nen Update Befehl rein, wo der dann eine variable hoch zählt.

Und dann musst du natürlich noch im oberen teil, wo du das Passwort auf die richtigkeit überprüfst auch noch die spalte loginfail überprüfen, also wenn >3 dann kann sich der user nicht mehr einloggen.....

Ist eigentlich nicht so der Hit denk ich.
 
Hallo,

ich halte es auch nicht für gerade Sinnvoll aber es wird für eine Hausaufgabe in der Schule verlangt.

Muss man das mit einer neuen Spalte in der Tabelle machen ?
Geht es nicht wenn man die drei versuche in einem Array zwischenspeichert
einfach nen Update Befehl rein, wo der dann eine variable hoch zählt.
Was ist ein Update befehl
 
Was ist ein Update befehl

er meint ein Update der Spalte Fail, also als Standart 0 reinsetzen und bei Fail der Wert um eins erhöhen. Zudem könntest du eine weitere Spalte in die DB einfüge, daß wenn fail = 3 , dann ein Timestamp gesetzt wird und diese beim nächsten anmelden überprüft wird, also wenn der Zeitunterschied kleiner wie vorgegeben ist, dann kann er sich nicht anmelden. Somit kannst du eine Sperre für eine bestimmte Zeit reinmachen.
 
Hallo,

ich habe folgendes versucht, bekomme aber die Fehlermeldung:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\appserv\www\login\check.php on line 22

Verstehe nichts mehr :( :( :confused: :confused: :confused: :sad:
PHP:
$password = $_POST['pass'];
$user = $_POST['name'];

$fehler = $user_daten['fehler'];
$fehler_neu = $fehler + 1;

$user = mysql_query("select * from login where Name='$user' and fehler < 3");
$user_daten = mysql_fetch_array($user);

while($row = mysql_fetch_array($user_daten)){
  $checkuser = $row['Name'];
  $checkpassword = $row['Passwort'];}

  if($user == $checkuser && $password ==  $checkpassword) {

    echo "Du wurdest erfolgreich eingeloggt ";

    } else {

      mysql_query("update login set fehler='$fehler_neu' where Name='$user'");

    echo "Falsches Passwort";
  }
?>
 
Naja... der Fehler tritt auf, weil Du
PHP:
 $user_daten = mysql_fetch_array($user); 

while($row = mysql_fetch_array($user_daten)){
doppelt gemoppelt hast.
Lass hier die erste Zeile weg, dann sollteste Du zumindest mal keine Fehlermeldung mehr bekommen.

Ausserdem ist folgendes Unsinn:
PHP:
$fehler = $user_daten['fehler']; 
$fehler_neu = $fehler + 1;
Das muss in die while-Schleife, da $user_daten am Anfang ja noch garnicht initialisiert ist.
Ausserdem sollte $fehler nicht generell erhöht werden.

Also mal so versuchen:
PHP:
<?
$password = $_POST['pass']; 
$user = $_POST['name']; 

$user = mysql_query("SELECT * FROM login WHERE Name='$user' AND Passwort = '$password'") or die(mysql_error()); 

while($row = mysql_fetch_array($user)){ 
  $checkuser = $row['Name']; 
  $checkpassword = $row['Passwort'];
  $anz_fehlversuche = $row['fehler'];} 

  if($user == $checkuser && $password ==  $checkpassword && $anz_fehlversuche < 3) { 

  	mysql_query("UPDATE login SET fehler=0 WHERE Name='$user'") or die(mysql_error());  //Fehlversuche wieder zurücksetzen (wie bei nem Handy-PIN o.ä.)
    echo "Du wurdest erfolgreich eingeloggt "; 

  } 
  else{ 
  	$fehler_neu = $anz_fehlversuche + 1;
    mysql_query("UPDATE login SET fehler=$fehler_neu WHERE Name='$checkuser'") or die(mysql_error()); 
    echo "Falsches Passwort"; 
  } 
?>
 
Zurück