Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
Подскажите по php
Новая тема
Ответить
цитата
10/09/11 в 17:54
Sem2
Не программер, подсобите.
Есть 50 html страниц в папке pages
Page_1.html
Page_2.html
Page_3.html
И тд
Есть файл pages.php
Хотелось бы передавать ему переменную в виде pages.php?page=2
И чтоб он инклудил html файл с номером страницы, например Page_2.html
То бишь, чтоб инклудилась страница Page_’$page’.html, переменная чтоб бралась из GET запроса, и если переменная 0 или 1 или пустая то ничего не инклудилось бы вообще.
Я что-то такое наколхозил, но до конца не догоню как сделать это рабочим
function pages()
{
if($page <= "1"){ die }
else{ include_once ('./pages/Page _$page.html'); }
}
Заранее благодарен!
цитата
10/09/11 в 18:17
SAV
в одинарных ковычках "переменные не работают"... и страница 1 вроде как есть в сабже
$page = $_GET['page'];
if ($page < 1) { exit; }
include_once ('./pages/Page _'.$page.'.html');
цитата
10/09/11 в 18:21
freeek
Код:
if ((isset($_GET['page']) and !empty($_GET['page']))) {
$page = (int)$_GET['page'];
$file = './pages/Page _' . $page . '.html';
if ($page > 0 and file_exists($file)) {
include_once ($file);
} else {
//не существует такого файла
}
} else {
// тут выходим, можно вообще блок опустить, если не нужен
die();
}
цитата
10/09/11 в 18:45
Sem2
Благодарю! Выручили
цитата
11/09/11 в 07:06
Alexandur
freeek писал:
Код:
if ((isset($_GET['page']) and !empty($_GET['page']))) {
$page = (int)$_GET['page'];
$file = './pages/Page _' . $page . '.html';
if ($page > 0 and file_exists($file)) {
include_once ($file);
} else {
//не существует такого файла
}
} else {
// тут выходим, можно вообще блок опустить, если не нужен
die();
}
Оффтопик:
Если не секрет, зачем двойная проверка isset, empty?
цитата
11/09/11 в 10:11
freeek
gimcnuk писал:
Оффтопик:
Если не секрет, зачем двойная проверка isset, empty?
никакого секрета
это разные проверки:
в первом случае, проверяем наличие данного индекса в таблице,
во втором - не является ли этот индекс пустым
Код:
?page=&foo=bar
//или
?page=0&foo=bar
к примеру, вторую проверку уже не пройдет
imho, дело личное, я привык так делать
цитата
12/09/11 в 02:36
webboxxx
freeek:
это конечно личное дело каждого, но для обязательных параметров, которые должны быть положительным чилом больше нуля я давно вывел для себя такую короткую запись:
Код:
if($page = (int)@$_GET['page'])
{
// сюда мы не попадем если $page равно нулю, пустой строке, или же вообще отсутствует
}
это вместо 3х твоих строк:
Код:
if ((isset($_GET['page']) and !empty($_GET['page']))) {
Код:
$page = (int)$_GET['page'];
и вот этот кусочек еще
Код:
if ($page > 0
таким образом
Код:
if($page = (int)@$_GET['page']) file_exists($file = "./pages/Page_$page.html") ? require $file : '';
цитата
12/09/11 в 14:42
Alexandur
webboxxx:
подавление ошибок - нехорошо. У меня if isset в 6-7 раз быстрее работает чем @
Правда, заметно при миллионе итераций
цитата
12/09/11 в 15:24
freeek
webboxxx писал:
freeek:
это конечно личное дело каждого, но для обязательных параметров, которые должны быть положительным чилом больше нуля я давно вывел для себя такую короткую запись:
Код:
if($page = (int)@$_GET['page']) file_exists($file = "./pages/Page_$page.html") ? require $file : '';
все верно, но:
- я привел общий пример, который избегает возбуждения ошибки уровня E_NOTICE и объясняет, что и откуда берется.
- поставив собаку, мы соглашаемся с тем, что ошибка становится частью нашей программы. если допускается возникновение ошибки - ее необходимо перехватить и обработать, а не затыкать (в общем случае).
- присваивание в условии, скажем так, плохой тон.
- важна читаемость кода, чтобы было очевидно и ясно его назначение, преждевременная оптимизация - корень всех зол, даже сам, бегло глянув, не сразу понял логику.
можно к примеру и так написать:
Код:
($page=(int)$_GET['page'])&&file_exists($file='./pages/Page_'.$page.'.html')&&require($file);
все имхо
цитата
12/09/11 в 18:13
webboxxx
это само собой, кому что больше по душе. я просто предложил более короткую альтернативу. предвидел негатив в отношении подавления ошибок, но это не необдуманный шаг, это наверное единственная ситуация, где @ оправдывает свое использование. у меня при разработке всегда включены E_NOTICE. но давайте обдуманно рассматривать предоставляемые языком средства, а не уподобляться стереотипам о том, что @, goto и т.п. это вселенское зло. вывод ошибок существует для того, чтобы помочь разобраться, что именно работает не так как задумано, а не усложнить написание кода, не надо об этом забывать. а какие ошибки могут быть в проверке существования элемента массива? тут только либо он есть, либо его нет. поэтому я осознанно отказываюсь в этом месте от помощи php в ловле ошибок в пользу читаемости и компактности.
почему я считаю что вариант
freeek
хуже лично для меня? просто я большое внимание уделяю компактности кода. не усложнению засчет компактности, не стремлением уместить как можно больше кода в одной строке, а просто компактности там, где код это позволяет. поэтому чем больше кода, тем больше потенциальных ошибок в нем. вдобавок когда вместо 1-2 строк мы видим блок из 5-7 строк, сложнее уловить его суть, что через пару месяцев уже серьезно мешает разобраться в коде, особенно если он недокументирован. а поэтому вариант freeek'а для меня менее читаем.
ну и надеюсь все понимают, что спор больше спортивный, топикстартеру можно использовать любой из вариантов вообще не парясь.
цитата
12/09/11 в 18:45
freeek
я с тобой согласен, в том плане, что понимаю чем ты мотивируешься
как раз исходя из этого, что кто то заюзает, возможно, мой код, выкладываю его в широком виде, кому надо тот оптимизирует как захочет
если надо короче, я тоже привел пример
:
Код:
($page=(int)$_GET['page'])&&file_exists($file='./pages/Page_'.$page.'.html')&&require($file);
Новая тема
Ответить
Эта страница в полной версии