Foros del Web » Programando para Internet » PHP »

error update diferentes registros array

Estas en el tema de error update diferentes registros array en el foro de PHP en Foros del Web. Hola estoy intentando hacer un multiple update recojiendo los valores id(clave principal) tipo array y luego mediante foreach iniciar un bucle e ir actualizando uno ...
  #1 (permalink)  
Antiguo 14/11/2011, 20:03
Avatar de midpunto  
Fecha de Ingreso: enero-2004
Ubicación: España Palma de mallorca
Mensajes: 118
Antigüedad: 20 años, 3 meses
Puntos: 0
Pregunta error update diferentes registros array

Hola estoy intentando hacer un multiple update recojiendo los valores id(clave principal) tipo array y luego mediante foreach iniciar un bucle e ir actualizando uno a uno todos los registros, este es el codigo que estoy usando, pero me tira este error "Invalid argument supplied for foreach()" y no puedo entender que es lo que estoy haciendo mal:

foreach ($_POST['nomes_mp'] as $id => $valor){
echo $id." -> ".$valor."<br>";

$updateSQL = "UPDATE menupub SET nomes_mp='$valor' WHERE id_mp='$id'";


mysql_select_db($database_conecta, $conecta);
$Result1 = mysql_query($updateSQL, $conecta) or die(mysql_error());
}}

Formulario de donde probienen los datos:
<form id="form1" name="form1" method="POST" action="<?php echo $editFormAction; ?>">
<?php do { ?>
<table width="276" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="276"><label for="nomes_mp"></label>
<input name="nomes_mp<?php echo $row_menu['id_mp']; ?>" type="text" id="nomes_mp" value="<?php echo $row_menu['nomes_mp']; ?>" />
<input type="hidden" name="id" id="id" /></td>
</tr>
</table>
<?php } while ($row_menu = mysql_fetch_assoc($menu)); ?>
<input type="submit" name="button" id="button" value="Submit" />
<input type="hidden" name="MM_update" value="form1" />
</form>

Alguna idea?? gracias de antemano.
  #2 (permalink)  
Antiguo 14/11/2011, 22:50
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: error update diferentes registros array

para eso se usa...
Código PHP:
Ver original
  1. <input name="nomes_mp[]" type="text" id="nomes_mp" value="<?php echo $row_menu['nomes_mp']; ?>" />

Y lo recoges tal cual lo tienes en tu código
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #3 (permalink)  
Antiguo 15/11/2011, 04:19
Avatar de midpunto  
Fecha de Ingreso: enero-2004
Ubicación: España Palma de mallorca
Mensajes: 118
Antigüedad: 20 años, 3 meses
Puntos: 0
Información Respuesta: error update diferentes registros array

Hola y gracias por responder, pero creo que es un poco mas complicado que poner este valor: <input name="id[]..., mediante esto no te enumera cada uno de los campos del formulario, entre estos: [] tendras que poner una variable no? y esta variable debe ser el resultado de contar y así asignarle un número a cada uno de los campos del form.. sin animos de ofender y se que muchos pierden su valioso tiempo contestando un tiempo que a veces no tenemos... pero he visto este tipo de respuestas una y otra vez sin aportar ninguna solución, yo por mi parte aporto mi granito de arena y contribuyo con un poco de mi tiempo también y por suerte he podido resolverlo y paso a "explicar" como:

En el siguiente ejemplo realizo una consulta mysql y mediante esta armo un formulario de forma dinamica con la finalidad de poder actualizar el camo "nom" de cada uno de los registros, asignandole a cada uno de estos campos pertenecientes a una linea de registro un numero, este número es el resultado de ir sumando cada resultado que nos arroja la consulta:
<?php//consulta a la BD
$query_menu = "SELECT * FROM menupub WHERE tipo_mp = '2' ORDER BY orden_mp ASC";
?>
//Armo el formulario e inicio la variable $i, asu vez esta variable la ponemos en cada(name) de los campos del formulario"name=nombre[$i]//

