2011-01-31 28 views
14

¿Cómo trabajar con $ _SERVER ['QUERY_STRING'] y la paginación?

Cuando mi tabla está ordenada por este enlace:

<a href="'.$_SERVER['PHP_SELF'].'?sort_name=name&sort=asc" title="'.$lang['sorteer_asc'].'"></a> 

mi URL es: relation.php sort_name = adres & tipo = asc

El uso de un enlace de paginación:?

echo '<a href="'.$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'].'&page='.$i.'">'.$i.'</a> '; 

Y la url se convierte en: relation.php? Sort_name = adres & ordenar = asc & página = 2

Hasta aquí todo bien, pero cuando se navega a otras páginas que puede ser tan largo como:? relation.php sort_name = adres & tipo = asc & page = 2 & page = 3 & page = 14 = 23 & página & página = 27

La edad sigue apareciendo debido a $ _SERVER ['QUERY_STRING'], ¿cómo puedo limpiar mi URL con solo mantener la última página y? Sort_name = adres & ordenar = asc.

¿O sugiere otra solución de pedido y paginación?

+0

posible duplicado de [Cambiar el valor de variable única en la cadena de consulta] (http://stackoverflow.com/questions/4037909/change-single-variable-value-in-querystring) –

Respuesta

32

En vez de reutilizar QUERY_STRING, debe montarlo de nuevo con http_build_query().

// Merge $_GET with new parameter 
$QS = http_build_query(array_merge($_GET, array("page"=>2))); 

// You should apply htmlspecialchars() on the path prior outputting: 
echo "<a href='" . htmlspecialchars("$_SERVER[PHP_SELF]?$QS") . "'> $i </a>"; 

Así que tienen todos los parámetros actuales $_GET incluyen, pero puede añadir o sustituir las entradas con nuevos valores. Y se asegura de que cada uno aparezca solo una vez.

+0

Gracias por ese enlace. Parece práctico. – Marwelln

+0

+1 porque no sabía http_build_query antes :) – Marc

+0

Con esta solución obtuve la página actual y la última en la url? Page = 2 & page = 9 – Muiter

0

Crear un constructor de enlace (php sencilla générale hacer array ("a" => "b", "c" => "d") en? A = b & c = d y reconstruirlo cada vez (por ejemplo, . ponga "sort_name" => ..., "sort" => ..., "page" => ...)

Si aún desea utilizar QUERY_STRING, compruebe si contiene & page =. .. y reemplazarlo (ambos realizados por expresión regular)

0

no utilice cadena de consulta, basta con crear una variable al principio de la secuencia de comandos:

$pagerUrl = $_SERVER['PHP_SELF'].'?sort_name='.$_GET['sort_name']&sort=$_GET['sort']; 

y utilizarlo en su enlace:

echo '<a href="'.$pagerUrl.'&page='.$i.'">'.$i.'</a> '; 
+0

PHP_SELF siempre tendrá las variables de consulta anteriores Anexado al final, esa es la raíz del problema del OP. –

+1

No, eso no es cierto, las variables de consulta se incluyen solo en $ _SERVER ['QUERY_STRING'], no en $ _SERVER ['PHP_SELF'], por lo que QUERY_STRING es el problema – Marc

+0

Wow, ya sabes, acabo de arrojar un phpinfo() en mi servidor local y de alguna manera confundió REQUEST_URI con PHP_SELF. Touché, estoy corregido, mis disculpas. –