Ver Mensaje Individual
  #22 (permalink)  
Antiguo 05/03/2014, 13:39
Avatar de zalito12
zalito12
 
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 13 años
Puntos: 67
Respuesta: PHP/MYSQL - Paginacion, buble while ...

Cita:
Iniciado por biktorbasket Ver Mensaje
Hola zalito12,

Te pido disculpas por no haberte contestado (fallo mío). Estoy haciendo las dos opciones que me habéis indicado e intentando que funcionen, ya que las dos opciones son buenas me las voy a guardar y al intentar entenderlas y asi aprendo un poquito más sobre php que me hace mucha falta: D.

Uno de las partes que no entiendo es esta: $_GET['p'] , creo que su función es que recibe por http p=(Numero de la página) y lo mete dentro de la variable página. (Pero no estoy seguro :) )

El código le tengo así:

Código PHP:

<?php  
$raiz 
"./"
$you_inicio "http://img.youtube.com/vi/";
$you_fin "/hqdefault.jpg";
include(
'lib/config.php'); 
include(
'lib/head.php');  
include(
'lib/nav.php');  


# Tamaño maximo por página de vídeos por página.
$tamano 16;
# Recibe por http p=(Numero de la página) y lo mete dentro de la variable página. 
$pagina $_GET['p'];
# Comprobamos si existe la variable ($pagina), si está vacía, si NO es tipo integer y si es menor a 1.
# Si cumple una de las 4 funciones el resultado es 1.
if(!isset($pagina) || empty($pagina) || !is_int($pagina) || $pagina 1){
   
$pagina 1;
}
# Creamos un array con el total de los videos que hay almacenados en la tabla id_videos.
# y guardamos en la variable $total.
$total mysql_num_rows(mysql_query("SELECT id_video FROM videos"));
# ceil — Redondear fracciones hacia arriba.
# divimos el total de videos de id_video entre el tamaño de la pagina (16)
# lo redondea hacia arriba y lo guardamos en numero_pagina.
$numero_pagina ceil($total/$tamano);
# guardamos dentro de $ssql -> videos ordenados por id_video descendiente.
# limitado por tamaño (16) * el numero de página (Cambia según la página que nos encontremos.).
# y que muestre en cada página tamaño (16).
$ssql mysql_query("SELECT * FROM videos ORDER BY id_video DESC LIMIT ".$tamano $pagina ." , " $tamano);
?> 

<!-- Capas - container, container-videos, col -md-12 -->
<div class="container container-videos"> 
<div class="col-md-12">


    <?php
    
# Variable i = 0
    
$i 0;
    
# Hacemos un bucle con todo el contenido de $ssql.
    
while($fila mysql_fetch_array($ssql)){
    
#  Resto de $i dividido por 4 es igual a 0 continua creando div.row .
        
if($i == 0){
    
?>
        <div class="row"> 
    <?php
    
}
    
?>
    <!-- div.col-md-3 -->
        <div class='col-md-3'>
        <a href="play.php?video=<?php echo $fila["id_video"];?>">
        <img src="<?php echo $you_inicio substr($fila["video_link"],-11) . $you_fin;?>" />
        </a>
        </div>
     <!-- fin div.col-md-3 -->

    <?php
    
#  Resto de $i dividido por 4 es igual a 0 continua cierra el row.
        
if($i == 0){
    
?>
    </div>
    <!-- fin row -->
    <?php
        
}
    
# Cada vez que el blucle pasa por aquí se le incremente 1 a la variable $i.
    
$i++;
    }
    
?> 

    </div>
    <!-- fin col-md-12 -->

<?php

# Enlaces para la página anterior, la página en la que nos encontramos y la página siguiente.
echo '<a href="/videos?p=.' $pagina .'">Anterior</a>';

for(
$i $i $numero_pagina $i++ ;){
    echo 
'<a href="/videos?p='$i .'">'$i .'</a>';
}
echo 
'<a href="/videos?p=.' $pagina .'">Siguiente</a>';
?>

</div> 
<!-- fin container -->

<?php 
include('/lib/endconfig.php"');
include(
'/lib/footer.php"'); 
?>

Me aparece el siguiente error al final, cuando comienza el buble for, y no encuentro el error.

Código PHP:
Parse errorsyntax errorunexpected ';'expecting ')' in C:wampwww2_video_gamers_esvideos.php on line 7 
.
Lo primero, el error que comentas es en el for, pusiste un ';' de más, al final dónde se incrementa la variable.

Lo segundo creo que hay que cambiar la sentencia sql a esta:
Código PHP:
$ssql mysql_query("SELECT * FROM videos ORDER BY id_video DESC LIMIT ".$tamano * ($pagina 1) ." , " $tamano); 
Mira el manual de MySql para ver como funciona el limit, no vaya a ser que se pierda algún vídeo.

Tercero, hay que organizar un poco mejor la cabecera, lo hice un poquillo mal jeje
Código PHP:
# Tamaño maximo por página de vídeos por página. 
$tamano 16

//AQUI NO SE CREA UN ARRAY, mysql_num_rows() devuelve el número de filas que genera la consulta, en este caso el total de vídeos ya que id_video es su clave primaria y nunca estará NULL
$total mysql_num_rows(mysql_query("SELECT id_video FROM videos")); 
# ceil — Redondear fracciones hacia arriba. 
# divimos el total de videos de id_video entre el tamaño de la pagina (16) 
# lo redondea hacia arriba y lo guardamos en numero_pagina. 
$numero_pagina ceil($total/$tamano); 

# Recibe por http p=(Numero de la página) y lo mete dentro de la variable página.  
# Comprobamos si existe la variable ($pagina), si está vacía, si NO es tipo integer y si es menor a 1. 
# Si cumple una de las 4 funciones el resultado es 1. 
$pagina 1
if(isset(
$_GET['p']) && !empty($_GET['p']) && is_int($_GET['p']) && $_GET['p'] > && $_GET['p'] <= $numero_pagina){ 
   
$pagina $_GET['p']; 

//Así hacemos mejores comprabaciones y si el número de página no es válido siempre irás a la primera 
Ahora, $_GET['var'] te devuelve el valor de la variable globlal 'var' que reciba la página por el método GET.
Las variables por el método GET se propagan directamente en la URL por ejemplo:
www.miweb.com?p=1&media=video
En este caso una url con dos variables GET, p y media con valores 1 y video respectivamente.

Si te fijas a la hora de hacer la paginación indicas el número de página directamente en la url.

Espero que esté todo correcto.
__________________
Dicen que las personas piensan en su lengua materna, yo lo hago en PHP