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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Навигация по сайту. Get

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Tox
Отправлено: 09 Сентября, 2012 - 11:26:28
Post Id



Посетитель


Покинул форум
Сообщений всего: 314
Дата рег-ции: Нояб. 2011  
Откуда: Россия


Помог: 0 раз(а)




Дело в том, что на сайте навигация происходит с помощью гет-запросов (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 таких, это достаточно неудобно..
Есть какой-то способ сократить эти длинные условия?


-----
In Console We Trust. Code hard. Or die.
 
 Top
AlexAnder
Отправлено: 09 Сентября, 2012 - 11:59:22
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012  
Откуда: Россия


Помог: 34 раз(а)




Цитата:
PHP:
скопировать код в буфер обмена
  1. if(isset($_GET['pageName1']) and !isset($_GET['pageName1']))

Не понял


-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 Top
Tox
Отправлено: 09 Сентября, 2012 - 12:00:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 314
Дата рег-ции: Нояб. 2011  
Откуда: Россия


Помог: 0 раз(а)




Ошибся в синтаксисе:
if(isset($_GET['pageName1']) and isset($_GET['page1']) and !isset($_GET['page2'])){
#code...
}


-----
In Console We Trust. Code hard. Or die.
 
 Top
AlexAnder
Отправлено: 09 Сентября, 2012 - 12:04:52
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012  
Откуда: Россия


Помог: 34 раз(а)




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

(Отредактировано автором: 09 Сентября, 2012 - 12:06:41)



-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 Top
Tox
Отправлено: 09 Сентября, 2012 - 12:11:42
Post Id



Посетитель


Покинул форум
Сообщений всего: 314
Дата рег-ции: Нояб. 2011  
Откуда: Россия


Помог: 0 раз(а)




AlexAnder
Спасибо) что-то я про elseif совсем забыл)


-----
In Console We Trust. Code hard. Or die.
 
 Top
Bio man
Отправлено: 09 Сентября, 2012 - 12:13:35
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




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

(Отредактировано автором: 09 Сентября, 2012 - 12:15:01)

 
 Top
Jet4Fire
Отправлено: 09 Сентября, 2012 - 12:29:25
Post Id



Новичок


Покинул форум
Сообщений всего: 50
Дата рег-ции: Янв. 2010  


Помог: 3 раз(а)




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.  


-----
Programming - this is an art!
 
 Top
AlexAnder
Отправлено: 09 Сентября, 2012 - 12:33:10
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012  
Откуда: Россия


Помог: 34 раз(а)




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)
Данные для вывода на страницу должны браться из БД

(Отредактировано автором: 09 Сентября, 2012 - 12:38:10)



-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 Top
Jet4Fire
Отправлено: 09 Сентября, 2012 - 12:53:15
Post Id



Новичок


Покинул форум
Сообщений всего: 50
Дата рег-ции: Янв. 2010  


Помог: 3 раз(а)




Почему глупо использовать 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.  


-----
Programming - this is an art!
 
 Top
avtor.fox
Отправлено: 10 Сентября, 2012 - 08:25:35
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




Bio man подсказал решение на проверку запроса. Ненужно строить конструкции elseif, а уж тем более switch.
Заметьте, при каждом новом добавлении ключа, придётся строить новый if на проверку.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB