У меня есть форма регистрации пользователя. Я делаю проверку на стороне сервера на лету через AJAX. Краткое изложение моей проблемы состоит в том, что после проверки 2 полей я получаю ошибку для проверки второго поля. Если я прокомментирую первое поле, то во 2-м поле не отображается никакой ошибки. Это странное поведение. Более подробная информация ниже:
HTML, JS и Php код приведены ниже:
ФОРМА HTML:
<form id="SignupForm" action="">
<fieldset>
<legend>Free Signup</legend>
<label for="username">Username</label>
<input name="username" type="text" id="username" /><span id="status_username"></span><br />
<label for="email">Email</label>
<input name="email" type="text" id="email" /><span id="status_email"></span><br />
<label for="confirm_email">Confirm Email</label>
<input name="confirm_email" type="text" id="confirm_email" /><span id="status_confirm_email"></span><br />
</fieldset>
<p>
<input id="sbt" type="button" value="Submit form" />
</p>
</form>
JS:
<script type="text/javascript">
$(document).ready(function()
{
$("#email").blur(function()
{
var email = $("#email").val();
var msgbox2 = $("#status_email");
if(email.length > 3)
{
$.ajax({
type: 'POST',
url: 'check_ajax2.php',
data: "email="+ email,
dataType: 'json',
cache: false,
success: function(data)
{
if(data.success == 'y')
{
alert('Available');
}
else
{
alert('Not Available');
}
}
});
}
return false;
});
$("#confirm_email").blur(function()
{
var confirm_email = $("#confirm_email").val();
var email = $("#email").val();
var msgbox3 = $("#status_confirm_email");
if(confirm_email.length > 3)
{
$.ajax({
type: 'POST',
url: 'check_ajax2.php',
data: 'confirm_email='+ confirm_email + '&email=' + email,
dataType: 'json',
cache: false,
success: function(data)
{
if(data.success == 'y')
{
alert('Available');
}
else
{
alert('Not Available');
}
}
, error: function (data)
{
alert('Some error');
}
});
}
return false;
});
});
</script>
PHP код:
<?php //check_ajax2.php
if(isset($_POST['email']))
{
$email = $_POST['email'];
$res = mysql_query("SELECT uid FROM members WHERE email = '$email' ");
$i_exists = mysql_num_rows($res);
if( 0 == $i_exists )
{
$success = 'y';
$msg_email = 'Email available';
}
else
{
$success = 'n';
$msg_email = 'Email is already in use.</font>';
}
print json_encode(array('success' => $success, 'msg_email' => $msg_email));
}
if(isset($_POST['confirm_email']))
{
$confirm_email = $_POST['confirm_email'];
$email = ( isset($_POST['email']) && trim($_POST['email']) != '' ? $_POST['email'] : '' );
$res = mysql_query("SELECT uid FROM members WHERE email = '$confirm_email' ");
$i_exists = mysql_num_rows($res);
if( 0 == $i_exists )
{
if( isset($email) && isset($confirm_email) && $email == $confirm_email )
{
$success = 'y';
$msg_confirm_email = 'Email available and match';
}
else
{
$success = 'n';
$msg_confirm_email = 'Email and Confirm Email do NOT match.';
}
}
else
{
$success = 'n';
$msg_confirm_email = 'Email already exists.';
}
print json_encode(array('success' => $success, 'msg_confirm_email' => $msg_confirm_email));
}
?>
ПРОБЛЕМА:
Пока я проверяю $_POST['email']
, а также $_POST['confirm_email']
в файле check_ajax2.php, проверка для поля verify_email всегда возвращает ошибку. Однако, обладая ограниченными знаниями о Firebug, я узнал, что при вводе адреса электронной почты и verify_email в полях были следующие ответы:
ОТВЕТ 1:
{"success": "y", "msg_email": "Электронная почта доступна"}
ОТВЕТ 2:
{"success": "y", "msg_email": "Электронная почта доступна"} {"success": "n", "msg_confirm_email": "Электронная почта и подтверждение электронной почты НЕ совпадают."}
Хотя RESPONSE 2 показывает, что мы получаем правильное сообщение через msg_confirm_email, во внешнем интерфейсе появляется предупреждение «Некоторая ошибка» (я включил предупреждение для отладки). Я потратил 48 часов, пытаясь изменить каждую часть кода везде, где это возможно, но без особого успеха. Что странно в этом, так это то, что если я прокомментирую валидацию для поля $_POST['email']
полностью, то валидация для поля $_POST['confirm_email']
будет отображаться корректно без каких-либо ошибок. Если я включу его обратно, оно корректно проверяет поле электронной почты, но когда оно достигает точки проверки поля verify_email, оно снова показывает мне ошибку.
Я также пытался переименовать переменную успеха на странице check_ajax2.php в другие имена для $_POST['email']
и $_POST['confirm_email']
, но безуспешно. Я буду добавлять дополнительные поля в форму и проверять их на странице check_ajax2.php. Поэтому я не планирую использовать разные страницы ajax для проверки каждого из этих полей (и я не думаю, что это разумно делать так). Я не гуру JQuery или AJAX, поэтому вся помощь в решении этой проблемы очень ценится.
Заранее спасибо.