Foros del Web » Programando para Internet » PHP »

Problemas con Foreach y sesiones

Estas en el tema de Problemas con Foreach y sesiones en el foro de PHP en Foros del Web. Buenas, mi duda es la siguiente: Yo mando un formulario y lo dirijo a comprobar.php En comprobar.php hay otro formulario, una vez se rellena este ...
  #1 (permalink)  
Antiguo 21/04/2003, 01:39
 
Fecha de Ingreso: febrero-2003
Mensajes: 93
Antigüedad: 21 años, 2 meses
Puntos: 0
Problemas con Foreach y sesiones

Buenas, mi duda es la siguiente:
Yo mando un formulario y lo dirijo a comprobar.php
En comprobar.php hay otro formulario, una vez se rellena este formulario se pasa a otra página donde se muestra el primer formulario y el de comprobar.php.

Cuando hago esto me da un error a la hora de guardar los datos del primer formulario en la variable de sesion $maquinas
¿que hago mal en foreach()?
Warning: Invalid argument supplied for foreach() in ....

----COMPROBAR.PHP---
<?
session_start();
foreach ($_POST as $temp)
{
if ($temp >0){ $maquinas = $temp;}// Filtro el formulario anterior
}
$_SESSION['maquinas2'] = $maquinas ; //Guardo el formulario filtrado en una variable de sesion

//EN ESTE FOREACH SUPUESTAMENTE ME DA EL ERROR
foreach ($_SESSION['maquinas2'] as name => $valor)
{
echo " $name ===> $valor";
}

foreach ($_POST as $name => $valor)
{
if ($valor>0)
{
echo " <tr bgcolor=\"#FFFFFF\"> <td width=\"50% \"><div align=\"center\">$name </div>
</td> <td>
<div align=\"center\"><font size=\"2\" face=\"Verdana, Arial, Helvetica, sans-serif\">$valor</font> </div></td>";
}
}
?>


MUCHAS GRACIAS
  #2 (permalink)  
Antiguo 21/04/2003, 02:20
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Me parece que es porque $_SESSION['maquinas2'] NO es un array. Fijate que haces
Código PHP:
if ($temp >0){ $maquinas $temp;}// Filtro el formulario anterior 
Y despues a $_SESSION['maquinas2'] le asignas el mismo valor de $maquinas, pero $maquinas no es un array.
Proba hacer:
Código PHP:
if ($temp >0){ $maquinas[] = $temp;}// Filtro el formulario anterior 
Tambien puede ser que en el foreach del error te falto un '$'.
Debe ser
Código PHP:
foreach ($_SESSION['maquinas2'] as $name => $valor

Creo que es eso...
Saludos!
  #3 (permalink)  
Antiguo 21/04/2003, 04:33
 
Fecha de Ingreso: febrero-2003
Mensajes: 93
Antigüedad: 21 años, 2 meses
Puntos: 0
Muchimas gracias, el problema era que $maquinas no era un array como tu decias, pero como tambien necesitaba poner en $maquinas la key del $_POST la solución ha sido esta:

foreach ($_POST as $key => $temp)
{
if ($temp > 0){ $maquinas[$key] = $temp;}
}
Si alguien tiene otra forma guardar variables de distintos formularios, lo podría expponer aqui

Muchisimas gracias fran86 por tu consejo
  #4 (permalink)  
Antiguo 21/04/2003, 12:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No sé muy bien a que te refieres .. pero en general .. puedes usar Arrays como nombre de tus variables de formulario. Para eso tienes que definir los campos de tu formulario tipo:

<input type="text" name="maquinas[]" value="si hace falta">

Con eso (maquinas[]) ahora será un array esa variable así que podras recorrer ese array con un bucle foreach por ejemplo:

Código PHP:
foreach ($_POST['maquinas'] as $valor){
   echo 
"Máquina: ".$valor."<br>";

Por supuesto .. ese <input ...> lo generarías con algun bucle o manualmente .. pero siempre respetando el [] en la parte del nombre para que quede como variable un ARRAY de indice automático (comenzando desde el 0 en incrementandose en una unidad cada vez que se llame ...).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 22/04/2003, 01:01
 
Fecha de Ingreso: febrero-2003
Mensajes: 93
Antigüedad: 21 años, 2 meses
Puntos: 0
Vale muchas gracias lo intentaré de esta forma tambien, pero en mi formulario cada campo name tiene el código de la máquina y luego lo necesito llevar a un archivo para que lo lea una aplicación por lo tanto una de las soluciones sería (sino me equivoco):

<input type="text" name="maquinas['Codigo_maquina']" value="si hace falta">

PD: Como vereis soy un poco novatillo en esto.
  #6 (permalink)  
Antiguo 22/04/2003, 12:07
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si vas a usar como indice del array el código de esa máquina .. lee el array con el bucle foreach() .. pero ahora necesitas de leer la "clave" (indice) del array tambien:

Código PHP:
foreach ($_POST['maquinas'] as $codigo=>$valor){
   echo 
"Máquina: ".$codigo." => ".$valor."<br>";

(cualquier otro poblema .. ves poniendo el código completo que uses; tanto de tus formularios como de tus scripts que hagas el proceso ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 22/04/2003, 13:27
 
Fecha de Ingreso: junio-2001
Ubicación: Cordoba, Argentina
Mensajes: 190
Antigüedad: 22 años, 10 meses
Puntos: 0
Mi respuesta no es directa a esta pregunta, pero sirve.
Es un pequeño script para debug de arrays recursivos. En este caso muestro toda las variables de session recursivamente (array adentro de arrays). Muestra las variables de session que en ese momento esten cargadas. Tambien sirve para cualquier array recursivo.
Espero sirva.. Saludos
listession.php

<?session_start();


echo "Listado de Variables de Sesion:<br><br><br>";
listsession($_SESSION);

function listsession($sub_array) {
static $prefijo;

foreach ($sub_array as $key => $valor ) {
$i++;

echo $prefijo.$i.") ".$key."=".$sub_array[$key]."<br>";
if (is_array($valor)){
$aux="&nbsp;&nbsp;&nbsp;".$prefijo.$i.".";
$aux2=$prefijo;
$prefijo=$aux;

listsession($valor);
$prefijo=$aux2;
}else{

}


}
$prefijo=$aux;


}


?>
__________________
Martin
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 15:22.