Вопрос по php – Проверьте, содержит ли URL параметры [duplicate]

9

Possible Duplicate:
keeping url parameters during pagination

Я хочу добавить параметр в текущий URL с помощью php, но как мне узнать, содержит ли этот URL параметр?

Пример:

foobar.com/foo/bar/index.php = & gt; foobar.com/foo/bar/index.php?myparameter=5 foobar.com/index.php?foo=7 = & gt; foobar.com/index.php?foo=7&myparameter=5

Основная проблема заключается в том, что я не знаю, нужно ли мне добавлять «?».

Мой код (где-то нашел, но он не работает):

<?php   if(/?/.test(self.location.href)){ //if url contains ?
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]&myparameter=5";
} else {
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]?myparameter=5"; 
}?>
@Puyol, вы не должны использовать константы в качестве ключей массива, вместо этого заключите их в фигурные скобки или вырвите из строки и объедините."http://{$_SERVER['HTTP_HOST']}..." Lawrence Cherone

Ваш Ответ

3   ответа
5

Вы можете искать "?" символ как это:

if (strpos($_SERVER[REQUEST_URI], '?')) { // returns false if '?' isn't there
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]&myparameter=5";
} else {
    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]?myparameter=5"; 
}
Или короче говоря,<?php echo "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]".((strpos($_SERVER['REQUEST_URI'],'?'))?'&':'?')."myparameter=5", спасибо за самый крутой трюк.
27

Параметры URL получены из глобальной переменной$_GET который на самом деле является массивом. Итак, чтобы узнать, содержит ли URL параметр, вы можете использоватьisset() функция.

if (isset($_GET['yourparametername'])) {
    //The parameter you need is present
}

После этого вы можете создать отдельный массив таких параметров, которые вам нужно прикрепить к URL. Подобно:

if(isset($_GET['param1'])) {
    \\The parameter you need is present
    $attachList['param1'] = $_GET['param1'];
}
if(isset($_GET['param2'])) {
    $attachList['param2'] = $_GET['param2];
}

Теперь, чтобы узнать, нужен ли вам? символ, просто посчитайте этот массив

if(count($attachList)) {
    $link .= "?";
    // and so on
}

Update:

Чтобы узнать, установлен ли какой-либо параметр, просто посчитайте$_GET

if(count($_GET)) {
     //some parameters are set
}
count($_GET) ? '&' : '?'
Я не хочу знать, установлен ли мой параметр, я хочу знать, установлен ли какой-либо параметр Puyol
фактически, все еще возможно иметь URL, подобный этому:example.com? таким образом, нет никаких параметров, но он все равно не должен добавлять? голец
я добавитьempty в вашем обновлении как в;if(empty(count($_GET))){ когда нет параметров: p :)
@Puyol, смотрите обновление
16

На самом деле вы должны использоватьparse_url () функция:

<?php
$url = parse_url($_SERVER['REQUEST_URI']);

if(isset($url['query'])){
    //Has query params
}else{
    //Has no query params
}
?> 

Также вы должны заключить переменные на основе массива в фигурные скобки или вырваться из строки:

$url = "http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}?myparameter=5";

или же

$url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."?myparameter=5";

включитьerror_reporting(E_ALL); и вы увидите ошибку. Примечание: использование неопределенной константы REQUEST_URI - предполагается, 'REQUEST_URI & apos; ЭСТ

Используя PHP_URL_PATH в качестве второго параметра для parse_url, он не передает $ url [& quot; & quot; & quot; запрос & reg;], поэтому ваш isset ($ url [& apos; query & apos;]) всегда будет ложным. Просто удалите PHP_URL_PATH как второй параметр для правильной работы. Спасибо за ваш ответ, так как он имеет больше смысла для меня, когда $ _GET недоступен для использования.
@ Крис, да, ты прав, спасибо

Похожие вопросы