2015-06-22 2 views
2

Я работаю в системе. Когда пользователь пытается войти в систему с неправильными учетными данными, попытка входа в систему будет храниться в базе данных. И после 3 попыток входа пользователь будет заблокирован с использованием IP-адреса и/или учетной записи пользователя.Заблокировать пользователя после 3 попыток входа в систему с использованием PHP

Но мои коды не работают, попытки входа в систему не хранятся в базе данных, и пользователь по-прежнему не заблокирован. Пожалуйста, помогите мне, как это исправить.

Спасибо!

Вот мой Войти скрипт

session_start(); 

//Get IP address 
    // code goes here 

$loginDate = date("Y-m-d H:i:s"); 
$Error =""; 
$successMessage =""; 

if(($_REQUEST['captcha'] == $_SESSION['vercode'])){ 
    //captcha code goes here 

if (isset($_POST['submit'])){ 
    if (!($_POST['username'] == "" && $_POST['password'] == "")){ 
     //submit form codes goes here 

     if (filter_var($username, FILTER_VALIDATE_INT)){ 
      $con=mysqli_connect("localhost","root","","test"); 
      $result = mysqli_query($con, "SELECT * FROM Users WHERE username='$username' AND password='$password'"); 
      $loginAttempt = mysqli_query($con, "SELECT * FROM Logs WHERE username='$username'"); 
      $data = mysqli_fetch_row($result); 

      if(count($data)>0){ 
       $_SESSION['login_user']=$username; 
       mysqli_query($con, "INSERT INTO `test`.`Logs`(`username`, `lastLogin`, `ipAddress`, `captcha`) 
          VALUES('$username', '$loginDate', '$ipaddress', '$captcha') 
          ON DUPLICATE KEY UPDATE `username` = '$username', `lastLogin` = '$loginDate'"); 
       header('Location: privatepage.php'); 
      } else { 
       $Error ="Invalid Contract Number or Password"; 
      } 
       mysqli_close($con); 
     }  else { 
       $Error ="Invalid Contract Number"; 
      } 

      if (($data['username'] == $username) || ($data['password'] == $password)) { 
       $loginAttempt = mysqli_query($con, "UPDATE Logs SET loginAttempt = 0 WHERE username='$username'"); 
       mysqli_close($con); 
      } else { 
       if ($loginAttempt >= 3) { 
        echo 'Sorry your account has been lock out. Please contact the administrator'; 
       } else { 
        mysqli_query($con, "UPDATE Logs SET loginAttempt = loginAttempt +1 WHERE username= '$username'"); 
       } 
      } 
    } 
    } 
} 

Я получил эту ошибку:

PHP Notice: Undefined variable: loginAttempt on line 62 
PHP Warning: mysqli_query(): Couldn't fetch mysqli on line 65 
+0

http: // webcheatsh Это помогает eet.com/php/blocking_system_access.php. – Gerton

+0

@ Gerton, я уже вижу эту статью, но ее широкую для новичка вроде меня – User014019

ответ

3

Ваш $ данные, содержащие только количество строк в MySQL

$data = mysqli_num_rows($result); 

Рассматривают с помощью mysqli_fetch_row

+0

я вижу, я обновляю его сейчас – User014019

1

вы не выбираете Logs данные таблицы зависят от пользователя. вы должны добавить эту строку перед $data['loginAttempt'] и изменить $data['loginAttempt'] к $LoginAttempt

$LoginAttempt = mysqli_query($con, "SELECT loginAttempt FROM Logs WHERE contractNumber='$cnumber'"); 

Так ваше состояние, чтобы проверить запрос попытка будет как

if($LoginAttempt >= 3){ 
// Your code goes here 
} 
+0

PLS см. Мой обновленный скрипт. но все же он не обновляет базу данных и не блокирует пользователя – User014019

+0

, пожалуйста, исправьте свой запрос '$ loginAttempt = mysqli_query ($ con," SELECT * FROM Users WHERE contractNumber = '$ cnumber' ") -> fetch_object() -> loginAttempt;' to $ $ loginAttempt = mysqli_query ($ con, "SELECT * FROM Logs WHERE contractNumber = '$ cnumber'") -> fetch_object() -> loginAttempt; ' – Noman

+0

i обновлено сейчас. но у меня есть ошибка: PHP Parse error: синтаксическая ошибка, неожиданное «else» (T_ELSE). plse см. обновленный запрос – User014019

1

Вы должны получить $ loginAttempt перед проверкой, если он ниже 3. Попробуйте что-то вроде этого:

$loginAttempt = mysqli_query($con, "SELECT * FROM Users WHERE contractNumber='$cnumber')->fetch_object()->loginAttempt; 

if($loginAttempt >= 3) { 
    ... 
} 
+0

PLS см. Мой обновленный скрипт. но все же он не обновляет базу данных, а не блокирует пользователя. – User014019

+0

Вам нужно добавить чек для $ loginattempt, прежде чем проверять на $ data == 1 –

+0

Я добавил уже, но у меня есть ошибка: PHP Parse error: синтаксическая ошибка, else '(T_ELSE) – User014019

Смежные вопросы