@sunnyrio

Почему при запуске php программы в браузере после неудачной авторизации не появляется окно с предложением ввести логин и пароль?

При запуске php программы в браузере не появляется окно с предложением ввести логин и пароль. После первого неправильного ввода в окно авторизации программа не выдает заново окошко с предложением ввести логин и пароль а лишь пишет сообщение о том что введен неправильный логин или пароль, в чем дело как вернуть окно авторизации?

Вот сам код из книги O'reilly:

<?php // authenticate.php
require_once 'login.php';
$db_server = mysql_connect($db_hostname, $db_username, $db_password);

if (!$db_server) die("Невозможно подключиться к MySQL: " . mysql_error());
mysql_select_db($db_database)
or die("Невозможно выбрать базу данных: " . mysql_error());
if (isset($_SERVER['PHP_AUTH_USER']) &&
isset($_SERVER['PHP_AUTH_PW']))
{
$un_temp = mysql_entities_fix_string($_SERVER['PHP_AUTH_USER']);
$pw_temp = mysql_entities_fix_string($_SERVER['PHP_AUTH_PW']);

$query = "SELECT * FROM users WHERE username='$un_temp'";
$result = mysql_query($query);
if (!$result) die("Сбой при доступе к базе данных: " . mysql_error());
elseif (mysql_num_rows($result))
{
$row = mysql_fetch_row($result);
$salt1 = "qm&h*";
$salt2 = "pg!@";
$token = md5("$salt1$pw_temp$salt2");

if ($token == $row[3]) echo "$row[0] $row[1]:
Привет, $row[0], теперь вы зарегистрированы под именем '$row[2]'";
else die("Неверная комбинация имя пользователя-пароль");
}
else die("неверная комбинация имя пользователя-пароль");
}
else
{
header('WWW-Authenticate: Basic realm="Restricted Section"');
header('HTTP/1.0401 Unauthorized');
die ("Пожайлуста, введите имя пользователя и пароль");
}

function mysql_entities_fix_string($string)
{
return htmlentities(mysql_fix_string($string));
}

function mysql_fix_string($string)
{
if (get_magic_quotes_gpc()) $string = stripslashes($string);
return mysql_real_escape_string($string);
}
?>
  • Вопрос задан
  • 216 просмотров
Пригласить эксперта
Ответы на вопрос 4
@porozhnyy
2016 год. mysql_*. Без комментариев
Ответ написан
Комментировать
@feldwebel
die прекращает выполнение скрипта. Эта функция используется в качестве костыля при отладке и в плохих учебных примерах. Попробуй переписать логику скрипта так, чтобы обойтись без die.
Ответ написан
@thorii
Чем можно заменить этот die?

return false;
//или
throw new Exception('DB connect fail');

Оба оператора завершают работу функции.
В вашем случае, лучше завернуть код в try catch
try {
//ваш код,  где die заменены на throw new Exception('Сообщение об ошибке')
} catch (Exception $e) {
echo $e->getMessage();
}


Это обязательно надо знать:
Исключения php
Работа с исключениями
PHP PDO
PHP Mysqli

Изучите эти статьи и перепишите код по их канонам, уверяю, код станет более читабельным и весьма сократится
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
else die("неверная комбинация имя пользователя-пароль");
Вот поэтому. die() - завершает работу скрипта с выдачей строки на экран.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы