Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Pasar por POST con un FOREACH

Estas en el tema de Pasar por POST con un FOREACH en el foro de PHP en Foros del Web. Buenas a todos que tal? Miren, tengo un foreach que muestra por pantalla articulos de un BD, quiero que el cliente en cada linea pueda ...
  #1 (permalink)  
Antiguo 29/02/2016, 02:24
 
Fecha de Ingreso: octubre-2015
Mensajes: 29
Antigüedad: 8 años, 6 meses
Puntos: 0
Pregunta Pasar por POST con un FOREACH

Buenas a todos que tal?
Miren, tengo un foreach que muestra por pantalla articulos de un BD, quiero que el cliente en cada linea pueda modificar el numero de articulos.
Pero tal y como lo tengo ahora solo me guarda la ultima linea de ese foreach:

Código PHP:
Ver original
  1. <?php
  2. require 'db2.php';
  3. $sql2 = 'select * from OTMaterialesRetirados WHERE OTID =  ' . $_GET['OTID'].' ';
  4. foreach ($conn->query($sql2) as $row):?>  
  5.    ...
  6.       <input type="number" name="CantidadEntregadaAlCliente" id="CantidadEntregadaAlCliente" min="0" max="<?php echo FLOOR($row['CantidadRetirada']);?>" value="<?php echo FLOOR($row['CantidadEntregadaAlCliente']);?>"></input>
  7.  
  8. <?php endforeach?>
Nose si a ese "name" ponerle esto: linea[<?php $row['CantidadEntregadaAlCliente']?>] para que pase cada linea.
Y en la pagina de guardado tengo esto pero nose como ponerlo bien:

