Я новичок в JQuery и пытаюсь написать скрипт для проверки доступности имени пользователя. Моя проблема в том, что независимо от того, что я набираю, я всегда возвращаюсь «Это имя пользователя уже используется».
Источник JQuery:
$(document).ready(function() { jQuery.validator.addMethod("usernameCheck", function(username) { var isSuccess = false; $.ajax({ url: "username_availability.php", data: "username=" + username, async: false, success: function(msg) { isSuccess = msg === "TRUE" ? true : false } }); return isSuccess; },""); $("#register_form").validate({ onkeyup:false, rules: { username: { required: true, minlength: 3, usernameCheck: true // remote check for duplicate username } }, messages: { username: { required: "username is required.", minlength: jQuery.format("username must be at least {0} characters in length."), usernameCheck: "This username is already in use." } } });
PHP Источник:
include('database_connection.php'); if (isset($_POST['username'])) { $username = mysql_real_escape_string($_POST['username']); $check_for_username = mysql_query("SELECT user_id FROM users WHERE username='$username'"); if (mysql_num_rows($check_for_username)) { echo "TRUE"; } else { echo "FALSE"; //No Record Found - Username is available } } ?>
вinclude('database_connection.php'); if (isset($_POST['username'])) { $username = mysql_real_escape_string($_POST['username']); $check_for_username = mysql_query("SELECT user_id FROM users WHERE username='$username'"); if (mysql_num_rows($check_for_username)) { echo "TRUE"; } else { echo "FALSE"; //No Record Found - Username is available } } ?>
HTML Источник:
<input class="username" id="username" type="text" name="username" value="" maxlength="20" />
большое спасибо
Задайте type
опции ajax-вызова 'POST'
. Кроме того, AJAX не будет блокировать return isSuccess
.
Вы можете посмотреть удаленное подтверждение, предоставленное jQuery Validate.
http://docs.jquery.com/Plugins/Validation/Methods/remote#options
Измените свои правила.
rules: { username: { required: true, minlength: 3, remote: 'username_availability.php' // remote check for duplicate username } },
Просто взгляните на примеры.
Мне интересно, является ли эта строка проблемой:
data: "username=" + username,
Попробуйте изменить это на правильный массив, поскольку я не верю, что jQuery автоматически разрешает такой формат, особенно для данных POST. Кроме того, установите опцию типа: «post» в вызове $ .ajax, поскольку jQuery автоматически разрешает запросы $ .ajax для GET и вы используете POST в своем PHP-скрипте.
Попробуйте изменить источник PHP, чтобы вернуть «1» или «0»:
include('database_connection.php'); if (isset($_POST['username'])) { $username = mysql_real_escape_string($_POST['username']); $check_for_username = mysql_query("SELECT user_id FROM users WHERE username='$username'"); if (mysql_num_rows($check_for_username)) { echo "TRUE"; } else { echo "FALSE"; //No Record Found - Username is available } } ?>
вinclude('database_connection.php'); if (isset($_POST['username'])) { $username = mysql_real_escape_string($_POST['username']); $check_for_username = mysql_query("SELECT user_id FROM users WHERE username='$username'"); if (mysql_num_rows($check_for_username)) { echo "TRUE"; } else { echo "FALSE"; //No Record Found - Username is available } } ?>
а затем измените свой JS, чтобы проанализировать это как целое число:
success: function(msg) { isSuccess = parseInt(msg); }
Вы можете использовать следующее, просто измените его для своего имени пользователя (я использую адрес электронной почты в качестве имени пользователя. Я использую пустую ячейку таблицы id = «emailError» для хранения сообщения.
JQuery:
$('#email').keyup(function(){ $.ajax({ type: 'POST', url: 'ajax.checkEmail.php', data: {e:$('#email').val()}, success: function(data){ if(data == 'true'){ $('#emailError').html('This email is already used'); }else{ $('#emailError').html(''); } } }) });
PHP (ajax.checkEmail.php):
включают в себя ( 'inc.php'); $ query = 'SELECT COUNT (*) FROM tblcustomers WHERE email = "'. $ _ POST ['e']. '"'; $ result = $ dbO-> getSingleResult ($ query); if ($ result> 0) напечатать 'true'; еще напечатать 'false';
Это работает только проверка сделана того же кода
jQuery.validator.addMethod("usernameCheck", function(username) { var isSuccess = false; $.ajax({ url: "checkusr.php", data: "username=" + username, async: false, success: function(msg) { if(msg ==0) { isSuccess=false; } else { isSuccess=true; } } }); return isSuccess; },"Username not available");
PHP SIDE CODE
if ($obj->checkUsername($_GET['username'],"artist")> 0 ) { echo 0; } else { echo 1; } }