Foros del Web » Programando para Internet » PHP »

Mantener busqueda en paginación

Estas en el tema de Mantener busqueda en paginación en el foro de PHP en Foros del Web. Hola, Tengo un problema, este es que tengo que realizar una consultaque me devuelve miles de filas, como mostrar en una página una tabla con ...
  #1 (permalink)  
Antiguo 27/03/2009, 11:34
 
Fecha de Ingreso: enero-2008
Mensajes: 61
Antigüedad: 16 años, 9 meses
Puntos: 0
Mantener busqueda en paginación

Hola,

Tengo un problema, este es que tengo que realizar una consultaque me devuelve miles de filas, como mostrar en una página una tabla con 4000 filas me parecía excesivo e incomodo para el usuario decidí paginar los resultados.

El problema es que para cambiar de página uso esto. que pasa por get el valor de la pagina

Código PHP:
       echo "<a href='BusquedaGlobal.php?pagina=" $i "'>" $i "</a> "
Es el link <a href >, el que me cambia la select y mas especificamente en el limit enviando la pagina por get. Cuando el resultado de la consulta son todos los resultados la paginación va perfecta, sin embargo, cuando restringo la busqueda la primera pagina de resultados sale bien, pero al cambiar de pagina (por ejemplo a la 2 de la paginacion) vuelve a la busqueda global, osea, elimina la condicion que restingía la busqueda.

Pense en enviar la condición por la barra de dirección quedando algo asi

Código PHP:
echo "<a href='BusquedaGlobal.php?pagina=" $i "&condicion=".$condicion."'>" $i "</a> "
y recogiendola con get al principio de la página

Código PHP:
$condicion $_GET["condicion"]; 
....

Bueno esta claro que no me sale. He estado buscando algun sitio donde hable de la paginacion y de como mantener la condicion y no encontré. Si alguien sabe algun link se lo agradecería.
  #2 (permalink)  
Antiguo 27/03/2009, 11:39
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 16 años, 6 meses
Puntos: 43
Respuesta: Mantener busqueda en paginación

Puedes guardar la consulta en una variable de session y concatenarle los valores del limit como lo haces.
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #3 (permalink)  
Antiguo 27/03/2009, 11:48
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Mantener busqueda en paginación

Pues porque no expones el código que usas ya que teoricamente como estas indicando, debería de funcionar, pasando la condición por GET.

Saludos.
  #4 (permalink)  
Antiguo 27/03/2009, 11:58
 
Fecha de Ingreso: agosto-2007
Mensajes: 345
Antigüedad: 17 años, 3 meses
Puntos: 21
Respuesta: Mantener busqueda en paginación

http://www.forosdelweb.com/f18/pagin...elease-532119/
__________________
----
http://www.mascodigo.com
  #5 (permalink)  
Antiguo 27/03/2009, 12:00
 
Fecha de Ingreso: enero-2008
Mensajes: 61
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Mantener busqueda en paginación

<html>
<head>
</head>

<body bgcolor="#8CAED9">
<Form name="form" action="BusquedaGlobal.php" method="post">
<table width="700" border="1" bordercolor="#996666" cellspacing="0" align="center">
<tr bgcolor="#D6B77C" bordercolor="#000000" colspan="4">
<td colspan="2"> <center>
<h2>Busqueda Global de Ensayos</h2>
</center></td>
</tr>

<tr bgcolor="#D6B77C" bordercolor="#000000">
<td width="33%"><center><b>Número de Folio :</b></center></td>
<td width="33%"><center><b>Referencia Compuesto :</b></center> </td>
</tr>

<tr>
<td bgcolor="#CCCCCC" >
<center>
<input type="text" name="Numero_Folio" value="<? echo $_POST['Numero_Folio']?>" >
</center>
</td>
<td bgcolor="#CCCCCC" >

<?
$conexion = mysql_connect();
mysql_select_db();
$resultadotecnico = mysql_query("select Referencia from compuesto order by Referencia") or die('La consulta fall&oacute;: ' . mysql_error());
$campo=0;
echo '<select name="Referencia" id="Referencia" width="20">';
echo '<option value=""><center>&nbsp;&nbsp;&nbsp;&nbsp;---&nbsp;&nbsp;&nbsp;&nbsp;</center></option>';

while ($linea = mysql_fetch_array($resultadotecnico))
{
echo '<option value="'.$linea[$campo].'">'.$linea[$campo].'</option>';
}
echo '</select>';
?>
<?php

$varGuardaTipoEnsayo = $_POST['Tipo_Ensayo'];
$varGuardaTecnico = $_POST['Tecnico'];

//Guardamos el valor que trae el select de Tipo de ensayo
if ($varGuardaTipoEnsayo == "") //Si la variable esta vacia, es que es la primera vez que entro en la pagina
$varGuardaTipoEnsayo = "";
else
$varGuardaTipoEnsayo = $_POST['Tipo_Ensayo']; //sino es la 1ª vez que entro guardo el estado que envia

