Foros del Web » Programando para Internet » PHP »

Fallo en paginación

Estas en el tema de Fallo en paginación en el foro de PHP en Foros del Web. Buenas, Tengo el siguiente archivo PHP paginado: Código PHP: <? require( '../libreria.php' ); $user  =&  JFactory :: getUser (); $usuario  =  $user -> username ; ...
  #1 (permalink)  
Antiguo 29/09/2012, 05:45
 
Fecha de Ingreso: junio-2011
Mensajes: 342
Antigüedad: 15 años, 3 meses
Puntos: 5
Exclamación Fallo en paginación

Buenas,

Tengo el siguiente archivo PHP paginado:

Código PHP:
<?
require('../libreria.php');
$user =& JFactory::getUser();
$usuario = $user->username;

$pag = $_REQUEST['p'];
if( !isset(
$pag) ) $pag = 0;
$sig = $pag + 1;
$ant = 0;
if(
$pag > 0) $ant = $pag - 1;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ver Rutas</title>
</head>
<body>
<?

mysql_connect
('', '', '') or die('Ha habido un problema con la conexi&oacute;n al servidor.');
mysql_select_db('') or die('Ha habido un problema con la conexi&oacute;n a la base de datos.');
$res = mysql_query("SELECT * FROM flights ORDER BY flightnumber, acft LIMIT $pag, 20");
$filas = mysql_num_rows($res);

if(
$filas > 0)
{
    
?>
    <table cellpadding="2" cellspacing="0" style="text-align: center; width: 100%;">
    <tr style="background-color: #D2232A; font-weight: bold; font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: white; text-align: center;"><td></td><td>Num. Vuelo</td><td>Modelo</td><td>Salida</td><td>Llegada</td><td>Altitud</td><td>EET</td><td>Precio</td><td>Disponible</td>
    <?
    
if($usuario == 'HTH1001' || $usuario == 'HTH1002') echo '<td>Gesti&oacute;n</td>';
    
?>
    </tr>
    <?
    
    
for($i = 0; $i < $filas; $i++)
    {
        
$id = mysql_result($res, $i, 'flightnumber');
        
$icao = mysql_result($res, $i, 'acft');
        
$sal = mysql_result($res, $i, 'departure');
        
$lleg = mysql_result($res, $i, 'destination');
        
$altitud = mysql_result($res, $i, 'altitude');
        
$precio = mysql_result($res, $i, 'precio');
        
$codigo = '<img src="http://helittva.com/albrep/images/yes.png" alt="si" />';
        
$res3 = mysql_query("SELECT aeronave FROM reservas WHERE ruta = '$id'");
        for(
$j = 0; $j < mysql_num_rows($res3); $j++)
        {
            
$mat = mysql_result($res3, $j);
            
$res4 = mysql_query("SELECT icao FROM aeronaves WHERE matricula = '$mat'");
            
$icaores = mysql_result($res4, 0);
            if(
$icaores == $icao) $codigo = '<img src="http://helittva.com/albrep/images/no.png" alt="no" />';
        }
        
$eet = mysql_result($res, $i, 'eet');
        
$color = $i % 2 == 0 ? $color = 'white' : '#CCC';
        
        echo 
"<tr style=\"text-align: center; font-size: 10px; font-family: Arial, Helvetica, sans-serif; background-color: $color;\"><td><img src='http://helittva.com/albrep/images/vuelo.gif'></td><td>$id</td><td>$icao</td><td>$sal</td><td>$lleg</td><td>$altitud ft</td><td>$eet</td><td>$precio &euro;</td><td>$codigo</td>";
        if(
$usuario == '' || $usuario == '') echo "<td><a title=\"Editar\" href=\"editar-ruta.php?ruta=$id\"><img src=\"http://helittva.com/albrep/images/info.png\" onmouseover=\"javascript: this.src = 'http://helittva.com/albrep/images/info.png'\" onmouseout=\"javascript: this.src = 'http://helittva.com/albrep/images/info.png'\" alt=\"modif\" /></a><a title=\"Eliminar\" href=\"eliminar-ruta.php?ruta=$id&acft=$icao\"><img src=\"http://helittva.com/albrep/images/cross.png\" onmouseover=\"javascript: this.src = 'http://helittva.com/albrep/images/cross.png'\" onmouseout=\"javascript: this.src = 'http://helittva.com/albrep/images/cross.png'\" alt=\"alim\" /></a></td>";
        echo 
"</tr>\n";
    }
    echo 
'</table>';
    if (
$filas > 19)
    {
        echo 
"<br>";
        echo 
"<center>";
        echo 
"<a style=\"color: #D2232A;\" href=\"ver-rutas.php?p=$ant\">Anterior</a> <a style=\"color: #D2232A;\" href=\"ver-rutas.php?p=$sig\">Siguiente</a>";
        echo 
"</center>";
    }
    
}
else echo 
'<h4 style="color: red;">No hay vuelos disponibles.</h4>';
mysql_close();
?>

<?

?>
</body>
</html>
El problema es que cuando quiero pasar de página me muestra los mismos resultados de la página anterior menos uno.

