Update en multiples registros

En esta ocasión necesito tu ayuda con urgencia pues el tiempo me come y no doy con la solución a mi problema... Resulta que quiero hacer una actualización en múltiples registros sin embargo el código que tengo me actualiza todos los registros con el ultimo registro insertado, no se por que lo hace.
Mi código es el siguiente:
<?php
$array_debilidad= tiny_mce_marker
 POST['debilidad'];
foreach ($array_debilidad as $campo) {
}
if (!empty(tiny_mce_marker
 POST["fuerza"]))
{
$array_fuerza= tiny_mce_marker
 POST['fuerza'];
foreach ($array_fuerza as $campo1) {
$query = "UPDATE diagnostico SET fuerzas = '$campo1' WHERE anio='$anio_consulta' ";
$tabla1 = mysql_query($query) or die(mysql_error());
}
$queryobtenerdatos = "SELECT * FROM diagnostico WHERE anio='$anio_consulta'";
$resultqueryobtenerdatos = mysql_query($queryobtenerdatos) or die(mysql_error());
while ($unafiladedatos = mysql_fetch_assoc($resultqueryobtenerdatos)) {
echo $unafiladedatos['fuerzas']." ".$unafiladedatos['anio'];
echo"<br>";
}
}else{
echo "fallo al modificar";
}
?>
En verdad espero y me puedas ayudar pues ya estoy desesperada y de antemano

1 Respuesta

