gpt4 book ai didi

php - mysqli_data_seek 函数返回用户名结果,当用户名不在数据库中时

转载 作者:行者123 更新时间:2023-11-29 01:56:51 25 4
gpt4 key购买 nike

我有一个函数,如果指定的用户在我的数据库中,我将在屏幕上显示一条字符串值的消息,简单地说我的函数有效。

但是,当我将名称更改为数据库中不存在的名称时,我仍然会得到一个字符串输出,表明该函数有效。所以我试图弄清楚我的逻辑在查询中的什么地方乱七八糟。这是我拥有的:

Users.php 文件:

<?php

function user_exists($username)
{
$db = "adults";
$dbH = "localhost";
$dbU = "root";
$dbP = "Jeffery9";

//connection to database
$dbCon = mysqli_connect($dbH, $dbU, $dbP, $db);

$username = sanitize($username);
// $query = mysqli_query($dbCon,"SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'");
return (mysqli_data_seek(mysqli_query($dbCon,"SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'"), 0) == 1) ? true : false;
}

?>

现在这是处理函数以查看用户是否实际存在的登录页面:

Login.php 文件:

<?php
include 'core/init.php';

if (user_exists('raiders7') === true)
{
echo 'user found!';
}
die();

if(empty($_POST) === false)
{
$username = $_POST['username'];
$password = $_POST['password'];

if(empty($username) === true || empty($password) === true)
{
$errors[] = 'You need to enter a username and password.';
}
else if (user_exists($username) === false)
{
$errors[] = 'We can\'t find that username. Have you registered?';
}
}
?>

当然我在数据库中有一行和一个用户。当字符串为 user_exists('raiders7') 时,我会在索引页上看到 user found!

但是当它是 user_exists('something else') 时,它仍然会在页面上返回 user found!

怎么会这样?如果用户不存在,页面应该是空白的。

最后,我正在使用另一个函数来清理我的数据,如下所示:

General.php 文件:

<?php

function sanitize($data)
{
$db = "adults";
$dbH = "localhost";
$dbU = "root";
$dbP = "Jeffery9";

// connection to database
$dbCon = mysqli_connect($dbH, $dbU, $dbP, $db);

return mysqli_real_escape_string($dbCon, $data);
}

?>

不知道最后一部分是否有帮助,但是有人可以帮助我解决我如何停止获取 user found! 消息的逻辑,当用户不存在于我的测试数据库。谢谢。

最佳答案

您应该获取结果以获得正确/所需的结果。

发生的事情是你只要移动指针然后当然在索引 0 中总会有一个结果集行

+----------------+
| COUNT(user_id) | // even when count is zero, your condition will still be true
+----------------+
| 0 |
+----------------+

即使用户名错误/不存在!

正确获取结果然后检查计数

$username = $dbCon->real_escape_string($username);
$query = mysqli_query($dbCon,"SELECT COUNT(`user_id`) as total FROM `users` WHERE `username` = '$username'");
$row = $query->fetch_assoc();
$count = $row['total']; // fetch the result!

if($count > 0) {
// true
} else {
// false
}

或者如@Fred 所说,只需使用 num_rows 并更好地绑定(bind)它:

$sql = 'SELECT * FROM `users` WHERE `username` = ?';
$select = $dbCon->prepare($sql);
$select->bind_param('s', $username);
$select->execute();

if($select->num_rows > 0) {
// found
} else {
// not found
}

关于php - mysqli_data_seek 函数返回用户名结果,当用户名不在数据库中时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26600145/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com