Código PHP:
Ver original
  1. $OTMaterialRetiradoID=$_POST['OTMaterialRetiradoID'];
  2. $CantidadEntregadaAlCliente=$_POST['CantidadEntregadaAlCliente'];
  3. $query2 = sprintf("UPDATE OTMaterialesRetirados
  4. SET CantidadEntregadaAlCliente = '" . $CantidadEntregadaAlCliente . "' WHERE OTMaterialRetiradoID = '" . $OTMaterialRetiradoID . "'");
  5.  $conn->query($query2);

Tal como lo tengo solo me guarda la ultima linea del foreach :(
Ayuda porfavor!. Graciass

Última edición por dune1993; 29/02/2016 a las 04:16
  #2 (permalink)  
Antiguo 29/02/2016, 05:12
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 10 meses
Puntos: 263
Respuesta: Pasar por POST con un FOREACH

coloca esto [] en el nombre del aimput para que el envio sea mediante un array: de esa manera puedes enviar todos los inputs que sean editados

Código HTML:
Ver original
  1. <input type="number" name="CantidadEntregadaAlCliente[]" id="CantidadEntregadaAlCliente" min="0" max="<?php echo FLOOR($row['CantidadRetirada']);?>" value="<?php echo FLOOR($row['CantidadEntregadaAlCliente']);?>"></input>
__________________
[email protected]
HITCEL
  #3 (permalink)  
Antiguo 29/02/2016, 05:42
 
Fecha de Ingreso: octubre-2015
Mensajes: 29
Antigüedad: 8 años, 6 meses
Puntos: 0
Respuesta: Pasar por POST con un FOREACH

Hola xfxstudios gracias por responder.
Vale en la lista lo paso asi:
Código PHP:
Ver original
  1. <input type="number" name="CantidadEntregadaAlCliente[]" id="CantidadEntregadaAlCliente" min="0" max="<?php echo FLOOR($row['CantidadRetirada']);?>" value="<?php echo FLOOR($row['CantidadEntregadaAlCliente']);?>"></input>

y en la pagina para guardar seria asi?
Código PHP:
Ver original
  1. $CantidadEntregadaAlCliente=$_POST['CantidadEntregadaAlCliente'];
  2. foreach($_POST['CantidadEntregadaAlCliente'] as $CantidadEntregadaAlCliente)
  3. {
  4.   $query2 = sprintf("UPDATE OTMaterialesRetirados
  5. SET CantidadEntregadaAlCliente = '" . $CantidadEntregadaAlCliente[] . "' WHERE OTMaterialRetiradoID = '" . $OTMaterialRetiradoID . "'");
  6.  $conn->query($query2);
  7. }
(seguro que no porque no me guarda :( )
  #4 (permalink)  
Antiguo 29/02/2016, 07:47
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Pasar por POST con un FOREACH

La sintaxis del [] sólo es para el formulario, no para el código PHP.
Código PHP:
Ver original
  1. // MAL
  2. $CantidadEntregadaAlCliente[]
  3.  
  4. // BIEN
  5. $CantidadEntregadaAlCliente
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 01/03/2016, 01:48
 
Fecha de Ingreso: octubre-2015
Mensajes: 29
Antigüedad: 8 años, 6 meses
Puntos: 0
Respuesta: Pasar por POST con un FOREACH

Hola pateketrueke.

Código PHP:
Ver original
  1. $CantidadEntregadaAlCliente=$_POST['CantidadEntregadaAlCliente'];
  2.     foreach($_POST['CantidadEntregadaAlCliente'] as $CantidadEntregadaAlCliente)
  3.     {
  4.       $query2 = sprintf("UPDATE OTMaterialesRetirados
  5.     SET CantidadEntregadaAlCliente = '" . $CantidadEntregadaAlCliente . "' WHERE OTMaterialRetiradoID = '" . $OTMaterialRetiradoID . "'");
  6.      $conn->query($query2);
  7.     }

Se me escapa algo...
  #6 (permalink)  
Antiguo 01/03/2016, 06:34
 
Fecha de Ingreso: octubre-2015
Mensajes: 29
Antigüedad: 8 años, 6 meses
Puntos: 0
Pregunta Respuesta: Pasar por POST con un FOREACH

Hola chicos llego aqui:

Mirad le paso esto:
Código PHP:
Ver original
  1. <input type="number" readonly name="OTMaterialRetiradoID" id="OTMaterialRetiradoID"  value="<?php echo $row['OTMaterialRetiradoID'];?>"></input>
  2.           <input type="number" name="CantidadEntregadaAlCliente[]" id="CantidadEntregadaAlCliente"  value="<?php echo FLOOR($row['CantidadEntregadaAlCliente']);?>"></input></td>
y lo guardo aqui:
Código PHP:
Ver original
  1. $OTMaterialRetiradoID=$_POST['OTMaterialRetiradoID'];
  2. $CantidadEntregadaAlCliente=$_POST['CantidadEntregadaAlCliente'];
  3. foreach($CantidadEntregadaAlCliente as $_entregado)
  4. {  
  5.  $query2 = sprintf("UPDATE OTMaterialesRetirados
  6. SET CantidadEntregadaAlCliente = '" . $_entregado . "' WHERE OTMaterialRetiradoID = '" . $OTMaterialRetiradoID . "'");
  7.  $conn->query($query2);
  8. }

tan solo me guarda la ultima linea :(
Ayuda porfa.
  #7 (permalink)  
Antiguo 01/03/2016, 06:47
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Pasar por POST con un FOREACH

Antes de continuar, estaría bien que trates de explicar que es lo que tratas/quieres enviar desde el formulario.

Si solo necesitas pasar pasar un valor y no un conjunto de valores, no hay ninguna necesidad de utilizar un array y por tanto tampoco de usar foreach.

Ejemplos:
Formulario 1 dato por variable, múltiples variables
Código HTML:
Ver original
  1. <form ... >
  2. <input type="text" name="variable1" />
  3. <input type="text" name="variable2" />
  4. <input type="text" name="variable3" />
  5. Otros input...
El formulario generará 3 variables ($_POST['variable1'],$_POST['variable2'],$_POST['variable3']) y cada una contendrá el valor introducido como un String.

Formulario array de datos
Código HTML:
Ver original
  1. <form ... >
  2. <input type="text" name="variable[]" />
  3. <input type="text" name="variable[]" />
  4. <input type="text" name="variable[]" />
  5. Otros input...
El formulario generará un array ( $_POST['variable'] ) de 3 elementos.
  #8 (permalink)  
Antiguo 01/03/2016, 09:09
 
Fecha de Ingreso: octubre-2015
Mensajes: 29
Antigüedad: 8 años, 6 meses
Puntos: 0
Pregunta Respuesta: Pasar por POST con un FOREACH

Cita:
Iniciado por xerifandtomas Ver Mensaje
Antes de continuar, estaría bien que trates de explicar que es lo que tratas/quieres enviar desde el formulario.

Si solo necesitas pasar pasar un valor y no un conjunto de valores, no hay ninguna necesidad de utilizar un array y por tanto tampoco de usar foreach.

Ejemplos:
Formulario 1 dato por variable, múltiples variables
Código HTML:
Ver original
  1. <form ... >
  2. <input type="text" name="variable1" />
  3. <input type="text" name="variable2" />
  4. <input type="text" name="variable3" />
  5. Otros input...
El formulario generará 3 variables ($_POST['variable1'],$_POST['variable2'],$_POST['variable3']) y cada una contendrá el valor introducido como un String.

Formulario array de datos
Código HTML:
Ver original
  1. <form ... >
  2. <input type="text" name="variable[]" />
  3. <input type="text" name="variable[]" />
  4. <input type="text" name="variable[]" />
  5. Otros input...
El formulario generará un array ( $_POST['variable'] ) de 3 elementos.
Hola xerifandtomas, mira tengo un formulario que mediante un foreach saco un listado de materiales,cada linea con su id,descripcion... y quiero que en cada linea el usuario modifique el numero de materiales.
Este es el formulario(simplificado)
Código PHP:
Ver original
  1. <form action="guardardevolvermateriales.php" method="POST" >
  2. $sql2 = 'select * from OTMaterialesRetirados WHERE OTID =  ' . $_GET['OTID'].' ';
  3. foreach ($conn->query($sql2) as $row):?>  
  4. <input type="number" readonly name="OTMaterialRetiradoID"   value="<?php echo $row['OTMaterialRetiradoID'];?>"></input>
  5.  
  6. <input type="number" name="CantidadEntregadaAlCliente[]" value="<?php echo FLOOR($row['CantidadEntregadaAlCliente']);?>"></input></td>
  7.  </tr>
  8. <?php endforeach?> 
  9. </form>
y esta es la página de guardado:
Código PHP:
Ver original
  1. ...
  2. $OTMaterialRetiradoID=$_POST['OTMaterialRetiradoID'];
  3. $CantidadEntregadaAlCliente=$_POST['CantidadEntregadaAlCliente'];
  4. foreach($CantidadEntregadaAlCliente as $_entregado)
  5. {  
  6.  $query2 = sprintf("UPDATE OTMaterialesRetirados
  7. SET CantidadEntregadaAlCliente = '" . $_entregado . "' WHERE OTMaterialRetiradoID = '" . $OTMaterialRetiradoID . "'");
  8.  $conn->query($query2);
  9. }
Tal y como está, tan solo me guarda correctamente la ultima linea del listado, no por cada id, nose donde puedo fallar..
Gracias un saludo.
  #9 (permalink)  
Antiguo 01/03/2016, 18:15
 
Fecha de Ingreso: septiembre-2008
Mensajes: 350
Antigüedad: 15 años, 7 meses
Puntos: 31
Respuesta: Pasar por POST con un FOREACH

para ser sincero lo le entiendo a tu código php

pero según lo que dice:

Código:
Tal y como está, tan solo me guarda correctamente la ultima linea del listado,
prueba este foreach en un tes.php
Código PHP:
<?php 
$arr 
= array("uno""dos""tres");
$valor '';
foreach (
$arr as $value):
$valor "Value: $value<br />\n";
endforeach;
echo 
$valor;
?>
ahora prueba este otro:
Código PHP:
<?php 
$arr 
= array("uno""dos""tres");
$valor '';
foreach (
$arr as $value):
$valor .= "Value: $value<br />\n";
endforeach;
echo 
$valor;
?>
lo unico que los diferencia es esto: .= dentro del foreach

quizás eso te ayude en algo
__________________
╬-----╬
║☺₧☻║
╬-----╬
  #10 (permalink)  
Antiguo 02/03/2016, 03:08
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Pasar por POST con un FOREACH

supongo que lo que intentas decirnos que solo te modifica un material retirado, puesto que solo pasas el id de uno

echale un vistazo a lo siguiente y mira de implementarlo
Código PHP:
Ver original
  1. <!-- Utilizamos OTMaterialRetiradoID como claves del array y CantidadEntregadaAlCliente como valor -->
  2. <input type="number" name="CantidadEntregadaAlCliente[<?php echo $row['OTMaterialRetiradoID'];?>]" value="<?php echo FLOOR($row['CantidadEntregadaAlCliente']);?>" />
  3. <?php
  4. /* recuperamos el array CantidadEntregadaAlCliente */
  5. $CantidadEntregadaAlCliente=$_POST['CantidadEntregadaAlCliente'];
  6. /* recorremos el array */
  7. foreach($CantidadEntregadaAlCliente as $key => $value){
  8.  $query2 = sprintf("UPDATE OTMaterialesRetirados SET CantidadEntregadaAlCliente = '" . $value . "' WHERE OTMaterialRetiradoID = '" . $key . "'");
  9.  $conn->query($query2);
  10. }
  11.  
  12. ?>
  #11 (permalink)  
Antiguo 02/03/2016, 06:10
 
Fecha de Ingreso: octubre-2015
Mensajes: 29
Antigüedad: 8 años, 6 meses
Puntos: 0
Respuesta: Pasar por POST con un FOREACH

Cita:
Iniciado por xerifandtomas Ver Mensaje
supongo que lo que intentas decirnos que solo te modifica un material retirado, puesto que solo pasas el id de uno

echale un vistazo a lo siguiente y mira de implementarlo
Código PHP:
Ver original
  1. <!-- Utilizamos OTMaterialRetiradoID como claves del array y CantidadEntregadaAlCliente como valor -->
  2. <input type="number" name="CantidadEntregadaAlCliente[<?php echo $row['OTMaterialRetiradoID'];?>]" value="<?php echo FLOOR($row['CantidadEntregadaAlCliente']);?>" />
  3. <?php
  4. /* recuperamos el array CantidadEntregadaAlCliente */
  5. $CantidadEntregadaAlCliente=$_POST['CantidadEntregadaAlCliente'];
  6. /* recorremos el array */
  7. foreach($CantidadEntregadaAlCliente as $key => $value){
  8.  $query2 = sprintf("UPDATE OTMaterialesRetirados SET CantidadEntregadaAlCliente = '" . $value . "' WHERE OTMaterialRetiradoID = '" . $key . "'");
  9.  $conn->query($query2);
  10. }
  11.  
  12. ?>
Hola xerifandtomas ya lo solucioné de otra manera, aunque de esta también funciona. MUCHAS GRACIAS!!

Etiquetas: foreach, form, input, post
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 17:06.