Hy Я пытаюсь проверить адрес электронной почты в регистрационной форме. Я хочу проверить, существует ли адрес в базе данных;
У меня есть следующая функция:
function validateEmailRepeat(){ // check if email exists in the database; var emailVal = $('#email').val(); // assuming this is a input text field $.post('check_email.php', {'email' : emailVal}, function(data) { if(data==1) { email.addClass("error"); emailInfo.text("Adress exists"); emailInfo.addClass("error"); dataExist=1; } else { email.removeClass("error"); emailInfo.text("Valid adress"); emailInfo.removeClass("error"); dataExist=0; } }); if(dataExist==1) return false; else return true; }
check_email.php выглядит так:
require_once('db.php'); if (isset($_POST['email'])){ $email=mysqli_real_escape_string($con,$_POST['email']); $sql = "SELECT * FROM users WHERE `username`='".$email."'"; $select=mysqli_query($con,$sql) or die("fail"); $row = mysqli_num_rows($select); if ($row >0) { echo 1; }else echo 0 ; } else echo "post error";
Я новичок в этом . Так что не будь жестким. заранее спасибо.
LE: Извините! я забыл вопрос … проблема в том, что моя функция возвращает true, если я определяю var dataExist вне формы формы $ .post, и если я позволю ей, как сейчас, в функции, которую я получаю, «dataExist не определен», ошибка и возвращает true
Le: PHP возвращает ожидаемые 1 и 0 так, как я хотел.
LE: похоже, определение
var dataExist = 0;
вне функции validateEmailRepeat()
разрешила проблему.
если есть другой способ, более элегантный, пожалуйста, скажите мне, потому что это кажется мне немного глупым.
Проблема в том, что вы не можете вернуть значение в вызываемую функцию, потому что ajax работает асинхронно.
function validateEmailRepeat(){ // check if email exists in the database; var emailVal = $('#email').val(); // assuming this is a input text field $.post('check_email.php', {'email' : emailVal}, function(data) { if(data==1){ email.addClass("error"); emailInfo.text("Adress exists"); emailInfo.addClass("error"); dataExist=1; }else{ email.removeClass("error"); emailInfo.text("Valid adress"); emailInfo.removeClass("error"); dataExist=0; } $('#some_input').val(dataExist); validateUserName(); }); } function validateUserName() { var input = $('#some_input').val(); if (input) { alert("This username is already taken");// whatever } else { // whatever } };
Вы сравниваете имя пользователя с адресом электронной почты. Так работает ваша БД?
$ sql = "SELECT * FROM users WHERE
username
= '". $ email. "'";
Уверен, у вас есть поле в вашей базе данных для самого электронного письма, иначе я предлагаю вам сделать это. Запрос должен выглядеть так:
$sql = "SELECT * FROM users WHERE email = '".$email."'";
Без одинарных кавычек для столбца.