Как добавить переменные GET в конец текущего URL-адреса в php?
Я пытаюсь добавить в URL несколько переменных GET.
Я мог бы легко перенаправить заголовок на текущий URL-адрес страницы, а затем просто добавить $_GET ['test'] в URL-адрес.
Моя проблема в том, что у меня есть некоторые переменные GET, которые уже указаны в URL-адресе. Я хочу сделать это:
Как я могу проверить все эти условия?
Ответы
Ответ 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;
}