Solucionado

Actualizar una base de datos con un bucle (UPDATE)

4942 visitas 13 respuestas

Hola a todos, mucho gusto.

Tengo un problemita. Me pasa lo siguiente, con un SELECT extrajé con varios while unos registros de un tabla (varios while porque todos tiene diferentes condiones [where]). al extraer esos registros, mostré con un eho un input html para que se pueda insertar en él un valor y a ese input le puse el nombre del registro. A la pregunta, ¿cómo debo hacer para actualizar y recorrer todos los datos enviados de un formulario y ponerlos en la base de datos?

espero haberme entendido, si no fué asi, por favor decirmelo. Espero su ayuda, que estén bien.

Saludos.

por TheGeorge desde Colombia

Registrado desde: 03 Nov 08

Respuestas

0 0

TheGeorge, ponnos algo más de información, y estaría bien que añadieras el código para que supiéramos qué estás haciendo exactamente.

por jurena desde España

Registrado desde: 04 Sep 07
0 0

Ok, haciendo suposiciones de lo que estás intentando hacer, imagino que estás haciendo un formulario para actualizar los datos de tu DB. Lo primero que tenés que tener en cuenta, es que los nombres de los input no deben repetirse, por ejemplo, si tenes estos 2 campos:

Cuando quieras recuperar los valores, solo vas a poder obtener el último de ellos, todos los input deben tener nombres diferentes. Podrias agregarles corchetes al final del nombre(name="titulo[]") y asi en php los podes recuperar como un array, pero es otra historia, por ahora te diria que simplemente les pongas nombres distintos a cada uno.

Luego, en el php donde vas a realizar los UPDATE, recuperas los valores de los campos utilizando los array $_GET o $_POST, segun el metodo con el que estés enviando el formulario, por ejemplo: Si envias el formulario con POST...

$titulo = $_POST['titulo'];

Cada uno de los campos del formulario va a estar en una posicion del array $_POST, con el nombre del campo como "key".

Espero se haya entendido.

Saludos

0 0

Bueno en realidad lo que estoy haciendo es una actualización de datos de una forma práctica donde en un formulario muestra a todos los usuarios y les muestra al lado un campo (input) para que ingrese su dato y así haga la actualización a la base de datos. El codigo sería este:

// Comienzo $sql = @mysql_query("SELECT FROM usuarios WHERE rol = 'Admin'"); while ($user = @mysql_fetch_array($sql)){ echo "".$user['nick']." ".$user['rol'].""; } $sql = @mysql_query("SELECT FROM usuarios WHERE rol = 'Usuario'"); while ($user = @mysql_fetch_array($sql)){ echo "".$user['nick']." ".$user['rol'].""; } // Fin..

Cuando hagan click en el submit, este lo que me gustaría que hiciese es que actualizara los datos puestos en cada input de cada usuario que muestre respectivamente, como verán cadai input tiene un name diferente, que es el nombre de cada uno, alguna idea mejor y cómo me tocaría hacer para que "digo yo" con un bucle hiciera todos los cambios.

Saludos. Espero respuestas de su parte.

por TheGeorge desde Colombia

Registrado desde: 03 Nov 08
2 0

Antes que nada..., no entiendo exactamente lo que haces con ese codigo..., digo, en realidad si entiendo, se lo que hace..., pero..., a todos los usuarios les mostras los datos de todos los usuarios???? Si estas haciendo codigo para aprender, testear, o parecido..., puede ser...., pero si lo estas haciendo para un sistema real, es un grave problema de seguridad..., esta mal que cualquier usuario pueda editar los datos de otros usuarios; deberias verificar que usuario esta logueado(si es que tiene un sistema de log in), y mostrar solo los datos de ese usuario para que los actualice; y con ese cambio no vas a necesitar hacer el bucle, pero igual te doy la solucion.

Primero, como recomendacion deberias cambiar el nombre del campo, si usas el nick como nombre de campo, para poder hacer el bucle tendrias que recorrer el array "$_POST" a secas, y no es una buena practica de codigo, yo en su lugar usuaria algo como:

<?php echo "

".$user['nick']." * ".$user['rol'].""; ?>

Esto te va a dar como resultado un "name" con valor, por ejemplo, name="user[TheGeorge]" Luego en PHP, lo recuperas con $_POST['user']['TheGeorge'] Un ejemplo:

<?php if(isset($_POST['user']) && is_array($_POST['user'])){

foreach($_POST['user'] as $nick => $value){
    ...
}

} ?>

La variable $nick va a tener el nick del usuario, y la variable $value va a tener el valor que inserto en el campo.

Saludos

0 0

hola de nuevo, espero que estén bien...

bueno viendo tu soporte, y siendote sincero no logró captar tu mensaje. además te queria comentar CamEl que tengo un sistema de logeo, y es seguro, este script iría dentro de un panel en el cual solo deberá ser mostrado si está logeado. De todos modos gracias por tu sugerencia. Supongo yo que esto:

// Comienzo

$sql = @mysql_query("SELECT FROM usuarios WHERE rol = 'Admin'"); while ($user = @mysql_fetch_array($sql)){ echo "".$user['nick']." ".$user['rol'].""; } // Fin.. Lo que hace es mostrar dentro de una tabla(html) una fila de registros que se encuentran en un tabla(mysql) de usuarios en la base de datos, y por cada registro muestra el nombre del usuario y al lado un campo (input) que tiene como [u]name[/u] el nombre del usuario. Por lo tanto, cada echo muestra el nombre y el input con el name definida al nombre del usuario, es decir, son diferentas. La duda sería: ¿Qué tengo que hacer y cómo tengo que hacerlo para hacer tál actualización? (De cualquier manera.)

