好的,所以我想以用户和管理员身份登录,我的用户表称为“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/