Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Навигация по сайту. Get
Форумы портала PHP.SU » » Вопросы новичков » Навигация по сайту. Get

Страниц (1): [1]
 

1. Tox - 09 Сентября, 2012 - 11:26:28 - перейти к сообщению
Дело в том, что на сайте навигация происходит с помощью гет-запросов (index.php?id=pageName1&page1).
Чтобы юзер не сжульничал (index.php?id=pageName1&page1&page2), надо все время проверять
PHP:
скопировать код в буфер обмена
  1. if(isset($_GET['pageName1']) and isset($_GET['page1']) and !isset($_GET['pageName1'])){
  2.   #code...
  3. }

(про empty это понятно, просто писать не стал). И когда у вас страниц 20 таких, это достаточно неудобно..
Есть какой-то способ сократить эти длинные условия?
2. AlexAnder - 09 Сентября, 2012 - 11:59:22 - перейти к сообщению
Цитата:
PHP:
скопировать код в буфер обмена
  1. if(isset($_GET['pageName1']) and !isset($_GET['pageName1']))

Не понял
3. Tox - 09 Сентября, 2012 - 12:00:51 - перейти к сообщению
Ошибся в синтаксисе:
if(isset($_GET['pageName1']) and isset($_GET['page1']) and !isset($_GET['page2'])){
#code...
}
4. AlexAnder - 09 Сентября, 2012 - 12:04:52 - перейти к сообщению
Tox пишет:
Ошибся в синтаксисе:
if(isset($_GET['pageName1']) and isset($_GET['page1']) and !isset($_GET['page2'])){
#code...
}

делай так:
PHP:
скопировать код в буфер обмена
  1. if(isset($_GET['page'])) // check
  2. ...
  3. if($_GET['page']==1){ //check page num
  4. echo 'page: #1'; //code with page1
  5.  
  6. elseif($_GET['page']==2){ //check page num
  7. echo 'page: #2'; //code with page2
5. Tox - 09 Сентября, 2012 - 12:11:42 - перейти к сообщению
AlexAnder
Спасибо) что-то я про elseif совсем забыл)
6. Bio man - 09 Сентября, 2012 - 12:13:35 - перейти к сообщению
Создай белый список с допустимыми значениями и проверяй.
PHP:
скопировать код в буфер обмена
  1. $rgWhiteList = array('page1', 'page2', 'page3', /*...*/);
  2. $bError = false;
  3. foreach($_GET as $page => $name){
  4.    if(!in_array($page, $rgWhiteList)) {
  5.       $bError = true;
  6.       break;
  7.    }
  8. }
  9. if(!$bError){
  10.    // some code
  11. }
7. Jet4Fire - 09 Сентября, 2012 - 12:29:25 - перейти к сообщению
AlexAnder пишет:
Tox пишет:
Ошибся в синтаксисе:
if(isset($_GET['pageName1']) and isset($_GET['page1']) and !isset($_GET['page2'])){
#code...
}

делай так:
PHP:
скопировать код в буфер обмена
  1. if(isset($_GET['page'])) // check
  2. ...
  3. if($_GET['page']==1){ //check page num
  4. echo 'page: #1'; //code with page1
  5.  
  6. elseif($_GET['page']==2){ //check page num
  7. echo 'page: #2'; //code with page2


Я бы даже на swich заменил, более читабельно будет

PHP:
скопировать код в буфер обмена
  1.  
  2. if (isset($_GET['page'])) {
  3.  
  4.     switch ((int) $_GET['page']) {
  5.         case 1:
  6.             echo 'page: #1';
  7.             break;
  8.         case 2:
  9.             echo 'page: #2';
  10.             break;
  11.         default:
  12.             echo '404 Page not found!';
  13.             break;
  14.     }
  15.  
  16. }
  17.  
8. AlexAnder - 09 Сентября, 2012 - 12:33:10 - перейти к сообщению
Jet4Fire пишет:
Я бы даже на swich заменил, более читабельно будет

PHP:
скопировать код в буфер обмена
  1.  
  2. if (isset($_GET['page'])) {
  3.  
  4.     switch ((int) $_GET['page']) {
  5.         case 1:
  6.             echo 'page: #1';
  7.             break;
  8.         case 2:
  9.             echo 'page: #2';
  10.             break;
  11.         default:
  12.             echo '404 Page not found!';
  13.             break;
  14.     }
  15.  
  16. }
  17.  

Глупо, часть кода была приведена для примера.(Чтобы ТС понял, что нужно использовать page=id, а не pageid)
Данные для вывода на страницу должны браться из БД
9. Jet4Fire - 09 Сентября, 2012 - 12:53:15 - перейти к сообщению
Почему глупо использовать switch вместо if elseif если всего один параметр, тем более switch чуть быстрее, if elseif хорошь при проверки нескольких параметров, типа

PHP:
скопировать код в буфер обмена
  1.  
  2.     if ((int) $_GET['page'] === 1 && (int) $_GET['user_access'] === 1) {
  3.         echo 'page: #1';
  4.     } else if ((int) $_GET['page'] === 2 && (int) $_GET['user_access'] === 1) {
  5.         echo 'page: #2';
  6.     } // more pages
  7.  


а если воопще из базы, то можно просто

PHP:
скопировать код в буфер обмена
  1.  
  2.     if (isset($_GET['page'])) {
  3.         ($pageData = get_page_from_db((int) $_GET['page'])) !== false ?
  4.             display_page_data($pageData) : display_error();
  5.     }
  6.  
10. avtor.fox - 10 Сентября, 2012 - 08:25:35 - перейти к сообщению
Bio man подсказал решение на проверку запроса. Ненужно строить конструкции elseif, а уж тем более switch.
Заметьте, при каждом новом добавлении ключа, придётся строить новый if на проверку.

 

Powered by ExBB FM 1.0 RC1