gpt4 book ai didi

php - 使用php从不同的表登录

转载 作者:太空宇宙 更新时间:2023-11-03 11:29:01 25 4
gpt4 key购买 nike

晚上好,我正在尝试一些新的(至少对我而言)如何从不同的表登录。 Table1 有 cand_id(用户名),而 Table2 有 pincode(密码)。当我尝试登录时服务器没有显示任何错误,但它不工作。我的代码如下:

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 {
}

我需要什么才能完成这项工作?

最佳答案

这里有很多错误。

  • SQL 注入(inject)。见上面的评论。不要依赖于 real_escape_string() 函数来防止 SQL 注入(inject),they alone are not sufficient .
  • 您正在执行一个通常会返回两行的 UNION,但您明确地检查了一行。如果您更改代码以检查两行,那么您会遇到更大的问题:
    • 由于您要提取与用户 ID 匹配的任何行,然后提取与 PIN 匹配的任何行,这将允许任何用户使用任何 PIN 登录。
    • UNION 删除重复项。这意味着,如果用户的 PIN 与其用户 ID 相同,则查询将减少为一行,并且登录将失败。
    • 如果您使用 then UNION ALL 来不删除重复项,那么当人们拥有相同的 PIN 码时,您可能会得到不止一行。也就是说,一旦有人创建了其他人拥有的 PIN,那么拥有该 PIN 的任何人都将无法登录。
  • 您需要 JOIN 表或在 cand_login 表上使用 WHERE 子句以确保您选择的行仅与登录的一个用户相关。现在您要问“此用户是否存在,这个 PIN 码存在吗?”你需要问“这个用户是否存在,这个用户的 PIN 是否与我得到的相符?”

关于php - 使用php从不同的表登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51547344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com