3 回答
TA贡献1828条经验 获得超3个赞
这是一个很好的问题,因为根据现代安全和应用程序设计标准,这些行大多是错误的或无用的。我从来没有想过仅仅两行代码就会有这么多错误。
mysqli_query()
将您的查询发送到 MySQL 服务器。但是,这不是您使用 variables运行 mysql 查询的方式。一个事先准备好的声明必须代替。die(mysqli_error($connection))
目的是在查询执行失败并显示mysql错误时停止代码执行(特别是or die()
做了很多有趣的事情,我有一篇文章解释了这一点。然而,这不是你在PHP中报告mysql错误的方式。单一配置必须使用 option 来代替。这在很多方面都会更好,从编写的代码量到更好的用户体验。mysqli_num_rows($result)
告诉您有多少行返回了您的查询。一个本质上没用的函数,你总是可以使用返回的数据代替WHERE username='$username' and password='$password'
不是您在数据库中检查密码的方式。甲散列密码必须从数据库中检索,然后使用password_verify()函数检查
这是应该的样子
$stmt = $mysqli->prepare("SELECT * FROM dataforlogin WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$result= $stmt->get_result()
$user = $result->fetch_assoc();
if ($user && password_verify($password, $user['password']))
{
// write some info into the session
header("location: ../staudal/dashboard/index.php");
exit;
} else {
echo "invalid";
}
在第一行中,我们正在准备 sql 查询,其中问号放在变量应该去的地方(所以它被称为占位符)。
在第二行中,我们将实际变量绑定到占位符,因此它将被发送到与查询分离的 mysql 服务器,它们将无法干扰。
然后查询被实际执行。
然后我们得到了
mysqli_result
旧 mysql 或新 mysqli 查询的所有用户都熟悉的变量 - 查询返回的实际数据源。然后我们试图获取选定的行。
然后我们同时检查两件事,
我们的查询是否返回任何行
如果是,从表单发送的密码是否与使用 password_verify() 函数存储在数据库中的密码相同
其余的与您的代码相同,但有两件事
在重定向用户之前,您应该将有关他们的一些信息写入会话,以便在其他页面上识别他们
exit
在发送 Location 头之后添加是一个很好的做法。
希望这些解释对你的老师来说已经足够了
说真的,这个问题应该提高人们对 PHP 教育状况的认识。大多数来源,在线和离线,都在教导,就好像它仍然是 PHP3 一样,只有在不推荐使用的功能方面进行了轻微的改头换面。但是这种方法在很多方面都是错误的,但仍然保持不变。
TA贡献1785条经验 获得超4个赞
首先我想说,请使用准备好的语句。
$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
该mysqli_query()
函数对数据库执行查询,$connection
变量打开一个到您已经在db_connect.php 中创建的 MySQL 服务器的新连接,并检查连接是否已建立。如果没有,则die()
函数将运行。它用于打印消息并退出当前的 php 脚本。
$count = mysqli_num_rows($result);
mysqli_num_rows()
函数将返回结果集中的行数,您将该数字存储到$count
变量中。
希望这对你有帮助
TA贡献1776条经验 获得超12个赞
我是一名初级开发人员,但我希望这个答案会根据您的代码有所帮助:
$result = mysqli_query($connection, $query) 或 die(mysqli_error($connection));
$result 是一个 php 变量
mysqli_query($connection, $query) 表示 mysqli_query 将使用你的 db_connect.php 中声明的数据库连接数据库来运行查询 [$query = "SELECT * FROM dataforlogin WHERE username='$username' and password='$password' ";]
或死(mysqli_error($connection)); 意味着如果mysqli_query没有找到指定的数据库或表,在这种情况下(dataforlogin),它会显示你的db_connect.php中指定的连接错误
$count = mysqli_num_rows($result);
$count 是一个 php 变量
mysqli_num_rows($result); 表示 $count 等于在运行 mysqli_query($connection, $query) 时 $result 在表 (dataforlogin) 中找到的行数。
注意:请避免使用 --- or die(mysqli_error($connection) 行,因为它可能会阻止页面加载,这不是必需的。
- 3 回答
- 0 关注
- 218 浏览
添加回答
举报