Как я могу добавить переменные GET в конец текущего URL в php? - PullRequest
22 голосов
/ 02 июля 2010

Я пытаюсь добавить несколько разных переменных GET в URL.

Я мог бы легко перенаправить заголовок на URL текущей страницы, а затем просто добавить $ _GET ['test'] в URL.

Моя проблема в том, что у меня есть некоторые переменные GET, которые уже есть в URL.Что я хочу сделать, это:

  • Проверьте, есть ли какие-либо переменные GET в URL

    • Если естьнет, затем перенаправьте на текущий URL с новой переменной GET ['test'] в конце URL.

    • Если есть, но в URL нет переменной GET ['test'], сохраните остальные значения GET в URL и добавьте переменную GET ['test']до конца полной строки URL

    • Если есть, И в URL есть переменная GET ['test'], затем сохраните эти другие значения GET в URL и обменяйтеGET ['test'] значение переменной с новым значением.

Как я могу проверить все эти условия?

Ответы [ 6 ]

38 голосов
/ 02 июля 2010

Простой способ сделать это:

$params           = array_merge( $_GET, array( 'test' => 'testvalue' ) );
$new_query_string = http_build_query( $params );

Это не гарантирует, что test будет в конце. Если по какой-то странной причине вам это нужно, вы можете просто сделать:

$params = $_GET;
unset( $params['test'] );
$params['test']   = 'testvalue';
$new_query_string = http_build_query( $params );

Обратите внимание, однако, что при разборе параметров строки запроса PHP могут возникнуть проблемы с совместимостью с другими приложениями. В частности, PHP не принимает несколько значений для любого параметра, если у него нет имени, похожего на массив.

Тогда вы можете просто переслать на

( empty( $_SERVER['HTTPS'] ) ? 'http://' : 'https://' ) .
( empty( $_SERVER['HTTP_HOST'] ) ? $defaultHost : $_SERVER['HTTP_HOST'] ) .
$_SERVER['REQUEST_URI'] . '?' . $new_query_string
7 голосов
/ 21 февраля 2015

Я создал эту простую функцию PHP на основе ответа Artefacto .

function addOrUpdateUrlParam($name, $value)
{
    $params = $_GET;
    unset($params[$name]);
    $params[$name] = $value;
    return basename($_SERVER['PHP_SELF']).'?'.http_build_query($params);
}
  • Она обновляет значение, если вы изменяете существующий параметр.
  • Добавляет, если это новое значение
1 голос
/ 16 апреля 2013

Это могут быть просто причины Joomla, но я получаю то же значение, используя:

$ currenturl = $ _SERVER ['REQUEST_URI'];

намного меньше кода.

1 голос
/ 12 декабря 2012
function request_URI() {

    if(!isset($_SERVER['REQUEST_URI'])) {
        $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'];
        if($_SERVER['QUERY_STRING']) {
            $_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING'];
        }
    }
    return $_SERVER['REQUEST_URI'];
}

$_SERVER['REQUEST_URI'] = request_URI();

Предоставлено: http://php.net/manual/en/reserved.variables.server.php пример от LOL

Это даст вам URL относительно корня вместе с параметрами GET.

В случае, если вы хотите его относительно текущего каталога, добавьте следующее.

$current_url = explode("/", $_SERVER['REQUEST_URI']);

$current_url = $current_url[end(array_keys($current_url))];
0 голосов
/ 07 апреля 2019

Я написал это, потому что, в отличие от другого решения, он не предоставляет скрытых параметров GET от переписывания htaccess. Хотя это не обновляет существующий параметр.

 function addUrlParam($name, $value)
{
  $url = $_SERVER['REQUEST_URI'];
  $val =  $name . '=' . urlencode($value);
  if (strpos($url, '?') !== false) {
    $url .= '&' . $val;
  } else {
    $url .= '?' . $val;
  }
  return $url;
}
0 голосов
/ 02 июля 2010

..

$newval = 'whatever';
if( !count($_GET) ) {
 header('Location: ?test=' . $newval);
 exit;
}
if(!isset($_GET['test'])) {
 $_SERVER['REQUEST_URI'] .= '&test='.$newval;
}
$_GET['test'] = $newval;
...