Добавляйте переменные в URI обычным способом (добавляя? или & при необходимости)


Я новичок в PHP и в настоящее время для публикации переменных в адресах uri я использую:

echo "<form method='POST' action='".$_SERVER['REQUEST_URI']."&myvar=".$myvar."'>";

Но это не работает, когда URI - это что-то вроде wwww.mysite.com/index, потому что пока нет параметров (и поэтому нет ? после основного адреса). Итак, как передать параметры php в адресе общим способом?

Author: Vincent, 2014-02-22

2 answers

Вы можете использовать комбинацию parse_url, parse_str, и http_build_query:

// build URL with query
function q($url, array $params) {
    return parse_url($url, PHP_URL_PATH) . '?' . http_build_query($params);
}

// build URL and expand query
function qe($url, array $new_params, $overwrite = true) {
    parse_str(parse_url($url, PHP_URL_QUERY), $params);
    if ($overwrite) {
        $new_params = $new_params + $params;
    } else {
        $new_params = $params + $new_params;
    }
    return q($url, $new_params);
}

$url = qe($_SERVER['REQUEST_URI'], array('myvar' => $myvar));
echo "<form method='POST' action='".htmlspecialchars($url, ENT_QUOTES)."'>";
 3
Author: Gumbo, 2014-02-22 13:29:59

Просто сначала проверьте наличие любых символов. Например,

$link = $_SERVER['REQUEST_URI'];
if (substr_count($link, '?') == 0) {
  $link .= '?';
}
echo "<form method='POST' action='".$link."&myvar=".$myvar."'>";  
 1
Author: Carl Porter, 2014-02-22 13:09:50