[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ошибка при выводе формы для ввода логина и пароля
tech
Ребят, очередной пример с книги. И опять 2 ошибки:
Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\321.php:1) in Z:\home\localhost\www\321.php on line 17

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\localhost\www\321.php:1) in Z:\home\localhost\www\321.php on line 18

В чем тут может быть проблема? Все верно переписано с книги.

<?php 
$username='admin';
$password='letmein';

if (isset($_SERVER['PHP_AUTH_USER']) &&
isset($_SERVER['PHP_AUTH_PW']))

{
if ($_SERVER['PHP_AUTH_USER'] == $username &&
$_SERVER['PHP_AUTH_PW'] == $password)
echo "You are now logged in";
else die("Invalid username or pass");

}
else
{
header('WWW-Authenticate: Basic realm="Restricted Section"');
header('HTML/1.0 401 Unauttorized');
die("Please enter your username and password");
}?>
sergeiss
Я могу ответить... Но почему ты не спросил у гугла? Там есть и обсуждения, и готовые ответы.

Например, тут вот: https://www.google.ru/search?client=opera&q...der+information

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
tech
На одном из сайтов нашел это:
Уже более опытный программист, делая второй или третий сайт, зная, что выводить заголовки после основного содержания нельзя...

т.е. мне надо каким-то образом блок после ELSE поставить в начало кода?

else
{
header('WWW-Authenticate: Basic realm="Restricted Section"');
header('HTML/1.0 401 Unauttorized');
die("Please enter your username and password");
}

tech
Цитата (sergeiss @ 28.05.2014 - 18:09)
Я могу ответить... Но почему ты не спросил у гугла? Там есть и обсуждения, и готовые ответы.

Например, тут вот: https://www.google.ru/search?client=opera&q...der+information

я кажется понял, нужно просто функциию header(); всегда ставить перед началом всего кода, но как ее поставить в начало если мне нужно вызвать окно для ввода пароля в середине кода после проверки if, мне надо обязательно сделать проверку unsure.gif
sergeiss
Цитата (tech @ 28.05.2014 - 22:16)
я кажется понял, нужно просто функциию header(); всегда ставить перед началом всего кода...

Да, ты правильно понял smile.gif

Цитата (tech @ 28.05.2014 - 22:16)
...но как ее поставить в начало если мне нужно вызвать окно для ввода пароля в середине кода после проверки if, мне надо обязательно сделать проверку

А тут надо просто продумывать логику работы скрипта. Сначала делай все проверки, потом выводи инфу. И если после проверки ты, возможно, захочешь сделать header('Location...), то ЗАЧЕМ ты что-то будешь выводить, какие окна для пароля?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
tech
Тут еще понятная и интересная штука получается. На ноутбуке стоит редактор notepad++, скопировал и вставил этот же пример, сохранил, запустил через firefox той же версии и все заработала уже раз 10 закрывал/открывал/обновлял браузер, все работает... чудо какое-то)
kaww
Цитата (sergeiss @ 28.05.2014 - 18:43)

Цитата (tech @ 28.05.2014 - 22:16)
я кажется понял, нужно просто функциию header(); всегда ставить перед началом всего кода...

Да, ты правильно понял

Нет не правильно. До начала вывода а не кода.

tech, если в проблемном файле перед <?php нет никаких символов, переносов строк и т.д. , то проверь кодировку. Если используешь utf-8, то должна быть utf-8 без bom
tech
погуглил и понял что проблема в редакторе.

Дело в том, что свой файл PHP вы можете создать в кодировке UTF-8, и некоторые редакторы кода в начало файла запишут дополнительный специальный символ, идентификатор UTF-8 (BOM - byte order mark). В редакторе он отображаться не будет, а вот сервер, который будет обрабатывать этот файл, может его принять просто за одиночный символ и вывести его сразу после заголовков.


на сколько понимаю этот специальный символ можно посмотреть в блокноте. тут следуйщий вопрос, как в моем dreamweaver в настройках задать создание/сохранения *.php файла без этого спец символа? Смотрел при создании и сохранении файла нет возможности выбирать с bom или без него, так же в настройках самой проги нет такой фичи.
tech
Цитата (kaww @ 29.05.2014 - 02:43)
Цитата (sergeiss @ 28.05.2014 - 18:43)

Цитата (tech @ 28.05.2014 - 22:16)
я кажется понял, нужно просто функциию header(); всегда ставить перед началом всего кода...

Да, ты правильно понял

Нет не правильно. До начала вывода а не кода.

tech, если в проблемном файле перед <?php нет никаких символов, переносов строк и т.д. , то проверь кодировку. Если используешь utf-8, то должна быть utf-8 без bom

я на минуту опаздал с ответом biggrin.gif
sergeiss
Цитата (tech @ 29.05.2014 - 06:44)
как в моем dreamweaver в настройках задать создание/сохранения *.php файла без этого спец символа

У меня установлен ДримВивер 8-й версии. Я им уже не пользуюсь, но и не удалил. Посмотрел. Во-первых, у тебя должна быть задана кодировка для страницы UTF8. Тогда при выборе "сохранить как" можно указать, надо ли использовать BOM.

PS. Еще раз глянул, повнимательнее smile.gif Уже на этапе установки кодировки страницы можно выставить/снять галочку "including BOM". В меню Modify-Page Properties-Title/Encoding.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.