Foros del Web » Programando para Internet » PHP »

como Limitar un while a 6 resultados??

Estas en el tema de como Limitar un while a 6 resultados?? en el foro de PHP en Foros del Web. Tengo el siguiente codigo que sirve para obtener los 6 ultimos id; con sus respectivas fotos; el problema es que el echo se imprime como ...
  #1 (permalink)  
Antiguo 20/02/2010, 10:34
Avatar de zeuzft  
Fecha de Ingreso: junio-2009
Ubicación: peru
Mensajes: 358
Antigüedad: 14 años, 10 meses
Puntos: 2
Exclamación como Limitar un while a 6 resultados??

Tengo el siguiente codigo que sirve para obtener los 6 ultimos id; con sus respectivas fotos; el problema es que el echo se imprime como 16 veces; yo quisiera que se imprima tan solo 2 filas con 3 fotos cada una:
Código PHP:
            echo "<table border='0' cellspacing='2' cellpadding='0'>";
            
$consulta=mysql_query("SELECT * FROM cancion order by can_id desc limit 6");
            
$cont=0;
            while (
$a=mysql_fetch_array($consulta))
            {
            
$cont ++;
            
$id=$a['can_id'];
            
$cancion=$a['can_nom'];
            
$artista=$a['can_art'];
            
$foto="musica1/".$id.".jpg";
            if (
file_exists($foto))
                {
                    
$s="<img border='0' height='80' width='60' alt='$cancion $artista' src=".$foto." />";
                }
            else{
                    
$s="<img border='0' height='80' width='60' alt='$cancion $artista' src='imagenes/Vista147.png' />";
                }
            echo 
"<tr><td>".$s."</td><td>".$s."</td><td>".$s."</td></tr>";
            }
            echo 
"</table>" 
  #2 (permalink)  
Antiguo 20/02/2010, 10:39
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: como Limitar un while a 6 resultados??

El limit está mal. Tienes que indicarle dónde empieza y cuántos registros a partir de ahí:

Código PHP:
Ver original
  1. $consulta=mysql_query("SELECT * FROM cancion order by can_id desc LIMIT 0,6");

Si lo quieres hacer en el while:
Código PHP:
Ver original
  1. while ($a=mysql_fetch_array($consulta))
  2.             {
  3.             $cont ++;
  4.             $id=$a['can_id'];
  5.             $cancion=$a['can_nom'];
  6.             $artista=$a['can_art'];
  7.             $foto="musica1/".$id.".jpg";
  8.             if (file_exists($foto))
  9.                 {
  10.                     $s="<img border='0' height='80' width='60' alt='$cancion $artista' src=".$foto." />";
  11.                 }
  12.             else{
  13.                     $s="<img border='0' height='80' width='60' alt='$cancion $artista' src='imagenes/Vista147.png' />";
  14.                 }
  15. if($cont==6) { break; } // sólo tienes que cortarlo
  16.                
  17.             echo "<tr><td>".$s."</td><td>".$s."</td><td>".$s."</td></tr>";
  18.             }
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.

Última edición por CHuLoSoY; 20/02/2010 a las 10:46
  #3 (permalink)  
Antiguo 20/02/2010, 10:42
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: como Limitar un while a 6 resultados??

REpetido. alguien puede borrar esta respuesta?
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #4 (permalink)  
Antiguo 20/02/2010, 10:43
Avatar de zeuzft  
Fecha de Ingreso: junio-2009
Ubicación: peru
Mensajes: 358
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: como Limitar un while a 6 resultados??

hice lo que me dijiste pero siempre me imprime 3 veces la misma foto y hace el salto
  #5 (permalink)  
Antiguo 20/02/2010, 10:47
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: como Limitar un while a 6 resultados??

Claro que te imprime tres veces:
Código PHP:
Ver original
  1. echo "<tr><td>".$s."</td><td>".$s."</td><td>".$s."</td></tr>";

No ves tu propio código?
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #6 (permalink)  
Antiguo 20/02/2010, 10:48
Avatar de zeuzft  
Fecha de Ingreso: junio-2009
Ubicación: peru
Mensajes: 358
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: como Limitar un while a 6 resultados??

