php - 从 2 个不同的表以用户或管理员身份登录

标签 php html css mysql sql

好的,所以我想以用户和管理员身份登录,我的用户表称为“sollicitant”,我的管理员是“bedrijf”(这是荷兰语,哈哈抱歉)。我现在拥有的代码仅适用于 1 个表,但我如何才能拥有一个在两个表中查找的 sql 查询以进行登录?

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

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

    $servername   = "localhost";
    $databasename = "vacaturebank.";
    $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 sollicitant WHERE email = '$inputEmail'");
        $stmt->execute();

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

        $rowCount = $stmt->rowCount();

        if ($rowCount) {

            if ($inputWachtwoord == $row['wachtwoord']) echo "<br/>Successvol ingelogd";
            else                                    echo "<br/>Gebruikersnaam en wachtwoord komen niet overeen.";
            header("Location: inloggen.html");
        } 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;

}
?>

最佳答案

您需要使用 email 列指定两个表:

SELECT * 
FROM sollicitant, bedrijf 
WHERE sollicitant.email = '$inputEmail' 
AND bedrijf.email = '$inputEmail'

另一种可能性是使用带有别名的显式 JOIN'(别名'只是为了缩短事情,您不必使用它们。):

SELECT *
FROM sollicitant s, bedrijf b
ON s.email = b.email
WHERE s.email = '$inputEmail' 

这样做意味着您只需考虑一个表的一列中的 eamil,因为 JOIN 确保您只获得具有匹配电子邮件的那些行。如果查询为空,则电子邮件在两者中都不存在。

编辑

如果您想根据用户的 Angular 色决定去哪里,您应该将所有用户合并到一个表中,其中有一列描述了用户的 Angular ​​色:

SELECT * FROM users WHERE email = '$inputEmail' 

然后在获取数据后使用 PHP:

if('sollicitant' == $row['role']) {
    header('Location: sollicitant.php');
    exit();
} elseif ('bedrijf' == $row['role']) {
    header('Location: befrijf.php');
    exit();
} else {
    echo 'There is a problem with your login.';
}        

警告!

...正如其他人所说...

Little Bobby your script is at risk for SQL Injection Attacks. 。连escaping the string不安全!

我讨厌人们说 “我还没走那么远……”“这个网站不会公开……” “它只适用于学校,所以安全并不重要……”。如果老师和教授从第一天起就没有谈论安全,那他们就做错了。挑战他们。他们正在教授草率和危险的编码实践,学生以后将不得不忘记这些实践。我也讨厌人们说,“我稍后会添加安全性……”“现在安全性不重要了……””忽略安全风险……”

切勿存储纯文本密码! 请使用 PHP 的 built-in functions 来处理密码安全。如果您使用的 PHP 版本低于 5.5,您可以使用 password_hash() compatibility pack . 没必要escape passwords 或在散列之前对它们使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码。

关于php - 从 2 个不同的表以用户或管理员身份登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45016247/

相关文章:

php - 我在 mysql_fetch_assoc() 中遇到错误

javascript - 其他用户的 Ajax?

html - 在 Delphi 中使用 TIdHTTP 提交表单并检索数据(不是通常的)

html - 如何消除两个导航栏项之间的差距?

html - 当我们减小浏览器尺寸时如何减小图像尺寸。?

PHP - 为移动 View 使用预格式化的 html

php - 不必要的数组包装器

html - JSF 读取托管 bean 中的动态输入元素

javascript - Safari 上的 createImageBitmap 替代方案

html - 对齐与其内容相关的所有 div 的高度