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 :: Помогите с рефакторингом

 PHP.SU

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


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

> Описание: Как максимально облегчить код
Морозов Семен
Отправлено: 01 Декабря, 2015 - 16:33:16
Post Id



Гость


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


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




Написал код по добавлению параметра _GET в адрес страницы
Как провести грамотный рефакторинг не нарушая функциональности данного кода?

PHP:
скопировать код в буфер обмена
  1. $old_url = 'http://site.ru/catalog&page=1&color=red';
  2. $old_url2 = 'http://site.ru/catalog&color=red';
  3. $old_url3 = 'http://site.ru/catalog&color=red&page=1';
  4. $parametr = '&page=2';
  5.  
  6. $two_parts_parametr = explode("=", $parametr);
  7. $name_parametr = $two_parts_parametr[0];
  8. $value_parametr = $two_parts_parametr[1];
  9. if (preg_match('/'.$name_parametr.'/',$old_url) == true) {
  10.         if (preg_match('/'.$name_parametr.'=.*&/',$old_url) == true)
  11.                 $new_url = preg_replace('/'.$name_parametr.'=.*&/',$parametr.'&',$old_url);
  12.         else $new_url = preg_replace('/'.$name_parametr.'=.*/',$parametr,$old_url);
  13. }
  14. else $new_url = $old_url.$parametr;
  15.  
  16. echo $new_url;
 
 Top
Faraon-san
Отправлено: 01 Декабря, 2015 - 17:11:38
Post Id



Посетитель


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


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




в переменных url у вас не правильно get параметры определены, он определяется после знака вопроса.
PHP:
скопировать код в буфер обмена
  1. $old_url = 'http://site.ru/catalog?page=1&color=red';
  2. $old_url2 = 'http://site.ru/catalog?color=red';
  3. $old_url3 = 'http://site.ru/catalog?color=red&page=1';
  4. $parameters = array('key'=>'page','data'=>2);
  5.  
  6. $data = parse_url($old_url);
  7. $query = explode('&', $data['query']);
  8. $status = false;
  9. foreach($query as $get){
  10.         $get = explode('=', $get);
  11.         if($get[0] == $parameters['key']){
  12.                 $status = true;
  13.                 break;
  14.         }
  15. }
  16.  
  17. if(!$status){
  18.         $query[] = implode('=', $parameters);
  19. }
  20.  
  21. $new_url = $data['scheme'].'://'.$data['host'].$data['path'].'?'.implode('&', $query);
  22.  
  23. echo $new_url;
 
 Top
Морозов Семен
Отправлено: 01 Декабря, 2015 - 17:16:09
Post Id



Гость


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


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




Faraon-san пишет:
в переменных url у вас не правильно get параметры определены, он определяется после знака вопроса.


В данном случае первая строка ЧПУ: "?q=catalog" заменено на catalog

add
Faraon-san, Интересное решение задачи Вы предложили!

(Отредактировано автором: 01 Декабря, 2015 - 17:20:45)

 
 Top
Мелкий Супермодератор
Отправлено: 01 Декабря, 2015 - 17:24:52
Post Id



Активный участник


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


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




Осталось только выкинуть извращение с ручной обработкой параметров в пользу нативных parse_str, array_merge и последующего http_build_query


-----
PostgreSQL DBA
 
 Top
Морозов Семен
Отправлено: 01 Декабря, 2015 - 17:32:48
Post Id



Гость


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


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




Мелкий пишет:
Осталось только выкинуть извращение с ручной обработкой параметров в пользу нативных parse_str, array_merge и последующего http_build_query


Мелкий, Огромное спасибо за наставление! Сейчас попробую сделать!
 
 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