Foros del Web » Programando para Internet » PHP »

Como meter un foreach dentro de otro foreach??

Estas en el tema de Como meter un foreach dentro de otro foreach?? en el foro de PHP en Foros del Web. Hola, bueno no se, si se pueda pero necesito que me ayuden por favor, la cuestion es esta. Yo tengo una tabla de materiales en ...
  #1 (permalink)  
Antiguo 18/11/2008, 13:19
 
Fecha de Ingreso: octubre-2008
Mensajes: 101
Antigüedad: 15 años, 6 meses
Puntos: 1
Como meter un foreach dentro de otro foreach??

Hola, bueno no se, si se pueda pero necesito que me ayuden por favor, la cuestion es esta. Yo tengo una tabla de materiales en la cual hago un llamado normal a la base de datos y muestro todo su contenido con un while y con una table, pero a el final del codigo agrego un campo de texto en su forma de array, para que los usarios introduscan la cantidad deseada de cada material, pueden ver el codigo aqui:
Código PHP:
<? 

$db
="costos";
$tabla="materiales";
$conexion=mysql_connect("localhost","root") or die (mysql_error());
$db=mysql_select_db($db,$conexion) or die (mysql_error());
$sql="select * from $tabla ";
$result=mysql_query($sql,$conexion);
echo 
"<left><table  class='ewTable'>";
echo 
"<tr class='ewTableHeader'><th><font color=white>Codigo</th>";
echo 
"<th><font color=white>Equipo</th>";
echo 
"<th><font color=white>Unidad</th>";
echo 
"<th><font color=white>Precio</th>";
echo 
"<th><font color=white>Cantidad</th>";
while(
$row mysql_fetch_array($result))
{
//echo "<tr><td><input type ='text' size='5' maxlength='3' readonly= 'on' name='id[]' value ='".$row['id_material']."'</td>";
echo '<tr><td><font color=black>'.$row["id_material"].'</td>';
echo 
'<td><font color=black>'.$row["descripcion"].'</td>';
echo 
'<td><font color=black>'.$row["unidad"].'</td>';
echo 
'<td><font color=black>$'.$row["precio"].'</td>';
//Y así listas tus datos de la consulta
// Y de ultimo creas el text
echo "<td><input type ='text' size='5' maxlength='3' name='valores[]' value ='".$datos['id_material']."'</td>";
echo 
"</tr>";


echo 
"</table>" ;
?>
Y despues lo envio hacia otra pagina en la cual por medio de un foreach lo proceso, es decir hago el bucle y lo incerto en otra tabla:
Código PHP:
<?
foreach($_POST['valores'] as $datos){ 
$actividad=$_POST['actividad'] ;
$db="costos";
$tabla="materiales_actividad";
$conexion=mysql_connect("localhost","root") or die (mysql_error());
$db=mysql_select_db($db,$conexion) or die (mysql_error());
$sql="select * from $tabla ";
$result=mysql_query($sql,$conexion);
$sql="insert into $tabla(id_actividad,id_material,cantidad) values('$actividad','','$datos')";
$result=mysql_query($sql,$conexion) or die(mysql_error());

?>
Pero la cuestion es que necesito llevarme tambien el codigo del material, no solamente la cantidad y estaba pensando generar dos array, uno para la cantidad y el otro para el codigo del material, pero la cuestion es que no se si se puedan manejar dos foreach uno adentro del otro y si se puede que me expliquen como puedo yo hacer por favor y sino se puede como podria yo hacer para manejar esos dos valores e incertarlos en una tabla "x" a el mismo tiempo?

y es ahi que solicito de su ayuda.

desde ya gracias.

PD: Que buen foro!!!
  #2 (permalink)  
Antiguo 18/11/2008, 14:06
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 8 meses
Puntos: 105
Respuesta: Como meter un foreach dentro de otro foreach??

cual es el problema????

$a=array(1,2,3);
$b=array(4,5,6);
foreach($a as $v){
foreach($b as $k){
echo "$v-$k,";
}
echo "<br>";
}

//resultado:
1-4,1-5,1-6,
2-4,2-5,2-6,
3-4,3-5,3-6,

Suerte.
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #3 (permalink)  
Antiguo 18/11/2008, 15:33
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 16 años, 5 meses
Puntos: 25
Respuesta: Como meter un foreach dentro de otro foreach??

$conexion=mysql_connect("localhost","root") or die (mysql_error());
//esta in correcto.. te falta el password.

te recomendaria el uso de objetos para que asi evites codigo repetitivo como en este caso
las query y las coenxiones a la base de datos..

__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.
  #4 (permalink)  
Antiguo 18/11/2008, 16:02
 
Fecha de Ingreso: octubre-2008
Mensajes: 101
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Como meter un foreach dentro de otro foreach??

Hola que tal, he hecho como tu me dices masterojitos, me funciona, pero solamente tengo dos problemas que tengo.

1- Es que a la hora de la incercion me la hace dos veces, es decir que si yo de deseo dos piezas de hierro y el codigo es h0001 me la incerta 2 veces en la tabla:

hierro h0001
hierro h0001

2- Y el segundo problema es que a la hora de hacerme el insert con el primer me los incerta de mayor a menor y no en el orden en que lo envie, es decir que si deseo 3 clavos y 5 desarmadores y los envie en ese orden, entonces me les da vuelta y me quedan 5 y 3, no por que por lo demas estamos bien

Aqui dejo el codigo para que por favor me digan en que estoy fallando.
Código PHP:
<?
foreach($_POST['valores'] as $datos){ 
foreach(
$_POST['id'] as $id){
$actividad=$_POST['actividad'] ;
$db="costos";
$tabla="materiales_actividad";
$conexion=mysql_connect("localhost","root") or die (mysql_error());
$db=mysql_select_db($db,$conexion) or die (mysql_error());
$sql="select * from $tabla ";
$result=mysql_query($sql,$conexion);
$sql="insert into $tabla(id_actividad,id_material,cantidad) values('$actividad','$id','$datos')";
$result=mysql_query($sql,$conexion) or die(mysql_error());


?>
  #5 (permalink)  
Antiguo 18/11/2008, 22:35
Avatar de masterojitos  
Fecha de Ingreso: julio-2008
Ubicación: Lima Callao Chucuito
Mensajes: 1.931
Antigüedad: 15 años, 8 meses
Puntos: 105
Respuesta: Como meter un foreach dentro de otro foreach??

para tu primer problema podria resolverlo con tablas Maestro-Detalle
y para el segundo, ps antes de recorrer el array, ordenalo: sort($_POST['valores']);
y lo mismo para el otro array.

suerte.
__________________
Atte. MasterOjitos :ojotes:
Todo sobre Programación Web
Las ultimas tendencias en Efectos y Recursos Web: MasterOjitos Blog
  #6 (permalink)  
Antiguo 19/11/2008, 03:35
Avatar de Deschamps  
Fecha de Ingreso: octubre-2008
Mensajes: 257
Antigüedad: 15 años, 6 meses
Puntos: 8
Respuesta: Como meter un foreach dentro de otro foreach??

Cita:
Iniciado por head777 Ver Mensaje
Código PHP:
(...)
// Y de ultimo creas el text
echo "<td><input type ='text' size='5' maxlength='3' name='valores[]' value ='".$datos['id_material']."'</td>";
echo 
"</tr>";
(..) 
Y despues lo envio hacia otra pagina en la cual por medio de un foreach lo proceso, es decir hago el bucle y lo incerto en otra tabla (..) Pero la cuestion es que necesito llevarme tambien el codigo del material, no solamente la cantidad y estaba pensando generar dos array, uno para la cantidad y el otro para el codigo del material, pero la cuestion es que no se si se puedan manejar dos foreach uno adentro del otro (..)
Yo creo que te estás complicando la vida. ¿Qué problema hay si añades al formulario inicial un campo 'hidden' materiales[] (del mismo modo que ya lo haces para los valores[]) y asignas en cada caso como valor el 'id_material' que corresponda? Así propagas dentro de $_POST tanto cantidades como las ids de los materiales correspondientes (según su posición en el array).

Un saludo.
  #7 (permalink)  
Antiguo 19/11/2008, 22:15
 
Fecha de Ingreso: octubre-2008
Mensajes: 101
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Como meter un foreach dentro de otro foreach??

Buenas noches y quiero dar las gracias principalmente a Dios todopoderoso que me ha permitido encontrar la solucion a mi problema y despues agradecer a ustedes por su apoyo y por tener tan magnifico foro, ya que como he dicho ya solucione mi problema con la incercion de dos array al mismo tiempo a la base de datos y aqui os dejo el codigo por que yo se que a alguien mas le servira.
Código PHP:
<?

$i
=0;
foreach(
$_POST['valores'] as $datos)
{
$actividad=$_POST['actividad'] ;
$arrUnd[$i]=$datos;
$i++;
}
$i=0;
foreach(
$_POST['id'] as $id)
{
if (
$id <> "" && $arrUnd[$i]<>"")
{
$db="costos";    
$tabla="materiales_actividad";
$conexion=mysql_connect("localhost","root") or die (mysql_error());
$db=mysql_select_db($db,$conexion) or die (mysql_error());
$sql="select * from $tabla ";
$result=mysql_query($sql,$conexion);
$sql "insert into materiales_actividad (id_actividad,id_material,cantidad) values ('".$actividad."','".$id."', '".$arrUnd[$i]."')";
$result mysql_query("$sql") or die(mysql_error());
}
$i++;
}
?>
PD: Juan 15:7

Última edición por head777; 20/11/2008 a las 00:17
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 20:06.