За последние 24 часа нас посетили 18667 программистов и 1689 роботов. Сейчас ищут 1467 программистов ...

помогите решить проблему с квадратными скобками

Тема в разделе "Сделайте за меня", создана пользователем alikmakh, 26 авг 2015.

  1. alikmakh

    alikmakh Новичок

    С нами с:
    26 авг 2015
    Сообщения:
    31
    Симпатии:
    0
    На сервер посылается поисковый запрос в виде массива (приблизительно так - ttp[11]=yes).
    В базе найдено множество соответствий, происходит постраничная разбивка результата поиска:
    Код (PHP):
    1. $pagination = и так далее.... 
    Но в момент создания гипертекстовой ссылки (href) квадратные скобки "обрезаются" и на выходе получается вот это - ....&ttp=. (т.е. пусто).
    Вот обработчик, где это происходит:
    Код (PHP):
    1. $pagination_href_chunk = "?";
    2.             foreach ($_REQUEST as $get_key => $get_value){
    3.                 if ($get_key == "page") continue;
    4.                 if ($pagination_href_chunk != "?"){
    5.                     $pagination_href_chunk.= "&";
    6.                 };
    7.              $pagination_href_chunk.=urlencode($get_key)."=".urlencode($get_value) ;
    8.             }; 
    Из $_REQUEST ttp[11]=yes получается ttp=
    Помогите решить проблему.

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  3. alikmakh

    alikmakh Новичок

    С нами с:
    26 авг 2015
    Сообщения:
    31
    Симпатии:
    0
    Я не понял вашу мысль. Если можете помочь, то помогите поправить вышеприведенный код. А слать к мануалам и я могу.
     
  4. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Urlencode вроде

    Не всё символы можно в урле юзать
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Вот зачем было это писать? Я что телепат, дал ссылки на правильные функции, просто напиши что всё равно не понятно.

    Код (PHP):
    1. <?php
    2.  
    3. $url = 'http://example.com/?ttp[10]=one&ttp[20]=two';
    4.  
    5. $query = parse_url($url, PHP_URL_QUERY);
    6.  
    7. parse_str($query, $query_array);
    8.  
    9. $query_array['ttp'][20] = 'three';
    10.  
    11. $url_modified = http_build_query($query_array);
    12.  
    13. echo $url_modified.'<hr>';
    14.  
    15. // test
    16.  
    17. $query = parse_url('http://example.com/?'.rawurldecode($url_modified), PHP_URL_QUERY);
    18. parse_str($query, $query_array);
    19. echo '<pre>';
    20. var_export($query_array);
     
  7. alikmakh

    alikmakh Новичок

    С нами с:
    26 авг 2015
    Сообщения:
    31
    Симпатии:
    0
    У меня не работает потому, что старая версия PHP!? (v/ 4.4.2).
    Какие предложения ?
     
  8. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Можно свою функцию сделать, чтобы работала в старой версии PHP.
     
  9. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Сделать аналог http_build_query ;)
    ИЛИ
    Поставить php 5. Или сразу 7.
    Чтобы не изобретать. :)
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    так семёрка ещё в бете, может у него production
     
  11. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Тогда пока, 5.*
     
  12. alikmakh

    alikmakh Новичок

    С нами с:
    26 авг 2015
    Сообщения:
    31
    Симпатии:
    0
    Поставить php5 не могу. Слишком много кода надо переделывать. А я не программист а системщик.
    Поэтому и обратился к вам за конкретной помощью (в виде кода а не в виде отсылок на рессурсы и намеки на програмирование).
     
  13. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    alikmakh перенести тему в раздел "сделайте за меня" или "free-lance"?

    Тут учат и подсказывают.
     
  14. alikmakh

    alikmakh Новичок

    С нами с:
    26 авг 2015
    Сообщения:
    31
    Симпатии:
    0
    А я надеюсь, что найдется добрый человек, который поможет сделать за меня. Если Вам слабо, так и не мешайте сбыться надежде :)))

    Перенесите.
     
  15. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Я же дал готовый код
    при чём тут слабо? ты понимаешь что тебе уже другие и я помогают?
     
  16. alikmakh

    alikmakh Новичок

    С нами с:
    26 авг 2015
    Сообщения:
    31
    Симпатии:
    0
    Ваш код не работает на php4.
    Я понимаю, что помогают. Только пока помощь не работает.
     
  17. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    alikmakh так при чём тут я и другие? Кто мог знать что у тебя PHP 4.
    Люди могут почитать твои упрёки и решить не помогать тебе.

    Код (PHP):
    1. $query = 'ttp%5B10%5D=one&ttp%5B%5D=three';
    2.  
    3. function my_parse_str($query_string) {
    4.   $query_array = explode('&', $query_string);
    5.  
    6.   $query = array();
    7.  
    8.   foreach ($query_array as $v) {
    9.     $param_value = explode('=', $v);
    10.     $param = urldecode($param_value[0]);
    11.     $value = urldecode($param_value[1]);
    12.  
    13.     if ( preg_match("/^[a-z0-9_-]+$/i", $param) ) {
    14.       $query[$param] = $value;
    15.     } else if ( preg_match("/^([a-z0-9_-]+)\[([a-z0-9_-]+)\]$/i", $param, $matches) ) {
    16.       $query[$matches[1]][$matches[2]] = $value;
    17.     } else if ( preg_match("/^([a-z0-9_-]+)\[\]$/i", $param, $matches) ) {
    18.       $query[$matches[1]][] = $value;
    19.     }
    20.   }
    21.  
    22.   return $query;
    23. }
    24.  
    25. $q = my_parse_str($query);
    26. $q['ttp'][10] = 'two';
    27.  
    28. function my_http_build_query($query_array, $array_key = null) {
    29.   $chunk = '';
    30.  
    31.   if(is_array($query_array)) {
    32.     foreach ($query_array as $key => $value) {
    33.       if(is_array($value)) {
    34.         $chunk .= my_http_build_query($value, $key);
    35.       } else if($array_key) {
    36.         $chunk .= '&'.urlencode($array_key.'['.$key.']').'='.urlencode($value);
    37.       } else {
    38.         $chunk .= '&'.urlencode($key).'='.($value);
    39.       }
    40.     }
    41.   }
    42.   return $chunk;
    43. }
    44.  
    45. var_export(my_http_build_query($q));
    на PHP 4.4.9 проверил, примерно в этом направлении.
     
  18. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.116
    Симпатии:
    1.244
    Адрес:
    там-сям
    denis01 святой человек! нянчится с вами как с собственными детьми.

    так, на всякий случай: PHP 4 давно умер, лучше его не используйте. и если в книжке упоминается, что примеры должны выполняться в PHP 4, это значит что книжка сильно старая и пора искать свежую редакцию.
     
  19. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    artoodetoo пытаюсь чтобы люди поняли как себя вести, чтобы им помогали.
    У него там много legacy code как я понял, который уже работает и переписывать нет смысла или бюджета.
     
  20. alikmakh

    alikmakh Новичок

    С нами с:
    26 авг 2015
    Сообщения:
    31
    Симпатии:
    0
    Я уже об этом говорил, что перейти на php5 нет возможности - сайт большой (CRM) и много кода надо переделывать а я не программист - я системщик, которому "в наследство" достался этот CRM с корявым кодом.

    Добавлено спустя 5 минут 51 секунду:
    Спасибо. Попробую ваш код, если получится....
     
  21. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Код помог?
     
  22. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    плюсую
     
  23. alikmakh

    alikmakh Новичок

    С нами с:
    26 авг 2015
    Сообщения:
    31
    Симпатии:
    0
    Я пока не прикручивал. Завтра попробую. Но уже видно, что Вы сильно помогли - код работает. Осталось только "прикрутить" его к нашему CRMу. Ещё раз спасибо большое! Вы добрый человек :)
     
  24. alikmakh

    alikmakh Новичок

    С нами с:
    26 авг 2015
    Сообщения:
    31
    Симпатии:
    0
    Ваш код работает, но я нашел попроще. Прочитал про php переменную, которая извлекает строковый http запрос.
    Вот как я решил эту задачу:
     
  25. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Отлично, задачу твою поняли совершенно по другому