Clo*_*ses 1 php mysql sql database mysqli
如果用户在登录页面的“密码”和“登录”字段中输入正确的信息,我目前正在编写脚本来登录用户。脚本工作得很好,但是我实际上不知道这两行代码对整体用户体验意味着什么和做了什么。
我即将参加考试,我必须解释代码的含义,如果你们通过解释下面两行代码的作用来帮助我,那将是绝对令人惊讶的。这是完整的脚本:
<?php
require('db_connect.php');
if (isset($_POST['user_id']) and isset($_POST['user_pass'])) {
$username = $_POST['user_id'];
$password = $_POST['user_pass'];
$query = "SELECT * FROM dataforlogin WHERE username='$username' and password='$password'";
$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
$count = mysqli_num_rows($result);
if ($count == 1) {
header("location: ../staudal/dashboard/index.php");
} else {
echo "Fail";
}
}
?>
Run Code Online (Sandbox Code Playgroud)
我难以理解的两行代码是:
$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
$count = mysqli_num_rows($result);
Run Code Online (Sandbox Code Playgroud)
他们做什么,为什么?
You*_*nse 21
这是一个很好的问题,因为根据现代安全性和应用程序设计标准,这些行大多是错误的或无用的。在两行代码中可能出现如此多的错误之前,我从未想到过。
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";
}
Run Code Online (Sandbox Code Playgroud)
mysqli_result变量,对于旧mysql或新mysqli查询的所有用户都是熟悉的-查询返回的实际数据源。exit在发送Location标头后添加。希望这些解释对您的老师足够
认真地讲,这个问题应该提高人们对PHP教育状况的认识。无论是在线还是离线,大多数资源都在教授PHP3,但对于不推荐使用的功能仅作了一些小改动。但是这种方法在很多方面都是错误的,但仍保持不变。
| 归档时间: |
|
| 查看次数: |
1120 次 |
| 最近记录: |