Foros del Web » Programando para Internet » PHP »

Warning en foreach de PHP

Estas en el tema de Warning en foreach de PHP en el foro de PHP en Foros del Web. Hola, buenas tardes, Tengo un error en una instrucción en PHP, que no sé el porqué de la misma, el error me marca: Warning: Invalid ...
  #1 (permalink)  
Antiguo 02/07/2012, 15:11
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Warning en foreach de PHP

Hola, buenas tardes,

Tengo un error en una instrucción en PHP, que no sé el porqué de la misma, el error me marca:

Warning: Invalid argument supplied for foreach() in .... on line 12

la línea doce a la cuál hace referencia está aquí:


Código PHP:
<?
include ('session.php'); 
include (
'conectabd.php');
$coneccion=conectarse();

$accion="";

if (isset (
$_POST[pedido]))
{
    
$piezas="";
    
    foreach ( 
$_POST[cantidad] as $cant => $valor )      /* Esta línea */
    
{
        if (
$valor != "")
        {        
        
$piezas=$piezas $valor;        
        }
    }
    
}

?>
y yo le envío los parámetros desde aquí:

Código HTML:
<td colspan="4">
					<?
                    $selectDress="Select * from dress_pack ORDER BY `dress_pack`.`codigo` ASC";
                    $queryDress=mysql_query ($selectDress);
					$i = 0; $j = 0;
                    while ($rwwDress= mysql_fetch_object ($queryDress))
                    {
                    ?>        
                          <div style="border:solid 1px #EDD6CD; width:800px;">
                            <table width="100%">
                              <tr>
                                <td width="83%" align="left">
                                    <table>
                                        <tr>
                                            <td width="3%"><div class="stock"><? echo $rwwDress->stock ?></div></td>
                                            <td width="8%"><label><?php echo $rwwDress->nombre ?></label></td>
                                            <td width="10%"><input type="text" name="cantidad_<?php echo $i=$i+1; ?>" value="0" size="8%" style="text-align:center" /></td>
                                            <td width="1%"><label>$</label></td>
                                            <td width="20%"><input type="text" name="precio_<?php echo $j=$j+1; ?>" id="precio" value="0.00"size="15%" style="text-align:right"/></td>
                                        </tr>
                                    </table>
                                </td>
                              </tr>
                           </table>
                         </div>  
                    <?
                    }
                    ?>     
        		</td> 
Llevo un rato con esto y no sé si por ello no veo el error, alguien tiene alguna idea?

De antemano gracias, saludos!
  #2 (permalink)  
Antiguo 02/07/2012, 15:24
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 13 años, 10 meses
Puntos: 63
Respuesta: Warning en foreach de PHP

$_POST[cantidad] es un array?
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!
  #3 (permalink)  
Antiguo 02/07/2012, 15:31
Avatar de poncharelo_69  
Fecha de Ingreso: octubre-2011
Ubicación: Queretaro
Mensajes: 86
Antigüedad: 12 años, 5 meses
Puntos: 10
Respuesta: Warning en foreach de PHP

El problema es que foreach no esta recibiendo un arreglo, o al menos no parece un arreglo, o no sabemos en realidad que recibe en $_POST['cantidad'].

http://php.net/manual/es/control-structures.foreach.php
  #4 (permalink)  
Antiguo 02/07/2012, 15:31
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Respuesta: Warning en foreach de PHP

mmm... buen punto.

No no es un array. Lo obtengo de aquí:

Código HTML:
<input type="text" name="cantidad_<?php echo $i=$i+1; ?>" value="0" size="8%" style="text-align:center" /> 
  #5 (permalink)  
Antiguo 02/07/2012, 15:32
Avatar de cesarin3134  
Fecha de Ingreso: enero-2012
Ubicación: Milan
Mensajes: 97
Antigüedad: 12 años, 3 meses
Puntos: 20
Respuesta: Warning en foreach de PHP

probablemente sea porque estas haciendo un isset sobre pedido y el foreach lo estas haciendo sobre la cantidad.
Suponiendo que cantidad es un array Prueba asi :

Código PHP:
include ('session.php');  
include (
'conectabd.php'); 
$coneccion=conectarse(); 

$accion=""

if (isset (
$_POST['cantidad'])) 

    
$piezas=""
     
    foreach ( 
$_POST['cantidad'] as $cant => $valor )      /* Esta línea */ 
    

        if (
$valor != ""
        {         
        
$piezas=$piezas $valor;         
        } 
    } 
     

  #6 (permalink)  
Antiguo 02/07/2012, 15:49
Avatar de Middrel  
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Respuesta: Warning en foreach de PHP

El primer $_POST[pedido] lo toma cuando se presiona el botón de enviar (submit), el siguiente $_POST[cantidad], lo debe tomar de cada vez que se repita el input que contiene el valor de "cantidad".

En otro archivo similar a este funciona muy bien, el único cambio que realicé fue cambiar "cantidades" por "cantidad" en el atributo name del input. Por ello se me hace muy raro que no funcione.

Realicé el cambio que me mencionas cesarin3134, sin embargo ahora quita el warning, pero como no reacciona al presionar el botón no hace el envío.

Saludos!
  #7 (permalink)  
Antiguo 02/07/2012, 15:49
Avatar de Heiroon  
Fecha de Ingreso: junio-2010
Ubicación: Caracas, Venezuela - Por ahora...
Mensajes: 495
Antigüedad: 13 años, 10 meses
Puntos: 63
Respuesta: Warning en foreach de PHP

Bueno efectivamente, el problema es que no estas implementando correctamente el foreach y según veo, lo que quieres hacer es que se repita el ciclo, la cantidad de veces que se inserta en $_POST['cantidad'], cierto?

Pues entonces si es eso, usa un for de esta manera...

Código PHP:
Ver original
  1. $c = $_POST['cantidad'];
  2. for($i = 0; $i > $c; $i++)

Saludos!
__________________
Gmail : [email protected]
Twitter: @heiroon

I'm back!

Etiquetas: foreach, mysql, sql, 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 12:52.