Foros del Web » Programando para Internet » PHP »

foreach anidados

Estas en el tema de foreach anidados en el foro de PHP en Foros del Web. hola foro pues tengo una duda tengo una tabla que se llena con un for, por ejemplo el usuario decide cuantas columnas quiere que tenga ...
  #1 (permalink)  
Antiguo 18/08/2005, 08:01
Avatar de The_omars  
Fecha de Ingreso: marzo-2004
Mensajes: 271
Antigüedad: 20 años, 1 mes
Puntos: 0
foreach anidados

hola foro pues tengo una duda

tengo una tabla que se llena con un for, por ejemplo el usuario decide cuantas columnas quiere que tenga la tabla y luego las llena

el problema que cuando llena la tabla generada diamicamente no me toma todos los datos ejemplo:

asi lleno la tabla:

$v es la cantidad de columnas que quiere el usuario

<? for($i=0;$i<$v;$i++){?>
<? echo "<tr><input type='text' name=cantidad[]><td><input type='text' name=unidad[]>
<? } ?>


ahora los cacho con dos foreach


foreach($_POST['cantidad'] as $cantidad){
echo $cantidad;

foreach($_POST['unidad'] as $unidad){
echo $unidad;

}
break;
}

en el primero me toma todos pero en el segundo se repite la primera columna

ahora el break me sirve para que me no me recorra de mas y me salga el numero exacto de columnas
  #2 (permalink)  
Antiguo 18/08/2005, 08:37
 
Fecha de Ingreso: diciembre-2003
Mensajes: 218
Antigüedad: 20 años, 4 meses
Puntos: 0
Prueba con el print_r a ver q te devuelve el $_POST

http://es2.php.net/print_r

Un saludo.
__________________
SymbianForever
SymbianForever.com, todo sobre y para tu symbian
aNieto2K | Themes para WordPress
De todo un poco
  #3 (permalink)  
Antiguo 18/08/2005, 09:08
 
Fecha de Ingreso: mayo-2004
Ubicación: Managua, Nicaragua
Mensajes: 281
Antigüedad: 19 años, 11 meses
Puntos: 0
Primero hay que aclarar las cosas, realmente lo que introduce el usuario es el número de registros osea fila que va a generarse, lo que tenes vos son dos columnas predefinidas que por lo que veo estan mal generadas.

En tu foreach como tenes el mismo número de filas para ambas columnas, podes hacer un count a tu arreglo $_POST, sino así mismo introdujendo valores al mismo tiempo para ambos, al menos así lo entendí, no se vos, si hay algo mal, redefiní mejor tu pregunta.
__________________
Julio Hernández
  #4 (permalink)  
Antiguo 18/08/2005, 09:48
Avatar de The_omars  
Fecha de Ingreso: marzo-2004
Mensajes: 271
Antigüedad: 20 años, 1 mes
Puntos: 0
esto es lo que sale

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
  #5 (permalink)  
Antiguo 18/08/2005, 11:23
Avatar de The_omars  
Fecha de Ingreso: marzo-2004
Mensajes: 271
Antigüedad: 20 años, 1 mes
Puntos: 0
nadie?

foreach($_POST['cantidad'] as $cantidad){


foreach($_POST['descripcion'] as $descripcion){

echo $cantidad;
echo "<br>";
echo $descripcion;

}

}


asi si me recibe todos los datos pero me los repite muchas veces yo lo que hacia era ponerle un break; en el ultimo foreach
  #6 (permalink)  
Antiguo 18/08/2005, 11:42
 
Fecha de Ingreso: mayo-2004
Ubicación: Managua, Nicaragua
Mensajes: 281
Antigüedad: 19 años, 11 meses
Puntos: 0
No sé si lo que vos buscas es algo como esto

foreach($_POST As $nombre => $valor){
if(ereg("(cantidad|descripcion)", $nombre))
echo $nombre." : ".$valor;
}
__________________
Julio Hernández
  #7 (permalink)  
Antiguo 18/08/2005, 11:53
Avatar de The_omars  
Fecha de Ingreso: marzo-2004
Mensajes: 271
Antigüedad: 20 años, 1 mes
Puntos: 0
gracias por responder pero lo que quiero hacer es que:

por medio de esta tabla dinamica

$v= a el numero de columnas que se quiera hacer la tabla

