Foros del Web » Programando para Internet » PHP »

Problema con Paginator 1.6.1

Estas en el tema de Problema con Paginator 1.6.1 en el foro de PHP en Foros del Web. Hola: Quiero ocupar el script PAGINATOR 1.6.1 para poder desplegar mis consultas en varias páginas. Lo que hago es obtener los apellidos de los usuarios ...
  #1 (permalink)  
Antiguo 12/05/2005, 10:52
 
Fecha de Ingreso: mayo-2003
Mensajes: 25
Antigüedad: 20 años, 11 meses
Puntos: 0
Problema con Paginator 1.6.1

Hola:

Quiero ocupar el script PAGINATOR 1.6.1 para poder desplegar mis consultas en varias páginas.

Lo que hago es obtener los apellidos de los usuarios que tienen un cierto estado de su tarjeta, por lo que hago lo siguiente: de la tabla "tarjeta" obtengo TODOS los usuarios (campo "idUsuario") que tienen un cierto estado de tarjeta (campo "estadotarjeta") y con cada idUsuario, voy a la tabla "usuario" y obtengo sus datos (campos "apellido", "email").

La página que ocupo es tarjetas.php y las variables del estado de las tarjetas son enviadas a través del método GET, por ejemplo, tarjetas.php?hoy=1 o tarjetas.php?historial=4 o tarjetas.php?id=3

Dentro de tarjetas.php tengo:

Código PHP:

//Primero veo cuál es el estado de la tarjeta

                 
if(($hoy==4) || ($hoy==1)){

                    
$_pagi_sql="SELECT idUsuario, fecha FROM tarjeta WHERE estadotarjeta='$hoy' AND fecha='$fechaActual'";

                 }else{

                 if((
$historial==4) || ($historial==1)){

                    
$_pagi_sql="SELECT idUsuario, fecha FROM tarjeta WHERE estadotarjeta='$historial'";
                 }else{

                 if((
$id==2) || ($id==3)){

                    
$_pagi_sql="SELECT idUsuario, fecha FROM tarjeta WHERE estadotarjeta='$id'";
                 }
                 } 
//cierro else
                 
//cierro else

                 
include('../paginator.inc.php');
                 
$_pagi_cuantos 2;             //Nº resultados por página

                 
echo '<table cellspacing="3" cellpadding="5" border="1" summary="" width="93%" ALIGN="CENTER">';
                 echo 
' <tr>';
                 echo 
'   <td width="50%"><div class=titulo1>Cliente</div></td>';
                 echo 
'   <td width="15%"><div class=titulo1>E-mail</div></td>';
                 echo 
'   <td width="15%"><div class=titulo1>RUT</div></td>';
                 echo 
'   <td width="20%"><div class=titulo1>Fecha</div></td>';
             echo 
' </tr>';

                 while(
$row mysql_fetch_array($_pagi_result)){

                   
$sql2="SELECT * FROM usuario WHERE id='$row[idUsuario]' ORDER BY 'apellido' ASC";
               
$result2=mysql_query($sql2,$conexion);
               
mysql_error();

                   while(
$row2 mysql_fetch_array($result2)){

               echo 
'<tr>';
           echo 
" <td>$row2[apellido] $row2[nombre]</td>";
           echo 
"  <td>$row2[email]</td>";
           echo 
"  <td>$row2[rut]</td>";
           echo 
"  <td> ".cambiaf_a_normal($row[fecha])."</td>";
                   echo 
"</tr>";

                 }      
//cierra el while
                 
}      //cierra el while
                 
print ("</table>");

                 echo
"<p align=center>".$_pagi_navegacion."</p>";
               
?> 
Haciendo esto, me salen los resultados pero con un "1" al fondo de la búsqueda.

El tamaño del resultado de la búsqueda está definido por la primera sentencia sql ya que tiene el número de usuarios en total. Siendo así, aplico los valores de PAGINATOR sobre esa sentencia sql y no a ambas.

Alguna ayuda o sugerencia al respecto?
  #2 (permalink)  
Antiguo 12/05/2005, 11:02
Avatar de dwaks  
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 21 años, 8 meses
Puntos: 15
primero has la consulta sin el paginator si trae todos los registros entonces ya sabes que el sql que hiciste es bueno y si trae respuesta, luego solo lo aplicas el paginator.
  #3 (permalink)  
Antiguo 12/05/2005, 13:24
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Hola:
Para poder ayudarte necesito saber:
- ¿De dónde tomas las variables $hoy, $fechaActual, $historial, $id? (por ejemplo: vienen de un formulario, los pasas por url, se calculan en el mismo script...)

Una observación:
- Todas las variables de Paginator que necesites, debes definirlas ANTES de incluirlo, no después. En tu caso la variable $_pagi_cuantos no puede estar después del include(). Cámbialo y pon esa línea antes. Con este cambio supongo que ya te generará la primera página correctamente, pero tendrás problemas para pasar a las siguientes, eso se corrige propagando las variables. Pero para poder ayudarte a entenderlo, necesito que respondas a la pregunta anterior.

Saludos
  #4 (permalink)  
Antiguo 13/05/2005, 13:25
 
Fecha de Ingreso: mayo-2003
Mensajes: 25
Antigüedad: 20 años, 11 meses
Puntos: 0
Cita:
Iniciado por dwaks
primero has la consulta sin el paginator si trae todos los registros entonces ya sabes que el sql que hiciste es bueno y si trae respuesta, luego solo lo aplicas el paginator.
funciona perfectamente la consulta sin los códigos del pagintaror 1.6.1
  #5 (permalink)  
Antiguo 13/05/2005, 13:51
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Es que en el código se ve que es muy probable que todo funcione correctamente sin la paginación. Eso no es problema en este caso.

El error que veo:
- Secuencia de código. No puedes poner $_pagi_cuantos después de hacer el include("paginator.inc.php"), porque no tendrá efecto alguno.

Entonces cuando se ejecuta el código de paginación, no existe una variable que le diga cuántos registros debe mostrar (porque ya te dije que se debe definir antes). En este caso Paginator toma por defecto un valor de 20 registros por página.

Lo que te puede estar pasando es que tienes menos de 20 registros, entonces Paginator te está mostrando todos. El "1" que aparece en el fondo es la única página que hay y sale sin enlace porque también es la actual.

¿la solución?
Cambiar el orden de estas dos líneas
Código PHP:
include('../paginator.inc.php');
$_pagi_cuantos 2
Debería quedar así:
Código PHP:
$_pagi_cuantos 2;
include(
'../paginator.inc.php'); 
Saludos

Saludos
  #6 (permalink)  
Antiguo 13/05/2005, 13:55
 
Fecha de Ingreso: mayo-2003
Mensajes: 25
Antigüedad: 20 años, 11 meses
Puntos: 0
Cita:
Iniciado por jpinedo
Hola:
Para poder ayudarte necesito saber:
- ¿De dónde tomas las variables $hoy, $fechaActual, $historial, $id? (por ejemplo: vienen de un formulario, los pasas por url, se calculan en el mismo script...)

Una observación:
- Todas las variables de Paginator que necesites, debes definirlas ANTES de incluirlo, no después. En tu caso la variable $_pagi_cuantos no puede estar después del include(). Cámbialo y pon esa línea antes. Con este cambio supongo que ya te generará la primera página correctamente, pero tendrás problemas para pasar a las siguientes, eso se corrige propagando las variables. Pero para poder ayudarte a entenderlo, necesito que respondas a la pregunta anterior.

Saludos

vale jpinedo, era solo que tenía q poner la variable antes de llamar al script...agradecido ;)
  #7 (permalink)  
