Mantener condición de búsqueda

Desarrolle un buscador en PHP que utiliza para sus búsquedas una BBDD SQL.
La página donde se inicia la búsqueda esta conformada por una caja de texto y un botón "buscar".
El proceso de búsqueda lo realiza bien. El problema comienza cuando encuentra más de 15 registros y los resultados son paginados.
Cuando intento acceder a la segunda página de resultados sale el mensaje "no se encontraron registros".
Me imagino que es porque la condición de búsqueda no se mantiene al apretar el botón "buscar". Ya que al mostrar la primer página de resultados la caja de texto vuelve a estar vacía.
¿Alguien me podría decir cómo hago para que la condición de búsqueda se mantenga a través de las diferentes páginas que crea la paginación?

1 Respuesta

Respuesta
1
La condición de búsqueda la puedes mantener enviando parámetros en el link que te va a ver más resultados.
Has de recoger estos parámetros en la página donde muestres los otros resultados y solucionado.
Dreamweaver tiene un paginador automático y que funciona fenomenal, no hace falta que lo programes tu.
Hola jorvidu.
Gracias por responder.
Lo que pasa es que tengo la paginación ya desarrollada y no quisiera cambiarla.
¿Cómo hago para enviar los parámetros y después recogerlos en las otras páginas?
Saludos!
Si has desarrollado tu mismo la paginación, no tendrás problemas para el tema del envío de parámetros:
pagina_destino.php?parametro1=valor&parametro2=valor2... etc...
Con eso envias los parámetros, y para recuperarlos, utiliza esto:
$parametroqueviene=$_GET["parametro1"];
Y así con todos, con los valores ya podrás hacer lo que necesites.
OK, lo pongo en práctica y te aviso.
Saludos
OK.
Hola Jorvidu.
Intente pero no hay forma.
Si quieres te puedo enviar el código que tengo por mail o pegarlo acá.
Saludos
Pégalo aquí a ver si te puedo echar una mano
Acá lo dejo.
Saludos.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="shortcut icon" href="http://127.0.0.1/favicon.ico">
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<meta name="generator" content="PSPad editor, www.pspad.com">
<title>TuNegocio.com</title>
<style type="text/css">
<!--
.style1 {
    font-size: xx-small;
    font-family: Verdana;
}
.style3 {font-family: Verdana}
-->
  </style>
</head>
<body onLoad="document.getElementById('cursor').focus()">
<table width="100%" border="0">
<tr>
<td>
<div align="center"><a href="index.php"><img src="imagenes/logo_lupa4.png" width="226" height="130" border="0"></a></div>
</td>
</tr>
</table>
<table width="100%" border="0">
<tr>
<td><form action="consulta.php" method="post">
<div align="center">
        <input name="buscar" type="text" id="cursor" size="25">
          <button name="enviar" value="enviar" type="submit"> Buscar </button>
<p><a href="bus_avan_index.php" class="style1">Búsqueda Avanzada</a> <span class="style1"><a href="bus_rubro_index.php">Búsqueda por Rubro</a></span> <span class="style1"><a href="bus_calle_index.php">Búsqueda por Calle</a></span>  <a href="bus_cal_indice_in.php" class="style1">Búsqueda por indice de calle</a> <a href="bus_cuadras_index.php" class="style1">Búsqueda por cuadras</a><br>
          </p>
</div>
</form></td>
</tr>
</table>
</body>
</html>
<?php
//Conexión al servidor
$link = mysql_connect("127.0.0.1", "xxxx", "xxxxx");
//Selección de la base de datos
mysql_select_db("tunegocio", $link);
//Sentencia de la búsqueda a efectuar en la tabla para calcular el número de páginas a mostrar
if(!isset($pag)) $pag = 1; // Por defecto, pagina 1
 $result = mysql_query("SELECT COUNT(*) FROM comercios WHERE nombre LIKE '%".$buscar."%' OR rubro LIKE '%".$buscar."%' OR palabras_claves LIKE '%".$buscar."%' ORDER BY rubro ASC", $link);
list($total) = mysql_fetch_row($result);
$tampag = 15;
$reg1 = ($pag-1) * $tampag;
//Sentencia de la busqueda a efectuar en la tabla para obtener los registros
$result = mysql_query("SELECT nombre, calle, desde, hasta, numero, rubro, telefono, horario, localidad FROM comercios WHERE nombre LIKE '%".$buscar."%' OR rubro LIKE '%".$buscar."%' OR palabras_claves LIKE '%".$buscar."%' ORDER BY rubro ASC LIMIT $reg1, $tampag", $link);
/******************************************************/
/* Funcion paginar
 * actual:          Página actual
 * total:           Total de registros
 * por_pagina:      Registros por pagina
 * enlace:          Texto del enlace
 * Devuelve un texto que representa la paginacion
 */  
