Хочу сделать вход на сайт с паролем для пользователей, имеющих username и password в базе данных. Для этого есть код:
<?php
require_once('shared_php/connect_vars.php');
require_once('shared_php/app_vars.php');
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate:Basic realm="entering"');
exit ("<h3>Неверное имя пользователя или пароль. Попробуйте еще раз.</h3>");
// Если была нажата "Отмена"
$username=mysqli_real_escape_string($connect, trim($_SERVER['PHP_AUTH_USER']));
$password=mysqli_real_escape_string($connect, trim($_SERVER['PHP_AUTH_PW']));
$connect=mysqli_connect(DM_HOST, DB_USER, DB_PASSWORD, DB_NAME);
//Проверка логина и пароля
$check_password="SELECT user_id, username FROM signups WHERE username='$username' AND password=SHA('$password')"; //Выберутся все такие username; В идеале - одна строка
//с логином, паролем и другой инфой (ненужной) в ней
$query=mysqli_query($connect, $check_password);
if (mysqli_num_rows($query)==1) {
//все норм
$row=mysqli_fetch_array($query);
$user_id=$row['user_id'];
$username=$row['username'];
}
Однако когда ввожу правильные логин и пароль, которые точно есть в базе, выполняется блок else (снова появляется форма ввода логина и пароля).
Кроме того, если просто отдельно поставить на какую-нибудь страницу что-то вроде этого:
<?php
$username='pet';
$password='rocks';
if (($_SERVER['PHP_AUTH_USER']!=$username) OR ($_SERVER['PHP_AUTH_PW']!=$password)) {
// Что-то не так
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate:Basic realm="petrocks"');
exit ("<h3>Неверное имя пользователя или пароль. Попробуйте еще раз.</h3>");
// Если была нажата "Отмена"
}
?>
То первый раз заходит нормально (при вводе верных данных), но если после этого сменить в скрипте логин/пароль то после обновления страницы и ввода новых верных данных - возникает ошибка (снова перезагружает форму), и так до тех пор, пока в скрипте не вернуть старые логин и пароль и не ввести их затем в форму (после этого грузит нужную страницу).