form action="acciones.php" id="form1" name="form1" method="POST">
<?php $i = 1; do { //comienzo la variable $i en 1?>
<input name="nomes_mp<?php echo $i; ?>" type="text" id="nomes_mp" value="<?php echo $row_menu['nomes_mp']; ?>" />
<input name="id<?php echo $i; ?>" type="hidden" id="id" value="<?php echo $row_menu['id_mp']; ?>" />
<?php $i++; } while ($row_menu = mysql_fetch_assoc($menu));// cuento la variable $i y fin del Bucle ?>

Luego recojo los datos y realizo las actualizaciones
<?php
for ($i=1;$i<=10;$i++){ //los datos losproceso de a 10
//para cada uno de los elementos que puede haber en el formulario
if (isset($_POST["id".$i])){
//es que este registro estaba en el formulario
$id = $_POST["id".$i];
$nomes = $_POST["nomes_mp".$i];

$updateSQL = "UPDATE menupub SET nomes_mp='$nomes' WHERE id_mp='$id'";
mysql_select_db($database_conecta, $conecta);
$Result1 = mysql_query($updateSQL, $conecta) or die(mysql_error());
}
}//lfin?>
Para el que le sirva, esto funciona a la perfección testeado, vaaarias veces. Saludos.
  #4 (permalink)  
Antiguo 15/11/2011, 05:12
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: error update diferentes registros array

Sin ánimos de ofender... el que esta equivocado eres tu, el código que muestras no tiene nada que ver con lo que preguntaste en un comienzo, que te recuerdo que era enviar el formulario como un arreglo (array) para después leerlo dentro de un foreach no? de hecho lo intentaste y te arrojo un error....

Cita:
este es el codigo que estoy usando, pero me tira este error "Invalid argument supplied for foreach()"
Para tu información el error es porque $_POST['nomes_mp'] no es un array, es un string,si hubieras dicho que es necesario dar un name diferente a cada input te hubiera dado el ejemplo que diste, la solución que te, di el navegador envía "nomes_mp" como un arreglo, conteniendo todos los valores de los campos que tengan como "name" "nomes_mp[]" para después leerlos como tenias el código en un comienzo...

Código PHP:
Ver original
  1. //Formulario.....
  2. for($i=0; $i<100; $i++) {
  3. echo '<input type="text" name="nomes_mp[]" value="valor: '.$i.'">';
  4. }
  5.  
  6. //y luego lo recoges simplemente....
  7. foreach($_POST['nomes_mp'] as $item) {
  8. echo 'item con valor: '. $item;
  9. }

Ahora, por ultimo, la razón por la que doy esta explicación es para aclarar que la respuesta que di es tan valida como la que diste y no confundir a los usuarios que apenas comienzan en PHP
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #5 (permalink)  
Antiguo 15/11/2011, 06:07
Avatar de midpunto  
Fecha de Ingreso: enero-2004
Ubicación: España Palma de mallorca
Mensajes: 118
Antigüedad: 20 años, 3 meses
Puntos: 0
Exclamación Respuesta: error update diferentes registros array

Cita:
Iniciado por Nemutagk Ver Mensaje
Sin ánimos de ofender... el que esta equivocado eres tu, el código que muestras no tiene nada que ver con lo que preguntaste en un comienzo, que te recuerdo que era enviar el formulario como un arreglo (array) para después leerlo dentro de un foreach no? de hecho lo intentaste y te arrojo un error....
Punto 1 yo equivocado no estoy y tampoco he dicho que tu lo estuvieras.., aporte una solución y creo.. que es bastante didactica? y si, tiene que ver con lo que quería hacer.

Punto 2 Haciendo lo que tu me indicate en tu primer respuesta no solucione absolutamnete nada.

Punto 3 como tu dices "para no confundir" a veces es mejor explicarse bien no crees? ya que no tiene punto de comparación lo que explicaste en tu primera respuesta con lo que has explicado en tu segunda respuesta, que entre otras cosas me parece correcto. Cosa que para alguien que recien empieza le puede ser de gran ayuda.

saludos.

Última edición por midpunto; 15/11/2011 a las 06:13

Etiquetas: formulario, mysql, registro, registros, sql, update
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:56.