Foros del Web » Programando para Internet » PHP »

Problema con Búsqueda y Paginación de Resultados

Estas en el tema de Problema con Búsqueda y Paginación de Resultados en el foro de PHP en Foros del Web. Hola , espero me puedan ayudar. Para mí es una de esas situaciones en la que el cerebro ya dejó de cooperar , llevo sólo ...
  #1 (permalink)  
Antiguo 05/05/2005, 10:52
 
Fecha de Ingreso: abril-2005
Mensajes: 50
Antigüedad: 18 años, 11 meses
Puntos: 0
Pregunta Problema con Búsqueda y Paginación de Resultados

Hola, espero me puedan ayudar. Para mí es una de esas situaciones en la que el cerebro ya dejó de cooperar , llevo sólo mes y medio programando y aún me falta algo de esa intuición PHP. Aunque estoy seguro que es un ejemplo interesante y le puede servir a muchos.

Tengo una base de datos MySQL con una lista de noticias. La tabla que contiene las noticias esta estructurada con los siguientes campos:

id (primary key) / titulo / id_dia / id_mes / id_ano


id_dia, id_mes y id_ano estan conectadas con sus tablas respectivas (días, meses y años) las cuales contienen información para formar un calendario completo:

Tabla "dias" : contiene 31 campos (31 días por mes)
Tabla "meses": contiene 12 campos (12 meses por año)
Tabla "anos": sólo del 2003 al 2006

Esto lo utilizo para realizar una búsqueda de las base de datos por día, mes y año pero también pueden hacerla por día, por mes y/o por año.

Ejemplos de búsquedas:

(día, mes, año) 31 - Febrero – 2005
(día y mes de cualquier año) 31 – Febrero
(por mes y año) Febrero – 2005
(sólo por año) 2005

El calendario esta conformado por 3 menús de salto (html): día, mes y año; además de un botón de envío llamado buscar.

Cuando se realiza la búsqueda de la Base de Datos, el script muestra como resultado únicamente los títulos de las noticias. Por otro lado, el menú de salto con el calendario sigue apareciendo junto a los resultados obtenidos y sigue mostrando la opción de búsqueda elegida, es decir: la fecha que escogiste.

