Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Foreach solo lee primera fila

Estas en el tema de Foreach solo lee primera fila en el foro de PHP en Foros del Web. Hola a todos de nuevo, sigo trabajando en un proyecto que me ha dado varias dudas (algunas resueltas aquí) pues mi conocimiento está en desarrollo ...
  #1 (permalink)  
Antiguo 05/08/2014, 09:42
Avatar de Jlopez2014  
Fecha de Ingreso: julio-2014
Ubicación: Barranquilla
Mensajes: 154
Antigüedad: 10 años, 4 meses
Puntos: 0
Exclamación Foreach solo lee primera fila

Hola a todos de nuevo, sigo trabajando en un proyecto que me ha dado varias dudas (algunas resueltas aquí) pues mi conocimiento está en desarrollo y estoy trabajando con lo que se y he aprendido en el proceso... esta es mi duda:

Gracias a la colaboración de un participante de la web logré estructurar lo siguiente para que de una tabla que se forma de los datos consultados de una BD luego se mande datos a otra(por decir así), asi traigo los datos:

Código PHP:
Ver original
  1. <?php
  2. $sql="
  3. SELECT MAX(cotizaciones.nocotizacion), cotizaciones.idproducto, cotizaciones.cantidad, cotizaciones.observaciones
  4. FROM cotizaciones
  5. INNER JOIN pedidos
  6. GROUP BY cotizaciones.idproducto";
  7.         $cs=mysql_query($sql,$cn);
  8.         echo"<center>
  9. <table border='3'>
  10. <tr>
  11. <td>Desc. Producto</td>
  12. <td>Cantidad Cotizada</td>
  13. <td>Cantidad Solicitada</td>
  14. <td>Observaciones</td>
  15. </tr>";
  16.         while($resul=mysql_fetch_array($cs)){
  17.             $var=$resul[0];
  18.             $var1=$resul[1];
  19.             $var2=$resul[2];
  20.             $var3=$resul[3];
  21.            
  22.            
  23.             echo "<tr>
  24. <td><input name='txtnopro[]' type='text'  value='$var1' size='15' readonly/></td>
  25. <td><input name='txtcotiz[]' type='text'  value='$var2' size='15' readonly/>
  26. <td><input name='txtcantidad[]' type='text'  value='' size='15'/></td>
  27. <td><input name='txtobs[]' type='text'  value='' size='15'/></td>
  28.  
  29.  
  30. </tr>";
  31.             }
  32.            
  33.             echo "</table>
  34. </center>";
  35. ?>

y asi coloque para que se inserten por medio del foreach pero nada, solo toma la primera:

Código PHP:
Ver original
  1. if($btn=="Agregar"){
  2.         foreach($_POST['txtnopedido'] as $key => $nopedido) {
  3.         $nopro = $_POST['txtnopro'][$key];
  4.     $cantidad = $_POST['txtcantidad'][$key];
  5.     $obs = $_POST['txtobs'][$key];
  6.        
  7.        
  8.        
  9.         $sql="insert into contenidopedido values ('$nopedido','$nopro','$cantidad','$obs')";
  10.        
  11.         $cs=mysql_query($sql,$cn);
  12.         echo "<script> alert('Se inserto correctamente el pedido');</script>";
  13.        
  14. }
  15.         }

NOTA: txtnopedido no se encuentra en la tabla de la consulta pero si esta en el formulario y de alli se toma la id del pedido... GRACIAS! se que esto no es tan complejo para ustedes aunque pareciera que es bastante... Feliz día!
  #2 (permalink)  
Antiguo 05/08/2014, 17:35
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Foreach solo lee primera fila

Antes de comenzar la inserción revisa lo que estás recibiendo del formulario:

Código PHP:
Ver original
  1. var_dump($_POST);

Si tienes duda de como interpretar lo que obtengas, cópialo y pégalo aquí.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 06/08/2014, 00:56
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Foreach solo lee primera fila

1) No veo que uses a esto: MAX(cotizaciones.nocotizacion), quizas podrias eliminarlo de la consulta.

2) txtnopedido es un campo unico, es decir, es un valor escalar no un array, por eso no puedes recorrerlo y se ejecuta una sola vez, lo que debes hacer es recorrer uno de los campos que sea array, es decir:
Código PHP:
Ver original
  1. $nopedido = $_POST['txtnopedido'];
  2.  
  3. foreach($_POST['txtnopro'] as $key => $nopro)
  4. {
  5.     $cantidad = $_POST['txtcantidad'][$key];
  6.     $obs = $_POST['txtobs'][$key];
  7.     //...
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #4 (permalink)  
Antiguo 08/08/2014, 06:55
Avatar de Jlopez2014  
Fecha de Ingreso: julio-2014
Ubicación: Barranquilla
Mensajes: 154
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Foreach solo lee primera fila

array(7) { ["txtnopedido"]=> array(1) { [0]=> string(3) "112" } ["txtpro"]=> string(0) "" ["txtnopro"]=> array(2) { [0]=> string(7) "andamio" [1]=> string(17) "laminas metalicas" } ["txtcotiz"]=> array(2) { [0]=> string(1) "2" [1]=> string(2) "12" } ["txtcantidad"]=> array(2) { [0]=> string(1) "2" [1]=> string(1) "2" } ["txtobs"]=> array(2) { [0]=> string(7) "Ninguna" [1]=> string(7) "Ninguna" } ["btn1"]=> string(7) "Agregar" }

esto es lo que arroja con el DUMP... aun pese a que use la recomendacion de NSD, ahora ni inserta la primera fila...
  #5 (permalink)  
Antiguo 08/08/2014, 11:25
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Foreach solo lee primera fila

El problema es que estas definiendo a txtnopedido como un array y es un campo unico, seguramente el name (que por cierto, no mostraste asi que estoy adivinando) lo debes tener asi: name="txtnopedido[]" lo cual esta mal debes ponerlo asi: name="txtnopedido"
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #6 (permalink)  
Antiguo 08/08/2014, 12:47
Avatar de Jlopez2014  
Fecha de Ingreso: julio-2014
Ubicación: Barranquilla
Mensajes: 154
Antigüedad: 10 años, 4 meses
Puntos: 0
De acuerdo Respuesta: Foreach solo lee primera fila

NSD tienes toda la razón, cuando vi ese detalle la linea de codigos estaba diferente y por eso cuando la tenia asi de nuevo no me percaté de ello... muchas gracias me haz salvado el día!!!... Grande NSD!

Etiquetas: bucle, foreach, mysql
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:18.