如果用户在登录页面的“密码”和“登录”字段中输入正确的信息,则我目前正在编写脚本来登录用户。该脚本可以正常运行,但是我实际上不知道这两行代码对整体用户体验的意义和作用。
我即将参加考试,我必须解释代码的含义,如果你们通过解释下面两行代码的作用来帮助我,那将是绝对令人惊讶的。这是完整的脚本:
<?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";
}
}
?>
我难以理解的两行代码是:
$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
$count = mysqli_num_rows($result);
他们做什么,为什么?
答案 0 :(得分:12)
这是一个好问题,因为这些行大多是错误的或无用的。
mysqli_query()
将查询发送到MySQL服务器。但是,这不是的方式,您运行带有变量的mysql查询。 A prepared statement must be used instead. die(mysqli_error($connection))
做了很多有趣的事情,我有一篇文章对此进行了解释,how does 'or die()' work。但是,这不是您在PHP中报告mysql错误的方式。 A single configuration option must be used instead. mysqli_num_rows($result)
告诉您返回了多少行查询。本质上无用的函数you can always use the returned data instead WHERE username='$username' and password='$password'
不是您正在检查数据库中的密码的方式。 A hashed password must be retrieved from the database and then checked using password_verify() function 应该是这样
$stmt = $mysqli->prepare("SELECT * FROM dataforlogin WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$user = $stmt->get_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";
}
exit
是一个好习惯。希望这些解释对您的老师来说足够
很严重,这个问题应该提高人们对PHP教育状况的认识。无论是在线还是离线,大多数资源都在教授PHP3,但对于不推荐使用的功能仅作了一些小改动。但是这种方法在很多方面都是错误的,但仍保持不变。
答案 1 :(得分:0)
$result = mysqli_query($connection, $query) or die(mysqli_error($connection));
SELECT * FROM table WHERE id = ?
,然后保存结果。否则,如果查询失败,它将返回错误消息。
$count = mysqli_num_rows($result);
答案 2 :(得分:0)
首先,我想说的是,请使用准备好的声明。
$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
变量中。
希望这对您有帮助
答案 3 :(得分:0)
我是一名初级开发人员,但我希望此答案对您的代码有所帮助:
$ 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'和password ='$ password'“;]
或die(mysqli_error($ connection));表示如果mysqli_query找不到指定的数据库或表,在这种情况下(dataforlogin),它将显示在db_connect.php
$ count = mysqli_num_rows($ result);
$ count是一个php变量
mysqli_num_rows($ result);表示在运行mysqli_query($ connection,$ query)时,$ count等于在$ result的表(dataforlogin)中找到的行数。
注意:请避免使用---或die(mysqli_error($ connection)行,因为这可能会阻止页面加载,这是不必要的。