//Guardamos el valor que trae el select de tecnico
if ($varGuardaTecnico == "") //Si la variable esta vacia, es que es la primera vez que entro en la pagina
$varGuardaTecnico = "";
else
$varGuardaTecnico = $_POST['Tecnico']; //sino es la 1ª vez que entro guardo el estado que envia

?>
</td>
</tr><tr bgcolor="#D6B77C" bordercolor="#000000">
<td width="33%"><center><b>Tipo de Ensayo :</b></center> </td>
<td width="33%"><center><b>Técnico Ensayo :</b></center> </td>
</tr><tr>
<td bgcolor="#CCCCCC" >
<center>
<select name="Tipo_Ensayo">
<option value="">Seleccione el tipo de ensayo</option>
<option value="Unión de Radioligandos" <?php if ($varGuardaTipoEnsayo == "Unión de Radioligandos") echo "selected" ?>>Ensayo Unión de Radioligandos</option>
<option value="Segundos Mensajeros" <?php if ($varGuardaTipoEnsayo == "Segundos Mensajeros") echo "selected" ?>>Ensayo Segundos Mensajeros</option>

</select>
</center>
</td>

<td bgcolor="#CCCCCC" >
<center>
<select name="Tecnico">
<option value="">Técnico ensayo</option>
<option value="Rocio" <?php if ($varGuardaTecnico == "Rocio") echo "selected" ?>>Rocio</option>
<option value="Carlos" <?php if ($varGuardaTecnico == "Carlos") echo "selected" ?>>Carlos</option>

</select>
</center>
</td>
</tr>
<tr>
<td height="32" colspan="4" bgcolor="#D6B77C">
<center>
<input name="submit" type="submit" value=" Buscar Ensayo ">
</center>
</td>
</tr>
</table>
</Form>
<?
//Limito la busqueda
$TAMANO_PAGINA = 10;

//examino la página a mostrar y el inicio del registro a mostrar
$condicion = $_GET["condicion"];

echo "condicion 1=" .$condicion;
echo "<br>";

$pagina = $_GET["pagina"];

if (!$pagina) {
$inicio = 0;
$pagina=1;
}
else {
$inicio = ($pagina - 1) * $TAMANO_PAGINA;
}

if ($_POST['Numero_Folio'] !="")
$condicion = " and ".$condicion." Numero_Folio like '%".$_POST['Numero_Folio']. "%' " ;
if ($_POST['Referencia'] !="")
$condicion = " ".$condicion." and Referencia = '".$_POST['Referencia']. "'" ;
if ($_POST['Tecnico'] !="")
$condicion = " ".$condicion." and Nombre_Tecnico = '".$_POST['Tecnico']. "'" ;
if ($_POST['selectcompuesto'] !="")
$condicion = " ".$condicion. " and Referencia = '".$_POST['selectcompuesto']."' " ;

if ($varGuardaTipoEnsayo == "Unión de Radioligandos") //si el valor que envia es Todos
$condicion = " " .$condicion. " and Tipo_Ensayo ='Unión de Radioligandos'" ;

if ($varGuardaTipoEnsayo == "Segundos Mensajeros")
$condicion = " " .$condicion. " and Tipo_Ensayo='Segundos Mensajeros' " ;


$sql2 = "Select * from compuesto inner join ensayo on ensayo.id_compuesto=compuesto.id_compuesto
inner join realiza on ensayo.Id_ensayo=realiza.Id_ensayo
inner join técnico on realiza.Codigo_Tecnico=técnico.Codigo_Tecnico where 1 = 1 " .$condicion ;

$sql = "Select ensayo.Id_ensayo,ensayo.Numero_Folio,ensayo.Observ aciones,ensayo.Tipo_Ensayo,compuesto.Referencia,té cnico.Nombre_Tecnico from
compuesto inner join ensayo on ensayo.id_compuesto=compuesto.id_compuesto
inner join realiza on ensayo.Id_ensayo=realiza.Id_ensayo
inner join técnico on realiza.Codigo_Tecnico=técnico.Codigo_Tecnico where 1 = 1 ".$condicion." LIMIT ".$inicio."," .$TAMANO_PAGINA ;

//Numero total de filas
$NumeroUnionRadioligandos = mysql_num_rows(mysql_query($sql2));
$sqlTotal="Select distinct Numero_Folio from ensayo";
$NumeroTotal = mysql_num_rows(mysql_query($sqlTotal));
$resultado = mysql_query($sql);

//Calculo total de todas las páginas
$total_paginas = ceil($NumeroUnionRadioligandos / $TAMANO_PAGINA);

$sql = "Select ensayo.Id_ensayo,ensayo.Numero_Folio,ensayo.Observ aciones,ensayo.Tipo_Ensayo,compuesto.Referencia,té cnico.Nombre_Tecnico from
compuesto inner join ensayo on ensayo.id_compuesto=compuesto.id_compuesto
inner join realiza on ensayo.Id_ensayo=realiza.Id_ensayo
inner join técnico on realiza.Codigo_Tecnico=técnico.Codigo_Tecnico where 1 = 1 ".$condicion." LIMIT ".$inicio."," .$TAMANO_PAGINA ;

