<?php
ob_start();
include 'connection.php';
$user_id = $_POST ['user_id'];
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM Register WHERE username= '$username' AND Password = '$password' ";
$result = mysqli_query($connection, $query) or exit("Error in the query: $query. " . mysqli_error());
if ($row = mysqli_fetch_assoc($result)) {
$_SESSION['username'] = $username;
echo '' . $username . '';
header('location:Login.php');
} else {
$_SESSION['error'] = 'User not recognised';
echo 'user not recognised';
header('location:Login.php');
}
if ($row = mysqli_fetch_assoc($result)) {
$_SESSION['user_id'] == 1;
header('Location: AdminPage.php'); <------------
} else {
header('Location: ProtectedPage.php');
}
?>
箭头指向的是我的问题我的网站只是将我发送到受保护的页面而不是管理页面,任何人都在关心帮我解决这个问题。
答案 0 :(得分:1)
程序流程继续使用exit()
header('Location: AdminPage.php'); <------------
exit();
} else {
答案 1 :(得分:0)
你的意思是
if($_SESSION['user_id'] == 1) {
header('Location: AdminPage.php');
}
Double equals(==
)是一个比较运算符,而不是赋值运算符。
答案 2 :(得分:0)
您正在检查将mysqli assoc分配到$row
变量。
要检查用户,请使用mysqli_num_rows()
并检查其是否大于1.如果是,则表示有用户提供了凭据。
这样的事情:
$nbRow = mysqli_num_rows($result);
if($nbRow > 0){
//User exist
}else{
//User doesn't exist
}
它也应该更快,因为你没有返回整行。
答案 3 :(得分:0)
在将$_POST
变量放入查询之前,您需要转义它们,或者使用预准备语句。
$query = $connection->real_escape_string($query);
此外,您的if
陈述看起来有些古怪。
if ($row = mysqli_fetch_assoc($result)) {
应该是
if ($row == mysqli_fetch_assoc($result)) {
和
$_SESSION['user_id'] == 1;
应为$_SESSION['user_id'] = 1;
编辑:您还有两个if
语句检查相同的内容,但执行不同的任务。您无法执行if ($row == mysqli_fetch_assoc($result)) {
两次并期望两种不同的结果。
如果你的MySQL表中有user_id,那么你的php应该是这样的:
if ($result = mysqli_query($connection, $query)){
if ($row = mysqli_fetch_assoc($result)) {
$_SESSION['username'] = $row['username'];
$_SESSION['user_id'] = $row['user_id'];
}
if ($_SESSION['user_id'] == 1){
header('Location: AdminPage.php');
}
else { header('Location: ProtectedPage.php'); }
}
else {
echo 'user not recognised';
header('location:Login.php');
}
这样的东西......它没有经过测试。
答案 4 :(得分:0)
我会让其他人指出你现在使用的逻辑是错误的,但即使你已经解决了这些问题,我也想强调一点:
$query = "SELECT * FROM Register WHERE username= '$username' AND Password = '$password' ";
$result = mysqli_query($connection, $query) or exit("Error in the query: $query. " . mysqli_error());
......非常危险。您应该使用正确转义PDO Mysql(http://www.php.net/manual/en/ref.pdo-mysql.php)之类的查询的库,或者至少转义用户输入。现在您的查询容易受到MySQL注入攻击。您的查询还显示密码既不是加密也不是哈希,您应该查看并实现密码,或者依赖可能为您执行此操作的库或软件包。我个人不会在身份验证系统上开始开发,因为当composer允许你安装那些已经实现了这些最佳实践的很棒的那些。