Foros del Web » Programando para Internet » PHP »

blucle while dentro de funcion solo me devuelve un resultado

Estas en el tema de blucle while dentro de funcion solo me devuelve un resultado en el foro de PHP en Foros del Web. Tengo el código que veis abajo, que me muestra las últimas noticias 5 noticias en este caso. Cuando lo hago sin usar funciones funciona bien ...
  #1 (permalink)  
Antiguo 20/08/2012, 11:48
 
Fecha de Ingreso: diciembre-2007
Mensajes: 38
Antigüedad: 16 años, 3 meses
Puntos: 0
blucle while dentro de funcion solo me devuelve un resultado

Tengo el código que veis abajo, que me muestra las últimas noticias 5 noticias en este caso. Cuando lo hago sin usar funciones funciona bien pero dentro de una funcion y usando return me devuelve nada mas que un resultado en vez de los 5.

¿que estoy haciendo mal?


Código PHP:
function portada ($item)
{
        require_once(
"conexion.php");

    
$query  "select * from noticias order by id_noticias desc limit 5";
    
$result mysqli_query ($con$query) or die ("Error: ".mysqli_error($con));

while (
$reg mysqli_fetch_array($result))
{
    return 
$reg$item ];
}


Código PHP:
<?php echo portada('titulo');?>
Gracias!
  #2 (permalink)  
Antiguo 20/08/2012, 11:51
Avatar de blakmetall  
Fecha de Ingreso: diciembre-2010
Ubicación: Jalisco
Mensajes: 181
Antigüedad: 13 años, 4 meses
Puntos: 18
Respuesta: blucle while dentro de funcion solo me devuelve un resultado

solo puedes regresar un valor.

lo que podrias hacer es dentro del ciclo while en vez de dar return cada vez
meterlo en un array y regresar el array

while(){
$return_vals[] = $reg[$item];
}

retrurn $return_vals;

y asi la usas

$noticias = portada('titulo');

foreach($noticias as $noticia){
echo $noticia;
}
__________________
To the end....
  #3 (permalink)  
Antiguo 20/08/2012, 11:53
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: blucle while dentro de funcion solo me devuelve un resultado

Es normal que return dentro de un while obliga a que al primer recorrido devuelva un resultado, sin hacer lo demás.

Si quieres devolver todo, deberás acumular los resultados en un arreglo dentro del while para hacer el return al final:

Código PHP:
Ver original
  1. while ($reg = mysqli_fetch_array($result))
  2.     $ret[]=$reg[ $item ];//acumulas las filas en el arreglo $ret
  3.  
  4.  
  5. return $ret; //al final devuelves el arreglo con todo
  #4 (permalink)  
Antiguo 20/08/2012, 18:03
 
Fecha de Ingreso: diciembre-2007
Mensajes: 38
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: blucle while dentro de funcion solo me devuelve un resultado

Gracias por las respuestas.

Estoy haciendo lo que me ha puesto ocp001a ya que quiero que con llamar a una funcion me devuelva los datos. El caso es que me da error, no funciona.

Los errores son estos:

Cita:
[SCREAM: Error suppression ignored for
( ! ) Notice: Array to string conversion in C:\wamp\www\ver_noticias.php on line 38
Me estoy volviendo un poco loco la verdad ya que quiero hacer la web entera con funciones sin usar poo y no se si esto es lo más recomendable ya que estoy empezando y veo que hay que tener mucha soltura. Me da mucha rabia hacer una web con código spaguetti, vamos que no va conmigo, necesito que este todo ordenado y las funciones creo que son ideales sin usar POO.


Código PHP:
Ver original
  1. function portada ($item)
  2.     {
  3.         require_once("conexion.php");
  4.        
  5.         $query  = "select * from noticias order by id_noticias desc limit 5";
  6.         $result = mysqli_query ($con, $query) or die ("Error:".mysqli_error($con));
  7.  
  8.         while ($reg = mysqli_fetch_array($result))
  9.     {
  10.         $ret[] = $reg[$item];
  11.         return $ret;
  12.     }
  13.  
  14.     }

Está sería la línea 38 en mi archivo, que es donde está el código html (vistas).
Código PHP:
Ver original
  1. <?php echo portada('titulo');?>
  #5 (permalink)  
Antiguo 20/08/2012, 18:56
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: blucle while dentro de funcion solo me devuelve un resultado

No importa si es por funciones o poo, el error esta en la forma que recibes lo retornado por la función, ya que no puedes hacer un simple echo $array, para esto o recorres el arreglo retornado o haces un var_dump, printf o algún mecanismo que pueda imprimir estructuras.
  #6 (permalink)  
Antiguo 21/08/2012, 09:29
 
Fecha de Ingreso: diciembre-2007
Mensajes: 38
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: blucle while dentro de funcion solo me devuelve un resultado

Bueno pues ya lo he connseguido.... muchas gracias pero ahora me muestra los resultados repetidos y no respeta el limit de la query....

¿qué puede ser? ¿demasiados bucles?

Edito: ya está arreglado. He sacado
Código PHP:
Ver original
  1. $ret[] = $reg[$item];
  2.         $noticias = ($ret);
del bucle while y me muestra correctamente las noticias.

Cita:
Brenda Chapman acusa de machismo a Pixar
Brenda Chapman acusa de machismo a Pixar
Marc Webb dirigirá 'The only living boy in New York'
Brenda Chapman acusa de machismo a Pixar
Marc Webb dirigirá 'The only living boy in New York'
'Contrarreloj', tráiler y cartel del nuevo thriller con Nicolas Cage
Brenda Chapman acusa de machismo a Pixar
Marc Webb dirigirá 'The only living boy in New York'
'Contrarreloj', tráiler y cartel del nuevo thriller con Nicolas Cage
las tiendas abren mañana festivo
Brenda Chapman acusa de machismo a Pixar
Marc Webb dirigirá 'The only living boy in New York'
'Contrarreloj', tráiler y cartel del nuevo thriller con Nicolas Cage
las tiendas abren mañana festivo
'Los mercenarios' ('The Expendables') tendrá una versión femenina

Código PHP:
Ver original
  1. <?php
  2.  
  3. function portada ($item)
  4. {
  5.     require_once("conexion.php");
  6.        
  7.     $query  = "select * from noticias order by id_noticias desc limit 5";
  8.     $result = mysqli_query ($con, $query) or die ("Error: ".mysqli_error($con));
  9.  
  10.     while ($reg = mysqli_fetch_array($result))
  11.     {
  12.         $ret[] = $reg[$item];
  13.         $noticias = ($ret);
  14.  
  15.         foreach ($noticias as $bucle)
  16.         {
  17.                 echo $bucle."<br />";
  18.         }
  19.     }
  20. }
  21. ?>

Última edición por printonic; 21/08/2012 a las 09:35

Etiquetas: devuelve, funcion, mysql, 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 18:53.