Php 使用不同角色登录(根据用户类型重定向到不同页面)
我是php新手。我无法从用户或管理员处登录。如何使用户可以登录并重定向到index.php,一旦管理员登录,将重定向到admin.php 我在youtube上做了一些研究,没有找到任何对我有帮助的东西Php 使用不同角色登录(根据用户类型重定向到不同页面),php,html,mysqli,Php,Html,Mysqli,我是php新手。我无法从用户或管理员处登录。如何使用户可以登录并重定向到index.php,一旦管理员登录,将重定向到admin.php 我在youtube上做了一些研究,没有找到任何对我有帮助的东西 <form action="login.php" method="post"> <input class="space" name="username" type="text" placeholder="Username/E- mail" required=
<form action="login.php" method="post">
<input class="space" name="username" type="text"
placeholder="Username/E-
mail" required="required"></input>
<br />
<input class="space" name="password" type="password"
placeholder="Password" required="required"></input>
<br />
<input type="submit" class="log-btn" value="Login" />
<button type="button" class="log-btn" onclick="return
abc(1,'reg.html')">Register</button>
</form>
登记
这是数据库表:
我还包括了管理员用户名和密码在数据库中,所以管理员不必注册
<?php
include ("conn.php");
session_start();
$sql="SELECT * FROM user WHERE email = '".$_REQUEST['username']."' and
password = '".$_REQUEST['password']."' or username =
'".$_REQUEST['username']."' and password = '".$_REQUEST['password']."'
LIMIT 1";
$result=mysqli_query($con,$sql);
if (mysqli_num_rows($result) <= 0) {
$cred = mysqli_fetch_row($result);
$_SESSION['user'] = $cred[1];
echo "<script>window.location.href='index.php';</script>";
} else {
echo "<script>window.location.href='index.php?msg=Invalid+Credential';
</script>";
}
if ($row=mysqli_fetch_array($result)) {
$_SESSION['role']=$row['user_role'];
}
if ($row['user_role']==="1"]) {
echo "<script>alert('Welcome back admin!');";
echo "window.location.href='admin.html';</script>";
}
您的login.php应该是这样的:
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "root", "dbpass", "dbname"); // make seperate file
if($_POST){
$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $_POST['username'], $_POST['password']);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
session_start();
while($row = $result->fetch_assoc()) {
if($row['role'] == 1){
$_SESSION['message'] = $row['username'];
header("Location: admin.php");exit();
}else{
$_SESSION['message'] = $row['username'];
header("Location: index.php");exit();
}
}
}else{
echo "Wrong Credentials";
}
$stmt->close();
}
?>
<form action="login.php" method="post">
<input class="space" name="username" type="text"
placeholder="Username/E-
mail" required="required"></input>
<br />
<input class="space" name="password" type="password"
placeholder="Password" required="required"></input>
<br />
<input type="submit" class="log-btn" value="Login" />
<button type="button" class="log-btn" onclick="return
abc(1,'reg.html')">Register</button>
</form>
登记
对于page admin.php和index.php,您可以使用$\u session['message']
检查活动会话
这样,您将获得用户的名称
注意:请不要使用存储纯文本密码!请使用PHP的密码安全性。说了解的语句。即使是这样也不安全!永远不要存储纯文本密码!请使用PHP来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用密码\u hash()
。在散列之前,不需要对它们执行任何操作或使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码。您的查询中不需要OR。您的代码充满漏洞。您是否考虑过使用某种框架(如Laravel)来安全地处理用户注册和登录?不确定为什么在可以更轻松地使用PHP的情况下使用JavaScript重定向。@dharman是的,我理解SQL注入,但代码不完全正确,我只是尝试用最少的文字解决编码问题,没别的了,更新Thanks我想这会解决的。让我们来看看。但从我看到的是,SELECT sql语句中只有2个实体,那么如何确定登录了哪个用户角色?仍然没有完全理解代码。