Решил немного поучить php и иже с ними.
С формы авторизации (два поля: логин, пароль) отправляю данные php-скрипту посредством сериализации формы с помощью jQuery.ajax. В ответ ожидаю получать 'yes', если такой пользователь с таким паролем есть, и 'no' - если, собственно, нет, выводя через echo.
Проблема в том, что скрипт обратно посылает пустоту. Переставляю выводы echo - иногда выводит только 'yes', иногда только 'no'.
Тестировал с передачей напрямую через форму (добавление submit-кнопки и action='auth.php'), все нормально - выводит yes/no.
Есть подозрение, что js данные перехватывает раньше/позже, чем отвечает php-скрипт. Все запускается на локалхосте, php 5.3.13
Форма:
<form id='logform' method='post' action=''>
<div class="close"></div>
<div class="title">Вход</div>
<div class="form_err" style="display:block">Неверный логин или пароль</div>
<div class="form_err err_true" style="display:block">Вы успешно авторизованы!</div>
<input id='login' name='login' type="text" placeholder="Логин" />
<input id='password' name='password' type="password" placeholder="Пароль" />
<button id='log_btn'>Вход</button>
</form>
jquery-скрипт передачи данных с формы (алерты для "дебага"):
$('#log_btn').click(function() {
$.ajax({
type: "POST",
url: "log_user.php",
data: $('logform').serialize(),
traditional: true,
success: function(resp) {
if (resp == 'yes') {
alert('yes');
$('#logform .form_err:first').css('display', 'none');
$('.err_true').css('display', 'block');
} else if (resp == 'no') {
alert('no');
$('#logform .form_err:first').css('display', 'block');
} else alert(resp);
},
error: function(resp) {
alert('error');
}
});
return false;
});
PHP-скрипт:
<?php
require_once('conn_db.php'); // файл с константами для подключения к бд
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB);
if(isset($_POST['login']) && isset($_POST['password'])) {
$username = $_POST['login'];
$password = $_POST['password'];
if ($stmt = $mysqli->prepare("SELECT count(*) FROM test_table WHERE login=?")) {
$stmt->bind_param('s', $username);
$stmt->execute();
$stmt->bind_result($count_rec);
$stmt->fetch();
$stmt->close();
}
if ($count_rec == null) {
echo 'no';
//exit();
}
// запрос на получение хэша пароля из таблицы
if ($stmt = $mysqli->prepare("SELECT pass FROM test_table WHERE login=?")) {
$stmt->bind_param('s', $username);
$stmt->execute();
$stmt->bind_result($corr_pass_hash);
$stmt->fetch();
// сравнение с введенным юзером паролем
$pass_hash = crypt($password, $corr_pass_hash);
if ($corr_pass_hash === $pass_hash) {
echo 'yes';
//exit();
} else {
echo 'no';
//exit();
}
$stmt->close();
}
}
$mysqli->close();
?>