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