28. januar 2006 - 20:34Der er
15 kommentarer og 1 løsning
bruger må kun have 3 login forsøg - fejl i kode
Jeg vil gerne gøre sådan så en bruger kun har 3 login forsøg og derefter bliver brugeren bannet i en time (det er kun brugernavnet som skal bannes)
jeg havde tænkt mig at tilføje et felt i tabellen brugere som hedder errorlogin somt pr default er 0 og hver gang der er fejl i login bliver feltet opdateret med 1. Når det er oppe på 3 så skal brugernavnet bannes, så man ikke kan logge på med det brugernavn i en time.
Jeg har prøvet i ca. 2,5 time uden held. Nu er jeg desperat og søger en løsning herinde :)
Har valgt ikke at poste min kode herind, og slettet den istedet da jeg hellere vil have en ordenlig løsning herinde!
Hent det nuværende antal fejlforsøg - feks: $antal = mysql_query("SELECT * FROM table WHERE brugernavn = '".$_SESSION[brugernavn]."'") or die(mysql_error()); $antal_fetch = mysql_fetch_array($antal);
Og når du inserter næste gang han prøver så brug denne:
$fejl = $antal_fetch["errorlogin"]+1;
mysql_query("INSERT INTO table (errorlogin) VALUES ('$fejl')") or die(mysql_error());
Nu skal i høre, jeg har prøvet at tiføje det til min check.php som tjecker om brugernavn og kodeord er korrekte samt om man er banned.
Det virker dog ikke :(
Den indsætter alt i databasen og det virker fint, men man kan ikke logge på som rigtig bruger overhovedet. Den kommer ikke med nogen fejl, den stopper bare midt i det hele, og går ikke videre (jeg regner vel med at den stopper ved en exit; men hvor) og den anden fejl er at man ikke bare er banned i en time. Den ophøre aldrig.. Jeg har også gjort det på en meget klodset måde, nogle der kan hjælpe?
$query = mysql_query("SELECT bantid FROM brugere WHERE brugernavn = '$user'") or die(mysql_error()); while ($row=mysql_fetch_array($query)){ $bantid = $row['bantid']; }
$ialt = (date('H:i') - $bantid);
if ($ialt !== "1:00") {
$qu = mysql_query("SELECT errorlogin FROM brugere WHERE brugernavn = '$user'") or die(mysql_error()); while ($row=mysql_fetch_array($qu)){ $errorlogin = $row['errorlogin']; }
if ($errorlogin == '3') { echo "Du er banned!"; exit; }
$q = mysql_query("SELECT * FROM brugere WHERE brugernavn = '$user' AND kodeord = '$pass'") or die(mysql_error()); $resultat = mysql_num_rows($q);
if ($resultat !== 1) {
mysql_query("UPDATE brugere SET errorlogin = errorlogin + 1 WHERE brugernavn = '".$user."'") or die(mysql_error());
$tid = date('H:i');
mysql_query("UPDATE brugere SET bantid = '$tid' WHERE brugernavn = '".$user."'") or die(mysql_error());
header("location: login.php"); exit; }
}else{
//Tjekker om både brugernavn og kodeord er indtastet. if(empty($_POST['brugernavn']) || empty($_POST['kodeord'])) { //Sender brugeren tilbage til login.php ved brug af en header header("location: login.php"); exit; } //Hvis både brugernavn og kodeord er sat, går vi videre. else { $username = $_POST['brugernavn']; $password = $_POST['kodeord']; $query = mysql_query("SELECT * FROM brugere WHERE brugernavn='". $username ."'") or die(mysql_error()); //Tjekker om der er én række i databasen der har det indtasetde brugernavn //Dette gør dog, at flere brugere ikke må have samme brugernavn! if(mysql_num_rows($query) == '1') { //Laver databasekaldet om til et array $row = mysql_fetch_array($query); //Tjekker om kodeordet i databasen er lig med det indtastede kodeord if($row['kodeord'] == $_POST['kodeord']) { //Brugeren har indtastet rigtige oplysninger, nu skal han gemmes i sessioner
mysql_query("UPDATE brugere SET errorlogin = '0' WHERE brugernavn = '".$user."'") or die(mysql_error());
mysql_query("UPDATE brugere SET bantid = '' WHERE brugernavn = '".$user."'") or die(mysql_error());
//Derudover skal brugeren sendes til en hemlig side, hvorpå der bliver tjekket om vedkommene er logget ind header("location: logget_ind.php"); } else { //Brugernavnet fandtes ikke i databasen, derfor skal der udskrives en fejl. header("location: login.php"); exit; } } else { //Brugeren har skrevet et forkert brugernavn //Sender brugeren tilbage til login.php ved brug af en header
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.