2012-06-03 55 views
6

Duplicar posibles:
keeping url parameters during paginationComprobar si la URL contiene parámetros

Quiero añadir un parámetro a la URL actual con php, pero ¿cómo sé si el URL ya contiene una ¿parámetro?

Ejemplo:

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

El problema principal es que no sé si necesito agregar un "?".

Mi código (que se encuentra en algún lugar, pero no funciona):

<?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"; 
}?> 
+1

@Puyol, no debe usar constantes como teclas de matriz, en lugar de eso, ajuste las llaves o salga de la cadena y concatenar. '" http: // {$ _SERVER ['HTTP_HOST']} ..."' –

Respuesta

20

Los parámetros de URL y recibió de una variable global llamada $_GET que en realidad es una matriz. Entonces, para saber si una URL contiene un parámetro, puede usar la función isset().

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

Después de las salas, puede crear una matriz separada de dicho parámetro que debe adjuntar a una URL. Al igual que

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

Ahora, para saber si o no, se necesita un símbolo ?, simplemente contar esta matriz

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

Actualización:

Para saber si se ha establecido ningún parámetro, simplemente cuenta el $_GET

if(count($_GET)) { 
    //some parameters are set 
} 
+0

No quiero saber si mi parámetro está configurado, quiero saber si se establece algún parámetro – Puyol

+2

@Puyol, Ver la actualización – Starx

+0

en realidad, todavía es posible tener una URL como esta: http: // example .com /? entonces de esta manera no hay parámetros pero todavía no debería agregar? char –

4

puedes buscar el '?' Char como esto:

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"; 
} 
+0

O en resumen, '

15

Realmente debería utilizar la función parse_url():

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

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

también debe incluir variables en función de la matriz de entre llaves o salir de la cadena:

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

o

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

habilite error_reporting(E_ALL); y verá el error. Aviso: uso de la constante indefinida REQUEST_URI - se supone 'REQUEST_URI' ect

+0

Al usar PHP_URL_PATH como el segundo parámetro de parse_url, no pasa $ url ['query'], por lo que su isset ($ url ['query']) siempre será falso. Simplemente elimine PHP_URL_PATH como segundo param para que funcione correctamente. Gracias por su respuesta, ya que tiene más sentido para mí cuando $ _GET no está disponible para nosotros mi. – Chris

+0

@Chris sí, tienes razón, gracias –

Cuestiones relacionadas