Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 试图使登录名识别为admin_Php_Mysql_Web - Fatal编程技术网

Php 试图使登录名识别为admin

Php 试图使登录名识别为admin,php,mysql,web,Php,Mysql,Web,箭头指向的是我的问题我的网站只是将我发送到受保护页面而不是管理页面,有人愿意帮助我解决这个问题。程序流继续使用exit() header('Location:AdminPage.php') 你是说 header('Location: AdminPage.php'); <------------ exit(); } else { Double equals(==)是一个比较运算符,而不是赋值运算符。您正在检查mysqli assoc在$row变量中的赋值 要检查用户,请使用mysqli\u

箭头指向的是我的问题我的网站只是将我发送到受保护页面而不是管理页面,有人愿意帮助我解决这个问题。

程序流继续使用
exit()

header('Location:AdminPage.php') 你是说

header('Location: AdminPage.php'); <------------
exit();
} else {

Double equals(
==
)是一个比较运算符,而不是赋值运算符。

您正在检查mysqli assoc在
$row
变量中的赋值

要检查用户,请使用
mysqli\u num\u rows()
并检查其是否大于1。如果是,这意味着有一个用户具有提供的凭据

大概是这样的:

if($_SESSION['user_id'] == 1) {
    header('Location: AdminPage.php');
}
$nbRow = mysqli_num_rows($result);
if($nbRow > 0){
    //User exist
}else{
    //User doesn't exist
}

它也应该更快,因为您不返回整行。

您需要在将变量放入查询之前转义
$\u POST
变量,或者使用准备好的语句

$query=$connection->real\u escape\u string($query)

另外,您的
if
语句看起来有点古怪

如果($row=mysqli\u fetch\u assoc($result)){
可能应该是

if($row==mysqli_fetch_assoc($result)){

$\u会话['user\u id']=1;
应该是
$\u会话['user\u id']=1;

编辑:您还有两个
if
语句检查相同的内容,但执行不同的任务。您不能执行
if($row==mysqli\u fetch\u assoc($result)){
两次并期望两个不同的结果

如果您的MySQL表中有一个用户id,那么您的php应该如下所示:

if($_SESSION['user_id'] == 1) {
    header('Location: AdminPage.php');
}
$nbRow = mysqli_num_rows($result);
if($nbRow > 0){
    //User exist
}else{
    //User doesn't exist
}

诸如此类……它没有经过测试。

我会让其他人指出,您现在使用的逻辑是错误的,但即使您解决了这些问题,我也要强调:

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');
    }

…是非常危险的。您应该使用一个能够正确地转义查询的库,如PDO Mysql(),或者至少逃避用户输入。现在,您的查询容易受到MySQL注入攻击。您的查询还显示密码既不是加密的,也不是散列的,这是您应该查看和实现的,或者依赖可能为您执行此操作的库或包。我个人不会开始开发身份验证系统当composer允许您安装这么多已经实现了这些最佳实践的优秀软件时。

只是尝试了一下,它仍然会将我扔到受保护的页面上,而不是Admin。您还有与comparison operator的会话。那里有一个可爱的漏洞。加上两个yoru first if()无论查询结果如何,代码路径都会将您重定向回登录页面。您还尝试再次获取同一行数据,但由于已获取该行数据,因此将失败。已更改,但问题仍然存在。我只是不太清楚这是为了实现什么目的。是否要将会话用户\u id设置为1,或者检查它是否为1?whe我应该重新输入这个吗?对不起,我有点不懂编码,而不是执行
if()
检查
$row
的分配,在if()之外执行,并检查变量$row。您可以只执行以下操作:
$row=mysqli\u fetch\u assoc($result)
if($row){…
您只需执行一次获取关联,并在每次检查时使用该行。我知道我的代码有问题,但它与此问题无关,因此您可以帮助我解决此问题,而不是分离我的代码。@user3542378。这不是一个好方法。这里的用户非常重视安全性,为了了解您应该认真考虑SQL注入相关的问题。