首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用php从不同的表登录

使用php从不同的表登录
EN

Stack Overflow用户
提问于 2018-07-27 04:52:26
回答 1查看 317关注 0票数 0

晚上好,我只是在尝试一些新的东西(至少对我来说),关于如何从不同的表登录。Table1具有cand_id (用户名),而Table2具有PIN码(密码)。服务器没有显示任何错误,当我尝试登录,但它不工作。我的代码如下:

代码语言:javascript
复制
if (isset($_POST['cand_id'])) {
    //escapes special characters in a string
    $cand_id = mysqli_real_escape_string($con,$cand_id);
    $pincode = mysqli_real_escape_string($con,$pincode);

    //Checking is user existing in the database or not
    $query = "SELECT cand_id 
              FROM candidates 
              WHERE cand_id='$cand_id' 
              UNION 
              SELECT pincode 
              FROM cand_login 
              WHERE pincode='$pincode'";
    $result = mysqli_query($con,$query) or die(mysql_error());
    $rows = mysqli_num_rows($result);

    if($rows==1) {
        $_SESSION['cand_id'] = $cand_id;
        // Redirect user to index.php
        header("Location: home.php");
    } else {
        echo "<div class='form'>
              <h3>cand_id/pincode is incorrect.</h3>
              <br/>Click here to <a href='log.php'>Login</a></div>";
    }
} else {
}

我需要做些什么才能让它正常工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-27 05:05:32

这里有很多地方都错了。

  • SQL注入。请参阅上面的注释。不要依赖real_escape_string()函数来阻止SQL注入,they alone are not sufficient。你正在做一个通常会返回两行的

  • ,但是你显式地检查了一行。如果您更改代码以检查两行,则会遇到更大的问题:
    • 因为您先拉任何与用户If匹配的行,然后再拉任何与个人识别码匹配的行,这将允许任何用户使用任何个人识别码登录。
    • 联合删除重复项。这意味着如果用户具有与其用户if相同的PIN,则查询将减少到单个行,并且登录将失败。
    • 如果您使用then UNION ALL不删除重复项,那么当人们具有相同的PIN时,您可能会得到多行。也就是说,一旦某人创建了其他人拥有的个人识别码,那么拥有该个人识别码的任何人都将无法login.

  • 您需要联接这些表,或者在cand_login表上使用WHERE子句,以确保您选择的行只属于正在登录的一个用户。现在您会问“此用户是否存在,以及此PIN是否存在?”你需要问“这个用户是否存在,这个用户的个人识别码是否与我得到的匹配?”
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51547344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档