it-swarm.com.ru

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

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

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

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

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

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

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

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

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

22
zeckdude

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

$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
37
Artefacto

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

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

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

$ currenturl = $ _SERVER ['REQUEST_URI'];

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

1
user2284001
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))];
1
N A

..

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