Foros del Web » Programando para Internet » PHP »

PHP/MYSQL - Paginacion, buble while ...

Estas en el tema de PHP/MYSQL - Paginacion, buble while ... en el foro de PHP en Foros del Web. Hola a todos: Estoy aprendiendo PHP - MYSQL y hay bastantes cosas que no dominio muy bien :) , os dejó el código y os ...
  #1 (permalink)  
Antiguo 03/03/2014, 16:00
Avatar de biktorbasket  
Fecha de Ingreso: junio-2013
Mensajes: 42
Antigüedad: 10 años, 10 meses
Puntos: 2
PHP/MYSQL - Paginacion, buble while ...

Hola a todos:

Estoy aprendiendo PHP - MYSQL y hay bastantes cosas que no dominio muy bien :) , os dejó el código y os digo lo que necesito saber, si alguien lo sabe hacer y me puede ayudar perfecto, si no me podéis decir alguna guía donde lo expliquen de forma sencilla o alguna documentación, sería muy útil para mí.

Necesito crear lo siguiente:

Un bucle que aparezcan las imágenes de videos de YouTube. Eso lo sé hacer el problema es que mi código,
hace lo siguiente:

div.row
video
video
video
video
video
video
video
/div

yo quiero que el div.row salga cada 4. Ejemplo:

div.row
video
video
video
video
/div

div.row
video
video
video
video
/div

Una vez que tenga eso, necesito un sistema de paginación que cuando la página este llena pueda cambiar a otra página. Ejemplo:

<< 1 2 3 4 >>

al final de la web (Estilo blog)

Código:



Código PHP:
<?php 
$raiz 
"./";
$imgyoutube "http://img.youtube.com/vi/";
$imgyoutubedos "/hqdefault.jpg";
include(
'lib/config.php');
include(
'lib/head.php'); 
include(
'lib/nav.php'); 
?>

<div class="container videos-index container-videos">
        <div class="col-md-12">
            <div class="row">
        
            <?php 
                $ssql 
"select * from videos order by id_video desc limit 4";

                
$rs mysql_query($ssql);
                while (
$fila mysql_fetch_array($rs)){
                    echo 
"<div class='col-md-3'>";
                    echo 
'<a href="play.php?video=' $fila["id_video"] . '"><img src="' $imgyoutube .  substr($fila["video_link"],-11) . $imgyoutubedos '" /></a>';
                    echo 
"</div>";
                }
            
?>

            </div>
        </div>
</div>

<?php include('lib/footer.php'); ?>
Imagen de ejemplo:






Espero que lo entendáis, si necesitáis más información pedírmelo. Un saludo y GRACIAS a todos
  #2 (permalink)  
Antiguo 03/03/2014, 17:53
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 6 meses
Puntos: 67
Respuesta: PHP/MYSQL - Paginacion, buble while ...

Bueno, no sé como estarás trabjando con la información en tu web porque hay varias formas de hacerlo dependiendo de eso.
Una muy utilizada y seguramente de la que más ejemplos encuentres por la red es organizando bien las consultas a la BD.

-Una consulta que te de el total de videos que hay, con un COUNT por ejemplo o un num_rows.
-Con el total calculas cuantas páginas necesitas, en tu caso 16 vídeos por página: $total/16 y redondear hacia arriba no recuerdo cuál era la función. Te recomiendo guardar ese 16 en una variable también, por ejemplo $tam (numero vídeos por página).
-Ahora utilizas el método GET para ver en que página te hayas y hacer las consultas del tipo:
"SELECT * FROM videos LIMIT $tam*$pag, $tam", algo así te devuelve todos los vídeos de la página $pag si lo tienes todo bien.
-Con un bucle bien hecho haces saltos horizontales cada 4 vídeos.

Hay un sin fin de ejemplos por la web de esto pero haber si te hago algo rapidito aquí y se entiende:

Código PHP:
<?php  
$raiz 
"./"
$imgyoutube "http://img.youtube.com/vi/"
$imgyoutubedos "/hqdefault.jpg"
include(
'lib/config.php'); 
include(
'lib/head.php');  
include(
'lib/nav.php');  

