Foros del Web » Programando para Internet » PHP »

Paginar los resultados de una busqueda

Estas en el tema de Paginar los resultados de una busqueda en el foro de PHP en Foros del Web. Buenas noches como estan?? chequeando varias opciones para paginar con php me encontre dentro del foro con una opcion para paginar resultados de una búsqueda ...
  #1 (permalink)  
Antiguo 13/03/2008, 17:25
 
Fecha de Ingreso: septiembre-2007
Mensajes: 120
Antigüedad: 16 años, 7 meses
Puntos: 0
Paginar los resultados de una busqueda

Buenas noches como estan?? chequeando varias opciones para paginar con php me encontre dentro del foro con una opcion para paginar resultados de una búsqueda llamada PHPPaging

Bueno mi consulta, por si me pueden ayudar, es la siguiente, vi los ejemplos que tiene PHPPaging, ellos plantean como un simlpe ejemplo el usar una variable X para almacenar la accion de busqueda que bien podria ser
Código PHP:
$sql "SELECT * FROM inscripciones ORDER BY id ASC"
Ahora yo modifque esa variable para que hiciera la busqueda con relacion a un valor que se pueda ingresar en un Textfield por ejemplo
Código PHP:
$sql="select * from inscripciones where nombre='$_POST[nombre]' ORDER BY id ASC"
Claro esta que en este caso "nombre" seria el valor por el cual hacemos la busqueda. Ahora mi problema es el siguiente, cuando defino la busqueda y me recupera X cantidad de registros, cuando intento pasar a la siguiente pagina se pone en blanco hasta que ingreso nuevamente el valor y es cuando aparecen los registros correspondientes a ese valor en la pagina que seleccione. Creen que podrian ayudarme a solucionar esto?? el codigo completo de la pagina es el siguiente:

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Documento sin t&iacute;tulo</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="">
  <label>Busqueda por ID: <input type="text" name="nombre" /></label>
  <label><input type="submit" name="Submit" value="Buscar" /></label>
<?php 
include "conexion.php";

$sql="select * from inscripciones where nombre='$_POST[nombre]' ORDER BY id ASC";
include_once 
'PHPPaging.lib.php';
$paging = new PHPPaging;  

$paging->agregarConsulta($sql);   

//Configuracion script 
configuracion del script
$paging
->porPagina(4);
$paging->paginasAntes(1);
$paging->paginasDespues(1);
$paging->linkClase('navbar');
$paging->linkSeparador(' - ');
$paging->ejecutar();
//fin configuracion

echo "<table border=\"1\" width=\"100%\">";  
echo 
"<tr>";  
echo 
"<td><b>ID de usuario</b></td>";  
echo 
"<td><b>Nombres</b></td>";  
echo 
"<td><b>Apellidos</b></td>";  
echo 
"<td><b>cedula</b></td>";  
echo 
"</tr>";  

while(
$datos $paging->fetchResultado()) {  
    echo 
"<tr>";  
    echo 
"<td>$datos[id]</td>";  
    echo 
"<td>$datos[nombre]</td>";  
    echo 
"<td>$datos[apellido]</td>";  
    echo 
"<td>$datos[cedula]</td>";  
    echo 
"</tr>";  
}  

echo 
"</table>";  
echo 
"<br />"
echo 
"<b>Navegación</b>: ".$paging->fetchNavegacion(); 
echo 
"<br><b>Total de Paginas</b>: ".$num_paginas $paging->numTotalPaginas(); 
echo 
"<br><b>Pagina Actual</b>: ".$pagina_actual $paging->numEstaPagina(); 
echo 
"<br><b>registros del</b>: ".$primer_elemento $paging->numPrimerRegistro();
echo 
"<b> al</b> ".$ultimo_elemento $paging->numUltimoRegistro();
echo 
"<br><b>total de registros</b>:".$total_registros $paging->numTotalRegistros(); 
echo 
"<br><b>Numero de registros mostrados:</b> ".$paging->numRegistrosMostrados(); 

?>
</form>
</body>
</html>
Gracias por la ayuda que me puedas prestar.
  #2 (permalink)  
Antiguo 13/03/2008, 17:46
 
Fecha de Ingreso: marzo-2007
Ubicación: España
Mensajes: 133
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: Paginar los resultados de una busqueda

Buenas,

creo que tu problema se debe a que la variable $nombre se pierde al recargar la pagina cuando das en algun link de la paginacion... (no sep, prueba con un echo $nombre a ver que te muestra...)

Tampoco he mirado el codigo de la clase que usas para paginar pero:

En tu codigo podrias opner $_REQUEST[nombre] en vez de post
y
En donde formas los links para paginar añadirle ?nombre=$nombre

a ver si eso te sirve un poco de guia ;) ya diras algo... Yo tuve el mismo problema pero sin usar esa clase... y me pasaba eso
  #3 (permalink)  
Antiguo 14/03/2008, 08:49
 
Fecha de Ingreso: septiembre-2007
Mensajes: 120
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: Paginar los resultados de una busqueda

Amiga gracias por tu respuesta pero lamento informarte que no funcion. Estoy dando vueltas al codigo de la clase a ver si encuentro algo que funcione de todas maneras adjunto el codigo de la clase. Borreo varias lineas de comentario a fin de hacerlo mas corto, de todas maneras lo divido en dos para que lo vean completo de todas maneras lo divido en dos para poder ponerlo todo pero si deje la mencion del autor del codigo. Espero alguien pueda ayudarme. Tu si pudiste solucionar?? como hiciste el paginado??
Código PHP:
<?php
/*@author Marco A. Madueño Mejía (MyOkram)*/
class PHPPaging {
/*Número de elementos por página*/
var $porPagina;
/*Número de páginas anteriores a la actual a las que se mostrará un link directo*/
var $paginasAntes;
/*Número de páginas posteriores a la actual a las que se mostrará un link directo*/
var $paginasDespues;
/*Estilo para los links en barra de links*/
var $linkClase;
/*Separador para la barra de links*/
var $linkSeparador "&nbsp;";
/*Cadena que se agregará al final de cada link*/
var $linkAgregar;
/*Mensaje para el atributo <i>title</i> de los links*/
var $linkTitulo;
/*Cadena que se mostrará en el link hacia la PRIMERA página*/
var $mostrarPrimera;
/*Cadena que se mostrará en el link hacia la ÚLTIMA página*/
var $mostrarUltima;
/*Cadena que se mostrará en el link hacia la página ANTERIOR*/
var $mostrarAnterior;
/*Cadena que se mostrará en el link hacia la página SIGUIENTE*/
var $mostrarSiguiente;
/*Cadena que se mostrará en el link hacia las páginas accesibles en barra de links*/
var $mostrarIntermedias;
/*Cadena que se mostrará en vez del link hacia la página ACTUAL*/
var $mostrarActual;
/*Nombre de variable en la url*/
var $nombreVariable;
    
/*VARIABLES DE USO INTERNO. NO MODIFICAR!*/
var $url;
var 
$style;
var 
$numTotalPaginas;
var 
$numEstaPagina;
var 
$numPrimerRegistro;
var 
$numUltimoRegistro;
var 
$numTotalRegistros;
var 
$numTotalRegistros_this;
var 
$data = array();
var 
$ejecutard = array();
var 
$mysql null;
var 
$root;
var 
$conn;

/*FUNCIONES QUE ESTABLECEN LOS CRITERIOS PARA LA PAGINACION* NO MODIFICAR!*/
    
    
function __construct ($conn null) {
        
$this->conn $conn;
    }
    
/*Array con datos para paginar define los datos para paginar @param array $input Array que contiene los datos a paginar @returns void*/
    
function agregarArray ($input) {
        
$this->data = (is_array($input)) ? $input : array();
    }
    
/*Consulta SQL para obtener los datos para el paginado. La consulta no deberá especificar límites pues de eso se encargará el script. Define una consulta SQL en base a la cual se realizará el paginado @param string $sql Una consulta SQL estandar. La consulta no debe terminar con punto y coma. @returns bool */
    
function agregarConsulta ($sql) {
        
$this->sql $sql;
    }
    
/*Número de elementos por página. Define el número de registros que serán mostrados en cada página @param number $num Número de registros por página que se usará @returns bool    **/
    
function porPagina ($num) {
        if (
is_numeric($num) && $num >= 1$this->porPagina intval($num);
        else return 
false;
        return 
true;
    }
    
/*Nombre de variable en la URL Define el nombre de la variable de url que indicará el número de página @param string $var Nombre de la variable de url @returns bool**/
    
function nombreVariable ($var) {
        if (
ereg("(^[a-zA-Z0-9]+)$",$var)) $this->nombreVariable $var;
        else return 
false;
        return 
true;
    }
    
/*Número de páginas anteriores a la actual a las que se mostrará un link directo Define el número de links a páginas anteriores a la actual que serán mostrados en la barra de links @param number $num Número de páginas anteriores a la actual @returns bool */
    
function paginasAntes ($num) {
        if (
is_numeric($num) && $num >= 0$this->paginasAntes intval($num);
        else return 
false;
        return 
true;
    }
    
/*Número de páginas posteriores a la actual a las que se mostrará un link directo Define el número de links a páginas posteriores a la actual que serán mostrados en la barra de links @param number $num Número de páginas posteriores a la actual @returns bool*/
    
function paginasDespues ($num) {
        if (
is_numeric($num) && $num >= 0$this->paginasDespues intval($num);
        else return 
false;
        return 
true;
    }
  
/*Separador para la barra de links Define el separador que se usará entre cada link en la barra de links @param string $separator Separador entre links @returns void */
    
function linkSeparador ($separator '') {
        
$this->linkSeparador $separator;
    }
  
/*Cadena que se mostrará en el link hacia la PRIMERA página Define la cadena que será mostrada en el enlace hacia la primera página @param string $string Cadena a mostrar @returns void */
    
function mostrarPrimera ($string) {
        
$this->mostrarPrimera $string;
    }
  
/*Cadena que se mostrará en el link hacia la ÚLTIMA página Define la cadena que será mostrada en el enlace hacia la última página @param string $string Cadena a mostrar */
    
function mostrarUltima ($string) {
        
$this->mostrarUltima $string;
    }
  
/*Cadena que se mostrará en el link hacia la página ANTERIOR Define la cadena que será mostrada en el enlace hacia la página anterior @param string $string Cadena a mostrar @returns void*/
    
function mostrarAnterior ($string) {
        
$this->mostrarAnterior $string;
    }
  
/*Cadena que se mostrará en el link hacia la página SIGUIENTE Define la cadena que será mostrada en el enlace hacia la página siguiente @param string $string Cadena a mostrar @returns void */
    
function mostrarSiguiente ($string) {
        
$this->mostrarSiguiente $string;
    }
  
/*Cadena que se mostrará en el link hacia las páginas accesibles en barra de links Define la cadena que será mostrada en el enlace hacia las páginas accesibles desde la barra de links. El número de página deberá ser indicado como %d @param string $string Cadena a mostrar @returns void*/
    
function mostrarIntermedias ($string) {
        
$this->mostrarIntermedias $string;
    }
  
/*Cadena que se mostrará en vez del link hacia la página ACTUAL Define la cadena que será mostrada como página actual en la barra de links. El número de página (Página actual) deberá ser indicado como %d @param string $string Cadena a mostrar @returns void*/
    
function mostrarActual ($string) {
        
$this->mostrarActual $string;
    }
    
/*Cadena que se agregará al final de cada linkAgrega una cadena "addon" al final de cada link en la barra de links@param string $addon Cadena que será añadida @returns void*/
    
function linkAgregar ($addon) {
        
$this->linkAgregar $addon;
    }
    
/*Estilo para los links en barra de links Define la clase CSS que será aplicada a los links de la barra de links @param string $id Clase CSS a aplicar*/
    
function linkClase ($id) {
        
$this->linkClase $id;
    }
    
/*Mensaje para el atributo <i>title</i> de los links en barra de links Define un mensaje para el atributo 'title' de los links de la barra de links. El mensaje debe ser en formato: XXXX %1$s XXXX %2$s XXXX %3$s XXXX %4$s XXXX. Los caracteres %n$s seran reemplazados en orden según el número por:
- %1$s = Número de página
- $2$s = Primer resultado mostrado
- $3$s = Último Resultado mostrado
- $4$s = Total de resultados de la BD
@param string $msg Mensaje que será incluído en los links @returns void**/
    
function linkTitulo ($msg) {
        
$this->linkTitulo $msg;
    }

/*fin de primera parte*/
  #4 (permalink)  
Antiguo 14/03/2008, 08:50
 
Fecha de Ingreso: septiembre-2007
Mensajes: 120
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: Paginar los resultados de una busqueda

El codigo que continua es este.... directamente en la linea siguiente al codigo anterior
Código PHP:
/* junta codigo en la linea siguiente*/
/*FUNCIONES QUE DEVUELVEN VALORES RELATIVOS AL PAGINADO*/
/*Número total de páginas Devuelve el número total de páginas */
    
function numTotalPaginas () {
        return 
$this->numTotalPaginas;
    }
    
/*Número de página actual Devuelve el número de página actual @returns int */
    
function numEstaPagina () {
        return 
$this->numEstaPagina;
    }
    
/*Número de primer registro mostrado Devuelve el número del primer registro mostrado, en relación al total de registros @returns int */
    
function numPrimerRegistro () {
        return 
$this->numPrimerRegistro;
    }
    
/* Número de último registro mostrado Devuelve el número del último registro mostrado, en relación al total de registros @returns int */
    
function numUltimoRegistro () {
        return 
$this->numUltimoRegistro;
    }
    
/* Número de total registros Devuelve el número total de registros encontrados @returns int*/
    
function numTotalRegistros () {
        return 
$this->numTotalRegistros;
    }
    
/*Número de registros mostrados en esta página Devuelve el número de registros mostrados en la página actual @returns int */
    
function numRegistrosMostrados () {
        return 
$this->numTotalRegistros_this;
    }
    
/* Obtener los valores de configuración Devuelve un array con los valores de configuración @returns void */
    
function superArray () {
        return array(
"numPrimerRegistro"=>$this->numPrimerRegistro"numUltimoRegistro"=>$this->numUltimoRegistro"numTotalRegistros"=>$this->numTotalRegistros"porPagina"=>$this->porPagina"numRegistrosMostrados"=>$this->numTotalRegistros_this"nombreVariable"=>$this->nombreVariable"linkAgregar"=>$this->linkAgregar"linkClase"=>$this->linkClase"linkSeparador"=>$this->linkSeparador"numEstaPagina"=>$this->numEstaPagina"numTotalPaginas"=>$this->numTotalPaginas"paginasAntes"=>$this->paginasAntes"paginasDespues"=>$this->paginasDespues"mostrarPrimera"=>$this->mostrarPrimera"mostrarUltima"=>$this->mostrarUltima"mostrarAnterior"=>$this->mostrarAnterior"mostrarSiguiente"=>$this->mostrarSiguiente"mostrarIntermedias"=>$this->mostrarIntermedias"mostrarActual"=>$this->mostrarActual);
    }
    
/*Obtener los registros a mostrar Devuelve un array con los registros seleccionados para mostrar @returns array */
    
function fetchResultado () {
        if(
is_array($this->ejecutard)) {
            if(list(
$key$row) = each($this->ejecutard)) return $row;
        } elseif(
$row = @mysql_fetch_array($this->ejecutard)) {
            return 
$row;
        }
        else return 
false;
    }
    
    function 
fetchTodo () {
        if(
is_array($this->ejecutard))
            return (
count($this->ejecutard) > 0) ? $this->ejecutard null;        
        
$r = array();
        while(
$f $this->fetchResultado()) {
            
$r[] = $f;
        }
        return (
count($r) > 0) ? $r null
    }
    
/*Obtener barra de linksDevuelve una cadena conteniendo la barra de links en formato HTML @returns string */
    
function fetchNavegacion () {
        
$this->check_vars();
        
$i = array();
        foreach(
$_GET as $key=>$val) {
            if(
$key !== $this->nombreVariable) {
                
$i[] = "$key=$val";
            }
        }
        
$i[] = $this->nombreVariable;
        
$this->query_string implode('&',$i);
        
$this->root = (empty($this->root)) ? "http://".$_SERVER['HTTP_HOST'] : $this->root;
        
$this->url basename($_SERVER['PHP_SELF']).'?'.$this->query_string;
        
$this->style = (!empty($this->linkClase)) ? ' class="'.$this->linkClase.'"' NULL;
        
$before $this->paginasAntes;
        
$after $this->paginasDespues;
        
$pthis $this->numEstaPagina;
        
$ptotal $this->numTotalPaginas;
        
$before = (($pthis $before) < 1) ? : ($pthis $before);
        
$after = (($pthis $after) > $ptotal) ? $ptotal : ($pthis $after);
        
$link_string = array();
        if(
$pthis $this->paginasAntes+1) {
            
$link_string[] = $this->do_link(1,$this->addlinkmsg(1,1,$this->porPagina,1),$this->mostrarPrimera);
        }
        if(
$pthis 1) {
            
$link_string[] = $this->do_link(($pthis-1),$this->addlinkmsg(($pthis-1),(($this->porPagina*($pthis-2))+1),($this->porPagina*($pthis-1)),2),$this->mostrarAnterior);
        }
        
$i 0;
        while(
$before <= $after) {
            
$link_string[] = ($pthis <> $before) ? $this->do_link($before,$this->addlinkmsg($before,(($this->porPagina*($before-1))+1),($this->porPagina*($before)),3),sprintf($this->mostrarIntermedias,$before)) : sprintf($this->mostrarActual,$before);
            
$before++;
        }
        if(
$pthis $ptotal) {
            
$link_string[] = $this->do_link($pthis+1,$this->addlinkmsg(($pthis+1),(($this->porPagina*$pthis)+1),($this->porPagina*($pthis+1)),4),$this->mostrarSiguiente);
        }
        if(
$pthis < ($ptotal-$this->paginasDespues)) {
            
$link_string[] = $this->do_link($ptotal,$this->addlinkmsg($ptotal,(($this->porPagina*($ptotal-1))+1),$this->numTotalRegistros,5),$this->mostrarUltima);
        }
        
$link_string implode($this->linkSeparador,$link_string);
        return 
$link_string;
    }

/* FUNCIONES DE USO INTERNO. NO MODIFICAR!*/
    
function addlinkmsg ($tp,$rs,$rt,$type null) {
        
$total $this->numTotalRegistros;
        
$rt = ($rt $total) ? $total $rt;
        if(!empty(
$this->linkTitulo)) {
            return 
sprintf($this->linkTitulo,$tp,$rs,$rt,$this->numTotalRegistros);
        } else {
            switch(
$type) {
                case 
1: return "Primera p&aacute;gina. Resultados del $rs al $rt de $total"; break;
                case 
2: return "P&aacute;gina anterior: Resultados del $rs al $rt de $total"; break;
                case 
3: return "P&aacute;gina $tp: Resultados del del $rs al $rt de $total"; break;
                case 
4: return "P&aacute;gina siguiente. Resultados del $rs al $rt de $total"; break;
                case 
5: return "&Uacute;ltima p&aacute;gina. Resultados del $rs al $rt de $total"; break;
                default: return 
$this->addlinkmsg($tp,$rs,$rt,3);
            }
        }
    }
    
    
    function 
check_vars () {
        
$this->porPagina = ($this->porPagina >= 1) ? intval($this->porPagina) : 5;
        
$this->mostrarPrimera = (!empty($this->mostrarPrimera)) ? $this->mostrarPrimera "&laquo; Primera";
        
$this->mostrarAnterior = (!empty($this->mostrarAnterior)) ? $this->mostrarAnterior "&lt;";
        
$this->mostrarSiguiente = (!empty($this->mostrarSiguiente)) ? $this->mostrarSiguiente "&gt;";
        
$this->mostrarUltima = (!empty($this->mostrarUltima)) ? $this->mostrarUltima "&Uacute;ltima &raquo;";
        
$this->mostrarIntermedias = (!empty($this->mostrarIntermedias)) ? $this->mostrarIntermedias "%d";
        
$this->mostrarActual = (!empty($this->mostrarActual)) ? $this->mostrarActual "%d";
        
$this->paginasAntes = (is_numeric($this->paginasAntes) && $this->paginasAntes >= 0) ? intval($this->paginasAntes) : 3;
        
$this->paginasDespues = (is_numeric($this->paginasDespues) && $this->paginasDespues >= 0) ? intval($this->paginasDespues) : 3;
        
$this->nombreVariable = (ereg("(^[a-zA-Z0-9]+)$",$this->nombreVariable)) ? $this->nombreVariable "page";
    }
    
    
    function 
do_link ($page,$title,$content) {
        
$url $this->url;
        
$style $this->style;
        return 
"<a href=\"$url=$page".$this->linkAgregar."\" title=\"$title\"$style>$content</a>";
    }
  
    
    function 
ejecutar () {
        
$this->check_vars();
        
$numEstaPagina = (is_numeric($_GET[$this->nombreVariable]) && $_GET[$this->nombreVariable] >= 1) ? intval($_GET[$this->nombreVariable]) : 1;
        
$this->numEstaPagina = &$numEstaPagina;
        
$numPrimerRegistro = ($numEstaPagina 1) * $this->porPagina;
        if(!empty(
$this->sql)) {
            
$result = (isset($this->conn)) ? mysql_query($this->sql,$this->conn) : mysql_query($this->sql);
            
$this->numTotalRegistros mysql_num_rows($result);
        } else {
            
$data array_values($this->data);
            
$data_keys array_keys($this->data);
            
$this->numTotalRegistros count($data);
        }
        if(
$this->numTotalRegistros $numPrimerRegistro) {
            
$numPrimerRegistro 0;
            
$numEstaPagina 1;
        }
        
$this->numTotalPaginas ceil($this->numTotalRegistros $this->porPagina);
        if(
$this->numTotalRegistros >= 1) {
            
$this->numPrimerRegistro $numPrimerRegistro 1;
            
$pdata = array();
            if(!empty(
$this->sql)) {
                
$result = (isset($this->conn)) ? mysql_query($this->sql." LIMIT $numPrimerRegistro, {$this->porPagina}",$this->conn) : mysql_query($this->sql." LIMIT $numPrimerRegistro, {$this->porPagina}");
                
$this->ejecutard $result;
                
$this->numTotalRegistros_this mysql_num_rows($result);
            } else {
                
$numUltimoRegistro $numPrimerRegistro $this->porPagina 1;
                while(
$numPrimerRegistro <= $numUltimoRegistro) {
                    if(isset(
$data[$numPrimerRegistro])) {
                        
$key = (isset($data_keys[$numPrimerRegistro])) ? $data_keys[$numPrimerRegistro] : rand()."_".$numPrimerRegistro;
                        
$pdata[$key] = $data[$numPrimerRegistro];
                        
$numPrimerRegistro++;
                    } else {
                        break;
                    }
                }
                
$this->ejecutard $pdata;
                
$this->numTotalRegistros_this count($pdata);
            }
            
$this->numUltimoRegistro $this->numPrimerRegistro $this->numTotalRegistros_this 1;
        } else {
            
$this->numPrimerRegistro 0;
            
$numEstaPagina 0;
            
$this->numTotalRegistros_this 0;
            
$this->numUltimoRegistro 0;
            
$this->ejecutard = array();
        }
        return (
$this->numTotalRegistros_this 0);
    }
}
?> 
  #5 (permalink)  
Antiguo 18/03/2008, 19:22
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Paginar los resultados de una busqueda

http://www.forosdelweb.com/2323367-post5.html

El método por el que envías un formulario puede ser POST o GET. Si es GET, los campos se propagarán por la URL. Si es POST no. El script funciona ahora sólo con GET, pero en ese link te doy la solución a ese problema.

Haz ese cambio que pongo en el link, o cambia el método de envio del formulario a GET (No existe el método REQUEST)

Un saludo,
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 17:18.