claro es por eso que quisiera saber como distinguir ese "$s"; ya que deberia ser 3 imagenes diferentes por fila; haciendo un total de 6 actualmente se imprime 5 veces
  #7 (permalink)  
Antiguo 20/02/2010, 10:50
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: como Limitar un while a 6 resultados??

Yo lo haría así:
Código PHP:
Ver original
  1. $columnaActual=1;
  2. $columnasTotales=3;
  3. while(mysql_fetch_assoc($row)) {
  4.  
  5.      if(columnaActual==1) { echo "<tr>"; }
  6.      echo "<td>".$s."</td>";
  7.      if(columnaActual==3) { echo "</tr>"; }
  8.  
  9. $columnaActual++;
  10.  
  11. }
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #8 (permalink)  
Antiguo 20/02/2010, 10:54
Avatar de zeuzft  
Fecha de Ingreso: junio-2009
Ubicación: peru
Mensajes: 358
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: como Limitar un while a 6 resultados??

se imprime en una sola fila
Código PHP:
            echo "<table border='0' cellspacing='2' cellpadding='0'>";
            
$consulta=mysql_query("SELECT * FROM cancion order by can_id desc limit 0,6");
            
$columnaActual=1;
            
$columnasTotales=3;
            while (
$a=mysql_fetch_array($consulta))
            {
            
$cont ++;
            
$id=$a['can_id'];
            
$cancion=$a['can_nom'];
            
$artista=$a['can_art'];
            
$foto="musica1/".$id.".jpg";
            if (
file_exists($foto))
                {
                    
$s="<img border='0' height='80' width='60' alt='$cancion $artista' src=".$foto." />";
                }
            else{
                    
$s="<img border='0' height='80' width='60' alt='$cancion $artista' src='imagenes/Vista147.png' />";
                }
            if(
$cont==6) { break; }
            if(
columnaActual==1) { echo "<tr>"; } elseif(columnaActual==3) { echo "</tr>"; } 
            echo 
"<td>".$s."</td>";
            
//echo "<tr><td>".$s."</td><td>".$s."</td><td>".$s."</td></tr>";
            
$columnaActual++;
            }
            echo 
"</table>"
  #9 (permalink)  
Antiguo 20/02/2010, 10:57
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: como Limitar un while a 6 resultados??

a ver, adáptalo un poco, lo que te di es una idea. no copies y pegues nunca, porque te llevarás mil disgustos, intenta entenderlo.
Código PHP:
Ver original
  1. echo "<table border='0' cellspacing='2' cellpadding='0'>";
  2. $consulta=mysql_query("SELECT * FROM cancion order by can_id desc limit 0,6");
  3.   $columnaActual=1;
  4.   $columnasTotales=3;
  5.         while ($a=mysql_fetch_array($consulta)) {
  6.             $cont ++;
  7.             $id=$a['can_id'];
  8.             $cancion=$a['can_nom'];
  9.             $artista=$a['can_art'];
  10.             $foto="musica1/".$id.".jpg";
  11.             if (file_exists($foto))
  12.                 {
  13.                     $s="<img border='0' height='80' width='60' alt='$cancion $artista' src=".$foto." />";
  14.                 }
  15.             else{
  16.                     $s="<img border='0' height='80' width='60' alt='$cancion $artista' src='imagenes/Vista147.png' />";
  17.                 }
  18.                      if(columnaActual==1) { echo "<tr>"; }
  19.                      echo "<td>".$s."</td>";
  20.                      if(columnaActual==3) { echo "</tr>"; $columnaActual=1; }
  21.  
  22.             $columnaActual++;
  23.             }
  24.             echo "</table>";

Teniendo el limit no te hace falta el break.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #10 (permalink)  
Antiguo 20/02/2010, 11:03
Avatar de zeuzft  
Fecha de Ingreso: junio-2009
Ubicación: peru
Mensajes: 358
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: como Limitar un while a 6 resultados??

Código PHP:
            echo "<table border='0' cellspacing='2' cellpadding='0'>";
            
$consulta=mysql_query("SELECT * FROM cancion order by can_id desc limit 0,6");
            
$columnaActual=1;
            