Antiguo 18/05/2005, 15:28
 
Fecha de Ingreso: mayo-2003
Mensajes: 25
Antigüedad: 20 años, 11 meses
Puntos: 0
otra consulta...según los comentarios del script, las sentencias sql no deben tener LIMIT porque el script los pone solo, pero paginator soporta select con UNION ALL???

esta es mi consulta sql (que funciona perfectamente sin paginator 1.6.1) y lo que hace es obtener todos los usuarios que tienen clasificación "8" o "9" y los ordena por apellido ascendentemente:

Código PHP:
$_pagi_sql="(SELECT * FROM usuario WHERE clasificacion='8') UNION ALL (SELECT * FROM usuario WHERE clasificacion='9') ORDER BY 'apellido' ASC"
Cuando pongo esta consulta, me desplega los resultados esperados pero no así las páginas para poder navegar ya que dice q muestra "n a 0 resultados, de un total de 0 " donde n es el total de aciertos de la consulta sql.

Ahora, modificando el select de modo que pregunte solo por la clasificación igual a "8", muestra bien las páginas para navegar dentro de la cosnulta asi que definitivamente es el select con el UNION ALL :(

Hay alguna solución para esto?????

Saludos
  #8 (permalink)  
Antiguo 18/05/2005, 15:31
Avatar de dwaks  
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 21 años, 8 meses
Puntos: 15
Pero si quieres no uses union:
TU CODIGO:
$_pagi_sql="(SELECT * FROM usuario WHERE clasificacion='8') UNION ALL (SELECT * FROM usuario WHERE clasificacion='9') ORDER BY 'apellido' ASC";

MI OPCION:
$_pagi_sql="SELECT * FROM usuario WHERE clasificacion='8' or clasificacion='9' ORDER BY 'apellido' ASC";
  #9 (permalink)  
Antiguo 18/05/2005, 19:03
 
Fecha de Ingreso: mayo-2003
Mensajes: 25
Antigüedad: 20 años, 11 meses
Puntos: 0
ahh vale...es que antes no me había funcionado y al parecer fue porque puse el "or" con mayúsculas (OR) y no me resultaba...gracias!!

PD: funciona paginator con los selects con union o union all? para salir de la duda :P
  #10 (permalink)  
Antiguo 19/05/2005, 15:41
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Cita:
Iniciado por Doncan311
ahh vale...es que antes no me había funcionado y al parecer fue porque puse el "or" con mayúsculas (OR) y no me resultaba...gracias!!

PD: funciona paginator con los selects con union o union all? para salir de la duda :P
Hola:
Para que Paginator funcione correctamente bajo consultas de ese tipo, tienes que definir la variable:
Código PHP:
$_pagi_conteo_alternativo true
Saludos
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 18:49.