С нами с 29.06.06
Сообщения: 704
Рейтинг: 815
|
Добавлено: 10/09/11 в 17:54 |
Не программер, подсобите.
Есть 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'); }
}
Заранее благодарен!
|
|
|
|
С нами с 20.01.03
Сообщения: 18003
Рейтинг: 9760
|
Добавлено: 10/09/11 в 18:17 |
в одинарных ковычках "переменные не работают"... и страница 1 вроде как есть в сабже
$page = $_GET['page'];
if ($page < 1) { exit; }
include_once ('./pages/Page _'.$page.'.html');
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 10/09/11 в 18:21 |
Код: | 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();
} |
|
|
|
|
С нами с 29.06.06
Сообщения: 704
Рейтинг: 815
|
Добавлено: 10/09/11 в 18:45 |
Благодарю! Выручили
|
|
|
|
С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970
|
Добавлено: 11/09/11 в 07:06 |
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?
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 11/09/11 в 10:11 |
gimcnuk писал: | Оффтопик: Если не секрет, зачем двойная проверка isset, empty? |
никакого секрета
это разные проверки:
в первом случае, проверяем наличие данного индекса в таблице,
во втором - не является ли этот индекс пустым
Код: | ?page=&foo=bar
//или
?page=0&foo=bar |
к примеру, вторую проверку уже не пройдет
imho, дело личное, я привык так делать
|
|
|
|
С нами с 06.03.03
Сообщения: 1650
Рейтинг: 1096
|
Добавлено: 12/09/11 в 02:36 |
freeek: это конечно личное дело каждого, но для обязательных параметров, которые должны быть положительным чилом больше нуля я давно вывел для себя такую короткую запись:
Код: | if($page = (int)@$_GET['page'])
{
// сюда мы не попадем если $page равно нулю, пустой строке, или же вообще отсутствует
}
|
это вместо 3х твоих строк:
Код: | if ((isset($_GET['page']) and !empty($_GET['page']))) { |
Код: | $page = (int)$_GET['page']; |
и вот этот кусочек еще
таким образом
Код: | if($page = (int)@$_GET['page']) file_exists($file = "./pages/Page_$page.html") ? require $file : '';
|
|
|
|
|
С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970
|
Добавлено: 12/09/11 в 14:42 |
webboxxx: подавление ошибок - нехорошо. У меня if isset в 6-7 раз быстрее работает чем @
Правда, заметно при миллионе итераций
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 12/09/11 в 15:24 |
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); |
все имхо
|
|
|
|
С нами с 06.03.03
Сообщения: 1650
Рейтинг: 1096
|
Добавлено: 12/09/11 в 18:13 |
это само собой, кому что больше по душе. я просто предложил более короткую альтернативу. предвидел негатив в отношении подавления ошибок, но это не необдуманный шаг, это наверное единственная ситуация, где @ оправдывает свое использование. у меня при разработке всегда включены E_NOTICE. но давайте обдуманно рассматривать предоставляемые языком средства, а не уподобляться стереотипам о том, что @, goto и т.п. это вселенское зло. вывод ошибок существует для того, чтобы помочь разобраться, что именно работает не так как задумано, а не усложнить написание кода, не надо об этом забывать. а какие ошибки могут быть в проверке существования элемента массива? тут только либо он есть, либо его нет. поэтому я осознанно отказываюсь в этом месте от помощи php в ловле ошибок в пользу читаемости и компактности.
почему я считаю что вариант freeek хуже лично для меня? просто я большое внимание уделяю компактности кода. не усложнению засчет компактности, не стремлением уместить как можно больше кода в одной строке, а просто компактности там, где код это позволяет. поэтому чем больше кода, тем больше потенциальных ошибок в нем. вдобавок когда вместо 1-2 строк мы видим блок из 5-7 строк, сложнее уловить его суть, что через пару месяцев уже серьезно мешает разобраться в коде, особенно если он недокументирован. а поэтому вариант freeek'а для меня менее читаем.
ну и надеюсь все понимают, что спор больше спортивный, топикстартеру можно использовать любой из вариантов вообще не парясь.
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 12/09/11 в 18:45 |
я с тобой согласен, в том плане, что понимаю чем ты мотивируешься
как раз исходя из этого, что кто то заюзает, возможно, мой код, выкладываю его в широком виде, кому надо тот оптимизирует как захочет
если надо короче, я тоже привел пример :
Код: | ($page=(int)$_GET['page'])&&file_exists($file='./pages/Page_'.$page.'.html')&&require($file); |
|
|
|
|