Muchas gracias, espero respuesta.

por TheGeorge desde Colombia

Registrado desde: 03 Nov 08
1 0

Ok, tenes que hacer lo que te puse en el post anterior, reemplaza el codigo que imprime las filas por el que te puse yo, y en el php a donde envias los datos para actualizarlos, escribis el segundo bloque de codigo que te hice, y dentro del foreach haces el UPDATE.

<?php if(isset($_POST['user']) && is_array($_POST['user'])){

foreach($_POST['user'] as $nick => $value){
    $sql = "UPDATE usuarios SET nick = '" . $value . ' WHERE nick = '" . $nick . "'";
    @mysql_query($sql) or echo mysql_error() . "<br/>";
}

} ?>

Mas facil...., echale agua ;)

Saludos

0 0

Hola CamEl, muchas gracias por tu ayuda. a manera de resumen lo que hicistes fué hacer una matriz o un vector? y luego recorer con un bucle cada posicion .... xd. me podrías explicar esto:

foreach($_POST['user'] as $nick => $value){ que no lo entendí muy bien. Muchisimas gracias CamEl, si puedes porfavor responde mi inquietud de que hace el bucle foreach.

Saludos.

por TheGeorge desde Colombia

Registrado desde: 03 Nov 08
0 0

Vector: Array unidimensional. Ej:

<?php Array( [1] => 'pepe', [2] => 'lola', [3] => 'carlos' ) ?>

Matriz: Array multidimensional. Ej:

<?php Array( [1] => Array(

[1] => 'pepe',
[2] => 'Estevez'

), [2] => Array(

[1] => 'lola',
[2] => 'Smith'

), [3] => Array(

[1] => 'carlos',
[2] => 'Lopez'

) ) ?>

En cuanto al foreach, lo que hace es recorrer los datos que vienen del formulario. Cuando uno pone el nombre de un input de la manera name="user[TheGeorge]", PHP lo recibe como un Array, si hicieras print_r($_POST), tendrias esto:

<?php Array( [user] => Array(

[TheGeorge] => 'valor del input'

) ) ?>

Por lo tanto en el codigo pasaria lo siguiente, si solo tuvieras ese input: (Acabo de ver que el codigo tenia un error, me olvide de poner una comilla doble en la consulta, asi que aca lo arreglo)

<?php if(isset($_POST['user']) && is_array($_POST['user'])){

foreach($_POST['user'] as $nick => $value){
    //$nick = "TheGeorge"
    //$value = "valor del input"
    $sql = "UPDATE usuarios SET nick = '" . $value . "' WHERE nick = '" . $nick . "'";
    @mysql_query($sql) or echo mysql_error() . "<br/>";
}

} ?>

La consulta actualiza el nick del usuario con el valor enviado en el campo, la consulta deberias modificarla de acuerdo a los datos que vos quieras actualizar, esto lo puse como ejemplo, ya que no especificaste que datos del usuario son los queres modificar.

Saludos

0 0

Muchas gracias, ya había visto el error y lo arreglé ... probé el codigo que me facilitaste y se funcionó perfectamente y viendo tu explicacion, creo haber entendido bien. Saludos.

por TheGeorge desde Colombia

Registrado desde: 03 Nov 08
0 0

segui el consejo de arriba apenas ayer pero tengo problemas al recibir los datos en otra pagina, no me los manda mi codigo del while hace que se pongan nombre de las materias sus claves, y pongo unos input para llenar con calificaciones, mandarlos y actualizar en una db, este es el codigo pueden ayudarme.

while( $tupla = $objCarrera->ObtenerDatos( $DtaMaterias ) )
{
    echo "<tr>";
    echo "<td>$tupla[0]</td>";
    echo "<td>$tupla[1]</td>";
    echo "<td><input type='text' name='$tupla[0]' title='$tupla[0]' size='3' /></td>";
    echo "</tr>";
}

y quiero recibir los datos de ese input en la otra pagina, pero no se si esta bien ya que puse el nombre de la clave en el nombre del input cuando lo despliega como ven en el title pone nombres diferentes a cada input que genera, jejej pueden ayudarme o en que ando mal

por asantiago desde México

Registrado desde: 25 Nov 10
1 0

Deberías darles nombres secuenciales, como hacen más arriba. Tipo name="tupla[$i]" siendo $i un contador que incrementas en cada vuelta. Luego en el action del form haces un var_dump($_POST['tupla']) o con $_GET dependiendo del method, y así ves cómo se reciben los datos y deberías saber seguir entonces.

Saludos.

por Eloy8857 desde España

Registrado desde: 14 Jan 09
0 0

con respecto al tema de arriba ya quedo solucionado, jejej ahora mi pregunta es como paso los valores de este array

echo "

";

a javascript jejej ya que es codigo php y necesito que todos esos campos se sumen y den el promedio del alumno

claro esta antes de apretar el boton de guardar calificaciones, pueden ayudarme

por asantiago desde México

Registrado desde: 25 Nov 10
0 0

Ahí ya ni me acuerdo, pero igual es con document.getElementsByName, que devuelve un array de elementos con el mismo nombre y me parece que se usaba en estos casos. Obtener elementos, iterarlos con un for... todo fácil.

Saludos.

por Eloy8857 desde España

Registrado desde: 14 Jan 09