Большой Воронежский Форум
» Веб-дизайн>подскажите где баг php
alladin 19:20 24.09.2003
57 if ($res[pass]==$pass) {
58 setcookie('fio',$res[fio],time()+3600);
59 setcookie('pa',$res[pass],time()+3600);
60 show_hello($res[fio]);
}}}



сыпет ошибки:
Notice: Use of undefined constant pass - assumed 'pass' in z:\home\test2.ru\www\index.icn.php on line 57

Notice: Use of undefined constant fio - assumed 'fio' in z:\home\test2.ru\www\index.icn.php on line 58

Warning: Cannot modify header information - headers already sent by (output started at z:\home\test2.ru\www\test.php:12) in z:\home\test2.ru\www\index.icn.php on line 58

Notice: Use of undefined constant pass - assumed 'pass' in z:\home\test2.ru\www\index.icn.php on line 59

Warning: Cannot modify header information - headers already sent by (output started at z:\home\test2.ru\www\test.php:12) in z:\home\test2.ru\www\index.icn.php on line 59

Notice: Use of undefined constant fio - assumed 'fio' in z:\home\test2.ru\www\index.icn.php on line 60

пишу echo " res[fio] res[pass]";
всё нормально отоброжает

alladin добавил [date]1064423251[/date]:
написал Error_Reporting(E_ALL & ~E_NOTICE);
остались только:
Warning: Cannot modify header information - headers already sent by (output started at z:\home\test2.ru\www\test.php:12) in z:\home\test2.ru\www\index.icn.php on line 58
и
Warning: Cannot modify header information - headers already sent by (output started at z:\home\test2.ru\www\test.php:12) in z:\home\test2.ru\www\index.icn.php on line 59
куки не работают(Outpost не логирует попытку их записи) [Ответ]
DMakeev 00:38 25.09.2003
1. По дефалту РНР, обрабатывая конструкцию $res[pass], ищет константу с именем pass, а затем уж "понимает", что это строка. Это не ошибка, но так все равно делать не стоит - обрабатывается чуть дольше (софффсем чуть-чуть, но иногда это критично), загаживает логи, да и код читать сложнее. Используй $res['pass'] и все будет гут.

2. До установки кукисов скрипт не должен выводить в браузер НИЧЕГО. Т.е. кукисы нужно устанавливать до тега '<html>'. Т.е.:

Код:
<html>
 <body>
  <?
   setcookie('pa',$res[pass],time()+3600);
   // НЕ РАБОТАЕТ
  ?>
  Hello world 
 </body>
</html>
Код:
<?
   setcookie('pa',$res[pass],time()+3600);
   // А так все нормально
?>
<html>
 <body>
  Hello world 
 </body>
</html>
Более того, даже пробела перед <? быть не должно. Собно, в мануале об этом сказано:

Сообщение от :
Cookies must be sent before any other headers are sent (this is a restriction of cookies, not PHP). This requires you to place calls to this function before any <html> or <head> tags.

[Ответ]
alladin 00:04 02.10.2003
DMakeev спасибо за помощь в нелёгком деле
сел делать дальше только сейчас
немного подправил теперь такай бойда

$user=test_user(); # проверяет что в куках и есть ли они
echo "$user"; #для контроля
if ($user=='0') {show_login();} else {show_hello($user);}

show_login() выводит форму ввода имени и пароля
первый заход всё нормально но по нажатию вход происходит следуюшее:
Fatal error: Cannot redeclare show_login() (previously declared in z:\home\test2.ru\www\index.icn.php:3) in z:\home\test2.ru\www\index.icn.php on line 3
в 3 строке заголовок show_login()
$user не выводится
Буду очень признателен за помощь [Ответ]
DMakeev 00:16 02.10.2003
Дважды определяется функция show_login(). Она, насколько я понял, выведена в отдельный файл, который рекваирится дважды. Самый простой способ избежать подобных проблем - использовать require_once() вместо require().

PS Если она не в отдельном файле, посмотри, быть может случайно сделал копию функции и забыл переименовать?

DMakeev добавил [date]1065043160[/date]:
PPS Конструкция $variable=='0' не есть гут. Вообще, с мустыми строками и нулями нужно использовать $variable===0. У тебя 0 указан как стока, но хз как там PHP во внутреннем представлении это видит
Бяка в том, что у тебя на локалхосте может все работать, а на хостинге, где другая версия PHP - нет. [Ответ]
alladin 17:53 07.10.2003
DMakeev биг фанкс усё заработало [Ответ]
Вверх