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中文网其他相关文章!