$tam 16;
$pag $_GET['p']; //Cálculo de página
if(!isset($pag) || empty($pag || !is_int($pag) || $pag 1)){
   
$pag 1;
}

$total mysql_num_rows(mysql_query("SELECT id_video FROM videos")); //Total vídeos

$num_pag ceil($total/$tam);//Usar funcion de redondea ahcia arriba no reucerdo si era esta

$sql mysql_query("SELECT * FROM videos ORDER BY id_video DESC LIMIT ".$tam*$pag." , ".$tam);
?> 

<div class="container videos-index container-videos"> 
        <div class="col-md-12">

        <?php
            $i 
0;
            while(
$v mysql_fetch_array($sql)){
                if(
$i 0){
?>
            <div class="row"> 
         <?php
            
}
?>
            <div class='col-md-3'>
            <a href="play.php?video=<?php echo $fila["id_video"];?>">
                <img src="<?php echo $imgyoutube substr($fila["video_link"],-11) . $imgyoutubedos;?>" />
            </a>
            </div>
            <?php
                
if($i 0){
?>
            </div> 
         <?php
                
}
              
$i++;
             }
            
?> 

        </div>
<?php
echo '<a href="www.tuweb.com/videos?p=.'$pag+1.'">Anterior</a>';
for(
$i 0;$i<$num_pag;$i++;){
    echo 
'<a href="www.tuweb.com/videos?p='.$i.'">'.$i.'</a>';
}
echo 
'<a href="www.tuweb.com/videos?p=.'$pag+1.'">Siguiente</a>';
?>
</div> 

<?php include('lib/footer.php'); ?>
No sé si habrá algún fallo, lo he hecho rapidito y escrito directamente en el navegador jeje, pero la idea es esta.
A la hora de generar la paginación tienes que jugar con los IFS para crear cosas bonitas y controlar que desparezca el siguiente y el anterior y el link de la página en que estes, etc pero ya te lo dejo a ti para que practiques.
__________________
Dicen que las personas piensan en su lengua materna, yo lo hago en PHP
  #3 (permalink)  
Antiguo 03/03/2014, 18:36
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: PHP/MYSQL - Paginacion, buble while ...

Para el tema de los 4 datos por fila, puedes apoyarte usando la función array_chunk, la cual separa un array en una cantidad A de B elementos.

Código PHP:
Ver original
  1. $query = mysql_query("SELECT campo FROM tabla");
  2. if (mysql_num_rows($query))
  3.     while ($row = mysql_fetch_array($query))
  4.         $array[] = $row["campo"];
  5.  
  6. $nuevoArray = array_chunk($array, 4);
  7.  
  8. foreach ($nuevoArray as $dato)
  9.     echo implode(' - ', $dato) . "<br />";

Esto me daría un resultado similar al siguiente:

Código HTML:
Ver original
  1. A - B - C - D
  2. E - F - G - H
  3. I - J - K - L

Y lo mejor de todo es que si en la última fila hay menos de 4 elementos, imprime los que estén y así no nos complicamos por que debamos imprimir sí o sí 4 elementos por fila.

Para la paginación, te recomiendo leer este tutorial, me ha sido de gran ayuda.

Un consejo más; múdate a la extensión MySQLi porque la extensión MySQL ya quedó obsoleta en las versiones más recientes de PHP.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #4 (permalink)  
Antiguo 03/03/2014, 20:03
Avatar de biktorbasket  
Fecha de Ingreso: junio-2013
Mensajes: 42
Antigüedad: 10 años, 10 meses
Puntos: 2
Respuesta: PHP/MYSQL - Paginacion, buble while ...

Cita:
Iniciado por zalito12 Ver Mensaje
Bueno, no sé como estarás trabjando con la información en tu web porque hay varias formas de hacerlo dependiendo de eso.
Una muy utilizada y seguramente de la que más ejemplos encuentres por la red es organizando bien las consultas a la BD.

-Una consulta que te de el total de videos que hay, con un COUNT por ejemplo o un num_rows.
-Con el total calculas cuantas páginas necesitas, en tu caso 16 vídeos por página: $total/16 y redondear hacia arriba no recuerdo cuál era la función. Te recomiendo guardar ese 16 en una variable también, por ejemplo $tam (numero vídeos por página).
-Ahora utilizas el método GET para ver en que página te hayas y hacer las consultas del tipo:
"SELECT * FROM videos LIMIT $tam*$pag, $tam", algo así te devuelve todos los vídeos de la página $pag si lo tienes todo bien.
-Con un bucle bien hecho haces saltos horizontales cada 4 vídeos.

Hay un sin fin de ejemplos por la web de esto pero haber si te hago algo rapidito aquí y se entiende:

Código PHP:
<?php  
$raiz 
"./"
$imgyoutube "http://img.youtube.com/vi/"
$imgyoutubedos "/hqdefault.jpg"
include(
'lib/config.php'); 
include(
'lib/head.php');  
include(
'lib/nav.php');  

$tam 16;
$pag $_GET['p']; //Cálculo de página
if(!isset($pag) || empty($pag || !is_int($pag) || $pag 1)){
   
$pag 1;
}

$total mysql_num_rows(mysql_query("SELECT id_video FROM videos")); //Total vídeos

$num_pag ceil($total/$tam);//Usar funcion de redondea ahcia arriba no reucerdo si era esta

$sql mysql_query("SELECT * FROM videos ORDER BY id_video DESC LIMIT ".$tam*$pag." , ".$tam);
?> 

<div class="container videos-index container-videos"> 
        <div class="col-md-12">

        <?php
            $i 
0;
            while(
$v mysql_fetch_array($sql)){
                if(
$i 0){
?>
            <div class="row"> 
         <?php
            
}
?>
            <div class='col-md-3'>
            <a href="play.php?video=<?php echo $fila["id_video"];?>">
                <img src="<?php echo $imgyoutube substr($fila["video_link"],-11) . $imgyoutubedos;?>" />
            </a>
            </div>
            <?php
                
if($i 0){
?>
            </div> 
         <?php
                
}
              
$i++;
             }
            
?> 

        </div>
<?php
echo '<a href="www.tuweb.com/videos?p=.'$pag+1.'">Anterior</a>';
for(
$i 0;$i<$num_pag;$i++;){
    echo 
'<a href="www.tuweb.com/videos?p='.$i.'">'.$i.'</a>';
}
echo 
'<a href="www.tuweb.com/videos?p=.'$pag+1.'">Siguiente</a>';
?>
</div> 

<?php include('lib/footer.php'); ?>
No sé si habrá algún fallo, lo he hecho rapidito y escrito directamente en el navegador jeje, pero la idea es esta.
A la hora de generar la paginación tienes que jugar con los IFS para crear cosas bonitas y controlar que desparezca el siguiente y el anterior y el link de la página en que estes, etc pero ya te lo dejo a ti para que practiques.

Lo primero gracias por contestar, este ejemplo me gusta bastante y no lo veo tan dificil.

No entiendo esta parte, el comienzo del buble. ¿La variable $v que utilidad tiene?

Código PHP:
<?php
            $i 
