Foros del Web » Programando para Internet » PHP »

Problema con paginación de resultados de una búsqueda

Estas en el tema de Problema con paginación de resultados de una búsqueda en el foro de PHP en Foros del Web. Saludos, he creado un buscador para mi web que muestra resultados de distintas tablas a partir de un input con name "keyword". Mi problema es ...
  #1 (permalink)  
Antiguo 16/08/2007, 07:08
 
Fecha de Ingreso: diciembre-2006
Mensajes: 12
Antigüedad: 17 años, 4 meses
Puntos: 0
Problema con paginación de resultados de una búsqueda

Saludos, he creado un buscador para mi web que muestra resultados de distintas tablas a partir de un input con name "keyword".

Mi problema es a la hora de paginar los resultados ya que si bien me muestra bien los resultados y las páginas si pulso en la segunda página es como si me perdiera la búsqueda, ya no me muestra los resultados de la misma sino todas los campos de mis tablas.

Como puedo solucionarlo?

Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 16/08/2007, 07:56
Avatar de Spookysama  
Fecha de Ingreso: agosto-2007
Mensajes: 42
Antigüedad: 16 años, 8 meses
Puntos: 0
Re: Problema con paginación de resultados de una búsqueda

Si nos pones el codigo tal vez podemos ver de donde proviene el error
  #3 (permalink)  
Antiguo 16/08/2007, 08:04
 
Fecha de Ingreso: diciembre-2006
Mensajes: 12
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: Problema con paginación de resultados de una búsqueda

Cita:
Iniciado por Spookysama Ver Mensaje
Si nos pones el codigo tal vez podemos ver de donde proviene el error

Este es el código:

Código PHP:
session_start ();
$_SESSION['buscador'] = $_POST;


$keyword=$_POST['keyword'];


$query_rsbusqueda "(SELECT titulo AS titulo, articulo, id_pueblo AS url, imagen, link, dir_imagen FROM pueblos
                     WHERE articulo LIKE '%$keyword%'
                     OR titulo LIKE '%$keyword%'
                     OR historia LIKE '%$keyword%'
                     OR gastronomia LIKE '%$keyword%'
                     OR entradilla LIKE '%$keyword%'
                     OR naturaleza LIKE '%$keyword%')
                     UNION
                     (SELECT titulo AS titulo, articulo, id_comarca AS url, imagen, link, dir_imagen FROM comarcas
                     WHERE articulo LIKE '%$keyword%'
                     OR titulo LIKE '%$keyword%'
                     OR entradilla LIKE '%$keyword%')
                     UNION
                     (SELECT hotel AS titulo, articulo, id_hotel AS url, codigo AS imagen, link, dir_imagen FROM hoteles
                     WHERE articulo LIKE '%$keyword%'
                     OR hotel LIKE '%$keyword%'
                     OR pueblo LIKE '%$keyword%'
                     OR tipo LIKE '%$keyword%'
                     OR servicios LIKE '%$keyword%'
                     OR entradilla LIKE '%$keyword%')
                     UNION
                     (SELECT titulo, articulo, id_ruta AS url, imagen, link, dir_imagen FROM rutas
                     WHERE articulo LIKE '%$keyword%'
                     OR titulo LIKE '%$keyword%'
                     OR entradilla LIKE '%$keyword%')
                     UNION
                     (SELECT titulo, evento AS articulo, eventoid AS url, imagen, link, dir_imagen FROM eventos
                     WHERE evento LIKE '%$keyword%'
                     OR titulo LIKE '%$keyword%'
                     OR fecha_ev LIKE '%$keyword%'
                     OR pueblo LIKE '%$keyword%')"
;
                     
$rsbusqueda mysql_query($query_rsbusqueda$link) or die(mysql_error());
$row_rsbusqueda mysql_fetch_assoc($rsbusqueda);
$totalRows_rsbusqueda mysql_num_rows($rsbusqueda);

        
$num_registros $totalRows_rsbusqueda;
        
$limite        15;
        
