ФорумПрограммированиеPHP для идиотов → url не склеивается

url не склеивается

  • web-bee

    Сообщения: 119 Репутация: N Группа: Кто попало

    Spritz Май 21, 2010, 5:13 п.п.

    Привет всем!
    У меня не клеится (( бр..

    Вот код:

    // хочу в массив $param записать строчки $name=$value
    $param['str']=$attribs['name'] . '=' . $attribs['value'];
    // хочу склеить эти строчки в цикле, добавив &
    foreach ($param as $str) {
    $param_for_post .='&' . $str ;
    echo $param_for_post;
    }


    Вот результат:
    &bin=-1
    т.е. $param_for_post = & + последняя строчка $name=$value

    Где ошибка? Как исправить?
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Май 21, 2010, 5:17 п.п., спустя 3 минуты 37 секунд

    web-bee, [man]http_build_query[/man]
    Сапожник без сапог
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Май 21, 2010, 6:18 п.п., спустя 1 час 1 минуту 36 секунд


    $param_for_post = '';
    foreach ($param as $str) {
    $param_for_post .='&' . $str ;
    }
    echo $param_for_post;
    может вы хотели так?
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz Май 21, 2010, 7:02 п.п., спустя 43 минуты 54 секунды

    web-bee,
    // хочу в массив $param записать строчки $name=$value
    $param['str']=$attribs['name'] . '=' . $attribs['value'];

    таким хреном ты постоянно один и тот же элемент массива перезаписываешь, если я правильно тебя понял.
    Делать нужно так (чтоб добавлять элементы в один массив):
    $param[] = $attribs['name'].'='.$attribs['value'];
  • web-bee

    Сообщения: 119 Репутация: N Группа: Кто попало

    Spritz Май 21, 2010, 7:11 п.п., спустя 9 минут 18 секунд

    adw0rd, правы, так и хотела, но всё равно не работает.
    результат такой же: &bin=-1,
    я, наверно, массив $param неправильно слепила ((
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Май 21, 2010, 7:21 п.п., спустя 9 минут 13 секунд

    ага, прислушайтесь к гиви
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz Май 22, 2010, 6:10 д.п., спустя 10 часов 49 минут 47 секунд

    web-bee, все парни выше были правы
    а самое ценное сказал phpdude:
    никаких циклов! один раз
    http_build_query($attribs) — если результат не тот, что хочется, значит в $attribs не те параметры. это уже выходит за тему
    ιιlllιlllι унц-унц
  • web-bee

    Сообщения: 119 Репутация: N Группа: Кто попало

    Spritz Май 22, 2010, 11:09 д.п., спустя 4 часа 58 минут 27 секунд

    artoodetoo, а почему не с циклом. Уже сделала, чтоб работало.
    С http_build_query($attribs) значительно быстрее? В чём преимущество?
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz Май 22, 2010, 11:31 д.п., спустя 21 минуту 57 секунд

    Потому что эскейпирование работае и поддерживаются вложенные массивы:
    $queryData = array(
    'var1' => 'value1',
    'var2' => 'val ue2',
    'var3' => 'значение3',
    'var4' => array (
    'value4.1',
    'value4.2',
    ),
    'var5' => '',
    );
    echo http_build_query($queryData);
    // Вывод:
    // var1=value1&var2=val+ue2&var3=%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B53&var4%5B0%5D=value4.1&var4%5B1%5D=value4.2&var5=

    А у вас какой запрос на этом массиве сгенерируется?
    Work, buy, consume, die
  • web-bee

    Сообщения: 119 Репутация: N Группа: Кто попало

    Spritz Май 22, 2010, 11:57 д.п., спустя 25 минут 56 секунд

    Naaayh, не поняла вопрос, но отвечу:

    склеиваются &name1=value1&name2=value2&name3=value3.. для параметров post-запроса
    вот такой результат получается:
    &MfcISAPICommand=SignInWelcome&bhid=DEF_CI&UsingSSL=1&inputversion=2&lse=false..

    ответила? или Вы что-то другое имели в виду?
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz Май 22, 2010, 12:35 п.п., спустя 37 минут 52 секунды

    во первых это не пост, а гет запрос так формируется, а во вторых, что будет с Вашим запросом, если передать в качестве значения русские быквы, да и вообще любые символы, которые нужно эскейпировать, к примеру:
    есть такие данные:
    param1 = "&abc=abc&"
    param2 = "bad&test=abc"
    Если использовать функцию http_build_query, будет сформирована строка:
    param1=%26abc%3Dabc%26&param2=bad%26test%3Dabc - тоесть все замечательно
    А если писать самопал, и забыть про эскейпирование получится:
    param1=&abc=abc&param2=bad&test=abc
    Work, buy, consume, die
  • web-bee

    Сообщения: 119 Репутация: N Группа: Кто попало

    Spritz Май 22, 2010, 1:32 п.п., спустя 57 минут 1 секунду

    А разве нельзя моё $params=&name1=value1&name2=value2&name3=value3..&login=login&pass=password;
    вставить в curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
    и послать это дело таки POST'ом..

    name и value - это из hidden-полей вырезанные.
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz Май 22, 2010, 1:46 п.п., спустя 13 минут 57 секунд

    Действительно в POST запросе могут присутствовать одновременно и GET параметры. Но, строго говоря, это не "параметры post запроса".
    И экспейпировать по любому надо, чтобы не было неожиданных результатов. Поэтому http_build_query() это отличный вариант. Если PHP может сделать что-то за вас — пусть делает!
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Май 25, 2010, 6:22 д.п., спустя 2 дня 16 часов 36 минут


    Действительно в POST запросе могут присутствовать одновременно и GET параметры. Но, строго говоря, это не "параметры post запроса".
    И экспейпировать по любому надо, чтобы не было неожиданных результатов. Поэтому http_build_query() это отличный вариант. Если PHP может сделать что-то за вас — пусть делает!
    не буду сильно пиздеть, но его эскейпинг пару раз меня подвел под монастырь, может версии с багами конечно попались, но мы с другмо на разных серверах сравнивали, везде бывало что символы выпадали оО да я тоже в ахуе, дело было 2 года назад когда я спамом занимался
    Спустя 20 сек.
    спамом? вам послышалось, я говорил про игру в песочнице
    Спустя 13 сек.
    для простых данных работает на ура
    Сапожник без сапог
  • web-bee

    Сообщения: 119 Репутация: N Группа: Кто попало

    Spritz Май 29, 2010, 9:44 п.п., спустя 4 дня 15 часов 22 минуты

    Ребята, спасибо Вам всем за помощь :-*
    Спасибо phpdude за умную идею и полезные ссылки;
    Спасибо artoodetoo за направление меня в верное русло.
    Naaayh, благодаря Вам и узнала про эскейпирование ))
    adw0rd и Givi большущее спасибо за внимание к моему пхп-творчеству и исправление ляпов.

    Спасибо Вам всем за дружелюбную атмосферу на форуме и дельные советы!

Пожалуйста, авторизуйтесь, чтобы написать комментарий!