Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Notice: Undefined variable: PHP_SELF in ....


Автор: клоп 28.2.2006, 10:09
Есть кусок кода (файл test.php)

Код

<?PHP
 
if(!$PHP_SELF){
       if($HTTP_GET_VARS)          {extract($HTTP_GET_VARS, EXTR_PREFIX_SAME, "get_");}
       }
if($PHP_SELF == ""){ $PHP_SELF = $HTTP_SERVER_VARS[PHP_SELF]; }
 
?>
<html>
<BODY>
 
<center><a href="?do=link"><b>Ссылка2</b></a></center><br><br>
<?PHP
if($do == "link"){  echo"<br><center><b>Вы в ссылке2</b></center>";}
else{  echo"<br><center><b>Вы на главной</b></center>"; }
?>

<br>
<center><a href="?"><b>В начало</b></a></center><br><br>
</body>
</html>


Не могу понять как побороть сыпящиеся ошибки:


Notice: Undefined variable: PHP_SELF in c:\program files\apache group\apache\htdocs\test.php on line 3
Notice: Undefined variable: PHP_SELF in c:\program files\apache group\apache\htdocs\\test.php on line 6
Notice: Use of undefined constant PHP_SELF - assumed 'PHP_SELF' in c:\program files\apache group\apache\htdocs\test.php on line 6


Соответственно если в php.ini ставлю error_reporting = E_ALL & ~E_NOTICE то ничего не видно но в errorlog Апача они все равно пишуться, раздувая размер файла.

Автор: Ivushka 28.2.2006, 10:22
клоп
есть кнопка КОД
и поиск рулит
http://forum.vingrad.ru/index.php?showtopic=85004&hl=$_server

Автор: клоп 28.2.2006, 10:44
Цитата(Ivushka @ 28.2.2006, 10:22)
клоп
есть кнопка КОД
и поиск рулит
http://forum.vingrad.ru/index.php?showtopic=85004&hl=$_server

Поиск рулит!

Я видел этот топик и пытался менять $PHP_SELF на $_SERVER['PHP_SELF'], но тогда ссылки переставали работать smile

Автор: Guedda 28.2.2006, 10:52
Напиши, как ты использовал
Код

$_SERVER['PHP_SELF']

???

Автор: Ivushka 28.2.2006, 11:13
клоп
объясни что ты хочеш сделать
для обычного перехода по ссылкам не нужен этот код
Код

<?PHP
 
if(!$PHP_SELF){
       if($HTTP_GET_VARS)          {extract($HTTP_GET_VARS, EXTR_PREFIX_SAME, "get_");}
       }
if($PHP_SELF == ""){ $PHP_SELF = $HTTP_SERVER_VARS[PHP_SELF]; }
 
?>


Автор: клоп 28.2.2006, 11:47
Цитата(Ivushka @ 28.2.2006, 11:13)
клоп
объясни что ты хочеш сделать
для обычного перехода по ссылкам не нужен этот код
Код

<?PHP
 
if(!$PHP_SELF){
       if($HTTP_GET_VARS)          {extract($HTTP_GET_VARS, EXTR_PREFIX_SAME, "get_");}
       }
if($PHP_SELF == ""){ $PHP_SELF = $HTTP_SERVER_VARS[PHP_SELF]; }
 
?>


Хочу чтобы скрипт отслеживал действия пользователя и согласно им выводил на страницу ту или иную инфу. Грубо говоря сайт в одной странице, отслеживается переменная переданная методом GET и выводиться инфа соответствующая значению этой переменной. В моем примере (1-й пост) все это работает но сыпятся ошибки которые я не могу побороть. Может быть я делаю все не так, есть другие проверенные методы .. smile
Добавлено @ 11:49
Цитата(Guedda @ 28.2.2006, 10:52)
Напиши, как ты использовал
Код

$_SERVER['PHP_SELF']

???

Я просто тупо вставлял $_SERVER['PHP_SELF'] вместо $PHP_SELF, в следствии чего ссылки переставали работать.

Автор: smartov 28.2.2006, 11:52
клоп, ну ты приколист smile Нельзя же так через задницу делать.

Зачем по-твоему есть массив $_GET? Именно для того чтобы получать переменные get (точно так же есть массив $_POST).
И весь твой код сводится к
Код

<html>
<BODY>
 
<center><a href="?do=link"><b>Ссылка2</b></a></center><br><br>
<?PHP
if($_GET['do'] == "link"){  echo"<br><center><b>Вы в ссылке2</b></center>";}
else{  echo"<br><center><b>Вы на главной</b></center>"; }
?>
<br>
<center><a href="?"><b>В начало</b></a></center><br><br>
</body>
</html>

Автор: Ivushka 28.2.2006, 11:55
клоп
ты когда делаеш ссылку с параметрами то значения параметров передаються на страницу и не надо их ловить GET или POST

при передачи параметров ссылкой их просто ловят
Код

zsp_trips.php?str=asidlijsdfkl&Id_Pr=0

echo $str." ".$Id_Pr;

выведет "asidlijsdfkl 0"

Автор: клоп 28.2.2006, 12:28
Цитата(smartov @ 28.2.2006, 11:52)
клоп, ну ты приколист smile Нельзя же так через задницу делать.

И весь твой код сводится к
Код

<html>
<BODY>
 
<center><a href="?do=link"><b>Ссылка2</b></a></center><br><br>
<?PHP
if($_GET['do'] == "link"){  echo"<br><center><b>Вы в ссылке2</b></center>";}
else{  echo"<br><center><b>Вы на главной</b></center>"; }
?>
<br>
<center><a href="?[color=red]do=#[/color]"><b>В начало</b></a></center><br><br>
</body>
</html>