Para evitar el problema de tener que listar muchos resultados, los limité a 4 por página y utilicé un script que los pagina (el script de llama Pagination Script y lo obtuve de: http://mpageni.com/fun/index.php?page=downloads) Ejemplo Script:

Anterior << 1 2 3 4 5 >> Siguiente


PROBLEMAS - PREGUNTAS:
Código PHP:
1)Digamos en la base de datos de noticias existen 10 que pertenecen a Febrero del 2005. Cuando realizo la búsqueda por fechasolicitando sólo las noticias de Febrero del 2005el script de búsqueda me muestraen efectolas primeras 4 noticias de Febrero del 2005 pero cuando le doy clic en Siguiente (utilizando el script de paginaciónNO RECUERDA que sólo quería las noticias de le fecha elegida y las mezcla con todas las noticias de la base de datos.

2Cuando hago clic en Siguiente (utilizando el script de paginaciónel calendario del menú de saltodeja de mostrar la fecha elegida por lo que ya no me muestra de que fecha son las noticias que se están mostrandoEs decirtampoco RECUERDA cuál fue la fecha búsqueda.

3)No he podido lograr que cuando no haya resultadosno se muestre el menú de paginación (Anterior << 1 2 3 4 5 >> Siguientey que aparezca el mensaje “No se encontraron resultados en tu búsqueda”.

4)¿Qué pasaría si hay más de 1000 resultadosEl menú de paginación mostraría:


Anterior << 1 2 3 4 56789101112131415 ,16 …Hasta 1000 >> Siguiente

Esto sería muy engorroso por que no caben 1000 numeritos en el diseño de la página
Entoncescómo se le hace para que muestre de 5 en 5. Ejemplo:

Anterior << 1 2 3 4 5 >> Siguiente Anterior << 6 7 8 9 10 >> Siguiente Anterior << 11 12 13 14 15 >> Siguiente … etc
Seguiré intentando aún así ojalá algún valiente me pueda ayudar a resolver el problema.

Saludos y gracias

PD: Ya no puse el código por que era abusar con tanta información para un sólo POST en el foro , pero con gusto lo pongo si se necesita o se los envio por email o messenger.
  #2 (permalink)  
Antiguo 05/05/2005, 11:01
Avatar de dwaks  
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 21 años, 7 meses
Puntos: 15
De acuerdo

Uno de los motivos de porque no se siguen mostrando los datos elegidos es:
1- Cuando paginas debes pasar valores en los links del paginador, asi deberas anexarle el valor del dia, del mes y del año de lo que deseas para poder tener esos datos siempre y mandarselos al query de la base de datos.

2- SI el paginador se te hace dificil de controlar existen mejores formas en la red que no son scripts con nombre y version sino ejemplo de como hacer la paginacion y que te trabaje siempre con tus ideas y para lo que quieras.

En estos articulos dice:
http://www.programacion.net/articulos/php/

sino busca aqui en el faq del foro.

Saludos,
  #3 (permalink)  
Antiguo 05/05/2005, 11:20
 
Fecha de Ingreso: abril-2005
Mensajes: 50
Antigüedad: 18 años, 11 meses
Puntos: 0
Como paso tantas variables en la URL

Los valores definidos en los campos del formulario son muchos. ¿Cómo los añado todos a la URL del paginador? ¿Cómo los convierto en una sola variable?

Hay una opción en la configuración del script que pongo a continuación (ver Script II) que te permite definir esta variable para que la pases en la cadena, se llama $extra_var. El asunto es que no sé que poner

A continuación pongo la info de los scripts...


ESTRUCTURA DE LA BUSQUEDA

Código PHP:
<?php 

//CALENDARIO: Permite que la fecha utilizada para buscar la base de datos se siga viendo en el calendario de esta página. Ejemplo: si buscaste 26 Febrero 2005 en subpagina.php entonces una vez que los resultados se muestren en subpagina6busqueda.php, el calendario de esta página seguira mostrando 26 Febrero 2005. Lo mismo si sólo buscaste por mes y/o  año.
    
    
$diaid $_POST['diaid'];
    
$mesid $_POST['mesid'];
    
$anoid $_POST['anoid'];

    
    
$select1 ' SELECT diaid, mesid, anoid';
    
$from1   ' FROM dias, meses, anos';
    
$where1  ' WHERE 1=1';
    
    
$diaid $_POST['diaid'];
    if (
$diaid != '') { // An author is selected
      
$where1 .= " AND diaid = '$diaid'";
    }
    
    
$mes $_POST['mesid'];
    if (
$mes != '') { // An author is selected
      
$where1 .= " AND mesid = '$mesid'";
    }
    
    
$ano $_POST['anoid'];
    if (
$ano != '') { // An author is selected
      
$where1 .= " AND anoid = '$anoid'";
    }
    
    
$query = ($select1 $from1 $where1);
    
$result mysql_query($query) or die ("Error in query: $query. " mysql_error());
    
$row mysql_fetch_object($result);

// BUSQUEDA: Este script permite obtener la lista de noticias (por título) en la base de datos, a partir de la búsqueda por dia, mes y/o año realizada en subpagina.php

    
$select '    SELECT id, titulo';
    
$from   ' FROM p_documentos';
    
$where  ' WHERE 1=1';
    
$order  ' ORDER BY id_ano desc, id_mes desc, id_dia desc';

    
    
$dia $_POST['diaid'];
    if (
$dia != '') { // An author is selected
      
$where .= " AND id_dia='$dia'";
    }
    
    
$mes $_POST['mesid'];
    if (
$mes != '') { // An author is selected
      
$where .= " AND id_mes='$mes'";
    }
    
    
$ano $_POST['anoid'];
    if (
$ano != '') { // An author is selected
      
$where .= " AND id_ano='$ano'";
    }

?>
PAGINACIÓN SCRIPT 1

Código PHP:
<?php 
// Pagination script --- index.php
/* This script automates teh creation of navigation links for the datas extracted from 
    the database. It is preety simple and uses php and mysql to do this. Check out
    mpageni.com and pkronline.com where this scripts is in action everywhere.
    I created and i think i should share it. 
    Author: Manoj Pageni; http://mpageni.com; [email protected]
    Lisence: GPL.
    Copyright of mpageni.com.
*/
// Pagination script --- index.php

// file to be included
include 'config.php'
include 
'style.inc';

//Check if the page number is defined else set it to one. Standard Procedure. :)
if(!isset($_GET['page'])){
    
$page 1;}
    else {
$page $_GET['page']; 

//Calclate the offsets
$from = (($page $max_results) - $max_results); 
// Creat the query to be performed and then perform it.
        
$sql mysql_query("$query_list LIMIT $from, $max_results");

// pre_result output
echo $pre_result;

while(
$row mysql_fetch_array($sql)){ // loop through the result of the page.
    
$bgcolor =  ($bgcolor == $bgcolor1) ? $bgcolor2$bgcolor1//for altering background color.
        
include("template.inc");


//post_result output
echo $post_result;

// Calculate the total number of results.
$total_results mysql_result(mysql_query("SELECT COUNT($fields) as Num FROM $table"),0); 

// Calculate the total number of pages. ceil() is used to round the page number to the higher integer. 
$total_pages ceil($total_results $max_results); 



// The real stuff. Creats the Navigation Menu
//Set font style for navigation area
echo "<div class=\"text\"><center>$nav_title<br>"
// Create the Previous link.
if($page 1){ 
    
$prev = ($page 1); 
    echo 
"<a class=\"nav\" href=\"".$_SERVER['PHP_SELF']."?$httpvar=$prev\">$pre_style</a>&nbsp;"

//Creat the navigation page numbers.
for($i 1$i <= $total_pages$i++){ 
    if((
$page) == $i){ // make sure the link is not given to the page being viewed
        
echo "$i&nbsp;"
        } else { 
            echo 
"<a class=\"nav\" href=\"".$_SERVER['PHP_SELF']."?$httpvar=$i\">$i</a>&nbsp;"
    } 

// Create the next link.
if($page $total_pages){ 
    
$next = ($page 1); 
    echo 
"<a class=\"nav\" href=\"".$_SERVER['PHP_SELF']."?$httpvar=$next\">$next_style</a>"

echo 
"</center></div>";
echo 
$post_nav;

?>
PAGINACIÓN SCRIPT 2 (opciones de configuración)

Código PHP:
<?
// Pagination script --- config.php
// Configuration file. Contains functions and variables required by the script.
/* This script automates teh creation of navigation links for the datas extracted from 
    the database. It is preety simple and uses php and mysql to do this. Check out
    mpageni.com and pkronline.com where this scripts is in action everywhere.
    I created and i think i should share it. 
    Author: Manoj Pageni; http://mpageni.com; [email protected]
    Lisence: GPL.
    Copyright of mpageni.com.
*/

//General Configuration Variables
$max_results 4// Define the number of results per page 
$next_style '->'// The look for the next button
$pre_style '<-';//The look for the previous button
$extra_var ='';    //end with & if used. this is the variable you will pass if required.

//WARNING do not modify the $httpvar.
$httpvar $extra_var.'page'
$bgcolor1='#eeeeee';    //one of the background colors
$bgcolor2='#ffffff';    //the other background color;
$bgcolor $bgcolor1;    //the first background color to be used
$pre_result='';
$post_result='';
$post_nav='';
$nav_title='Páginas';

// Style.inc definitions
$nav_text_size'8pt';
$nav_link_color'green';
$nav_text_color='navy';
$nav_text_family='Verdana';
$nav_text_style='bold'//bold, italics
$nav_link_bg='#eeeeee';
//Database configuration; // please change the variables below as required// a must
$user="root";
$pass="xxxxxxxx";
$host="localhost";
$db="xxxxxxxx";
$table="xxxxxxx";
$fields=('*');  // please separate by commas if you use multiple fields

//Database connection. Do not modify below this.
$conn mysql_connect($host,$user,$pass);
mysql_select_db($db,$conn);
// mysql query to be performed
$query_list = ($select $from $where $order);
?>
  #4 (permalink)  
Antiguo 05/05/2005, 11:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Paginator es uno de esos ... tiene nombre y versión, documentación y código comentado .. también incorporta el tema de propagar más variables que la que el própio sistema de paginación necesita para generar tus links.

Un saludo,
  #5 (permalink)  
Antiguo 05/05/2005, 11:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Dejo el link de "Paginator de Jpinedo" para que lo veas .. por lo menos lo tienes en castellano y bien claro como se usa para propagar más variables adicionales a las que trabaja el mismo. El autor suele venir por aquí o puedes contactarlo con confianza por si tienes dudas en su sitio:

http://jpinedo.webcindario.com/scripts/paginator/

Un saludo,
  #6 (permalink)  
Antiguo 05/05/2005, 11:44
 
Fecha de Ingreso: abril-2005
Mensajes: 50
Antigüedad: 18 años, 11 meses
Puntos: 0
Estoy revisando la info del script y se ve muy completo, sencillo de usar y en español por supuesto.

Espero sea lo que necesito.

Muchas gracias

Saludos

Última edición por raml; 05/05/2005 a las 11:54
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 20:53.