PHP:限制使用数据库的登录尝试次数

时间:2015-07-06 13:20:33

标签: php mysql login-attempts

我的数据库INSERT无效。

这是我的代码:

     <?php 
         if(isset($_POST['submit'])) {
         if(empty($row['login']) AND empty($row['password'])) {

        echo "Sorry, but that username and/or password you entered is  
              incorrect. Please try again.";

        $ipaddress = $_SERVER["REMOTE_ADDR"];
        $login = mysqli_real_escape_string($conn, $_POST['login']);

        $sql_login_tries = mysqli_query($conn,("Insert into login_attempts  
                           ('login','ip','tries','last_login')
                          Values ('$login','$ipaddress','1',Now())"));

        $sql_get_tries = mysqli_query($conn,("SELECT * FROM login_attempts 
                         where login = '$login'"))
                         or die(mysqli_error($conn));

       $number_of_tries = mysqli_num_rows($sql_get_tries); 

       echo $number_of_tries;

       if (($number_of_tries) > 2) {  

                header ("Location: /example.com/access_denied");

                exit() ;
                }
            }
          }  
        }
      ?>

我在代码中的各个点使用了“echo”。我注意到:一切正常,我尝试将INSERT这些值放入表“login_attempts”;

P.S。我确实设置了数据库连接参数;我根本不想在这里包括它们。

P.P.S。重定向到“access_denied”页面纯粹是出于测试目的。实际上,如果用户尝试登录3次失败,我计划激活 CAPTCHA 功能。

更新错误消息

  

您的SQL语法有错误。检查手册中使用的语法是否正确:(login,ip,tries,last_login)值('mjackson','111.11.11.111','1',NOW'在第1行

2 个答案:

答案 0 :(得分:1)

您不应在插入查询中的字段名称周围使用单引号。请改用反引号:

Insert into login_attempts  
(`login`,`ip`,`tries`,`last_login`)
Values ('$login','$ipaddress','1',Now())

答案 1 :(得分:0)

请注意。您需要从login_attempts中删除旧数据