$pagina        = ((isset($_GET['pagina'])) && (is_numeric($_GET['pagina'])))? $_GET['pagina'] : 1;
        
$maxPaginas    10;
        
$inicio        = ($pagina-1)*$limite;
        
$num_paginas   ceil($num_registros/$limite);
        
$primera_ref   $inicio+1;

$query_rsbusqueda sprintf("%s LIMIT %s, %s"$query_rsbusqueda$inicio$limite);
$rsbusqueda mysql_query($query_rsbusqueda$link) or die(mysql_error());
$row_rsbusqueda mysql_fetch_assoc($rsbusqueda);
$totalRows_rsbusqueda mysql_num_rows($rsbusqueda);        
        

        if (
$totalRows_rsbusqueda 0)
        {    
            do {
            
            
$pos_busqueda strpos(strtolower($row_rsbusqueda['articulo']), strtolower($_POST['keyword']));
                
$pos_inicial = (($pos_busqueda-80) > 0)?$pos_busqueda-80:0;
                
$pos_final   = (($pos_busqueda+80) < strlen($row_rsbusqueda['articulo']))?$pos_busqueda+80:0;
                
                
$txt_busqueda_generado str_replace(strtolower($_POST['keyword']), "<b>" $_POST['keyword'] . "</b>"strtolower($row_rsbusqueda['articulo']));
                
$txt_busqueda_generado substr($txt_busqueda_generado$pos_inicial160);
                
                
$array_txt_busqueda_generado explode(" "$txt_busqueda_generado);

                if ( (
count($array_txt_busqueda_generado) > 2) && (strlen($txt_busqueda_generado) > 60))
                {
                    
$array_txt_busqueda = array();
                    for(
$i=1$i<count($array_txt_busqueda_generado)-1$i++)
                    {
                        
$array_txt_busqueda[] = $array_txt_busqueda_generado[$i];
                    }
                    
$txt_busqueda_generado implode(" "$array_txt_busqueda);
                }
                
                if (
$pos_inicial 0)
                {
                    
$txt_busqueda_generado "... $txt_busqueda_generado";
                }
                if (
$pos_final 0)
                {
                    
$txt_busqueda_generado .= " ...";
                }                
            
                
$array_busqueda[] = array("titulo"    => $row_rsbusqueda['titulo'],
                                          
"imagen" => $row_rsbusqueda['imagen'],
                                          
"url"  => $row_rsbusqueda['url'],
                                          
"link"     => $row_rsbusqueda['link'],
                                          
"dir_imagen"  => $row_rsbusqueda['dir_imagen'],
                                          
"articulo"  => $txt_busqueda_generado);
            }
            while (
$row_rsbusqueda mysql_fetch_assoc($rsbusqueda));
        } 
En otras busquedas similares con iniciar sección me valía para que recordase la búsqueda e hiciese la paginación de forma correcta, pero en este caso no.

Por cierto trabajo con smarty así que poner todo el código sería un poco complicado.
  #4 (permalink)  
Antiguo 16/08/2007, 08:07
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Problema con paginación de resultados de una búsqueda

El problema es que estas utilizando POST para pasar el resultado, y a la hora de cambiar entre las paginas usas GET para pasar el numero de pagina, necesitas propagar junto con tu numero de pagina la variable keyword para que no se pierda la variable de busqueda.

Saludos.
  #5 (permalink)  
Antiguo 16/08/2007, 08:41
 
Fecha de Ingreso: diciembre-2006
Mensajes: 12
Antigüedad: 17 años, 4 meses
Puntos: 0
Re: Problema con paginación de resultados de una búsqueda

Cita:
Iniciado por GatorV Ver Mensaje
El problema es que estas utilizando POST para pasar el resultado, y a la hora de cambiar entre las paginas usas GET para pasar el numero de pagina, necesitas propagar junto con tu numero de pagina la variable keyword para que no se pierda la variable de busqueda.
Ok ya lo arreglé cambiando POST por GET, muchas gracias.
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 14:21.