Есть такая проблема, если логин и пароль не правильный, то в блоке выводит неправильный логин и пароль, но если правильный, то в этом же блоке, появляется дубликат сайта, почему так, если в php коде, я написал переадресацию?
<p>Вход на сайт</p>
<form method="POST">
<div><label><span>Логин</span><input class="login" name="login" type="text"></label></div>
<div><label><span>Пароль</span><input class="password" name="password" type="password"></label></div>
<input type="submit" class="auth" name="auth" value="Войти">
</form>
<div id="wrongLogin"></div>
<div class="registr"><a href="?action=registr">Или зарегистрируйтесь</div>
<script>
var auth = document.querySelector('.auth');
auth.addEventListener('click', function(e) {
e.preventDefault();
var forma = e.target.parentElement;
var login = forma.elements.login.value;
var pass = forma.elements.password.value;
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function() {
if (this.readyState==4 && this.status==200) {
wrongLogin.innerHTML=this.responseText;
}
}
xmlhttp.open("POST","./",true);
xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
xmlhttp.send("log="+login+"&password="+pass);
})
</script>
php файл
function login($login, $password) {
$newLogin = str_replace(";","",$login);
$newLogin2 = str_replace(")","",$newLogin);
$newLogin3 = str_replace("'","",$newLogin2);
$sqlPass = "SELECT `id`, `login`, `password`, `avatar`, `link_vk`, `reputation` FROM users WHERE login = :log";
$resPass = $this->db->prepare($sqlPass);
$resPass->bindValue(':log', trim($newLogin3), PDO::PARAM_STR);
$resPass->execute();
$allRes = $resPass->fetchAll();
if(count($allRes) == 0) {
die('<p>Неверный логин или пароль</p>');
}
$needPassword = $allRes[0]['password'];
$userId = $allRes[0]['id'];
$userLogin = $allRes[0]['login'];
$userAvatar = $allRes[0]['avatar'];
$userVk = $allRes[0]['link_vk'];
$userRep =$allRes[0]['reputation'];
$hash = $needPassword;
if (password_verify($password, $hash)) {
$salt = 'slovo';
$tokenstr = strval(date('s')) . $salt;
$token = md5($tokenstr);
$sql = "UPDATE users SET token ='" . $token . "' WHERE login = :log2";
$queryToket = $this->db->prepare($sql);
$queryToket->bindValue(':log2', trim($newLogin3), PDO::PARAM_STR);
$queryToket->execute();
setcookie ("user", $token, time()+604800);
$_SESSION['token'] = $token;
$_SESSION['user'] = $userLogin;
$_SESSION['id'] = $userId;
$_SESSION['avatar'] = $userAvatar;
$_SESSION['vkontakte'] = $userVk;
$_SESSION['reputation'] = $userRep;
output_add_rewrite_var('token', $token);
header('Location: ./index.php?token='.$_SESSION['token']);
}
else {
die('<p>Неверный логин или пароль</p>');
}
Вы переадресуете запрос который вы отправляете аяксом, поэтому то у вас и отображает дубликат сайта. Вам нужно сделать примерно следующее
При верном логине вместо
header('Location: ./index.php?token='.$_SESSION['token']);
нужно проставлять статус 200, хотя он и по умолчанию будет 200
header("HTTP/1.1 200 OK");
а вот вместо
die('<p>Неверный логин или пароль</p>');
отправлять
header('HTTP/1.0 401 Unauthorized');
а в js уже соответственно ловить
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
if(xmlhttp.status == 200) {
window.location.reload(false);
}
else {
wrongLogin.innerHTML='<p>Неверный логин или пароль</p>';
}
}
};
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Такая ситуация: есть два файла - в одном обьявлено два массива
Есть три ссылки на сортировки (по статусу, эладресу, имени), по умолчанию - все по возрастанию