Подтвердить что ты не робот

Как добавить переменные GET в конец текущего URL-адреса в php?

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

Я мог бы легко перенаправить заголовок на текущий 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'] с новым значением.

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

4b9b3361

Ответ 1

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

$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

Ответ 2

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

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

Ответ 3

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))];

Ответ 4

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

$currenturl = $_SERVER ['REQUEST_URI'];

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

Ответ 5

..

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

Ответ 6

Я написал это, потому что, в отличие от другого решения, он не предоставляет скрытых параметров 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;
}