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 или пустая то ничего не инклудилось бы вообще.

Я что-то такое наколхозил, но до конца не догоню как сделать это рабочим smail101.gif

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
Благодарю! Выручили smail54.gif
цитата
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?


icon_wink.gif никакого секрета
это разные проверки:

в первом случае, проверяем наличие данного индекса в таблице,
во втором - не является ли этот индекс пустым

Код:
?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 раз быстрее работает чем @
Правда, заметно при миллионе итераций icon_smile.gif
цитата
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);



все имхо icon_wink.gif
цитата
12/09/11 в 18:13
 webboxxx
это само собой, кому что больше по душе. я просто предложил более короткую альтернативу. предвидел негатив в отношении подавления ошибок, но это не необдуманный шаг, это наверное единственная ситуация, где @ оправдывает свое использование. у меня при разработке всегда включены E_NOTICE. но давайте обдуманно рассматривать предоставляемые языком средства, а не уподобляться стереотипам о том, что @, goto и т.п. это вселенское зло. вывод ошибок существует для того, чтобы помочь разобраться, что именно работает не так как задумано, а не усложнить написание кода, не надо об этом забывать. а какие ошибки могут быть в проверке существования элемента массива? тут только либо он есть, либо его нет. поэтому я осознанно отказываюсь в этом месте от помощи php в ловле ошибок в пользу читаемости и компактности.

почему я считаю что вариант freeek хуже лично для меня? просто я большое внимание уделяю компактности кода. не усложнению засчет компактности, не стремлением уместить как можно больше кода в одной строке, а просто компактности там, где код это позволяет. поэтому чем больше кода, тем больше потенциальных ошибок в нем. вдобавок когда вместо 1-2 строк мы видим блок из 5-7 строк, сложнее уловить его суть, что через пару месяцев уже серьезно мешает разобраться в коде, особенно если он недокументирован. а поэтому вариант freeek'а для меня менее читаем.

ну и надеюсь все понимают, что спор больше спортивный, топикстартеру можно использовать любой из вариантов вообще не парясь.
цитата
12/09/11 в 18:45
 freeek
я с тобой согласен, в том плане, что понимаю чем ты мотивируешься icon_wink.gif

как раз исходя из этого, что кто то заюзает, возможно, мой код, выкладываю его в широком виде, кому надо тот оптимизирует как захочет


если надо короче, я тоже привел пример icon_smile.gif :
Код:
($page=(int)$_GET['page'])&&file_exists($file='./pages/Page_'.$page.'.html')&&require($file);


Эта страница в полной версии