php用户登录脚本

时间:2017-06-28 04:20:14

标签: php mysql

<?php
if(isset($_POST['submit'])) {
    $UserName = mysql_real_escape_string($_POST['UserName']);
    $password = mysql_real_escape_string($_POST['password']);
    $checkbox = isset($_POST['remember_me']);

    if(user_exists ($UserName, $db_connect)) {
       $result = mysqli_query ($db_connect, "SELECT password FROM users WHERE UserName = '$UserName'");
       $retrievepassword = mysqli_fetch_assoc($result);

        if(md5($password) !== $retrievepassword['password']) {
            $alert = "Invalid Password";
        } else {
            $_SESSION['UserName'] = $UserName;

            if($checkbox == "on") {
                setcookie("UserName", $UserName, time()+3600);
            }

            header("location: profile.php");
        }
    } else {
        $alert = "Username doesn't exit in database";
    }
}
?>

我已经制作了以下登录脚本,该脚本工作正常,现在我想在登录前检查用户的状态,如果用户处于活动状态,它将登录并且如果它的请求是待处理或拒绝,它将显示错误。 我完成了第一部分,并对我要检查状态的其他部分感到困惑。

根据我的代码,有人可以帮助我吗?

4 个答案:

答案 0 :(得分:0)

有两种方法:

  1. where中添加条件以检查用户是否处于活动状态 或不。
  2. 或者,一旦您验证了用户的正确用户/密码,那么 通过if条件验证并导航到正确的页面 相应地。
  3. 另外,请更正SQL以使用预准备语句。

    $stmt = $dbConnection->prepare('SELECT * FROM users WHERE 
    UserName = ?  AND password = ?');
    $stmt->bind_param('s', $UserName);
    $stmt->bind_param('s', md5($password));
    $stmt->execute();
    

答案 1 :(得分:0)

我假设您的数据库中有一列存储用户状态。 Sooo ..您的问题的答案是,在检查您的数据库中是否存在用户名后,检查状态是否为“活动”。如果不是,则只显示错误消息。 您可能会想到另一种查询数据的方法,例如:

SELECT * FROM USERS WHERE USERNAME = 'username' AND PASSWORD = 'password' AND STATUS = true

如果它没有返回任何内容,你可以立即确定它是否有效。

我希望这会有所帮助。 :)

答案 2 :(得分:0)

您可以在检查有效密码后检查状态并返回相应的消息。请尝试以下代码:

if(user_exists ($UserName, $db_connect))
{
$result = mysqli_query ($db_connect, "SELECT password,status FROM users WHERE 
name = '$UserName'");   
$retrievepassword = mysqli_fetch_assoc($result);
if(md5($password) !== $retrievepassword['password'])
{
$alert = "Invalid Password";
}
else
{
      //check Status
      if($retrievepassword['status'] == 1) //whatever condtion to match
      {
            $_SESSION['UserName'] = $UserName;
            if($checkbox == "on")
            {
            setcookie("UserName", $UserName, time()+3600);
            }
            header("location: profile.php");            
      }
      else
      {
            $alert = "User Not active"; //Message to display
      }

}
}
else
{
$alert = "Username doesn't exit in database";
}

答案 3 :(得分:0)

首先,我想指出你在没有启动会话的情况下使用了$ _SESSION。要做到这一点,你必须写

session_start();

在代码的开头。

要验证用户是否已登录,请在session_start()下面写下:

if(isset($_SESSION['UserName']) or isset($_COOKIE['UserName'])){
    header("location: profile.php");
}

如果您不知道如何检查profile.php,如果用户在此处登录则是如何进行的:

PS:我建议您创建一个check.php文件,以便将其包含在为登录用户保留的页面中。

check.php

if(!isset($_SESSION['UserName']) or !isset($_COOKIE['UserName'])){
    // Redirect to login or enter what you want to happen if the user is not logged in
}