1

我正在学习 PHP 和 MySQL。

我想从脚本中识别一个特定的名称并将其重定向到 admin.php。例如“如果用户名是 Brian 将他重定向到 admin.php,如果用户名是除了 Brian 之外的所有内容,则将他重定向到 account.php”。

Brian 和其他人都必须在数据库中注册才能登录。我想过基于 MySQL 用户 ID 的重定向,但我不知道如何编写代码。或者,如果您知道另一个简单的解决方案。

这是脚本:

<?php

 class Users {
     public $username = null;
     public $password = null;
     public $salt = "";

     public function __construct( $data = array() ) {
         if( isset( $data['username'] ) ) $this->username = stripslashes( strip_tags( $data['username'] ) );
         if( isset( $data['password'] ) ) $this->password = stripslashes( strip_tags( $data['password'] ) );
     }

     public function storeFormValues( $params ) {
        //store the parameters
        $this->__construct( $params ); 
     }

     public function userLogin() {
         $success = false;
         try{
            $con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD ); 
            $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
            $sql = "SELECT userID FROM users WHERE username='username'  AND password= :password AND userTypeId = 1 LIMIT 1";

        $stmt = $con->prepare( $sql );
            $stmt->bindValue( "username", $this->username, PDO::PARAM_STR );
            $stmt->bindValue( "password", hash("sha256", $this->password . $this->salt), PDO::PARAM_STR );
            $stmt->execute();

            $valid = $stmt->fetchColumn();

            if( $valid ) {
                $success = true;
            }

            $con = null;
            return $success;
         }catch (PDOException $e) {
             echo $e->getMessage();
             return $success;
         }
     }

这是 index.php 中的脚本(用户在其中写下他的姓名和密码)

<?php 
} else {
    $usr = new Users;
    $usr->storeFormValues( $_POST );

    if( $usr->userLogin() ) {
        echo "Welcome"; 
    } else {
        echo "Incorrect Username/Password"; 
    }
}

?>
4

3 回答 3

1

而不是识别名称(您必须解析),我相信如果您改为直接通过用户编号(或您所称的主键),它会更有效(并且更容易实现)。

因此,如果您的用户名是“Brian”并且是第一个用户,用户编号为 1,则指向 1 所在的表,假设它存储为整数 1 而不是字符串“1”。

计算机通常更容易处理整数而不是数组。您可以通过字符串来完成,但对您和机器来说总是会做更多的工作。

就重定向而言,登录后,只需进行检查:

if用户号等于 [Brian 的用户号] 然后重定向到admin.php

else重定向到account.php

(您还需要确保admin.php要求 Brian 是登录用户,或者其他任何人都可以手动导航到那里)

于 2013-09-15T08:31:51.737 回答
0

首先,尝试获取username并更正用户名的绑定名称:

$sql = "SELECT username FROM users WHERE username = :username AND ...

代替:

$sql = "SELECT userID FROM users WHERE username='username' AND ...
             //^                              //^

username也只是在成功状态下返回 fetched 。它从结果集的下一行返回单个列,或者FALSE如果没有更多行。

return $stmt->fetchColumn();

然后检查登录的用户名,if condition以重定向所需的页面:

$usr = new Users;
$usr->storeFormValues( $_POST );

$username = $usr->userLogin();
if( $username !== false ) {
    if(strtolower($username) == "brian"){
        header("Location: admin.php");
    } else {
        header("Location: account.php");
    }  
} else {
    echo "Incorrect Username/Password"; 
}
于 2013-09-15T08:51:29.463 回答
0

$user->userLogin 方法应该在登录成功时返回当前登录用户的 id,在登录失败时返回 FALSE。然后重定向到 admin.php 或 account.php 取决于返回的 id

于 2013-09-15T08:38:05.517 回答