$columnasTotales=3;
            while (
$a=mysql_fetch_array($consulta))
            {
            
$cont ++;
            
$id=$a['can_id'];
            
$cancion=$a['can_nom'];
            
$artista=$a['can_art'];
            
$foto="musica1/".$id.".jpg";
            if (
file_exists($foto))
                {
                    
$s="<img border='0' height='80' width='60' alt='$cancion $artista' src=".$foto." />";
                }
            else{
                    
$s="<img border='0' height='80' width='60' alt='$cancion $artista' src='imagenes/Vista147.png' />";
                }
            if(
$cont==6) { break; }
            if(
columnaActual==1) { echo "<tr>"; } echo "<td>".$s."</td>"; elseif(columnaActual==3) { echo "</tr>"$columnaActual=1; }
            
$columnaActual++;
            }
            echo 
"</table>"
me da el siguiente error:
Cita:
Parse error: syntax error, unexpected T_ELSEIF in /home/publiman/public_html/izquierda.php on line 51
linea 51:
Cita:
if(columnaActual==1) { echo "<tr>"; } echo "<td>".$s."</td>"; elseif(columnaActual==3) { echo "</tr>"; $columnaActual=1; }
  #11 (permalink)  
Antiguo 20/02/2010, 11:05
Avatar de zeuzft  
Fecha de Ingreso: junio-2009
Ubicación: peru
Mensajes: 358
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: como Limitar un while a 6 resultados??

el problema era que no era elseif sino if ; pero igual me imprime una sola fila
  #12 (permalink)  
Antiguo 20/02/2010, 11:09
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: como Limitar un while a 6 resultados??

No, el error es el siguiente. Tienes este código:
Código PHP:
Ver original
  1. if(columnaActual==1) { echo "<tr>"; } echo "<td>".$s."</td>"; elseif(columnaActual==3) { echo "</tr>"; $columnaActual=1; }
Mira la diferencia con el correcto:
Código PHP:
Ver original
  1. if(columnaActual==1) { echo "<tr>"; }elseif(columnaActual==3) { echo "</tr>"; $columnaActual=1; } echo "<td>".$s."</td>";
Pero más correcto, para que el </tr> sea al final, es como te lo puse yo.
Código PHP:
Ver original
  1. if(columnaActual==1) { echo "<tr>"; } echo "<td>".$s."</td>";
  2. if(columnaActual==columnasTotales) { echo "</tr>"; $columnaActual=1; }

Esto es :
SI columnaActual es la primera, se imprime <tr> (nueva fila).
SI es la última (3=columnasTotales) imprime </tr> (fin de fila)
SINO no imprime ninguna de las dos (columna del medio)
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #13 (permalink)  
Antiguo 20/02/2010, 11:13
Avatar de zeuzft  
Fecha de Ingreso: junio-2009
Ubicación: peru
Mensajes: 358
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: como Limitar un while a 6 resultados??

Cita:
$columnaActual=1;
$columnasTotales=3;
while ($a=mysql_fetch_array($consulta))
{
$cont ++;
$id=$a['can_id'];
$cancion=$a['can_nom'];
$artista=$a['can_art'];
$foto="musica1/".$id.".jpg";
if (file_exists($foto))
{
$s="<img border='0' height='80' width='60' alt='$cancion $artista' src=".$foto." />";
}
else{
$s="<img border='0' height='80' width='60' alt='$cancion $artista' src='imagenes/Vista147.png' />";
}
if(columnaActual==1) { echo "<tr>"; } echo "<td>".$s."</td>";
if(columnaActual==columnasTotales) { echo "</tr>"; $columnaActual=1; }
$columnaActual++;
}
le quite el break y agregue la ultima modificacion pero sigue en una sola fila; el ++; no deberia ir despues de cada td?
  #14 (permalink)  
Antiguo 20/02/2010, 11:14
Avatar de zeuzft  
Fecha de Ingreso: junio-2009
Ubicación: peru
Mensajes: 358
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: como Limitar un while a 6 resultados??

lo modfique a esto; pero igual me arroja una sola fila
Código PHP:
if(columnaActual==1) { echo "<tr>"; } echo "<td>".$s."</td>"$columnaActual++;
if(
columnaActual==columnasTotales) { echo "</tr>"$columnaActual=1; } 
  #15 (permalink)  
Antiguo 20/02/2010, 11:16
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: como Limitar un while a 6 resultados??

Cita:
Iniciado por zeuzft Ver Mensaje
le quite el break y agregue la ultima modificacion pero sigue en una sola fila; el ++; no deberia ir despues de cada td?
Cada vuelta del while escribe un <td>, por tanto el $columnaActual++ debería ir al final de cada vuelta, por seguridad. Sólo cambias de columna cuando acaba una vuelta, entiendes?
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #16 (permalink)  
Antiguo 20/02/2010, 11:17
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: como Limitar un while a 6 resultados??

Estoy pensando.... tienes inicializada la tabla? Porque escribiendo </tr> A COJONES tiene que cambiar de línea, siempre y cuando vaya dentro de un <table></table>
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #17 (permalink)  
Antiguo 20/02/2010, 11:17
Avatar de zeuzft  
Fecha de Ingreso: junio-2009
Ubicación: peru
Mensajes: 358
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: como Limitar un while a 6 resultados??

claro pero; una de 2; o el $columnaActual++; no se incrementa; o deberia estar en otro lado??
  #18 (permalink)  
Antiguo 20/02/2010, 11:21
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: como Limitar un while a 6 resultados??

Porqué no haces un debug?

echo $columnaActual
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #19 (permalink)  
Antiguo 20/02/2010, 11:21
Avatar de zeuzft  
Fecha de Ingreso: junio-2009
Ubicación: peru
Mensajes: 358
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: como Limitar un while a 6 resultados??

modificando el codigo y e imprimiendo la columnaActual; me di cuenta que al inciarlo en 1; en realidad es como si estuvieras imprimiendo 7 registro y no 6; es decir; cuando de el registro 2; en realidad columnaActual ya seria 3; entonces lo correcto seria darle un inicio de 0; y entonces columnaActual en registro 2 seria 2.
Código PHP:
            $columnaActual=0;
            
$columnasTotales=3;
            while (
$a=mysql_fetch_array($consulta))
            {
            
$cont ++;
            
$id=$a['can_id'];
            
$cancion=$a['can_nom'];
            
$artista=$a['can_art'];
            
$foto="musica1/".$id.".jpg";
            
$columnaActual++;
            if (
file_exists($foto))
                {
                    
$s="<img border='0' height='80' width='60' alt='$cancion $artista' src=".$foto." />";
                }
            else{
                    
$s="<img border='0' height='80' width='60' alt='$cancion $artista' src='imagenes/Vista147.png' />";
                }
                if(
columnaActual==1) { echo "<tr>"; } echo "<td>".$s."$columnaActual</td>";
                if(
columnaActual==columnasTotales) { echo "</tr>"$columnaActual=1; }
            } 
pero igual no logro que haga el salto
  #20 (permalink)  
Antiguo 20/02/2010, 11:23
Avatar de zeuzft  
Fecha de Ingreso: junio-2009
Ubicación: peru
Mensajes: 358
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: como Limitar un while a 6 resultados??

ok, ya encontre el error:
el problema es que se tomanba como columnaActual==columnaTotal
y era de esta manera:
Cita:
if($columnaActual==1) { echo "<tr>"; } echo "<td>".$s."</td>";
if($columnaActual==$columnasTotales) { echo "</tr>"; $columnaActual=1; }
Se estaban tomando como palabras y no como variables
  #21 (permalink)  
Antiguo 20/02/2010, 11:25
Avatar de zeuzft  
Fecha de Ingreso: junio-2009
Ubicación: peru
Mensajes: 358
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: como Limitar un while a 6 resultados??

y para que el salto sea correcto la variable de columnaActual tendria que iniciarse en 0 y no en 1
Cita:
if($columnaActual==$columnasTotales) { echo "</tr>"; $columnaActual=0; }
  #22 (permalink)  
Antiguo 20/02/2010, 11:25
Avatar de zeuzft  
Fecha de Ingreso: junio-2009
Ubicación: peru
Mensajes: 358
Antigüedad: 14 años, 10 meses
Puntos: 2
Respuesta: como Limitar un while a 6 resultados??

Gracias por la ayuda CHuLoSoY; me fue de gran utilidad.
  #23 (permalink)  
Antiguo 20/02/2010, 11:28
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: como Limitar un while a 6 resultados??

Ya te dije que no copiases y pegases a ver si veías el error ;)
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.

Etiquetas: limitar, resultados
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 08:29.