сбор нескольких значений GET или POST - PullRequest
0 голосов
/ 23 декабря 2009

У меня есть форма, которая передает что-то вроде в URL

?choice=selection+A&choice=selection+C

Я собираю его в форме с чем-то вроде (я помню, что $ _GET это любой массив)

        $temp = $_GET["choice"];
    print_r($temp);

Я получаю только последний экземпляр "selection C". Чего мне не хватает

Ответы [ 2 ]

6 голосов
/ 23 декабря 2009

Я предполагаю, что «выбор» - это группа с несколькими вариантами выбора или флажками? Если это так, измените его имя в html на «choice []». Тогда $ _GET ['choice'] будет массивом выбранных пользователем вариантов.

2 голосов
/ 23 декабря 2009

Если вы не собираетесь редактировать HTML, это позволит вам делать то, что вы ищете; он заполнит суперглобальный $_REQUEST и перезапишет его содержимое.

Предполагается, что PHP версии 5.3, потому что он использует Ternary Shortcut Operator. Это можно удалить.

$rawget = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : false;
$rawpost = file_get_contents('php://input') ?: false;
$target = $rawget;
$_REQUEST = array();
if ($target !== false) {
    $pairs = explode('&',$rawget);
    foreach($pairs as $pair) {
        $p = strpos($pair,'=');
        if ($p === false && !empty($pair)) {
            $_REQUEST[$pair] = null;
        }
        elseif ($p === 0 || empty($pair)) {
            continue;
        }
        else {
            list($name, $value) = explode('=',$pair,2);
            $name = preg_replace('/\[.*\]/','',urldecode($name));
            $value = urldecode($value);
            if (array_key_exists($name, $_REQUEST)) {
                if (is_array($_REQUEST[$name])) {
                    $_REQUEST[$name][] = $value;
                }
                else {
                    $_REQUEST[$name] = array($_REQUEST[$name], $value);
                }
            }
            else {
                $_REQUEST[$name] = $value;  
            }
        }
    }
}

В нынешнем виде он будет обрабатывать только переменные QueryString / GET; чтобы обработать сообщение, измените третью строку на что-то вроде

$target = ($rawget ?: '') . '&' . ($rawpost ?: '');

С учетом всего вышесказанного, я все равно рекомендую изменить HTML, но если по какой-то причине это не вариант, то это следует сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...