首页 >后端开发 >php教程 >为什么我的 jQuery 验证远程方法总是表明用户名存在?

为什么我的 jQuery 验证远程方法总是表明用户名存在?

Susan Sarandon
Susan Sarandon原创
2024-12-27 17:54:12454浏览

Why Does My jQuery Validate Remote Method Always Indicate Username Existence?

jQuery Validate 远程方法:验证用户名是否存在

jQuery Validate 提供了一个远程方法,使您能够检查某个值是否已存在于数据库。但是,有时您可能会遇到验证总是触发的情况,表明用户名即使没有被占用也已被占用。

问题规范

考虑以下 jQuery PHP 代码尝试验证用户名是否存在:

// jQuery
$("#signupForm").validate({
    rules: {
        username: {
            required: true,
            minlength: 3,
            remote: "check-username.php"
        }
    },
    messages: {
        username:{
            remote: "This username is already taken! Try another."
        }
    }
});

// check-username.php
<?php
require_once "./source/includes/data.php";
header('Content-type: application/json');

$name = mysql_real_escape_string($_POST['username']);

$check_for_username = mysql_query("SELECT username FROM mmh_user_info WHERE username='$name'");

if (mysql_num_rows($check_for_username) > 0) {
    $output = true;
} else {
    $output = false;
}
echo json_encode($output);
?>

此代码始终报告用户名已被使用,即使它没有

解决方案

要解决此问题,您需要修改 PHP 脚本。具体来说,应该更新用于检查用户名是否存在的查询:

// check-username.php
<?php
require_once "./source/includes/data.php";
header('Content-type: application/json');
$request = $_REQUEST['username'];

$query = mysql_query("SELECT * FROM mmh_user_info WHERE username ='$username'");
$result = mysql_num_rows($query);
if ($result == 0){
$valid = 'true';}
else{
$valid = 'false';
}
echo $valid;
?>

之前的 PHP 脚本使用 mysql_real_escape_string 来防止 SQL 注入,但它在查询中没有包含 $username 变量。这导致错误检查始终返回肯定结果,表明用户名已被占用。

使用修订后的 PHP 脚本,查询可以正确检查特定用户名是否存在,从而确保准确的验证。

以上是为什么我的 jQuery 验证远程方法总是表明用户名存在?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn