Большой Воронежский Форум
» Веб-дизайн>Вопрос php
Dim_Z 15:16 06.04.2007
Меню навигации состоит из $link=??????? ссылок, в центре страницы стоит скрипт include "$link.php", как сделать что бы не имея значения, $link автоматом менялась на "news/news.php". [Ответ]
Alex Klimov 15:19 06.04.2007
я тут что-то подобное уже спрашивал: http://www.u-antona.vrn.ru/forum/sho...d.php?t=173695 [Ответ]
Dim_Z 15:40 06.04.2007
не там ваще другое, мне надо просто скрипт
if ($link=)
{
$link="news/news";
}

но если переменаая не существует то что делать? [Ответ]
alemiks 16:17 06.04.2007
проверять на существование
http://php.net/isset [Ответ]
Breathe 17:05 06.04.2007
if (!$link) $link="news/news.php"; [Ответ]
Vital_N 17:26 06.04.2007

Сообщение от Breathe:
if (!$link) $link="news/news.php";

неверный код - если не определена $link
вылезет Notice

Dim_Z, слухай alemiksa ) [Ответ]
Breathe 20:59 06.04.2007
Жалко что ли? Пусть вылезает! Dim_Z слушай меня! [Ответ]
svga 21:26 06.04.2007
а вообще - кто скажет зачем так делать? По моему, не очень гуд через переменные пути+файлы обозначать, да еще и вместе. Если по дефолту в новости надо, то не лучше ли чтобы переменная только $link="news" была? А там в директории выложить апачевский файл, который не index.php запускает, а news.php. Или я где-то от жизни отстал? [Ответ]
1000w 08:18 07.04.2007
бл..., топикстартер а ты задумывался что будет если я в строке браузера наберу: ?link=http://ya.ru/index [Ответ]
Dim_Z 08:59 07.04.2007

Сообщение от :
if (isset($link))
{
$link="news/news";
}
include "$link.php"

выскакивает

Сообщение от :
Notice: Undefined variable: link in z:\home\localhost\www\index.php on line 29
[ убрать подсказку | никогда больше не показывать ]

Это предупреждение, вероятнее всего, возникает вследствие высокого уровня контроля ошибок в PHP, по умолчанию установленного в Денвере (E_ALL). Такой режим вывода ошибок является рекомендуемым и сильно помогает при отладке скриптов. Однако множество готовых скриптов требуют более низкого уровня ошибок.

Вы можете установить более слабый контроль ошибок одним из следующих способов:

* Впишите в скрипты строчку:

Error_Reporting(E_ALL & ~E_NOTICE);

Этот способ особенно удобен, если в скрипте есть один файл (конфигурационный), который подключается всеми остальными.
* Рекомендуемый способ. Создайте в директории со скриптом файл .htaccess следующего содержания:

php_value error_reporting 7

* Исправьте в /usr/local/php/php.ini значение error_reporting на E_ALL & ~E_NOTICE. Этот способ не является рекомендуемым и может привести к серьезным неудобствам при отладке!

[Денвер: показать возможную причину ошибки]
Warning: main(.php): failed to open stream: No such file or directory in z:\home\localhost\www\index.php on line 30

Warning: main(): Failed opening '.php' for inclusion (include_path='.;/usr/local/php/PEAR') in z:\home\localhost\www\index.php on line 30

а когда

Сообщение от :
if (!$link)
{
$link="news/news.php";
}
include "$link.php"

пишет только

Сообщение от :
Notice: Undefined variable: link in z:\home\localhost\www\index.php on line 25
[ убрать подсказку | никогда больше не показывать ]

Это предупреждение, вероятнее всего, возникает вследствие высокого уровня контроля ошибок в PHP, по умолчанию установленного в Денвере (E_ALL). Такой режим вывода ошибок является рекомендуемым и сильно помогает при отладке скриптов. Однако множество готовых скриптов требуют более низкого уровня ошибок.

Вы можете установить более слабый контроль ошибок одним из следующих способов:

* Впишите в скрипты строчку:

Error_Reporting(E_ALL & ~E_NOTICE);

Этот способ особенно удобен, если в скрипте есть один файл (конфигурационный), который подключается всеми остальными.
* Рекомендуемый способ. Создайте в директории со скриптом файл .htaccess следующего содержания:

php_value error_reporting 7

* Исправьте в /usr/local/php/php.ini значение error_reporting на E_ALL & ~E_NOTICE. Этот способ не является рекомендуемым и может привести к серьезным неудобствам при отладке!

[Денвер: показать возможную причину ошибки]ss

Но при 2-ом случае фаил импортирует. [Ответ]
alemiks 09:27 07.04.2007
нужно !isset (если НЕ существует) [Ответ]
alemiks 10:39 07.04.2007

Сообщение от 1000w:
бл..., топикстартер а ты задумывался что будет если я в строке браузера наберу: ?link=http://ya.ru/index

а если ещё allow_url_include = On, то есть где разгуляться [Ответ]
svga 15:03 07.04.2007

Сообщение от 1000w:
бл..., топикстартер а ты задумывался что будет если я в строке браузера наберу: ?link=http://ya.ru/index

Ну если он получает $link = $_GET['link'], то что-нить интересное будет. А если не через строку передается, то в принципе не критично, но все равно не особо удачный вариант.
to Dim_Z - если не хочешь чтобы выскакивали ошибки некритичные (вроде неопределенной переменной), то перед переменной символ @ ставь. Напр. @$links.
alemiks ссылку и приводил как пользоваться, но видимо Dim_Z вы так и не прочитали, пример как пользоваться isset:

Сообщение от :
<?php
$var = '';
// This will evaluate to TRUE so the text will be printed.
if (isset($var)) {
echo "This var is set so I will print.";
}
// In the next examples we'll use var_dump to output
// the return value of isset().
$a = "test";
$b = "anothertest";
var_dump(isset($a)); // TRUE
var_dump(isset($a, $b)); // TRUE
unset ($a);
var_dump(isset($a)); // FALSE
var_dump(isset($a, $b)); // FALSE
$foo = NULL;
var_dump(isset($foo)); // FALSE
?>

Итого можно расписать поподробнее про конкретный случай:

Сообщение от :
if (isset($links)==false)
{ $links='news/news.php'; }
include($links);

[Ответ]
1000w 15:19 07.04.2007

Сообщение от svga:
Ну если он получает $link = $_GET['link'], то что-нить интересное будет.

из его поста я так понял что навигация по сайту осуществляется с помощью как раз переменной $link которая определяется какраз из гет запроса. [Ответ]
svga 15:44 07.04.2007

Сообщение от 1000w:
из его поста я так понял что навигация по сайту осуществляется с помощью как раз переменной $link которая определяется какраз из гет запроса.

Тогда - ужоснах!
Причем примеры кода от Dim_Z, наводят на мысли что расширение ".php" подставляется уже в include();.

Сообщение от Dim_Z:
if (isset($link))
{
$link="news/news";
}
include "$link.php"

Из-за этого у него косяки могут вылезти при использавании моего куска кода. " include "$link.php" " - это что-то =(. Наиболее правильно по синтаксису так, имхо, написать:

include($_SERVER["DOCUMENT_ROOT"]."/".$links.".php"); [Ответ]
Dim_Z 15:51 07.04.2007
svga, большое спасибо вам, всё работает.
Конечный вариант, если кому то пригодиться

Сообщение от :
<? if (isset($link)==false)
{ $link='news/news'; }
include "$link.php"
?>

[Ответ]
svga 16:10 07.04.2007

Сообщение от Dim_Z:
svga, большое спасибо вам, всё работает.
Конечный вариант, если кому то пригодиться

Явно не пригодится =) Инклуд поправь как я выше написал, а то точно не успеешь сайт выложить как поломают его нафиг. [Ответ]
alemiks 09:38 08.04.2007
вот тебе более безопасный вариант

Сообщение от :
$link = isset($_GET['link']) ? $_GET['link'] : 'news';

$validLinks = array('news', 'guestbook', 'forum');

if (!in_array($link, $validLinks)) { die('Bye'); }

include "$link.php";

[Ответ]
Вверх