Реклама на сайте Advertise with us

Подскажите по php

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



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

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

function pages()
{
if($page <= "1"){ die }
else{ include_once ('./pages/Page _$page.html'); }
}

Заранее благодарен!

0
 



С нами с 20.01.03
Сообщения: 18003
Рейтинг: 9760


Передовик Master-X (01.03.2005) Передовик Master-X (16.03.2005) Передовик Master-X (16.10.2016) Передовик Master-X (01.11.2016) Передовик Master-X (16.11.2016) Ветеран трепа Master-X (01.12.2016)
Ссылка на сообщениеДобавлено: 10/09/11 в 18:17       Ответить с цитатойцитата 

в одинарных ковычках "переменные не работают"... и страница 1 вроде как есть в сабже

$page = $_GET['page'];
if ($page < 1) { exit; }
include_once ('./pages/Page _'.$page.'.html');

6
 



С нами с 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();
  }

7
 



С нами с 29.06.06
Сообщения: 704
Рейтинг: 815

Ссылка на сообщениеДобавлено: 10/09/11 в 18:45       Ответить с цитатойцитата 

Благодарю! Выручили smail54.gif

0
 



С нами с 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?

0
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 11/09/11 в 10:11       Ответить с цитатойцитата 

gimcnuk писал:
Оффтопик: Если не секрет, зачем двойная проверка isset, empty?


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

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

Код:
?page=&foo=bar
//или
?page=0&foo=bar


к примеру, вторую проверку уже не пройдет


imho, дело личное, я привык так делать

0
 



С нами с 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 > 0


таким образом
Код:
if($page = (int)@$_GET['page']) file_exists($file = "./pages/Page_$page.html") ? require $file : '';

1
 



С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970

Ссылка на сообщениеДобавлено: 12/09/11 в 14:42       Ответить с цитатойцитата 

webboxxx: подавление ошибок - нехорошо. У меня if isset в 6-7 раз быстрее работает чем @
Правда, заметно при миллионе итераций icon_smile.gif

0
 



С нами с 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);



все имхо icon_wink.gif

0
 



С нами с 06.03.03
Сообщения: 1650
Рейтинг: 1096

Ссылка на сообщениеДобавлено: 12/09/11 в 18:13       Ответить с цитатойцитата 

это само собой, кому что больше по душе. я просто предложил более короткую альтернативу. предвидел негатив в отношении подавления ошибок, но это не необдуманный шаг, это наверное единственная ситуация, где @ оправдывает свое использование. у меня при разработке всегда включены E_NOTICE. но давайте обдуманно рассматривать предоставляемые языком средства, а не уподобляться стереотипам о том, что @, goto и т.п. это вселенское зло. вывод ошибок существует для того, чтобы помочь разобраться, что именно работает не так как задумано, а не усложнить написание кода, не надо об этом забывать. а какие ошибки могут быть в проверке существования элемента массива? тут только либо он есть, либо его нет. поэтому я осознанно отказываюсь в этом месте от помощи php в ловле ошибок в пользу читаемости и компактности.

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

ну и надеюсь все понимают, что спор больше спортивный, топикстартеру можно использовать любой из вариантов вообще не парясь.

0
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 12/09/11 в 18:45       Ответить с цитатойцитата 

я с тобой согласен, в том плане, что понимаю чем ты мотивируешься icon_wink.gif

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


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

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »