Avatar billede hrole Mester
08. april 2010 - 19:55 Der er 8 kommentarer og
1 løsning

Logind som fjernes ved tre fejlogind inden for 24 timer

Hej,

Tanken er at der ved tre forsøgte fejllogind fra samme ip indenfor de sidste 24 timer fjernes logindboksen.

Tabellen logind har to felter IP og timestamp.

Mit problemer er at jeg ikke kan gennemskue hvordan jeg skriver query'en. Men noget i denne retning:

$query = "";
$result = mysqli_query($dbc, $query);
$antal = mysqli_num_rows($result);

if($antal < 3) {
// vis logindboks
} else {
echo "der er spærret for logind fra din ip de næste 24 timer";
}

Kan i hjælpe med queryen?
Avatar billede public2 Nybegynder
08. april 2010 - 23:03 #1
Hvad med cookies i stedet for?

<?php
if($login_incorrect){
    if(isset($_COOKIE['login'])){
          if($_COOKIE['login'] < 3){
              $attempts = $_COOKIE['login'] + 1;
              setcookie('login', $attempts, time()+3600);
          } else{
              echo 'Prøv igen i morgen';
          }
    } else{
          setcookie('login', 1, time()+3600);
    }
}
?>

Jeg skal ikke tage æren for scriptet, er et jeg selv har fundet for noget tid siden og bruger. Har bare rettet tiden til (3600) så de passer til dine behov.
Avatar billede hrole Mester
08. april 2010 - 23:25 #2
tak for forslaget, men jeg vil gerne holde mig til database-metoden, da jeg samtidig får registreret ip-adresserne.
Avatar billede arne_v Ekspert
10. april 2010 - 02:17 #3
SELECT COUNT(tid) AS antal FROM fejllogin WHERE id = ? AND tid > DATE_SUB(NOW(), INTERVAL 24 HOUR)

og så teste på antal
Avatar billede hrole Mester
10. april 2010 - 10:26 #4
tak for forslaget, men den tjekker ikke på ip-adresse.
Avatar billede arne_v Ekspert
10. april 2010 - 13:47 #5
WHERE id = ?

skulle teste på IP adressen. For at forvirre har jeg kaldt felterne noget andet.
Avatar billede hrole Mester
10. april 2010 - 18:54 #6
Det burde jeg selv have set, men hvordan omskriver jeg query når timestamp er i unix timestamp (time()).
Avatar billede arne_v Ekspert
11. april 2010 - 00:13 #7
Hvis kolonne typen i MySQL er TIMESTAMP, saa skulle den vaere klar.

Hvis kolonne typen i MySQL er INTEGER, saa

SELECT COUNT(tid) AS antal FROM fejllogin WHERE id = ? AND FROM_UNIXTIME(tid) > DATE_SUB(NOW(), INTERVAL 24 HOUR)
Avatar billede hrole Mester
12. april 2010 - 17:46 #8
Så fik jeg det endelig til at fungere.

Smid svar arne_v!
Avatar billede arne_v Ekspert
12. april 2010 - 17:59 #9
svar
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
Computerworld tilbyder specialiserede kurser i database-management

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