Yo lo que quiero es que al pasar la página se vean resultados diferentes a los anteriores y no los mismos quitando uno anterior.
  #2 (permalink)  
Antiguo 29/09/2012, 06:57
 
Fecha de Ingreso: agosto-2007
Mensajes: 48
Antigüedad: 19 años, 2 meses
Puntos: 2
Respuesta: Fallo en paginación

Buenas!

Se me ocurre que en la consulta debas multiplicar ($pag-1) por el número de resultados de la página. De manera que quede así:
página 1 -> LIMIT 0,20
página 2 -> LIMIT 20,20
etc...
  #3 (permalink)  
Antiguo 29/09/2012, 07:31
 
Fecha de Ingreso: junio-2011
Mensajes: 342
Antigüedad: 15 años, 3 meses
Puntos: 5
Exclamación Respuesta: Fallo en paginación

Cita:
Iniciado por NoiK Ver Mensaje
Buenas!

Se me ocurre que en la consulta debas multiplicar ($pag-1) por el número de resultados de la página. De manera que quede así:
página 1 -> LIMIT 0,20
página 2 -> LIMIT 20,20
etc...
Entonces como me tiene que quedar el documento??
  #4 (permalink)  
Antiguo 29/09/2012, 08:24
 
Fecha de Ingreso: agosto-2007
Mensajes: 48
Antigüedad: 19 años, 2 meses
Puntos: 2
Respuesta: Fallo en paginación

Cita:
Iniciado por carlosuc99 Ver Mensaje
Entonces como me tiene que quedar el documento??
Yo probaría algo así:
Código PHP:
//Añades esta variable
$resultados = 20; //cuantos resultados van por página
$inicio = ($pag-1)*$resultados;


//Y después la consulta quedaría así:
$res = mysql_query("SELECT * FROM flights ORDER BY flightnumber, acft LIMIT $inicio, $resultados"); 
Prueba a ver que tal. Sino otra forma de ver que falla es poner un exit("SELECT * FROM flights ORDER BY flightnumber, acft LIMIT $inicio, $resultados"); entonces te saldrá por pantalla la consulta, así verificas que te pilla bien las variables y además puedes copiar y pegar la consulta en tu phpMyAdmin (o gestor mysql que prefieras) y verificar que los resultados son los esperados.

Espero que te sirva!
  #5 (permalink)  
Antiguo 29/09/2012, 08:39
 
Fecha de Ingreso: junio-2011
Mensajes: 342
Antigüedad: 15 años, 3 meses
Puntos: 5
Exclamación Respuesta: Fallo en paginación

Cita:
Iniciado por NoiK Ver Mensaje
Yo probaría algo así:
Código PHP:
//Añades esta variable
$resultados = 20; //cuantos resultados van por página
$inicio = ($pag-1)*$resultados;


//Y después la consulta quedaría así:
$res = mysql_query("SELECT * FROM flights ORDER BY flightnumber, acft LIMIT $inicio, $resultados"); 
Prueba a ver que tal. Sino otra forma de ver que falla es poner un exit("SELECT * FROM flights ORDER BY flightnumber, acft LIMIT $inicio, $resultados"); entonces te saldrá por pantalla la consulta, así verificas que te pilla bien las variables y además puedes copiar y pegar la consulta en tu phpMyAdmin (o gestor mysql que prefieras) y verificar que los resultados son los esperados.

Espero que te sirva!
Eso funciona pero ahora tengo otro problema.

Al pasar de página no se me muestra la opción para volver atrás así que puse esto:

Código PHP:
$res7 = mysql_query("SELECT * FROM flights");
    
$filas2 = mysql_num_rows($res7);
    
    if (
$filas > 20)
    {
        echo 
"<br>";
        echo 
"<center>";
        echo 
"<a style=\"color: #D2232A;\" href=\"ver-rutas.php?p=$ant\">Anterior</a> <a style=\"color: #D2232A;\" href=\"ver-rutas.php?p=$sig\">Siguiente</a>";
        echo 
"</center>";
    }
    
    if (
$filas < 20, $pag > 0)
    {
        echo 
"<br>";
        echo 
"<center>";
        echo 
"<a style=\"color: #D2232A;\" href=\"ver-rutas.php?p=$ant\">Anterior</a>";
        echo 
"</center>";
    } 

Pero me dá error en esto:

Código PHP:
if ($filas < 20, $pag > 0) 
Supongo que será porque pongo dos condiciones. Cómo las puedo poner?
  #6 (permalink)  
Antiguo 29/09/2012, 08:44
 
Fecha de Ingreso: agosto-2007
Mensajes: 48
Antigüedad: 19 años, 2 meses
Puntos: 2
Respuesta: Fallo en paginación

Tienes que usar AND o OR, depende si quieres que se cumplan las dos o con una te basta, de esta forma:

Código PHP:
if ($filas < 20 && $pag > 0) //este es el operador AND y se tienen que cumplir las dos
{
      
//resto del código...
}

if (
$filas < 20 || $pag > 0) //este es el operador OR y basta con que se cumpla una
{
      
//resto del código...
} 

Etiquetas: fallo, html, mysql, usuarios
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:29.