Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于角色登录_Php_Mysql_Sql - Fatal编程技术网

Php 基于角色登录

Php 基于角色登录,php,mysql,sql,Php,Mysql,Sql,所以我的数据库中基本上有两个角色,sollicitant和bedrijf 我想把他们都重定向到一个不同的页面,我现在有一个脚本控制我数据库中的电子邮件和密码,但我不知道如何检查他们的角色,这样他们都可以重定向到一个不同的欢迎页面 这是我的代码,用于检查密码和电子邮件,但不检查角色。。如何将两个角色重定向到不同的页面 <?php if(isset($_POST['verzenden'])) { $inputEmail = htmlspecialchars($_POST['email

所以我的数据库中基本上有两个角色,sollicitant和bedrijf 我想把他们都重定向到一个不同的页面,我现在有一个脚本控制我数据库中的电子邮件和密码,但我不知道如何检查他们的角色,这样他们都可以重定向到一个不同的欢迎页面

这是我的代码,用于检查密码和电子邮件,但不检查角色。。如何将两个角色重定向到不同的页面

<?php
if(isset($_POST['verzenden'])) {

    $inputEmail = htmlspecialchars($_POST['email']);
    $inputWachtwoord = htmlspecialchars($_POST['wachtwoord']);

    $servername   = "localhost";
    $databasename = "powerjobs";
    $username     = "root";
    $password     = "";

    try {
        $conn = new PDO("mysql:host=$servername; dbname=$databasename", $username, $password);

        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    } catch(PDOException $e) {
        echo "Connection failed: " . $e->getMessage();
        return;
    }

    try {
        $stmt = $conn->prepare("SELECT * FROM registratie WHERE email = '$inputEmail'");
        $stmt->execute();

        $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
        $row    = $stmt->fetch();

        $rowCount = $stmt->rowCount();

        if ($rowCount) {

            if ($inputWachtwoord == $row['wachtwoord']) 
                header("Location: sollicitant.html");
            else
                echo "<br/>Gebruikersnaam en wachtwoord komen niet overeen.";
        } else {
            echo "<br/>Login failed, no record found";
        }
    }
    catch(PDOException $e) {
        echo "Error: " . $e->getMessage();
    }

    $conn = null;

    session_start();

    $_SESSION["login"] = true;
    $_SESSION["email"] = $inputEmail;

}
?>

从外观上看,您似乎已经将密码存储为纯文本,您不应该这样做,您需要使用and存储哈希密码值

因此,当您在注册页面中保存密码时,需要对密码进行哈希运算

比如:

$hash = password_hash($inputWachtwoord,PASSWORD_DEFAULT);
<?php
ob_start();
session_start();

if (isset($_POST['verzenden'])) {

    $inputEmail      = $_POST['email'];
    $inputWachtwoord = $_POST['wachtwoord'];

    $servername   = "localhost";
    $databasename = "powerjobs";
    $username     = "root";
    $password     = "";

    try {
        $conn = new PDO("mysql:host=$servername; dbname=$databasename", $username, $password);

        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    }
    catch (PDOException $e) {
        echo "Connection failed: " . $e->getMessage();
    }

    try {
        $stmt = $conn->prepare("SELECT * FROM registratie WHERE email = ? ");
        $stmt->execute([$inputEmail]);
        $result = $stmt->fetchall(PDO::FETCH_ASSOC);
        if (count($result) > 0) {
            foreach ($result as $key => $row) {
                if (password_verify($inputWachtwoord, $row['wachtwoord'])) {
                    //password matches
                    $_SESSION["login"] = true;
                    $_SESSION["email"] = $inputEmail;

                    //check user role
                    switch ($row['role']) {
                        case 0:
                            $redirectUrl = "ThisRolePage.php";
                            break;

                        case 1:
                            $redirectUrl = "ThisRolePage.php";
                            break;
                    }

                    header("location:$redirectUrl"); //redirect user to respective page
                    exit();

                } else {

                    echo "password and username does not match";
                }
            }

        } else {

            echo "username invalid";
        }
    }
    catch (PDOException $e) {
        echo "Error: " . $e->getMessage();
    }
}
?>
然后,当您存储时,您将不再存储$inputWachtwoord,而是存储$hash

然后您可以使用密码\u验证登录

比如:

$hash = password_hash($inputWachtwoord,PASSWORD_DEFAULT);
<?php
ob_start();
session_start();

if (isset($_POST['verzenden'])) {

    $inputEmail      = $_POST['email'];
    $inputWachtwoord = $_POST['wachtwoord'];

    $servername   = "localhost";
    $databasename = "powerjobs";
    $username     = "root";
    $password     = "";

    try {
        $conn = new PDO("mysql:host=$servername; dbname=$databasename", $username, $password);

        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    }
    catch (PDOException $e) {
        echo "Connection failed: " . $e->getMessage();
    }

    try {
        $stmt = $conn->prepare("SELECT * FROM registratie WHERE email = ? ");
        $stmt->execute([$inputEmail]);
        $result = $stmt->fetchall(PDO::FETCH_ASSOC);
        if (count($result) > 0) {
            foreach ($result as $key => $row) {
                if (password_verify($inputWachtwoord, $row['wachtwoord'])) {
                    //password matches
                    $_SESSION["login"] = true;
                    $_SESSION["email"] = $inputEmail;

                    //check user role
                    switch ($row['role']) {
                        case 0:
                            $redirectUrl = "ThisRolePage.php";
                            break;

                        case 1:
                            $redirectUrl = "ThisRolePage.php";
                            break;
                    }

                    header("location:$redirectUrl"); //redirect user to respective page
                    exit();

                } else {

                    echo "password and username does not match";
                }
            }

        } else {

            echo "username invalid";
        }
    }
    catch (PDOException $e) {
        echo "Error: " . $e->getMessage();
    }
}
?>

$inputWachtwoord是密码吗?您需要正确使用准备好的语句,对查询进行参数化。只需在标题前添加另一个if和else,以检查其是否为公司或申请人。您的数据库结构是什么?当您对角色/组进行$rowCount true检查时,$row具有用户所属角色/组的完整行,因此,从结果中获取角色/组,并将用户重定向到所需页面。@JayBlanchard现在刚刚查看了您的答案,这是一个准确的重新发布。OP没有考虑ppl的建议。仅供参考,我将角色更改为0sollicitant和1bedrjif,因为它们在我的数据库中是如何识别的。我使用了这个代码,但它不断给出密码和用户名不匹配的错误,而它是,idk有什么问题?它不匹配,因为您已将密码保存为纯文本。你没有从顶部跟随,只是接受了代码i更改$inputWachtwoord=$\u POST['wachtwoord'];到$hash=password\u hash$\u POST['wachtwoord'],password\u DEFAULT;,那不是我应该做的吗?