Respuesta
1
Se debería ver cómo es el formulario de donde salen los datos.
Es un problema típico que si los elementos del formulario se llaman igual para cada fila, sólo se muestran los valores de la última.
En el bucle de las filas del formulario debes cambiar el valor de name por el de una matriz. Por ejemplo:
<input name="tipo[]">
Esto hará que los recibas en forma de matriz luego:
echo $_POST["name"][0];
echo $_POST["name"][1];
Y que por lo tanto, puedas hacer un recorrido para guardar cada fila correctamente.
Pues muchas gracias por responder, y disculpa pero como que no te entendí muy bien en donde debo colocar la matriz.
Te explico lo que tengo: primero recibo los datos por medio de un arreglo en una consulta y luego los quiero cambiar con un update... con el código que te mande anteriormente
////////////////////////////////////CONSULTA///////////////////////////////////////////////////
<?php
$query = "SELECT fuerzas FROM diagnostico WHERE anio='$anio_consulta'";
$checkanio_consulta = mysql_query("SELECT fuerzas FROM diagnostico WHERE anio='$anio_consulta'");
$anio_consultas_exist = mysql_num_rows($checkanio_consulta);
if ($anio_consultas_exist>0) {
$tabla1= mysql_query($query) or die(mysql_error());
echo "<HTML><TABLE Border=10 CellPadding=5 ><TR>";
echo "<th bgcolor=#9966FF>FUERZAS</th></TR>";
while($fila = mysql_fetch_row($tabla1))
{
echo"
<tr>
";
echo "
<td><input type=\"text\" name=\"fuerza[]\" value=\"$fila[0]\" size=\"43\"/></br></td>
";
echo"
</tr>
";
};
}
else
{ echo '
<p> No tienes registrado diagnostico del año ', $anio_consulta;
}
?>
//////////////////////////////////////////ACTUALIZACION////////////////////////////////////////////////////////
<?php
if (!empty(tiny_mce_markerPOST["fuerza"]))
{
$array_fuerza= tiny_mce_markerPOST['fuerza'];
foreach ($array_fuerza as $campo1) {
$query = "UPDATE diagnostico SET fuerzas = '$campo1' WHERE anio='$anio_consulta' ";
$tabla1 = mysql_query($query) or die(mysql_error());
}
$queryobtenerdatos = "SELECT * FROM diagnostico WHERE anio='$anio_consulta'";
$resultqueryobtenerdatos = mysql_query($queryobtenerdatos) or die(mysql_error());
while ($unafiladedatos = mysql_fetch_assoc($resultqueryobtenerdatos)) {
echo $unafiladedatos['fuerzas']." ".$unafiladedatos['anio'];
echo"<br>";
En verdad espero y me puedas ayudar por que estoy atorada ya un buen tiempo con esto y como te mencione anteriormente el tiempo me come y no se como resolverlo, tal vez sea una tontería pero en verdad se me esta dificultando.
Creo que aquí tienes un problema de concepto: parece que en tu tabla tienes registros con el campo fuerza y que puede haber varios con el mismo anio_consulta.
Si no tienes otro campo que los diferencie, no los podrás actualizar.
Es decir, si tienes:
Fuerza Anio
10 2006
12 2006
15 2006
Y cambias los dos primeros a:
30 2006
32 2006
¿Cómo sabes los que has corregido para poder cambiar 'ese' en concreto?
El que ahora vale 30 ¿era el que antes valía 10 o el que valía 12? No lo puedes saber.
Te recomiendo que añadas un campo de identificación de registros, es decir un campo id autoincremental para que lo añadas a tu formulario como un campo oculto y así sepas qué registro vas a actualizar.
Hola... bueno ya llevo un buen de tiempo con esto y estoy de acuerdo contigo en que necesito un campo id que identifique pero no se como meterlo ya que mi actualización debe cumplir esa condición específicamente.
Mi tabla de donde hago la consulta y que quiero actualizar tiene un campo id autoincrement, pero no se como ponerlo como campo oculto no se si me podrías dar un ejemplo de como hacer esto, te lo agradecería muchísimo...
Cuando crees la página, para cada línea añade el campo oculto de esta forma:
echo "<input type=\"hiden\" name=\"id[]\" value=\"$campoid\">";
Teniendo en la variable $campoid el valor de ese campo único para esa fila.
Este campo oculto no se verá en el formulario, pero podrás consultarlo cuando recibas los datos del formulario.
Hola
Aun no pruebo la solución que me proporiconar pero he estado investigando y encontré que este código que te muestro a continuación podía ayudar pero marca un error o aviso que no entiendo.
Notice: Uninitialized string offset: 4 in C:\xampp\htdocs\doc\dia_modi2.php on line 69
if (isset(tiny_mce_markerPOST['Submit']))
{
$fuerza = tiny_mce_markerPOST['fuerza'];
$i=0;
foreach ($fuerza as $indice => $valor)
{
$query = mysql_query('UPDATE diagnostico SET fuerzas=\''.$valor.'\' WHERE anio = \''.$anio_consulta[$i].'\'')or die (mysql_error());
$i++; // ESTA ES LA LINEA 69
}
}
Me encantaría que me dijeras que significa o por que me sale ese mensaje
Voy a probar la solución que me das
Parece que te has hecho un lío con las comillas. La línea 68 debería ser:
$query = mysql_query("UPDATE diagnostico SET fuerzas='$valor' WHERE anio ='$anio_consulta[$i]'")or die (mysql_error());
Perdona la lata que te doy pero al parecer el error no son las comillas, ya lo modifique como me dices y me continua mandando el mismo error. Y pues de la forma en la que anteriormente me mencionaste pues me manda otros errores pero estoy tratando de corregirlos, si tienes alguna otra idea pues bienvenida y de antemano mil gracias en verdad por el tiempo que te tomas para responder.
Sin saber los errores que te salen y las modificaciones que has hecho es difícil aventurar las causas.
El error anterior desde luego estaba en esa línea, pues así lo decía el parser. Quizás no dejaste un espacio entre el paréntesis de cierre y el or del final.
Gracias en verdad por tu tiempo, y de sobra esta el aclarar que soy novata en esto.
Bueno pues de la sugerencia que me diste que agregue un campo autoincrmental lo
He estado tratando de hacer sin embargo no me marca errores ya pero me muestra la
Página en blanco, y en la base de datos no me hace nanda estoy segura que esto es por que no lo he sabido manejar el código las modificaciones que hice son las siguientes:
<?php //
if(isset(tiny_mce_markerPOST['Submit'])){
$query = "SELECT fuerzas FROM diagnostico WHERE anio=".tiny_mce_markerSESSION['anio']."";
$checkanio_consulta = mysql_query("SELECT fuerzas FROM diagnostico WHERE anio=".tiny_mce_markerSESSION['anio']."");
$anio_consultas_exist = mysql_num_rows($checkanio_consulta);
if ($anio_consultas_exist>0) {
echo "
<p> LAS FUERZAS NO SE PUDIERON INSERTAR, YA EXISTE UNA DEL AÑO ",tiny_mce_markerSESSION['anio'] ," POR FAVOR VERIFICA";
$tabla1= mysql_query($query) or die(mysql_error());
$fila = mysql_fetch_assoc($tabla1);
}else{
$strquery='insert into diagnostico (id, anio, fuerzas) values';
for($i=0;$i<count(tiny_mce_markerPOST['fuerzas']);$i++){
if (!empty(tiny_mce_markerPOST['fuerzas'][$i])) {
$strquery.="('".tiny_mce_markerPOST['id'][$i]."' '$anio', '".tiny_mce_markerPOST['fuerzas'][$i]."'),";
}
}
$strquery=substr($strquery,0,(strlen($strquery)-1)).';';
mysql_query($strquery) or die(mysql_error());
echo 'Las fuerzas han sido registradas de manera satisfactoria.<br />';
}
}
?>
*******Esta es la tabla donde lleno los campos ******************************
<tr>
<th width="317" scope="col" ><span class="Estilo2">FUERZAS</span></th>
</tr>
<tr>
<td><input name="fuerzas[]" type="text" size="52" /> </td>
<?php echo "<input type=\"hiden\" name=\"id[]\" value=\"$campoid\">";?>
<tr>
<td><input name="fuerzas[]" type="text" size="52" /></td>
<?php echo "<input type=\"hiden\" name=\"id[]\" value=\"$campoid\">";?>
<tr>
<td><input name="fuerzas[]" type="text" size="52" /></td>
<?php echo "<input type=\"hiden\" name=\"id[]\" value=\"$campoid\">";?>
<tr>
<td><input name="fuerzas[]" type="text" size="52" /></td>
<?php echo "<input type=\"hiden\" name=\"id[]\" value=\"$campoid\">";?>
<tr>
<td><input name="fuerzas[]" type="text" size="52" /></td>
<?php echo "<input type=\"hiden\" name=\"id[]\" value=\"$campoid\">";?>
<tr>
*****Es aqui donde tengo muchas dudas sobre si entendi lo que me sugeriste******
Como podrás ver, la modificación que es lo que me interesaba hacer no la he hecho por que no tengo idea de como...
Ahora en cuanto al código que anteriormente te mencione que encontré el error no es por el paréntesis de cierre y el or del final por que ya lo modifique y me sigue mandando el mismo error.
Notice: Uninitialized string offset: 4 in C:\xampp\htdocs\doc\dia_modi2.php on line 69
Y no se a que se refierea lo de Uninitialized string offset: 4 en mi vida lo había visto y no se que lo produce.
Bueno ahora si me alargue pedron... y gracias por tu ayuda..
Para empezar deberías 'separar' mentalmente las dos operaciones: una cuando das de alta nuevos datos, y otra cuando los actualizas.
Cuando los das de alta, los campos ocultos id deberían tener un valor que no exista en la base de datos, por ejemplo, -1.
De esta manera, sabrás que ese registro no existe y deberás insertarlo.
Cuando en la tabla pongas registros existentes, el campo oculto id tendrá el identificador del registro, que sí encontrarás en la base de datos y, por lo tanto, actualizarás en lugar de insertar.
Otra cosa: se supone que el campo id de la base de datos es autoincremental, así que cuando insertes no deberías usarlo: omítelo y la base de datos le asignará un valor automáticamente.
En cuanto al error de la línea 69, de momento no te preocupes mucho por él. Es sólo una advertencia y no un error. De todas maneras si me indicas qué línea es la 69 (y anterior y posterior) miraré a ver si localizo el problema.
mmmm creo que ya estoy demasiado aturdida con este tema, y haber si te entendí esta parte:
echo ""<input type=\"hiden\" name=\"id[]\" value=\"$campoid\">"";
no la pongo en el formulario de insertar si no en la parte de modificar, en la parte de insertar no toco nada y dejo que el id se atoincremente (todo lo dejo como lo tenia en el principio) Pero ahora  mi dudad es como lo pongo en la parte de modificar, Si no es mucha molestia me podrias poner un ejemplo de como podria ser en la insercion y como en la modificacion por favor, como te repito he estado ya mucho tiempo estancada con este problema y ya me hice bolas yo sola.
En cuanto al caso de la advertencia he estado investigando su causa y he emcontrado que es posible que la $i esta accediendo a una parte del arreglo que no esta definida. Como podía saber si es verdad o como lo compruebo.
El código es este
foreach ($fuerza as $indice => $valor)  //  esta es la linea 67
{
$query = mysql_query('UPDATE diagnostico SET fuerzas=\''.$valor.'\' WHERE anio = \''.$anio_consulta[$i].'\'') or die (mysql_error());  // esta es la linea 68
$i++; // ESTA ES LA LINEA 69
Y mil gracias por tu ayuda
Hola
Por fin pude resolver mi problema, lo hice como tu me habias aconcejado, puse esto ""<input type=\"hiden\" name=\"id[]\" value=\"$campoid\">""; en cada una de las lineas para realizar la consulta y pase por metodo post el id dentro de la condicion para actulizar, y ya me actualiza todos los campos que le indico con la codicion.
Ahora el único problema que tengo es que el campo no esta olculto, pues me aparece dentro del formulario y puedo verlo dentro de la tabla, el código que estoy utilizando es el siguiente:
$query = "SELECT id, fuerzas FROM diagnostico WHERE anio='$anio_consulta'";
$tabla1= mysql_query($query) or die(mysql_error());
echo "<HTML><TABLE Border=10 CellPadding=5 ><TR>";
echo "<th bgcolor=#9966FF>ID</th><th bgcolor=#9966FF>FUERZAS</th></TR>";
while($fila = mysql_fetch_row($tabla1))
{
echo"
<tr>
";
echo "
<td><input type=\"hidden\" name=\"id[]\" value=\"$fila[0]\" /></br></td>
";
echo "
<td><input type=\"text\" name=\"fuerza[]\" value=\"$fila[1]\" size=\"43\"/></br></td>
";
echo"
</tr>
";
};
}
else
{ echo '
<p> No tienes registrado nada del año ', $anio_consulta;
}
?>
¿Cómo podría hacerle para que no se vea el id?
Y de antemano Gracias por tu ayuda.
¿Qué explorador estás usando? Por definición, los campos de tipo hidden no se deben ver. Al menos en IE y Firefox. Quizás usas otro explorador no estándar...
Mira en el explorador el Código fuente resultante. Quizás haya quedado algo mal escrito.
Pues muchísimas gracias por tu ayuda en verdad me fue de gran utilidad, y me da gusto saber que hay personas como tu que ayudan a la gente desinteresadamente.
Saludos..

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas