Paginador de resultados ayuda!

Iniciado por den_22, 15 Mayo 2010, 17:47 PM

0 Miembros y 1 Visitante están viendo este tema.

den_22

Hola! que tal, verán estoy tratando de hacer un paginador de resultados de un buscador de usuarios, pero lamentablemente no me sale, tengo este codigo, que es el mostrar_resultados.php, pero al hacer la busqueda en vez de mostrar 5 resultados me muestra 6, y al pasar a siguiente, me muestra todos los usuarios de la bd.
Entonces la pregunta es cómo hago para poder paginarlo bien?, hay algo que estoy haciendo mal? cuando la pagina ya existe como hago para cargarla y que siga manteniendo la consulta?

Código (php) [Seleccionar]

<?php
include('header.inc');


if(!
$_SESSION['usuario']=='usuario'){
header("Location: index.php");// si no es igual a nick te direcciona al inicio u a otra pagina 
}

include_once (
"connect.php");

$id=$_SESSION["id"];
$usuario=$_SESSION["usuario"];


$sexo = (!empty($_POST["sexo"])
    ? 
" sexo='".trim($_POST["sexo"])."'"
        
"");
 
$interestin = (!empty($_POST["interestin"])
        ? (!empty(
$sexo)
                ? 
" AND interestin='".trim($_POST["interestin"])."'"
                
" interestin='".trim($_POST["interestin"])."'")
        : 
"");
 
$pais = (!empty($_POST["pais"])
        ? (!empty(
$sexo) || !empty($interestin)
                ? 
" AND pais='".trim($_POST["pais"])."'"
                
" pais='".trim($_POST["pais"])."'")
        : 
"");
 
$estadocivil= (!empty($_POST["estadocivil"])
        ? (!empty(
$sexo) || !empty($interestin) || !empty($pais)
                ? 
" AND estadocivil='".trim($_POST["estadocivil"])."'"
                
" estadocivil='".trim($_POST["estadocivil"])."'")
        : 
"");
 

 
$where = (!empty($sexo) || !empty($interestin) || !empty($pais) || !empty($estadocivil)  
        ? 
" WHERE "
        
"");
 

 
$s "SELECT * FROM members " 
        
$where
        
$sexo 
        
$interestin
        
$pais 
        
$estadocivil;
 
$query mysql_query($s) or die(mysql_error());

if (!isset(
$pag)) $pag 1// Por defecto, pagina 1
$result mysql_query("SELECT COUNT(*) FROM members"); 
list(
$total) = mysql_fetch_row($result);
$tampag 5;
$reg1 = ($pag-1) * $tampag;
$result mysql_query("SELECT sexo, interestin, pais, estadocivil FROM members
  LIMIT 
$reg1$tampag"); 


function 
paginar($actual$total$por_pagina$enlace) {
  
$total_paginas ceil($total/$por_pagina);
  
$anterior $actual 1;
  
$posterior $actual 1;
  if (
$actual>1)
    
$texto "<a href=\"$enlace$anterior\">&laquo;</a> ";
  else
    
$texto "<b>&laquo;</b> ";
  for (
$i=1$i<$actual$i++)
    
$texto .= "<a href=\"$enlace$i\">$i</a> ";
  
$texto .= "<b>$actual</b> ";
  for (
$i=$actual+1$i<=$total_paginas$i++)
    
$texto .= "<a href=\"$enlace$i\">$i</a> ";
  if (
$actual<$total_paginas)
    
$texto .= "<a href=\"$enlace$posterior\">&raquo;</a>";
  else
    
$texto .= "<b>&raquo;</b>";
  return 
$texto;
}



while(
$row mysql_fetch_array($query)) {




?>


en la parte del html, muestro los detalles del usuario haciendo
Código (php) [Seleccionar]
<?php echo $row['estadocivil'];?> por ejemplo

y en el final de la pagina hago lo siguiente

Código (php) [Seleccionar]
<?php echo paginar($pag$total$tampag"mostrar_resultados.php?pag="); ?>

Gracias por leer.

MinusFour

Pues primeramente creo que el código este:

Código (php) [Seleccionar]
if(!$_SESSION['usuario']=='usuario'){
header("Location: index.php");// si no es igual a nick te direcciona al inicio u a otra pagina
}


Necesita corregirse en la parte del if... porque 'usuario' es constante.

Y hasta donde tengo entendido, el LIMIT lo aplicas solamente a una query que nunca consultas, al menos en el código asi lo veo....

den_22

Hola, quité esa parte del if, pero sigue igual. que debo cambiar en el $result ?

MinusFour

#3
Si bueno, lo que pasa es esto... tu quieres limitar los resultados de tu primera consulta $s.

Porque tecnicamente estas haciendo el fetch_row con el query de $s. Y en ningun lugar estás limitando la consulta.

Código (php) [Seleccionar]
$s = "SELECT * FROM members "
       . $where
       . $sexo
       . $interestin
       . $pais
       . $estadocivil;


Aqui te das cuenta que no estás haciendo ningun limit a la consulta, puesto que nunca variable lo tiene.

Lo que necesitas hacer es poner este código arriba de la query.

Código (php) [Seleccionar]
if (!isset($pag)) $pag = 1; // Por defecto, pagina 1
$tampag = 5;
$reg1 = ($pag-1) * $tampag;


Y también agregar el limit a la consulta.


Código (php) [Seleccionar]
$s = "SELECT * FROM members "
       . $where
       . $sexo
       . $interestin
       . $pais
       . $estadocivil
       ." LIMIT $reg1, $tampag";


den_22

Bueno, MinusFour, hice lo que me indicaste, lo puse asi:

Código (php) [Seleccionar]
<?php
include('header.inc');

$id=$_SESSION["id"];
$usuario=$_SESSION["usuario"];



include_once (
"connect.php");




$sexo = (!empty($_POST["sexo"])
    ? 
" sexo='".trim($_POST["sexo"])."'"
        
"");
 
$interestin = (!empty($_POST["interestin"])
        ? (!empty(
$sexo)
                ? 
" AND interestin='".trim($_POST["interestin"])."'"
                
" interestin='".trim($_POST["interestin"])."'")
        : 
"");
 
$pais = (!empty($_POST["pais"])
        ? (!empty(
$sexo) || !empty($interestin)
                ? 
" AND pais='".trim($_POST["pais"])."'"
                
" pais='".trim($_POST["pais"])."'")
        : 
"");
 
$estadocivil= (!empty($_POST["estadocivil"])
        ? (!empty(
$sexo) || !empty($interestin) || !empty($pais)
                ? 
" AND estadocivil='".trim($_POST["estadocivil"])."'"
                
" estadocivil='".trim($_POST["estadocivil"])."'")
        : 
"");
 

 
$where = (!empty($sexo) || !empty($interestin) || !empty($pais) || !empty($estadocivil)  
        ? 
" WHERE "
        
"");
 

 
$s "SELECT * FROM members " 
        
$where
        
$sexo 
        
$interestin
        
$pais 
        
$estadocivil
        
." LIMIT $reg1$tampag";


if (!isset(
$pag)) $pag 1// Por defecto, pagina 1
$result mysql_query("SELECT COUNT(*) FROM members"); 
list(
$total) = mysql_fetch_row($result);
$tampag 5;
$reg1 = ($pag-1) * $tampag;

function 
paginar($actual$total$por_pagina$enlace) {
  
$total_paginas ceil($total/$por_pagina);
  
$anterior $actual 1;
  
$posterior $actual 1;
  if (
$actual>1)
    
$texto "<a href=\"$enlace$anterior\">&laquo;</a> ";
  else
    
$texto "<b>&laquo;</b> ";
  for (
$i=1$i<$actual$i++)
    
$texto .= "<a href=\"$enlace$i\">$i</a> ";
  
$texto .= "<b>$actual</b> ";
  for (
$i=$actual+1$i<=$total_paginas$i++)
    
$texto .= "<a href=\"$enlace$i\">$i</a> ";
  if (
$actual<$total_paginas)
    
$texto .= "<a href=\"$enlace$posterior\">&raquo;</a>";
  else
    
$texto .= "<b>&raquo;</b>";
  return 
$texto;
}
 
$query mysql_query($s) or die(mysql_error());



while(
$row mysql_fetch_array($query)) {



pero al darle a buscar no sale nada, la pagina en blanco. deberia buscar. cual puede ser el error?

MinusFour

Pues $reg1 ni $tampag están definidos. Fijate en mi post anterior.

den_22

#6
Si, ahi me di cuenta, ahora poniendolo asi funciona, pero lo que pasa es que al pasar a la pagina siguiente sigue mostrandome todos los usuarios de la bd, en la unica que respeta es en la primera. pero no asi en las siguientes. existe algun problema en la url? en la forma de paginarlo?

yo al final del codigo pongo esto:

Código (php) [Seleccionar]
<?php echo paginar($pag$total$tampag"mostrar_resultados.php?pag="); ?>

Código (php) [Seleccionar]

<?php
include('header.inc');

$id=$_SESSION["id"];
$usuario=$_SESSION["usuario"];



include_once (
"connect.php");




$sexo = (!empty($_POST["sexo"])
    ? 
" sexo='".trim($_POST["sexo"])."'"
        
"");
 
$interestin = (!empty($_POST["interestin"])
        ? (!empty(
$sexo)
                ? 
" AND interestin='".trim($_POST["interestin"])."'"
                
" interestin='".trim($_POST["interestin"])."'")
        : 
"");
 
$pais = (!empty($_POST["pais"])
        ? (!empty(
$sexo) || !empty($interestin)
                ? 
" AND pais='".trim($_POST["pais"])."'"
                
" pais='".trim($_POST["pais"])."'")
        : 
"");
 
$estadocivil= (!empty($_POST["estadocivil"])
        ? (!empty(
$sexo) || !empty($interestin) || !empty($pais)
                ? 
" AND estadocivil='".trim($_POST["estadocivil"])."'"
                
" estadocivil='".trim($_POST["estadocivil"])."'")
        : 
"");
 

 
$where = (!empty($sexo) || !empty($interestin) || !empty($pais) || !empty($estadocivil)  
        ? 
" WHERE "
        
"");
 

if (!isset(
$pag)) $pag 1// Por defecto, pagina 1
$result mysql_query("SELECT COUNT(*) FROM members"); 
list(
$total) = mysql_fetch_row($result);
$tampag 5;
$reg1 = ($pag-1) * $tampag;

function 
paginar($actual$total$por_pagina$enlace) {
  
$total_paginas ceil($total/$por_pagina);
  
$anterior $actual 1;
  
$posterior $actual 1;
  if (
$actual>1)
    
$texto "<a href=\"$enlace$anterior\">&laquo;</a> ";
  else
    
$texto "<b>&laquo;</b> ";
  for (
$i=1$i<$actual$i++)
    
$texto .= "<a href=\"$enlace$i\">$i</a> ";
  
$texto .= "<b>$actual</b> ";
  for (
$i=$actual+1$i<=$total_paginas$i++)
    
$texto .= "<a href=\"$enlace$i\">$i</a> ";
  if (
$actual<$total_paginas)
    
$texto .= "<a href=\"$enlace$posterior\">&raquo;</a>";
  else
    
$texto .= "<b>&raquo;</b>";
  return 
$texto;
}

 
$s "SELECT * FROM members " 
        
$where
        
$sexo 
        
$interestin
        
$pais 
        
$estadocivil
        
." LIMIT $reg1$tampag";





 
$query mysql_query($s) or die(mysql_error());



while(
$row mysql_fetch_array($query)) {







?>

MinusFour

Imprime la variable $pag antes del if(i!sset($pag))... y verifica si la estás pasando correctamente.

den_22

Lo hago con var_dump ? o con echo?

MinusFour