收集多个GET或POST值

时间:2009-12-22 21:47:14

标签: php html

我有一个传递类似于URL的表单

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

我正在以类似的形式收集它(我记得$ _GET是任何数组)

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

我只获得最后一个实例“选择C”。我缺少什么

2 个答案:

答案 0 :(得分:6)

我假设'选择'是某种多选或复选框组?如果是这样,请将html中的名称更改为“choice []”。 $ _GET ['choice']将是用户所做选择的数组。

答案 1 :(得分:2)

如果您不打算编辑HTML,这将允许您执行您要执行的操作;它将填充$_REQUEST超全局并覆盖其内容。

这假定PHP版本5.3,因为它使用三元快捷操作符。这可以删除。

$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变量;要处理帖子,将第3行更改为

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

所有这一切,我仍然建议更改HTML,但如果这不是任何理由的选项,那么这应该这样做。