smartov огромное спасибо!!! Все работает без малейших ошибок. Правда пришлось еще определить както переменную перехода по ссылке =В начало= (пытался пометить красным в цитате).

А кусок кода

Код

<?PHP
 
if(!$PHP_SELF){
       if($HTTP_GET_VARS)          {extract($HTTP_GET_VARS, EXTR_PREFIX_SAME, "get_");}
       }
if($PHP_SELF == ""){ $PHP_SELF = $HTTP_SERVER_VARS[PHP_SELF]; }
 
?>


Я выловил его в инете про который было написано что если в php.ini - register_globals = Off то вставляй его и все заработает. Задумываться сильно не стал. Попробывал, получилось. Даже создал сайт www.severstalbasket.ru применив эту непонятную уже сейчас затею, которую нужно будет переделывать, благо у хостера error_log не пишется.

Автор: клоп 28.2.2006, 13:25
Код

<html>
<BODY>
 
<center><a href="?do=link"><b>Ссылка2</b></a></center><br><br>
<?PHP
if($_GET['do'] == "link"){  echo"<br><center><b>Вы в ссылке2</b></center>";}
else{  echo"<br><center><b>Вы на главной</b></center>"; }
?>
<br>
<center><a href="?do=#"><b>В начало</b></a></center><br><br>
</body>
</html>


smartov как уже писал все работает без ошибок, но при первом запуске файла test.php пока не была нажата ни одна ссылка, выкидывается предупреждение-ошибка:


Notice: Undefined index: do in c:\program files\apache group\apache\htdocs\test.php on line 6

Автор: Ivushka 28.2.2006, 13:33
Код

if(isset($_GET['do']))

Автор: krulik 28.2.2006, 13:34
Может так написать:
Код

if(isset($_GET['do']) && $_GET['do']== "link")


ЗЫ: пока я писал этот пост то уже появилось сообщение от Ivushka.Сорри

Автор: CyClon 28.2.2006, 14:01
Код
<?php

switch ($_GET['go']) {
    case stories:
    include("mods/stories/index.php");
    break;
    case account:
    include("mods/account/index.php");
    break;
    case about:
    include("mods/about/index.php");
    break;
    case default:
    include("mods/news/index.php");
    break;
}

?>


ИМХО самый красивый и безопасный вариант для навигации.

Автор: клоп 28.2.2006, 14:24
Я сейчас попарился и сваял законченный (благодаря Вам мои коллеги) вариант навигации. Ошибок и сообщений нет вообще. При желании можно сделать проверку, где если юзер в уже на данной ссылке то эта ссылка на странице превращается в обычный раскрашенный текст.

Код (берите на здоровье):

Код

<html>
<BODY>
<center><b>

<a href="?">В начало</b></a><br><br> 
<a href="?do=link">Ссылка1</a><br><br>
<a href="?do=link2">Ссылка2</a><br><br>
<a href="?do=link3">Ссылка3</a></b><br><br>



<?PHP
if(isset($_GET['do'])){
if($_GET['do'] == "link"){  echo"<br><b>Вы в ссылке1</b>";}
elseif($_GET['do'] == "link2"){  echo"<br><b>Вы в ссылке2</b>";}
elseif($_GET['do'] == "link3"){  echo"<br><b>Вы в ссылке3</b>";}
}
else{  echo"<br><b>Главная страница</b>";}
?>
<br>
</center>
</body>
</html>


Насчет безопасности не знаю, может кто знающий поделится в этом плане.

Автор: Ivushka 28.2.2006, 14:27
Зачепятельно что работает)

только я бы всеже сделала через case)))

Автор: smartov 28.2.2006, 17:28
Цитата(Ivushka @ 28.2.2006, 13:27 Найти цитируемый пост)
только я бы всеже сделала через case)))
Это верно.
Твой кусок
Код

<?PHP
if(isset($_GET['do'])){
if($_GET['do'] == "link"){  echo"<br><b>Вы в ссылке1</b>";}
elseif($_GET['do'] == "link2"){  echo"<br><b>Вы в ссылке2</b>";}
elseif($_GET['do'] == "link3"){  echo"<br><b>Вы в ссылке3</b>";}
}
else{  echo"<br><b>Главная страница</b>";}
?>

лучше выглядел бы
Код

<?php

switch (@$_GET['do'])
{
    case "link":
        echo"<br><b>Вы в ссылке1</b>";
        break;
        
    case "link2"
        echo"<br><b>Вы в ссылке2</b>";
        break;
        
    case "link3"
        echo"<br><b>Вы в ссылке3</b>";
        break;

    default:
        echo"<br><b>Первая нах... тобишь главная :)</b>";
        break;
}

?>


@ перед $_GET['do'] подавит ошибку если переменная не предопределена.

Автор: клоп 28.2.2006, 17:29
Вариант 2:
Код

<?PHP
if(@$_GET['do']){
if($_GET['do'] == "link"){  echo"<br><b>Вы в ссылке1</b>";}
elseif($_GET['do'] == "link2"){  echo"<br><b>Вы в ссылке2</b>";}
elseif($_GET['do'] == "link3"){  echo"<br><b>Вы в ссылке3</b>";}
}
else{  echo"<br><b>Главная страница</b>";}
?>


Или возвращаясь к первому посту в этом топике, прописать в начале test.php

error_reporting (E_ALL ^ E_NOTICE);

В итоге ошибки писаться в error_log Апача не будут, даже если в php.ini выставлено

error_reporting = E_ALL
display_errors = On

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)