<? for($i=0;$i<$v;$i++){?>
<? echo "<tr><input type='text' name=cantidad[]><td><input type='text' name=unidad[]>
<? } ?>

el usuario la llene la tabla de las dimenciones que quiera y al momento de que lo guarde los tome con un foreach

foreach($_POST['cantidad'] as $cantidad){


foreach($_POST['descripcion'] as $desc){

$sql="insert into tabla_x values('','$cantidad','$desc')";
mysql_query=($conex,$sql) or die ("NO se pudo hacer la consulta");

}

}

lo que no me recorre es el segundo foreach anidado
  #8 (permalink)  
Antiguo 18/08/2005, 12:03
 
Fecha de Ingreso: mayo-2004
Ubicación: Managua, Nicaragua
Mensajes: 281
Antigüedad: 19 años, 11 meses
Puntos: 0
Hay varias cosas que no entiendo, según tu algoritmo, insertas varias n-renglones repetidos de la "cantidad" con sus diferentes descripciones y volves a insertar lo mismo para la siguiente cantidad. si hay un campo autonumérico, no es necesario que definas un campo con comillas simples.

Contanos mejor tu problema, por ejemplo, no sé si lo que queres es insertar para cada cantidad, descripción un registro en la base de datos según las filas.


Ahora, es mejor que lo pongas de esta manera:

<?php
for($i=0;$i<$v;$i++){
echo "<tr>
<td><input type=\"text\" name=\"cantidad[]\"></td>
<td><input type=\"text\" name=\"unidad[]\"></td>
</tr>";
} ?>
__________________
Julio Hernández
  #9 (permalink)  
Antiguo 18/08/2005, 12:23
Avatar de The_omars  
Fecha de Ingreso: marzo-2004
Mensajes: 271
Antigüedad: 20 años, 1 mes
Puntos: 0
exacto en la tabla vamos a suponer que la tengo asi

id_tabla auto_numerico
cantidad numerico
descripcion varchar

ahora

por cada columna que crea el usuario se va insertar en la tabla para despues hacer la consulta.

ahora mi problema es que al momento de tomar el valor primero de cantidad
y luego el de descripcion me genera un conflicto que me lo repite varias veces


ejemplo:

<? for($i=0;$i<$v;$i++){?>
<? echo "<tr><input type='text' name=cantidad[]><td><input type='text' name=unidad[]>
<? } ?>

imaginen que el usuario crea 3 columnas: esto se genera por medio de un for como esta el codigo de arriba


_______________________________
cantidad |descripcion
_______________________________
1 | Impresora
------------------------------------
1 | caja de dvds de 100
------------------------------------
2 | licencias de visual estudio
------------------------------------

al momento de guardarlo los tomo con un foreach

********************************---->alta.php
Código PHP:

foreach($_POST['cantidad'] as $cantidad){


foreach(
$_POST['descripcion'] as $desc){

$sql="insert into articulo values('$cantidad','$desc')";
mysql_query=($conex,$sql) or die ("NO se pudo hacer la consulta");

}


el problema que el resultado sale repetido 3 veces segun las columnas que puso el usuario

lo que yo hice fue poner un break; despues del foreach anidado:

Código PHP:
foreach($_POST['cantidad'] as $cantidad){


foreach(
$_POST['descripcion'] as $desc){

$sql="insert into articulo values('$cantidad','$desc')";
mysql_query=($conex,$sql) or die ("NO se pudo hacer la consulta");

}
break;


--------------------
asi se resolvio el problema de que se repetia pero solo me recorre el foreach interior y el exterior se queda en la primera parte

ahora solo estoy poniendo 1 foreacho anidado pero realmente con 3 mas pero como ejemplo eso basta
  #10 (permalink)  
Antiguo 18/08/2005, 12:44
 
Fecha de Ingreso: mayo-2004
Ubicación: Managua, Nicaragua
Mensajes: 281
Antigüedad: 19 años, 11 meses
Puntos: 0
for($i = 0; $i < count($_POST['cantidad']); $i++){
$sql="insert into articulo values('$_POST[cantidad][$i]','$_POST[desc][$i]')";
mysql_query=($conex,$sql) or die ("NO se pudo hacer la consulta");
}
__________________
Julio Hernández
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:19.