Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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 登录条件未按预期执行_Php - Fatal编程技术网

Php 登录条件未按预期执行

Php 登录条件未按预期执行,php,Php,我的登录页面似乎通过任何登录字段输入将我重定向到index.php。这是意外的,因为它应该执行检查。此外,如果登录字段留空,则会重定向到空白页面。这也不应该是这样,因为我已经设置了一个条件来处理这个结果。看 logininc.php <?php require_once("assets/configs/db_config.php"); $user=$_POST['user']; $password=$_POST['password']; if(isset($_POST['su

我的登录页面似乎通过任何登录字段输入将我重定向到index.php。这是意外的,因为它应该执行检查。此外,如果登录字段留空,则会重定向到空白页面。这也不应该是这样,因为我已经设置了一个条件来处理这个结果。看

logininc.php

    <?php

require_once("assets/configs/db_config.php");
$user=$_POST['user']; 
$password=$_POST['password'];

if(isset($_POST['submit'])){

//To ensure that none of the fields are blank when submitting the form if
if($user != NULL || $password != NULL)

// if(isset($_POST['user']) && isset($_POST['password'])) old code
    {
        $user = stripslashes($user);
        $password = stripslashes($password);
        $user = mysqli_real_escape_string($user);
        $password = mysqli_real_escape_string($password);

        $sql="SELECT * FROM $test_db WHERE user='$user' and password='$password'";
        $result=mysqli_query($sql);

        $row=mysqli_fetch_array($result);

        if($row['user'] == $user && $row['password'] == $password)
        {
            session_start();
            $_SESSION['user'] = $user;
            $_SESSION['password'] = $password;
            $_SESSION['loggedin'] = "true";
            header("location:index.php");
        }
        else
        {
            echo ('<div id="error">Computer says no.</div>');

        }
            echo ('<div id="error">Enter something!</div>');

}


}

mysql
扩展不同,
mysqli
扩展要求在以过程样式使用时将连接对象传递给所有函数

将连接资源
$con
传递给第一个参数

mysqli_query($con, $sql);

同样在你的
mysqli\u real\u escape\u字符串($con,$string)中

用此更改您的代码,然后让我们看看

$sql="SELECT count(*) FROM test_db WHERE user='$user' and password='$password'";
$result=mysqli_query($con,$sql);

$row=mysqli_fetch_array($result,MYSQLI_NUM);

if($row[0]==1)
{
    session_start();
    $_SESSION['user'] = $user;
    $_SESSION['password'] = $password;
    $_SESSION['loggedin'] = "true";
    header("location:index.php");
}
还有一件事,我注意到,您使用的是
$test\u db
而不是
test\u db
。因此,我将其更改为
test\u db


看看,如何使用

您必须在代码开头启动会话,您不能在代码中的任何位置启动会话

像这样开始

<?php
 session_start();
 ...

如前所述,字段留空不会产生Null,而是一个空字符串。所以用isset()和empty()检查它

也尝试

$row = $result->mysqli_fetch_array(MYSQLI_ASSOC);

您应该真正地散列您的密码。

您也应该检查类型,在这种情况下:

if($row['user'] == $user && $row['password'] == $password)
改用:

if($row['user'] === $user && $row['password'] === $password)
为什么当您留下空白文件时,它会重定向到空白页面?请尝试以下代码:

$a = ''; //string type
$b = array(); // array type
var_dump($a==$b); // you will get true;
var_dump($a===$b); // you will get false;

在我看来,您的旧代码比isset($_POST)更好。请使用
isset($user)&!空($user)
而不是
如果($user!=NULL)
。对
$password
mysqli\u real\u escape\u string
执行同样的操作也需要此项。@Barmar谢谢,我更新了答案no。它应该是
|
。它们中的任何一个都不能为空。好的,是我的错,我已经更新了我的答案。请看一下Devzero的答案。代码有很多问题。每个答案都涉及不同的答案。不,我的意思是你也应该在答案中的mysqli_查询中添加
$con
。@OptimusPrime谢谢你指出错误的代码。
if($row['user'] === $user && $row['password'] === $password)
$a = ''; //string type
$b = array(); // array type
var_dump($a==$b); // you will get true;
var_dump($a===$b); // you will get false;