Avatar billede php_programmoer Nybegynder
28. januar 2006 - 20:34 Der 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!
Avatar billede challenge Praktikant
28. januar 2006 - 22:26 #1
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());


Var det forståeligt?
Avatar billede challenge Praktikant
28. januar 2006 - 22:27 #2
Du henter altså det nuværende antal fejlforsøg lægger 1 til og indsætter det så igen i databasen

Og INSERT skulle self. være en UPDATE
Avatar billede challenge Praktikant
28. januar 2006 - 22:28 #3
mysql_query("UPDATE table SET errorlogin = '$fejl'") or die(mysql_error());
Avatar billede nielle Nybegynder
28. januar 2006 - 22:32 #4
Man kan også bruge SQL's egen addition:

mysql_query("UPDATE table SET errorlogin = errorlogin+1") or die(mysql_error());
Avatar billede challenge Praktikant
28. januar 2006 - 22:35 #5
Hmm... vidste jeg ikke man kunne - Man lærer sku noget hver dag!
Avatar billede nielle Nybegynder
28. januar 2006 - 23:03 #6
Det er bl.a. derfor jeg elsker Eksperten :^)
Avatar billede php_programmoer Nybegynder
29. januar 2006 - 11:40 #7
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?

Her er hele check.php:

--------------------------------------------------------------------

<?php
session_start();

$_POST['kodeord'] = md5($_POST['kodeord']);

include "mysql.php";

$user = $_POST['brugernavn'];
$pass = $_POST['kodeord'];

$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

$brugernavn = $_POST['brugernavn'];
$kodeord = $_POST['kodeord'];
$id = $row['id'];

$_SESSION['brugernavn'] = $brugernavn;
$_SESSION['kodeord'] = md5($kodeord);
$_SESSION['brugerid'] = $id;

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

header("location: login.php");
exit;
}
}

}
?>
Avatar billede challenge Praktikant
29. januar 2006 - 16:56 #8
Tror det er fordi du som det første sender brugeren tilbage til login.php - Prøv at ændre på det...
Avatar billede php_programmoer Nybegynder
29. januar 2006 - 18:08 #9
nope desværre, det virker ikke..
Avatar billede gentoo2005 Nybegynder
29. januar 2006 - 18:11 #10
Det er utrolig nemt at lave.. jeres koder er alt for kompliceret, men istedet skal php_programmor lige svare på dette her:

Hvordan vil du unbanne folk efter 1 time ? Og skal det kun være 3 forsøg i træk, eller 3 forsøg i alt ?
Avatar billede php_programmoer Nybegynder
29. januar 2006 - 19:00 #11
de unbanner sig selv ved at logge korrekt ind efter den time er gået

og jeg mener 3 forsøg i træk, for som der står lige oven over ^ så bliver feltet som tæller antal fejl login nulstillet ved et rigtigt login.
Avatar billede challenge Praktikant
29. januar 2006 - 19:21 #12
gentoo2005,

Kan du så ikke lige forklare hvordan?

Kan forresten ikke se hvorfor "vores" koder er komplicerede - Forklar lige hvorfor... :)
Avatar billede php_programmoer Nybegynder
01. februar 2006 - 19:36 #13
hvaa, tror det er på tide at lukke spørgsmålet, jeg fandt selv ud af svaret. Fik hjælp til at lave hele dokumentet om. Nu er det meget meget bedre.

Læg lige et svar challenge
Avatar billede challenge Praktikant
03. februar 2006 - 23:50 #14
Skal de ikke deles med Nielle? :)
Avatar billede nielle Nybegynder
04. februar 2006 - 09:47 #15
Nej tak til point på denne her - så vildt stort var mit bidrag nu heller ikke. Men tak for tanken. :^)
Avatar billede php_programmoer Nybegynder
04. februar 2006 - 12:52 #16
:-)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

Seneste spørgsmål Seneste aktivitet
I går 21:00 Libre Office Impress Af Frank i Andre styresystemer
I går 11:47 VB script Af Jenshentze i Word
I går 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel