Sunteți pe pagina 1din 6

A veces nos facilita las cosas que se puedan editar a la vez varios registros de una base de datos.

Vemos como recibir con un bucle todos los registros a editar y hacer el update.
Por Miguel Angel Alvarez En el manual bsico de PHP ya se explic como realizar una edicin de los datos de una tabla de base de datos . En el ejemplo visto en ese artculo se poda seleccionar un registro, para editar sus datos. Pero imaginemos que necesitamos editar decenas o cientos de registros, entonces puede ser demasiado laborioso tener que editar los registros de uno en uno. En esos casos, tal vez nos interese hacer algo para que se puedan editar varios registros a la vez.

Lo que vamos a hacer es un sistema de edicin que permita actualizar varios registros de la base de datos en una nica accin, es decir, construir un formulario que muestre varios registros para editar, con un nico botn de submit para enviar el formulario completo. La dificultad estriba en recibir del formulario todos los registros a editar y realizar el update para cada uno de ellos.

Tenemos una tabla de la base de datos con nmeros de telfono y nombres de contacto. En este caso, para simplificar, vamos a editar los registros de 10 en 10. Tendremos que mostrar un formulario con los 10 primeros telfonos y un enlace para ver los 10 siguientes, siempre que queden registros por mostrar en la base de datos.

Podemos ver el ejemplo en marcha para hacernos una idea exacta de nuestros objetivos.

En el script vamos a tener dos partes: una en la que se muestra el formulario y otra en la que se hacen los distintos update a partir de los datos recogidos. Toda la lgica la vamos a concentrar en una nica pgina, donde, si no se reciben datos de formulario, se muestra el formulario. Si se han recibido datos de un formulario, entonces se deben actualizar los registros.

Mostrar el formulario

Lo primero que debemos de hacer es saber a partir de qu registro se debe mostrar el formulario. Porque podemos desear mostrar los primeros 10 valores o un conjunto de registros posterior.

if (isset($_GET["id_mostrar"])) $id_mostrar = $_GET["id_mostrar"]; else $id_mostrar = 0;

Con estas lneas vemos si recibimos por GET un identificador a partir del que mostrar los registros. Si no se recibe nada, se entiende que se desea recibir los registros desde el principio (id=0).

Para mostrar el formulario tenemos que recibir de la base de datos los registros a mostrar. Para ello se realiza una consulta de seleccin, limitando a 10 el nmero de registros a recibir.

$ssql="select * from manual_php where id>$id_mostrar limit 10"; $result=mysql_query($ssql);

Ahora, haremos un formulario para editar los telfonos. Para cada registro, se mostrar una lnea con el telfono y el nombre de la persona. Cada lnea tendr unos campos de formulario, para el identificador del registro y para el nmero de telfono. El campo donde se guarda el identificador lo haremos con un hidden y el telfono con un campo de texto. Para nombrar los campos de formulario utilizaremos un numero, para que no sean siempre los mismos, porque si se llaman todos los campos igual, a la hora de recibirlos podemos tener problemas. El cdigo que queremos generar tendr una forma como esta:

<input type=hidden name='id1' value='1'> Daniel <input type=text name='telefono1' value='0147852'>

<input type=hidden name='id2' value='2'> Claudio <input type=text name='telefono2' value='9876654'>

...

<input type=hidden name='id10' value='88'> Mara <input type=text name='telefono10' value='000000'>

Vemos que el primer identificador tiene nombre "id1", el Segundo "id2" y as sucesivamente. Los nmeros de telfono tambin tienen campos con nombres distintos: "telefono1", "telefono2"... No vamos a dar opcin a editar los nombres de contacto en este formulario, para simplificar las cosas.

Para generar el cdigo del formulario utilizaremos un script PHP como el siguiente:

echo "<form action='edicion_a_la_vez.php' method=post>";

echo "\n<table align=center>"; echo "\n<tr><td><b>Nombre</b></td><td><b>Telfono</b></td></tr>";

$i = 1; while ($fila=mysql_fetch_array($result)){ echo "\n<input type=hidden name='id$i' value='" . $fila["id"] . "'>"; echo "<tr>"; echo "<td>" . $fila["nombre"] . "</td>"; echo "<td><input type=text name='telefono$i' value='" . $fila["telefono"] . "'></td>"; echo "</tr>"; $i++; $ultimo_mostrado = $fila["id"]; }

echo "\n<tr><td colspan=2 align=center><input type='submit' value='Editar todos'></td></tr>"; echo "\n</table>"; echo "\n</form>";

Por ltimo, mostraremos un enlace para ver los siguientes registros, si es que se han mostrado registros en esta pgina. Utilizamos la variable $ultimo_mostrado, para saber a partir de qu registro continuar.

if (isset($ultimo_mostrado)) echo "\n<br><a href='edicion_a_la_vez.php?id_mostrar=" . $ultimo_mostrado . "'>Ver los 10 siguientes</a>";

Recibir los datos y hacer los UPDATE

Ahora vamos a mostrar la manera de recibir los datos del formulario y generar los update. Como tenemos hasta 10 registros por recibir, realizaremos un bucle FOR desde 1 hasta 10, con lo cual se podrn recibir todos los valores, concatenando el nombre del campo con el contador del for, desde 1 hasta 10.

Puede que en algunos casos no nos llegue el formulario con los 10 registros, porque haya menos para editar en el formulario, as que realizamos primero una comprobacin para ver si estn declaradas las variables que deberan llegar por POST. Por ejemplo, si est declarada la variable $_POST["id1"], quiere decir que estamos recibiendo datos tambin en $_POST["telefono1"].

for ($i=1;$i<=10;$i++){ //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]; $telefono = $_POST["telefono" . $i]; $ssql = "update manual_php set telefono='$telefono' where id=$id"; if (mysql_query($ssql)) echo "<br>Telfono actualizado con xito"; else echo "<br>Telfono NO actualizado"; } }

En definitiva, se hace un bucle de 1 a 10 para recibir los datos que haya, si es que nos han llegado del formulario. Para cada registro que hemos detectado que nos llega por el formulario, se genera y ejecuta el update correspondiente, con lo que se irn actualizando los valores de la tabla.

El cdigo completo

Mostramos el cdigo completo de este ejemplo, para verlo de una manera global y asegurarnos que todo el mundo lo copia perfectamente:

<HTML> <HEAD> <TITLE>edicion_a_la_vez.php</TITLE> </HEAD> <BODY> <h1 align="center">Edicin de varios registros a la vez</h1> <br> <br> <? //Conexion con la base require ($raiz . "../../../../librerias/principales.php"); $conn = mysql_conexion();

if (!$_POST){ //si no recibo datos de POST, muestro el formulario

//es posible que recibamos un id a partir del que hay que mostrar los datos if (isset($_GET["id_mostrar"])) $id_mostrar = $_GET["id_mostrar"]; else $id_mostrar = 0;

//extraemos de la base de datos los registros a mostrar //Ejecutamos la sentencia SQL, limitando la bsqueda a 10 registros $ssql="select * from manual_php where id>$id_mostrar limit 10"; $result=mysql_query($ssql);

echo "<form action='edicion_a_la_vez.php' method=post>"; echo "\n<table align=center>"; echo "\n<tr><td><b>Nombre</b></td><td><b>Telfono</b></td></tr>";

$i = 1; while ($fila=mysql_fetch_array($result)){ echo "\n<input type=hidden name='id$i' value='" . $fila["id"] . "'>"; echo "<tr>"; echo "<td>" . $fila["nombre"] . "</td>"; echo "<td><input type=text name='telefono$i' value='" . $fila["telefono"] . "'></td>"; echo "</tr>"; $i++; $ultimo_mostrado = $fila["id"]; }

echo "\n<tr><td colspan=2 align=center><input type='submit' value='Editar todos'></td></tr>"; echo "\n</table>"; echo "\n</form>";

//si se han mostrado registros, pongo el enlace para ver los siguientes if (isset($ultimo_mostrado)) echo "\n<br><a href='edicion_a_la_vez.php?id_mostrar=" . $ultimo_mostrado . "'>Ver los 10 siguientes</a>"; }else{

//es que he recibido datos de formulario, entonces tengo que recibirlos y actualizar la base de datos for ($i=1;$i<=10;$i++){ //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]; $telefono = $_POST["telefono" . $i]; $ssql = "update manual_php set telefono='$telefono' where id=$id"; if (mysql_query($ssql)) echo "<br>Telfono actualizado con xito"; else echo "<br>Telfono NO actualizado"; } } echo "\n<p><a href=edicion_a_la_vez.php>Volver</a>"; } ?> </BODY> </HTML>

S-ar putea să vă placă și