Я пытаюсь проверить мое имя пользователя, если его можно зарегистрировать или нет с помощью jQuery, скрипт действительно работал без ошибок, но он продолжает говорить " the username in use "
даже если в базе данных нет записи имени пользователя.
вот PHP-код для моей функции
function checkavailabileUserName($UserName) { if(isSet($_POST['userName'])) { $username = $_POST['userName']; $sql_check = mysql_query("SELECT userUserName FROM user WHERE userUserName='$username'") or die(mysql_error()); if(mysql_num_rows($sql_check)) { echo '<font color="red">The username <STRONG>'.$username.'</STRONG> is already in use.</font>'; } else { echo 'OK'; } } }
Я вызываю эту функцию на странице с именем RegisterUserAction.php
как это
checkavailabileUserName($UserName);
ЗДЕСЬ КОД JAVASCRIPT
pic1 = new Image(16, 16); pic1.src = "loader.gif"; $(document).ready(function(){ $("#userName").change(function() { var usr = $("#userName").val(); if(usr.length >= 3) { $("#status").html('<img src="loader.gif" align="absmiddle"> Checking availability...'); $.ajax({ type: "POST", url: "RegisterUserAction.php", data: "userName="+ usr, success: function(msg){ $("#status").ajaxComplete(function(event, request, settings){ if(msg == 'OK') { $("#userName").removeClass('object_error'); // if necessary $("#userName").addClass("object_ok"); $(this).html(' <img src="accepted.png" align="absmiddle"> <font color="Green"> Available </font> '); } else { $("#userName").removeClass('object_ok'); // if necessary $("#userName").addClass("object_error"); $(this).html(msg); } }); } }); } else { $("#status").html('<font color="red">The username should have at least <strong>3</strong> characters.</font>'); $("#userName").removeClass('object_ok'); // if necessary $("#userName").addClass("object_error"); } }); });
И НАКОНЕЦ ЗДЕСЬ – HTML-КОД ДЛЯ ПОЛЯ
<td><label for="userName"></label> <input type="text" name="userName" id="userName" onkeyup="twitter.updateUrl(this.value)" class="inn" /> <div id="status"></div> <script type="text/javascript"> $( function () { twitter.screenNameKeyUp(); $('#user_screen_name').focus(); });</script>
Где я неправ ?
В вашем коде есть ошибка. Вы используете $ UserName в качестве аргумента для функции checkavailabileUserName, но вы не передаете этот аргумент функции. Это приводит к ошибке, и только вы получили сообщение «Username in Use».
Удалите аргумент $ UserName из функции, и код будет работать отлично.
Может быть, будет хорошо, если вы сможете сделать свой код более чистым и аккуратным и можете использовать jquery ajax call и PHP-код, например:
JQuery Ajax Call
jQuery(document).ready(function(){ jQuery("#userName").change(function() { jQuery("#status").empty(); var usr = jQuery("#userName").val(); if(usr.length >= 3) { jQuery("#status").html('<img src="loader.gif" align="absmiddle"> Checking availability...'); jQuery.ajax({ type: "POST", url: "RegisterUserAction.php" , data: "userName="+ usr, success: function(response){ if(response) { jQuery('#status').html('<img src="accepted.png" align="absmiddle"> <font color="Green"> Available </font>'); return true; } else { jQuery('#status').html('<font color="red">The username <STRONG>'+usr+'</STRONG> is already in use.</font>'); return false; } } }); } else { jQuery("#status").html('<font color="red">The username should have at least <strong>3</strong> characters.</font>'); return false; } }); });
PHP-код:
function checkavailabileUserName($checkavailabileUserName) { if(isset($_POST['userName'])) { $username = $_POST['userName']; $sql_check = mysql_query("SELECT userUserName FROM user WHERE userUserName ='$username'") or die(mysql_error()); if(mysql_num_rows($sql_check)>0) { echo false; } else { echo true; } } else { echo false; } }
Сначала вы должны использовать Firebug для инструментов FF или Chrome / IE в зависимости от вашего браузера (нажмите F12). Посмотрите на консоль и посмотрите, как выглядит сообщение AJAX. Убедитесь, что он правильно размещен и что у вас есть фактическое значение. Обычно я делаю свой jQuery AJAX так:
$.ajax({ type: "POST", url: "RegisterUserAction.php", data: { userName: usr }, dataType: "json", success: function(data) { if(data.success == 'true'){ //do something } else { //do something } } });
Затем на странице PHP я отправляю свой json закодированный обратный вызов так:
if (mysql_num_rows($sql_check)>0) { //do something $return_arr["success"] = 'true'; } else { //do something $return_arr["success"] = 'false'; } echo json_encode($return_arr);
Попробуйте изменить свой AJAX, чтобы использовать метод данных и dataType в моем примере и посмотреть, помогает ли это. Взгляните на консоль инструментов Firebug / Dev. Переходит ли значение? Если это так, то может быть что-то не так с PHP-стороной. Дайте мне знать, как это происходит, и если это часть PHP, мы можем заглянуть в нее дальше (хотя сейчас это выглядит хорошо).
Я думаю, что эта строка:
data: "userName="+ usr,
в соответствии с спецификацией jQuery данные должны быть переданы в этом формате
{ "userName": usr}
поэтому, возможно, вы вообще не отправляете никаких данных POST, и вы не входите в
if(isSet($_POST['userName'])){
и сообщение отправлено, если пусто (не «ОК»), поэтому вы получаете ответ "the username in use"