热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

这两行PHP代码的含义是什么?

如何解决《这两行PHP代码的含义是什么?》经验,为你挑选了1个好方法。

如果用户在登录页面的“密码”和“登录”字段中输入正确的信息,我目前正在编写脚本来登录用户。脚本工作得很好,但是我实际上不知道这两行代码对整体用户体验意味着什么和做了什么。

我即将参加考试,我必须解释代码的含义,如果你们通过解释下面两行代码的作用来帮助我,那将是绝对令人惊讶的。这是完整的脚本:


我难以理解的两行代码是:

$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
$count = mysqli_num_rows($result);

他们做什么,为什么?



1> Your Common ..:

这是一个很好的问题,因为根据现代安全性和应用程序设计标准,这些行大多是错误的或无用的。在两行代码中可能出现如此多的错误之前,我从未想到过。

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,但对于不推荐使用的功能仅作了一些小改动。但是这种方法在很多方面都是错误的,但仍保持不变。


推荐阅读
author-avatar
想零的时候
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有