在回复上一个问题后,我使用jQuery返回用户名是否可用,我在网站上找到了一些代码,告诉我如何操作。从我所看到的,代码似乎是正确的结构,并连接到数据库,但即使名称不在数据库中,它返回它不可用。
这是jQuery(和注册表单),它包含在register.php文件中(将在jQuery下面链接)。
<div class="registration">
<h3>Register - Create a new Account</h3>
<form action="confirm-registration.php" method="POST">
<input type="text" name="create-username" id="username" placeholder="Username" maxlength="25" /><input type='button' id='check_username_availability' value='Check Availability'>
<div id='username_availability_result'></div> <br />
<input type="password" name="create-password" placeholder="Password" /> <br />
<input type="password" name="confirm-password" placeholder="Confirm Password" /> <br />
<input type="email" name="create-email" placeholder="E-mail Address" maxlength="45" /> <br />
<input type="submit" value="Complete Registration" />
</form>
<form>
<input type="submit" value="Cancel" />
</form>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script src="http://maps.googleapis.com/maps/api/js?key=AIzaSyCJnj2nWoM86eU8Bq2G4lSNz3udIkZT4YY&sensor=false"></script>
<script type="text/javascript" src="/check-user.js"></script>
<script type="text/javascript">
$(document).ready(function() {
//the min chars for username
var min_chars = 3;
//result texts
var characters_error = 'Minimum amount of chars is 3';
var checking_html = 'Checking...';
//when button is clicked
$('#check_username_availability').click(function(){
//run the character number check
if($('#username').val().length < min_chars){
//if it's bellow the minimum show characters_error text '
$('#username_availability_result').html(characters_error);
}else{
//else show the cheking_text and run the function to check
$('#username_availability_result').html(checking_html);
check_availability();
}
});
});
//function to check username availability
function check_availability(){
//get the username
var username = $('#username').val();
//use ajax to run the check
$.post("check_username.php", { username: username },
function(result){
//if the result is 1
if(result > 0){
//show that the username is available
$('#username_availability_result').html(username + ' is Available');
}else{
//show that the username is NOT available
$('#username_availability_result').html(username + ' is not Available');
}
});
}
</script>
下面的代码链接在与此相关的最终文件中 - check-username.php。这是使用用户名查询数据库然后返回它的文件。我将链接下面这个PHP。
<?php
include '../connect.php';
if (isset($_SESSION['signed_in']) && $_SESSION['signed_in'] == true ) {
header('Location : http://localhost/blog');
} else {
echo include 'registration_form.php';
require 'check_username.php';
}
?>
<?php
$username = mysql_real_escape_string(isset($_POST['create-username']));
//mysql query to select field username if it's equal to the username that we check '
$result = mysql_query('SELECT user_name from users where user_name = "'. $username .'"');
//if number of rows fields is bigger them 0 that means it's NOT available '
if(mysql_num_rows($result) > 0){
//and we send 0 to the ajax request
echo 0;
} else {
//else if it's not bigger then 0, then it's available '
//and we send 1 to the ajax request
echo 1;
}
对此有任何帮助将不胜感激,这不是我的代码,我没有做太多的jQuery,所以在尝试了一些事情后,我现在完全失去了如何解决它。
谢谢, 本
答案 0 :(得分:1)
这不符合你的想法:
$username = mysql_real_escape_string(isset($_POST['create-username']));
这里的结果将是:
$username = 'true';
因为isset()
返回一个布尔值。您可以检查是否设置了某些内容:
if (!isset($_POST['create-username'])) {
// show an error, stop processing the page
}
但要获得实际值,isset()
不是您想要的:
$username = mysql_real_escape_string($_POST['create-username']);
这样您就可以检查用户输入值,而不是布尔值。 (奇怪的是,你的数据中有一个'true'
或其他任何评估的用户名。可能是其他地方的另一个类似错误。)
作为旁注,即使您使用的是mysql_real_escape_string()
,您仍应调查升级到mysqli
之类的内容并使用带有查询参数的预准备语句。
附加说明:目前,您的用户名比较区分大小写。因此,'David'
和'david'
将被视为不同的用户。如果那不是你想要的,你可能想要在外壳上标准化。存储用户输入的未修改用户名并将其设置为大写/小写以进行比较,或者在存储之前将其设置为大写/小写,并始终对其他输入执行相同操作。
答案 1 :(得分:1)
除了已经提到的内容之外:
在你的jQuery中,你正在使用:
$.post("check_username.php", { username: username }...)
将"bob" => "bob"
作为键/值对发布。
试试这样:
{ "username": username }
此外,您的PHP正在检查:
$_POST['create-username']
虽然它应该是:
$_POST['username']
(应该与Ajax中的$.post
匹配)
<小时/> 使用Chromes network console监控请求并确保获得预期结果。
答案 2 :(得分:0)
您需要在SQL中规范化比较。请参阅LOWER()
mysql函数和strtolower
php函数。我还要添加trim()
以获得良好的衡量标准。
$result = mysql_query('SELECT user_name from users where LOWER(user_name) = "'. strtolower(trim($username)) .'"');
此外,如果只是回显echo mysql_num_rows(result);
是的isset()
应该出来。
答案 3 :(得分:-1)
$ username = mysql_real_escape_string(isset($ _ POST [&#39; create-username&#39;]));
由于isset函数,$ username的值不正确:尝试删除它。