$resultado=mysql_query($sql);

if (!$resultado)
{
echo "No pudo ejecutarse satisfactoriamente la consulta ($sql) en la BD: " . mysql_error();
exit;
}
if (mysql_num_rows($resultado) == 0)
{
echo "<br>";
echo "<br>";
echo "<br>";
echo "<h2><center>No se ha encontrado ningún ensayo con esas características. </center></h2>" ;
echo "<center>"; echo '<a href="javascript:history.go(-1)">'; echo "Pincha aquí para volver a la página anterior"; echo"</a>"; echo "</center>";
exit;
}
?> <table border='1' cellspacing='0' bordercolor='#996666' align='center' width='775'>
<tr bgcolor='D6B77C' border='1' >
<td width='144'><center><b>Numero Folio:</b></center></td>
<td width='145'><center><b>Observaciones:</b></center></td>
<td width='150'><center><b>Referencia <BR> Compuesto:</b></center></td>
<td width='150'><center><b>Tipo de Ensayo:</b></center></td>
<td width='55'><center><b>Nombre Técnico:</b></center></td>
<td width='105'><center><b>¿Borrar Ensayo?:</b></center></td>
</tr>
<?php
while ($fila = mysql_fetch_assoc($resultado))
{ ?>
<form name="form1" method="post" action="ConfirmaBorrado.php">
<tr bordercolor='black'>
<td width='144' bordercolor='#CCCCCC' bgcolor='#EAEAEA'><input type="text" name="Numero_Folio" value="<?php echo $fila["Numero_Folio"];?>"> <br></td>
<td width='145' bordercolor='#CCCCCC' bgcolor='#EAEAEA'><textarea cols='20' rows='1' > <?php echo $fila['Observaciones'];?></textarea><br></td>
<td width='150' bordercolor='#CCCCCC' bgcolor='#EAEAEA'><input type="text" name="Referencia" value="<?php echo $fila["Referencia"]; ?>"> <br></td>
<td width='150' bordercolor='#CCCCCC' bgcolor='#EAEAEA'><input type="text" name="Tipo_Ensayo" value="<?php echo $fila["Tipo_Ensayo"]; ?>"> <br></td>
<td width='55' bordercolor='#CCCCCC' bgcolor='#EAEAEA'> <?php echo $fila["Nombre_Tecnico"]; ?><br></td>
<td width='105' bordercolor='#CCCCCC' bgcolor='#EAEAEA'><input name="id" type="hidden" id="id" value= "<?php echo $fila["Id_ensayo"]; ?> ">

<center><input name="Borrar Ensayo" type="submit" class="Estilo1" value="Borrar"></center></td></tr>
</form>
<?php }
mysql_free_result($resultado);
?>
</table>

<?php
$condicion = $condicion.$varGuardaTipoEnsayo;
?>

<?php
if ($total_paginas > 1){
for ($i=1;$i<=$total_paginas;$i++){
if ($pagina == $i)
//si muestro el índice de la página actual, no coloco enlace
echo $pagina . " ";
else
//si el índice no corresponde con la página mostrada actualmente, coloco el enlace para ir a esa página

echo "<a href='BusquedaGlobal.php?pagina=" . $i . "&condicion=".$condicion."'>" . $i . "</a> ";
}
}
?>

<br>
<center>Se han encontrado (<?php echo ("<b>"); echo($NumeroUnionRadioligandos); echo("</b>");?>) ensayos con esas características de un total de (<?php echo ("<b>"); echo($NumeroTotal); echo("</b>");?>)</center>
<?php
echo "Número de registros encontrados: " . $NumeroUnionRadioligandos . "<br>";
echo "Se muestran páginas de " . $TAMANO_PAGINA . " registros cada una<br>";
echo "Mostrando la página " . $pagina . " de " . $total_paginas . "<p>";
?>

<br><center> <a href="javascript:history.go(-1)">Pincha aquí para volver a la página anterior</a></center>
</body>
</html>

Es un poco locura, perdon por el desorden...igual esta mi cabeza
  #6 (permalink)  
Antiguo 30/03/2009, 05:26
 
Fecha de Ingreso: enero-2008
Mensajes: 61
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Mantener busqueda en paginación

El problema -> Las variables que mandaba tenian espacios en blanco. Cosa que es incompatible con el método GET.

Solución-> <a href="BusquedaGlobal.php?pagina=<? echo $i; ?>&condicion=<? echo urlencode("$condicion");?>"><? echo $i; ?></a>

Con el uso de la función urlencode cambia los espacios por el signo '+'.


Al principio de la página coloco esto que recibe por el método GET

$condicion = urldecode ($_GET['condicion']);
$condicion = stripslashes($condicion);

striplashes le quita las barras.

Muchas gracias a todos por la ayuda
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:07.