function paginar($actual, $total, $por_pagina, $enlace) {
  $total_paginas = ceil($total/$por_pagina);
  $anterior = $actual - 1;
  $posterior = $actual + 1;  
  if ($actual>1)
    $texto = "<FONT FACE=verdana><a href=\"$enlace$anterior\">«</a></FONT> ";
  else
    $texto = "<b><FONT FACE=verdana>«</FONT></b> ";
  for ($i=1; $i<$actual; $i++)
    $texto .= "<FONT FACE=verdana><a href=\"$enlace$i\">$i</a></FONT> ";
  $texto .= "<b><FONT COLOR=FF7F00 FONT FACE=verdana>$actual</FONT></b> ";
  for ($i=$actual+1; $i<=$total_paginas; $i++)
    $texto .= "<FONT FACE=verdana><a href=\"$enlace$i\">$i</a></FONT> ";
  if ($actual<$total_paginas)
    $texto .= "<FONT FACE=verdana><a href=\"$enlace$posterior\">»</a></FONT>";
  else
    $texto .= "<b><FONT FACE=verdana>»</FONT></b>";    
  return $texto;  
}
//Resultados a paginar y construcción de la tabla en la que se mostraran los resultados
if ($row = mysql_fetch_array($result)){
   echo "
<table width= 100% border = '0'>
\n";
   echo "
<tr>
<td align=center bgcolor=#FF7F00 <FONT COLOR=ffffff FONT FACE=verdana>Nombre</FONT></td>
<td align=center bgcolor=#FF7F00 <FONT COLOR=ffffff FONT FACE=verdana>Calle</FONT></td>
<td align=center bgcolor=#FF7F00 <FONT COLOR=ffffff FONT FACE=verdana>Entre</FONT></td>
<td align=center bgcolor=#FF7F00 <FONT COLOR=ffffff FONT FACE=verdana>Y</FONT></td>
<td align=center bgcolor=#FF7F00 <FONT COLOR=ffffff FONT FACE=verdana>Número</FONT></td>
<td align=center bgcolor=#FF7F00 <FONT COLOR=ffffff FONT FACE=verdana>Rubro</FONT></td>
<td align=center bgcolor=#FF7F00 <FONT COLOR=ffffff FONT FACE=verdana>Teléfono</FONT></td>
<td align=center bgcolor=#FF7F00 <FONT COLOR=ffffff FONT FACE=verdana>Horario</FONT></td>
<td align=center bgcolor=#FF7F00 <FONT COLOR=ffffff FONT FACE=verdana>Localidad</FONT></td>
</tr>
\n";
   do {
      echo "
<td align=center bgcolor=#FFee99 <FONT FACE=verdana>".$row["nombre"]."</FONT></td>
\n";
      echo "
<td align=center bgcolor=#FFee99 <FONT FACE=verdana>".$row["calle"]."</FONT></td>
\n";
      echo "
<td align=center bgcolor=#FFee99 <FONT FACE=verdana>".$row["desde"]."</FONT></td>
\n";  
      echo "
<td align=center bgcolor=#FFee99 <FONT FACE=verdana>".$row["hasta"]."</FONT></td>
\n";
      echo "
<td align=center bgcolor=#FFee99 <FONT FACE=verdana>".$row["numero"]."</FONT></td>
\n";
      echo "
<td align=center bgcolor=#FFee99 <FONT FACE=verdana>".$row["rubro"]."</FONT></td>
\n";
      echo "
<td align=center bgcolor=#FFee99 <FONT FACE=verdana>".$row["telefono"]."</FONT></td>
\n";
      echo "
<td align=center bgcolor=#FFee99 <FONT FACE=verdana>".$row["horario"]."</FONT></td>
\n";
      echo "
<td align=center bgcolor=#FFee99 <FONT FACE=verdana>".$row["localidad"]."</FONT></td>
</tr>
\n";
  } while ($row = mysql_fetch_array($result));
    mysql_free_result($result);        
   echo "
</table>
\n";
//Llamado a la función "paginar" para mostrar los links de las páginas
echo paginar ($pag, $total, $tampag, "consulta.php?pag=");  
echo "<br>";
$resultados=" Resultados encontrados: ";
if ($total > 0)
echo "
<table width= 100% border = '0'>
\n";
{
echo "
<td align=center <FONT FACE=verdana>$resultados</FONT>";
echo "<FONT COLOR=FF7F00 FONT FACE=verdana>$total</FONT></td>
";
}   
echo "
</table>
\n";
//Si no hay resultados en la busqueda...
} else {
echo "
<table width = 100% border ='0'>
\n";
echo "
<tr>
<td align=center bgcolor=#FF7F00 <FONT COLOR=000000 FONT SIZE=5 FONT FACE=verdana>No se han encontrado registros</FONT></td>
</tr>
\n";
echo "
</table>
\n";
}
?>
</body>
</html>
En la llamada a esta función:
paginar ($pag, $total, $tampag, "consulta.php?pag=");
Le debes de enviar dos parámetros más, los registros de "donde a donde", para que los reciba la página de la búsqueda, recogiendo los valores así:
$_GET["registroinicio"]
$_GET["registrofinal"]
Dentro de tu Query:
$result = mysql_query("SELECT nombre, calle, desde, hasta, numero, rubro, telefono, horario, localidad FROM comercios WHERE nombre LIKE '%".$buscar."%' OR rubro LIKE '%".$buscar."%' OR palabras_claves LIKE '%".$buscar."%' ORDER BY rubro ASC LIMIT $_GET["registroinicio"], $_GET["registrofinal"]", $link);
De todas formas, lo has hecho de una forma un poco extraña... de verdad te recomiendo que accedes a Dreamweaver y hagas allí un ejemplo, mira su código, está muy bien optimizado y funciona perfecto... después modifica lo tuyo con ese ejemplo. No hace falta que uses funciones ni nada parecido, con simple PHP en linea, lo tienes todo resuelto!.
Gracias por tu tiempo jorvidu.
En cuanto lo ponga en práctica te aviso como fue.
Saludos
Recuerda cerrar la pregunta cuando acabes!
Suerte

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas