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