0;
            while(
$v mysql_fetch_array($ssql)){
                if(
$i 0){
        
?>
y justo me da error en la linea:

Código PHP:
if($i 0){ 
  #5 (permalink)  
Antiguo 03/03/2014, 20:05
Avatar de biktorbasket  
Fecha de Ingreso: junio-2013
Mensajes: 42
Antigüedad: 10 años, 10 meses
Puntos: 2
Respuesta: PHP/MYSQL - Paginacion, buble while ...

Cita:
Iniciado por Alexis88 Ver Mensaje
Para el tema de los 4 datos por fila, puedes apoyarte usando la función [URL="http://www.php.net/manual/es/function.array-chunk.php"][B]array_chunk[/B][/URL], la cual separa un array en una cantidad A de B elementos.

Código PHP:
Ver original
  1. $query = mysql_query("SELECT campo FROM tabla");
  2. if (mysql_num_rows($query))
  3.     while ($row = mysql_fetch_array($query))
  4.         $array[] = $row["campo"];
  5.  
  6. $nuevoArray = array_chunk($array, 4);
  7.  
  8. foreach ($nuevoArray as $dato)
  9.     echo implode(' - ', $dato) . "<br />";

Esto me daría un resultado similar al siguiente:

Código HTML:
Ver original
  1. A - B - C - D
  2. E - F - G - H
  3. I - J - K - L

Y lo mejor de todo es que si en la última fila hay menos de 4 elementos, imprime los que estén y así no nos complicamos por que debamos imprimir sí o sí 4 elementos por fila.

Para la paginación, te recomiendo leer [URL="http://www.cristalab.com/tutoriales/paginacion-con-php-y-mysql-c79063l/"][B]este tutorial[/B][/URL], me ha sido de gran ayuda.

Un consejo más; múdate a la extensión [URL="http://www.php.net/manual/es/book.mysqli.php"][B]MySQLi[/B][/URL] porque la extensión [URL="http://www.php.net/manual/es/book.mysql.php"][B]MySQL[/B][/URL] ya quedó obsoleta en las versiones más recientes de PHP.

Saludos
Gracias por contestar,
Mirare detenidamente el código, es interesante.

¿Que diferencia hay entre mysql y mysqli ? ¿Es como html y html5? o no tiene nada que ver.
  #6 (permalink)  
Antiguo 03/03/2014, 20:13
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: PHP/MYSQL - Paginacion, buble while ...

Cita:
Iniciado por biktorbasket Ver Mensaje
¿Que diferencia hay entre mysql y mysqli ? ¿Es como html y html5? o no tiene nada que ver.
Dale una leída a la documentación de los enlaces que te dejé, pero debo decirte que trabajar con MySQLi es mucho más seguro, además, como dije en la respuesta anterior, la extensión MySQL ha quedado obsoleta y ha sido descartada en las versiones más recientes de PHP.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #7 (permalink)  
Antiguo 03/03/2014, 20:21
Avatar de biktorbasket  
Fecha de Ingreso: junio-2013
Mensajes: 42
Antigüedad: 10 años, 10 meses
Puntos: 2
Respuesta: PHP/MYSQL - Paginacion, buble while ...

Cita:
Iniciado por Alexis88 Ver Mensaje
Dale una leída a la documentación de los enlaces que te dejé, pero debo decirte que trabajar con MySQLi es mucho más seguro, además, como dije en la respuesta anterior, la extensión MySQL ha quedado obsoleta y ha sido descartada en las versiones más recientes de PHP.

Saludos
Llevo 3 meses programando con php, de momento soy un NOOB xDD. ¿Que me recomiendas que aprenda mysql a un nivel alto y despues myslqi o empezar a aprender mysqli desde cero?
  #8 (permalink)  
Antiguo 03/03/2014, 20:31
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: PHP/MYSQL - Paginacion, buble while ...

Ambas extensiones son similares, MySQLi es una versión mejorada de MySQL así que sería mejor que aprendas más sobre MySQLi pues como ya te dije, la extensión MySQL ha quedado obsoleta en las más recientes versiones de PHP.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #9 (permalink)  
Antiguo 03/03/2014, 20:34
Avatar de biktorbasket  
Fecha de Ingreso: junio-2013
Mensajes: 42
Antigüedad: 10 años, 10 meses
Puntos: 2
Respuesta: PHP/MYSQL - Paginacion, buble while ...

Cita:
Iniciado por Alexis88 Ver Mensaje
Ambas extensiones son similares, MySQLi es una versión mejorada de MySQL así que sería mejor que aprendas más sobre MySQLi pues como ya te dije, la extensión MySQL ha quedado obsoleta en las más recientes versiones de PHP.

Saludos
Ok, muchas gracias por todo!! :D Comenzare poco a poco.

Solo aparece este error ( ! ) Parse error: syntax error, unexpected '=' in C:\wamp\www\videogamersweb\videos.php on line 39

Aqui

Código PHP:
if($i 0){ 
Todo el código lo entiendo, pero no encuentro el error.
  #10 (permalink)  
Antiguo 03/03/2014, 20:36
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: PHP/MYSQL - Paginacion, buble while ...

¿Y ya probaste con la forma que te sugerí?
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #11 (permalink)  
Antiguo 03/03/2014, 20:59
Avatar de biktorbasket  
Fecha de Ingreso: junio-2013
Mensajes: 42
Antigüedad: 10 años, 10 meses
Puntos: 2
Respuesta: PHP/MYSQL - Paginacion, buble while ...

Cita:
Iniciado por Alexis88 Ver Mensaje
¿Y ya probaste con la forma que te sugerí?
Los arrays es lo más dificil para mi de entender :( , hay bastantes en este código.

Entiendo que hace un buble cada 4 resultados . A partir de esta linea no lo entiendo.

Código PHP:
$array[] = $row["id_videos"]; 
¿Puedes comentarme debajo de cada linea el resultado?

Gracias :D
  #12 (permalink)  
Antiguo 03/03/2014, 21:18
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: PHP/MYSQL - Paginacion, buble while ...

A ver. Cuando realizas una consulta a una tabla en la base de datos, obtienes un conjunto de datos como resultado. Con la función mysql_fetch_array, creas un array asociativo de dichos datos, por lo que al utilizar un bucle como While o For, vas recorriendo filas por fila los resultados de la consulta y en cada iteración (o vuelta del bucle), asignas el valor encontrado a $array.

Una vez terminado este proceso, con la función array_chunk separo al contenido de $array en porciones de 4 datos cada una, aunque como dije en una de las respuestas anteriores, si la última porción contiene menos de 4 datos o elementos, no hay problema, queda con los elementos que tenga. Cabe señalar que cada porción es un array.

Si aún te quedan dudas, puedes consultar la documentación que te estoy dando en los enlaces o puedes preguntarme, pero no olvides analizar lo que te estoy indicando.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #13 (permalink)  
Antiguo 04/03/2014, 08:08
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 6 meses
Puntos: 67
Respuesta: PHP/MYSQL - Paginacion, buble while ...

Perdona por tardar.
Ya te dije que lo había escrito directamente en el navegador jeje.
La $v es lo que tú llamabas $fila, se me olvidó sustituir el resto del documento.
El if que te da error debería llevar '==', en lugar de '=' le pasa a los mejores xD

Cuentame como te va.
__________________
Dicen que las personas piensan en su lengua materna, yo lo hago en PHP
  #14 (permalink)  
Antiguo 04/03/2014, 20:39
Avatar de biktorbasket  
Fecha de Ingreso: junio-2013
Mensajes: 42
Antigüedad: 10 años, 10 meses
Puntos: 2
Respuesta: PHP/MYSQL - Paginacion, buble while ...

Cita:
Iniciado por Alexis88 Ver Mensaje
¿Y ya probaste con la forma que te sugerí?
Hola Alexis88, He entendido el código bastante bien.


Código PHP:
<?php

# Mysql_query — Enviar una consulta MySQL.
# $ssql --> introducimos todos los id de (id_video) de la tabla videos.
$ssql mysql_query("SELECT id_video FROM videos");
# mysql_num_rows — Obtener el número de filas de un conjunto de resultados.
# $ssql --> extraemos el número de filas en id_video.
if (mysql_num_rows($ssql))
# Creamos un buble while del número de filas.
# y metemos dentro de la variable $fila.
while ($fila mysql_fetch_array($ssql))
# Introducimos el array $fila["id_video"] dentro de $arrayVideo[].
$arrayVideo[] = $fila["id_video"];
# array_chunk — Divide un array en fragmentos
# Dividimos en fragmento los numeros de las filas dentro de la tabla.
# Ejemplo: 1, 2, 3, 4, / 5, 6, 7, 8, / 9, ...
$arrayChunk array_chunk($arrayVideo4);
# En cada bucle recorre el contenido de la variable $arrayChunk y se asigna a $dato
foreach ($arrayChunk as $datoVideo)
# implode — Une elementos de un array en un string
# Resultado 1 - 2 - 3 - 4
echo "<div class='row'>";
echo 
"<div class='col-md-3'>" implode($datoVideo) . "<div />";
echo 
"</div>"

?>
En la última parte estuve probando, pero se que esta mal y no se me ocurre nada mejor :S .

Código PHP:
echo "<div class='row'>";
echo 
"<div class='col-md-3'>" implode($datoVideo) . "<div />";
echo 
"</div>" 
Necesito algo como:

Código PHP:
row

col
-md3
1
/col-md3

col
-md3
2
/col-md3

col
-md3
3
/col-md3

col
-md3
4
/col-md3

/row 
Así hasta un máximo de 16 por cada página.

Un saludo, gracias por la ayuda nuevamente :D
  #15 (permalink)  
Antiguo 04/03/2014, 23:30
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: PHP/MYSQL - Paginacion, buble while ...

Estás usando mal la función implode, pues no le estás pasando el separador para los elementos del array, además, te faltó colocar las llaves de apertura y cerrado del foreach.

Puedes hacerlo como en el ejemplo que te di, aunque no me queda claro si quieres que se impriman uno debajo de otro o al costado. Para lo primero, sería así:

Código PHP:
Ver original
  1. foreach ($arrayChunk as $datoVideo){
  2.     # implode — Une elementos de un array en un string
  3.    # Resultado 1 - 2 - 3 - 4
  4.    echo "<div class='row'>";
  5.     echo "<div class='col-md-3'>" . implode("<br />", $datoVideo) . "<div />";
  6.     echo "</div>";
  7. }

Y para lo segundo, así:

Código PHP:
Ver original
  1. foreach ($arrayChunk as $datoVideo){
  2.     # implode — Une elementos de un array en un string
  3.    # Resultado 1 - 2 - 3 - 4
  4.    echo "<div class='row'>";
  5.     echo "<div class='col-md-3'>" . implode("\t", $datoVideo) . "<div />";
  6.     echo "</div>";
  7. }

Fíjate que el primer parámetro que le paso a la función implode es el separador que insertaré entre cada elemento del array $datoVideo. Otra forma sería utilizando dos bucles, es decir, el que tienes y otro para iterar los elementos de cada array de 4 elementos, pero con implode basta y es más eficiente.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #16 (permalink)  
Antiguo 04/03/2014, 23:43
Avatar de biktorbasket  
Fecha de Ingreso: junio-2013
Mensajes: 42
Antigüedad: 10 años, 10 meses
Puntos: 2
Respuesta: PHP/MYSQL - Paginacion, buble while ...

Cita:
Iniciado por Alexis88 Ver Mensaje
Estás usando mal la función implode, pues no le estás pasando el separador para los elementos del array, además, te faltó colocar las llaves de apertura y cerrado del foreach.

Puedes hacerlo como en el ejemplo que te di, aunque no me queda claro si quieres que se impriman uno debajo de otro o al costado. Para lo primero, sería así:

Código PHP:
Ver original
  1. foreach ($arrayChunk as $datoVideo){
  2.     # implode — Une elementos de un array en un string
  3.    # Resultado 1 - 2 - 3 - 4
  4.    echo "<div class='row'>";
  5.     echo "<div class='col-md-3'>" . implode("<br />", $datoVideo) . "<div />";
  6.     echo "</div>";
  7. }

Y para lo segundo, así:

Código PHP:
Ver original
  1. foreach ($arrayChunk as $datoVideo){
  2.     # implode — Une elementos de un array en un string
  3.    # Resultado 1 - 2 - 3 - 4
  4.    echo "<div class='row'>";
  5.     echo "<div class='col-md-3'>" . implode("\t", $datoVideo) . "<div />";
  6.     echo "</div>";
  7. }

Fíjate que el primer parámetro que le paso a la función implode es el separador que insertaré entre cada elemento del array $datoVideo. Otra forma sería utilizando dos bucles, es decir, el que tienes y otro para iterar los elementos de cada array de 4 elementos, pero con implode basta y es más eficiente.

Saludos
Creo que necesito otro buble porque me da de resultado esto:

Código HTML:
<div class='row'>
   <div class='col-md-3'>
1    2    3    4
   </div>
</div>

<div class='row'>
   <div class='col-md-3'>
5   6   7   8
   </div>
</div> 
y lo que necesito es esto:

Código HTML:
<div class='row'>
   <div class='col-md-3'>1 </div>
   <div class='col-md-3'>2 </div>
   <div class='col-md-3'>3 </div>
   <div class='col-md-3'>4 </div>
</div>

<div class='row'>
   <div class='col-md-3'>5 </div>
   <div class='col-md-3'>6 </div>
   <div class='col-md-3'>7 </div>
   <div class='col-md-3'>8 </div>
</div> 
Estoy mirando la programación de cristalab que me pasastes, sobre paginacion. Creo que no es muy dificil adaptarlo.
  #17 (permalink)  
Antiguo 05/03/2014, 00:55
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: PHP/MYSQL - Paginacion, buble while ...

Inténtalo así:

Código PHP:
Ver original
  1. foreach ($arrayChunk as $datoVideo){
  2.     echo "<div class='row'>";
  3.     echo "<div class='col-md-3'>" . implode("</div><div class='col-md-3'>", $datoVideo) . "<div />";
  4.     echo "</div>";
  5. }

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #18 (permalink)  
Antiguo 05/03/2014, 04:03
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 6 meses
Puntos: 67
Respuesta: PHP/MYSQL - Paginacion, buble while ...

Bueno, de todas formas creo que lo que puse debería funcionar si entendí bien tu html.
__________________
Dicen que las personas piensan en su lengua materna, yo lo hago en PHP
  #19 (permalink)  
Antiguo 05/03/2014, 11:00
Avatar de biktorbasket  
Fecha de Ingreso: junio-2013
Mensajes: 42
Antigüedad: 10 años, 10 meses
Puntos: 2
Respuesta: PHP/MYSQL - Paginacion, buble while ...

Cita:
Iniciado por zalito12 Ver Mensaje
Bueno, de todas formas creo que lo que puse debería funcionar si entendí bien tu html.
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 
.
  #20 (permalink)  
Antiguo 05/03/2014, 11:04
Avatar de biktorbasket  
Fecha de Ingreso: junio-2013
Mensajes: 42
Antigüedad: 10 años, 10 meses
Puntos: 2
Respuesta: PHP/MYSQL - Paginacion, buble while ...

Cita:
Iniciado por Alexis88 Ver Mensaje
Inténtalo así:

Código PHP:
Ver original
  1. foreach ($arrayChunk as $datoVideo){
  2.     echo "<div class='row'>";
  3.     echo "<div class='col-md-3'>" . implode("</div><div class='col-md-3'>", $datoVideo) . "<div />";
  4.     echo "</div>";
  5. }

Saludos

Muchas gracias Alexis88, asi si funciona perfecto, gracias por toda la ayuda. ^^:

Dejo el código completo:

Código PHP:
<?php 

# Variables de la página.
$raiz "./";
$titulo "Videogamers | Comparte tus videos de gameplays";
$descripcion "Videos de gameplays en español, comparte tus videos en videogamers.es y consigue un mayor numero de suscriptores, visitas. Promociona tus videos.";
$you_inicio "http://img.youtube.com/vi/";
$you_fin "/hqdefault.jpg";

# Includes inicio de plantilla.
include('lib/config.php');
include(
'lib/head.php'); 
include(
'lib/nav.php'); 

?>

<!-- Contenido container-videos / row / col-md-12-->
<div class="container container-videos">
<div class="row">
<div class="col-md-12">

<?php

# Limite maximo por página (Paginacion).
# $limite = 16;
# Indica la pagina por el metodo get, modificada a integer.
# Si la pagina es menor que 1 el resultado sera 1.
# $pagina = (int) $_GET["pagina"];
# if ($pagina < 1){
#   $pagina = 1;
# }
# $offset = ($pagina - 1) * $limite;

# Mysql_query — Enviar una consulta MySQL.
# $ssql --> introducimos todos los id de (id_video) de la tabla videos.
$ssql mysql_query("SELECT id_video FROM videos");
# mysql_num_rows — Obtener el número de filas de un conjunto de resultados.
# $ssql --> extraemos el número de filas en id_video.
if (mysql_num_rows($ssql))
# Creamos un buble while del número de filas.
# y metemos dentro de la variable $fila.
while ($fila mysql_fetch_array($ssql))
# Introducimos el array $fila["id_video"] dentro de $arrayVideo[].
$arrayVideo[] = $fila["id_video"];
# array_chunk — Divide un array en fragmentos
# Dividimos en fragmento los numeros de las filas dentro de la tabla.
# Ejemplo: 1, 2, 3, 4, / 5, 6, 7, 8, / 9, ...
$arrayChunk array_chunk($arrayVideo4);
# En cada bucle recorre el contenido de la variable $arrayChunk y se asigna a $dato.
foreach ($arrayChunk as $datoVideo){

# imagen de youtube
# $imageYoutube = $you_inicio . $datoVideo . $you_fin;
# $imageYoutube = '<a href="play.php?video=' . $datoVideo . '"><img src="' . $you_inicio .  substr($fila["video_link"],-11) . $you_fin . '" /></a>';

# implode — Une elementos de un array en un string
# Resultado 1 - 2 - 3 - 4
 
echo "<div class='row'>";
 echo 
"<div class='col-md-3'>" implode("</div><div class='col-md-3'>"$datoVideo) . "</div>";
 echo 
"</div>";
}

?>

<!-- Fin contenido container-videos / row / col-md-12-->
</div>
</div>
</div>

<?php

# Includes final de plantilla.
include('/lib/endconfig.php"');
include(
'/lib/footer.php"'); 

?>

<?php 
# $ssql = "select * from videos order by id_video desc limit 4";

# $rs = mysql_query($ssql);
# while ($fila = mysql_fetch_array($rs)){
# echo "<div class='col-md-3'>";
# echo "</div>";
# }
?>
  #21 (permalink)  
Antiguo 05/03/2014, 13:30
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: PHP/MYSQL - Paginacion, buble while ...

No olvides marcar el tema como solucionado para que otras personas que tienen la misma dificultad que tuviste al inicio, sepan que aquí pueden encontrar una solución.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #22 (permalink)  
Antiguo 05/03/2014, 13:39
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 6 meses
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
  #23 (permalink)  
Antiguo 05/03/2014, 22:42
Avatar de biktorbasket  
Fecha de Ingreso: junio-2013
Mensajes: 42
Antigüedad: 10 años, 10 meses
Puntos: 2
Respuesta: PHP/MYSQL - Paginacion, buble while ...

Creo que todo funciona perfecto, excepto el bucle while, que da este resultado:

Código HTML:
div.row
/div.row

div.col-md-3   /div.col-md3
div.col-md-3   /div.col-md3
div.col-md-3   /div.col-md3
div.col-md-3   /div.col-md3

div.row
/div.row

div.col-md-3   /div.col-md3
div.col-md-3   /div.col-md3
div.col-md-3   /div.col-md3
div.col-md-3   /div.col-md3

div.row
/div.row
Código PHP:
 if($i == 0){
    
?>
    </div> 
He estado intentando colocar el /div.row por delante de div.row pero el problema es que la primera vez que haga el bucle no aparezca /div.row

Mira que lo intento chicos, pero busco por todos lados no encuentro como resolver los problemas :_( y os tengo que preguntar todo.

La verdad es que me estáis ayudamos muchos y os lo agradezco bastante: D
  #24 (permalink)  
Antiguo 06/03/2014, 06:11
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 6 meses
Puntos: 67
Respuesta: PHP/MYSQL - Paginacion, buble while ...

Con este código
Código PHP:
    <?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++; 
    } 
    
?>
¿Te genera filas vacías? Me parece casi imposible, lo probare en mi xampp dentro de una hora que ahora estoy ocupado :S

EDITO: Soy un poco tonto, claro que no funciona porque imprime la apertura de fila y el cierre en la misma iteración. Cuando haces una cosa mal de primeras luego cuesta ver el fallo, sólo hay que sumar 1 en el segundo if:
Código PHP:
...
    <?php 
    
#  Resto de $i dividido por 4 es igual a 0 continua cierra el row. 
        
if(($i+1) % 4  == 0){ 
    
?> 
    </div>
    <!-- fin row --> 
    <?php 
    

...
__________________
Dicen que las personas piensan en su lengua materna, yo lo hago en PHP

Última edición por zalito12; 06/03/2014 a las 08:59

Etiquetas: mysql+php
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 21:40.