Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Warning: Invalid argument supplied for foreach()

Estas en el tema de Warning: Invalid argument supplied for foreach() en el foro de PHP en Foros del Web. Hola a todos tengo el siguiente código el cual checa los datos insertados en una tabla y de acuerdo a esto agrupa y "gráfica los ...
  #1 (permalink)  
Antiguo 03/12/2013, 13:05
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 11 años
Puntos: 12
Warning: Invalid argument supplied for foreach()

Hola a todos tengo el siguiente código el cual checa los datos insertados en una tabla y de acuerdo a esto agrupa y "gráfica los resultados" (genera td)... el problema lo tengo cuando en esa tabla no tengo ningun dato insertado me muestra lo siguiente Warning: Invalid argument supplied for foreach() lo cual supongo que es por que es vacío...

Código PHP:
<table >
<font face="Arial, Helvetica, sans-serif" size="2.5" color="#000" >
 <?php   
     mysql_select_db
($database_connection$connection);  

$query_total "SELECT medio as NombreMedio, count(medio) .......";    
$totalmedios mysql_query($query_total$connection) or die(mysql_error());  

     
$totalm=0//declaro variable. Esta variable tendrá la suma total de todos los medios   
if ( mysql_num_rows $totalmedios ) > ) {
   
$I=0;
    while (
$row mysql_fetch_array($totalmedios)) {
        
$Grafico[$I]['Titulo'] =$row['NombreMedio'];
        
$Grafico[$I]['Valor'] = $row['TotalMedio'];
        
$Grafico[$I]['Color'] = '#54B837';
        
$I++;
       
/* echo '<font face="Arial" size="2.5"> Medio:</font> ' .$row["NombreMedio"]." ".'promedio '.$redondeo.'%<br>'; //Muestro el promedio */  

        

  
mysql_free_result($totalmedios); //libero el objeto */  
   
$Max 0;
    foreach ( 
$Grafico As $Datos ) { $Max += $Datos['Valor']; }
}   
else{ 
$porcentaje 0
$redondeo 0

echo 
"Total:0%";  

       
     
?>
     
     
   <table width="600" cellspacing="0" cellpadding="2">
        <?php 
            
foreach( $Grafico As $Datos ) {/*ACA MARCA EL ERROR*/
                
$POR Round((( $Datos['Valor'] / $Max  ) * 100),2);
                echo <<<HTML
                <tr>
                    <td width="20%">
                        <strong>$Datos
[Titulo]:</strong> $Datos[Valor]
                    </td>
                    <td>
                        <Div Style="width:$POR%;background:$Datos
[Color];" Class="Barra"> </Div>$POR%
                    </td>
                </tr>
HTML;
            } 
        
?>
   
        </table>
  #2 (permalink)  
Antiguo 03/12/2013, 13:09
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 14 años, 4 meses
Puntos: 96
Respuesta: Warning: Invalid argument supplied for foreach()

Debajo de esto $Max=0; pon esto
Código PHP:
Ver original
  1. var_dump($Grafico);
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #3 (permalink)  
Antiguo 03/12/2013, 13:22
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 11 años
Puntos: 12
Respuesta: Warning: Invalid argument supplied for foreach()

Cita:
Iniciado por xSkArx Ver Mensaje
Debajo de esto $Max=0; pon esto
Código PHP:
Ver original
  1. var_dump($Grafico);
Lo hecho y no pasa nada... gracias
  #4 (permalink)  
Antiguo 03/12/2013, 13:28
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 14 años, 4 meses
Puntos: 96
Respuesta: Warning: Invalid argument supplied for foreach()

Pero te muestra algo?
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #5 (permalink)  
Antiguo 03/12/2013, 13:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 16 años, 1 mes
Puntos: 2135
Respuesta: Warning: Invalid argument supplied for foreach()

Abajo de:
Código PHP:
Ver original
  1. $totalm=0;

pon
Código PHP:
Ver original
  1. $Grafico = array();

Como pusiste el $totalm para iniciar la variable es necesario que también uses $Grafico de la misma manera.

Saludos.
  #6 (permalink)  
Antiguo 03/12/2013, 13:29
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 11 años
Puntos: 12
Respuesta: Warning: Invalid argument supplied for foreach()

Cita:
Iniciado por xSkArx Ver Mensaje
Pero te muestra algo?
Nop.... mira si funciona perfecto cuando tengo datos en la tabla... pero si esta es vacía me muestra ese error
  #7 (permalink)  
Antiguo 03/12/2013, 13:47
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 11 años
Puntos: 12
Respuesta: Warning: Invalid argument supplied for foreach()

Cita:
Iniciado por GatorV Ver Mensaje
Abajo de:
Código PHP:
Ver original
  1. $totalm=0;

pon
Código PHP:
Ver original
  1. $Grafico = array();



Saludos.

Con $Grafico = array(); quedo perfecto GRACIAS... SOLO UNA PREGUNTA NO ENTENDI LO ULTIMO ....Como pusiste el $totalm para iniciar la variable es necesario que también uses $Grafico de la misma manera.
  #8 (permalink)  
Antiguo 03/12/2013, 13:57
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 10 años, 9 meses
Puntos: 397
Respuesta: Warning: Invalid argument supplied for foreach()

Claro por norma y por estándar se debe de declarar toda variable y especificar su tipo:

Código PHP:
Ver original
  1. $var = 0; //tipo numerico
  2. $var = true; //tipo boleano
  3. $var = ''; //tipo string
  4. $var = array(); //tipo array
  5. $var = new stdClass(); //tipo object

foreach siempre espera un array (en este caso $Grafico). Pero tu solo defines esa variable si hay datos (con el while) por ello cuando no hay datos no esta definido $Grafico y por ello se genera el error.

Incluso recomendaría de que debajo de

Código PHP:
Ver original
  1. while ($row = mysql_fetch_array($totalmedios)) {

coloques

Código PHP:
Ver original
  1. $Grafico[$I] = array();

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #9 (permalink)  
Antiguo 03/12/2013, 16:16
Avatar de Briss  
Fecha de Ingreso: junio-2011
Mensajes: 1.293
Antigüedad: 11 años
Puntos: 12
Respuesta: Warning: Invalid argument supplied for foreach()

Cita:
Iniciado por jonni09lo Ver Mensaje
claro por norma y por estándar se debe de declarar toda variable y especificar su tipo:

Código php:
Ver original
  1. $var = 0; //tipo numerico
  2. $var = true; //tipo boleano
  3. $var = ''; //tipo string
  4. $var = array(); //tipo array
  5. $var = new stdclass(); //tipo object

foreach siempre espera un array (en este caso $grafico). Pero tu solo defines esa variable si hay datos (con el while) por ello cuando no hay datos no esta definido $grafico y por ello se genera el error.

Incluso recomendaría de que debajo de

Código php:
Ver original
  1. while ($row = mysql_fetch_array($totalmedios)) {

coloques

Código php:
Ver original
  1. $grafico[$i] = array();

saludos
gracias :)

Etiquetas: html, invalid, mysql, select, sql, tabla, variable, warning
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:32.