PHP con MySQL: Editar Registros con MySQL

Continuando con la serie de artículos para trabajar con datos de MySQL desde PHP, es el momento de editar los datos guardados en nuestras tablas. Para ello haremos uso de la sentencia UPDATE explicada anteriormente en PHP con MySQL: Introducción a SQL.

El proceso será: primero mostrar un formulario con los datos que tenemos guardados, luego el usuario puede modificar los datos y enviar el formulario. Continuando, recibimos los datos enviados desde el formulario, con ello creamos la consulta SQL y lo enviamos a MySQL con la función mysql_query.

Preparar el listado de datos

Para nuestro ejemplo seguiremos utilizando la base de datos de ejemplo (Pueden descargar el Script SQL). Entonces haremos un listado de todos los registros de la tabla empresa y para cada registro crearemos un enlace hacia otra página donde se hará la edición de datos.

  1. <?php
  2. // creamos la conexión a mysql
  3. require("conexion.php");
  4. require("funciones.php");
  5. // hacemos la consulta de registros
  6. $query = "SELECT * FROM empresa ORDER BY nombre ASC";
  7. $queEmp = mysql_query($query, $conexion);
  8. ?>
  9. <title>Listado de Empresas</title>
  10. </head>
  11.   <?php while ($rsEmp = mysql_fetch_assoc($quEmp)) { ?>
  12.   <tr>
  13.     <td><?php echo $rsEmp&#91;'nombre'&#93;; ?></td>
  14.     <td><?php echo $rsEmp&#91;'direccion'&#93;; ?></td>
  15.     <td><a href="editar.php?id=<?php echo $rsEmp&#91;'id'&#93;; ?>">Editar</a></td>
  16.   </tr>
  17.   <?php } ?>
  18. </body>
  19. </html>

Como se puede ver hemos creado un enlace al archivo editar.php al cual le pasamos como parámetro GET el identificador del registro.

Consultando los detalles del Registro

El siguiente paso es obtener los datos del registro seleccionado, para ello utilizamos como filtro el identificador del registro el cual lo estamos pasando como parámetro GET.

[php]
// editar.php
require(“conexion.php”);
require(“funciones.php”);

$idempresa = getParam($_GET[“id”], “-1”);
// consultamos los datos
$sql = “SELECT * FROM empresa WHERE id = “.sqlValue($idempresa, “int”);
$queEmp = mysql_query($sql, $conexion);
$rsEmp = mysql_fetch_assoc($queEmp);
$total = mysql_num_rows($queEmp);
if ($total == 0) {
// si no hay datos redireccionamos al listado
header(“location: listado.php”);
exit;
}
[/php]

Notar que estamos utilizando la función creada anteriormente sqlValue, la cual formatea los datos para ser compatibles con el tipo de dato aceptado por la base de datos. En el ejemplo el id lo pasamos como un número entero. Finalmente antes de mostrar los datos verificamos que nuestra consulta ha devuelto resultados, si no hay resultados, el registro no existe y redireccionamos a la lista de empresas.

Creando el Formulario

Ahora mostramos el formulario con los datos recién consultados, para ello imprimimos los datos de la variable $rsEmp y accedemos a cada campo como si fuera un array:

  1. <form method="post" action="editar.php?action=edit">
  2.     <strong>Nombre</strong>
  3.     <input type="text" name="nombre" value="<?php echo $rsEmp&#91;'nombre'&#93;; ?>" />
  4.     <strong>Dirección</strong>
  5.     <input type="text" name="direccion" value="<?php echo $rsEmp&#91;'direccion'&#93;; ?>" />
  6.     <strong>Telefono</strong>
  7.     <input type="text" name="telefono" value="<?php echo $rsEmp&#91;'telefono'&#93;; ?>" />
  8.     <input type="hidden" id="id" name="id" value="<?php echo $rsEmp&#91;"id"&#93;; ?>" />
  9.     <button type="submit">Guardar</button>
  10.     <button type="reset">Limpiar</button>
  11. </form>

Como se puede ver, hemos incluido un campo oculto con el identificador del registro, es oculto por que este dato no se puede editar y nos servirá como condición para actualizar los datos.

Guardando los Datos

El paso final es recibir los datos del formulario, crear la consulta para actualizar los datos. Para ello primero recogemos la variable action y verificamos si se esta intentando editar.

[php]
$action = getParam($_GET[“action”], “”);

if ($action == “edit”) {
$idempresa = sqlValue($_POST[“id”], “int”);
$nombre = sqlValue($_POST[“nombre”], “text”);
$direccion = sqlValue($_POST[“direccion”], “text”);
$telefono = sqlValue($_POST[“telefono”], “int”);

$sql = “UPDATE empresa SET “;
$sql.= “nombre=”.$nombre.”, direccion=”.$direccion.”, telefono=”.$telefono.” “;
$sql.= “WHERE id=”.$idempresa;
mysql_query($sql, $conexion);
header(“location: listado.php”);
}
[/php]

Lo único que hemos hecho es crear la consulta en base a los datos recibidos del formulario, luego de ello redireccionamos al listado de registros.

Uniendo todos los elementos

Unimos todo el código para obtener el script para editar registros.

  1. <?php
  2. require("conexion.php");
  3. require("funciones.php");
  4.  
  5. $idempresa = getParam($_GET&#91;"id"&#93;, "-1");
  6. $action = getParam($_GET&#91;"action"&#93;, "");
  7.  
  8. if ($action == "edit") {
  9.     $idempresa = getParam($_POST&#91;"id"&#93;, "-1");
  10.     $nombre = sqlValue($_POST&#91;"nombre"&#93;, "text");
  11.     $direccion = sqlValue($_POST&#91;"direccion"&#93;, "text");
  12.     $telefono = sqlValue($_POST&#91;"telefono"&#93;, "int");
  13.    
  14.     $sql = "UPDATE empresa SET ";
  15.     $sql.= "nombre=".$nombre.", direccion=".$direccion.", telefono=".$telefono." ";
  16.     $sql.= "WHERE id=".$idempresa;
  17.     mysql_query($sql, $conexion);
  18.     header("location: listado.php");
  19. }
  20.  
  21. $sql = "SELECT * FROM empresa WHERE id = ".sqlValue($idempresa, "int");
  22. $queEmp = mysql_query($sql, $conexion);
  23. $rsEmp = mysql_fetch_assoc($queEmp);
  24. $total = mysql_num_rows($queEmp);
  25. if ($total == 0) {
  26.     header("location: listado.php");
  27.     exit;
  28. }
  29. ?>
  30. <title>Editar Empresa</title>
  31. </head>
  32. <h3>Editar Empresa</h3>
  33. <form method="post" action="editar.php?action=edit">
  34.     <strong>Nombre</strong>
  35.     <input type="text" name="nombre" value="<?php echo $rsEmp&#91;'nombre'&#93;; ?>" />
  36.     <strong>Dirección</strong>
  37.     <input type="text" name="direccion" value="<?php echo $rsEmp&#91;'direccion'&#93;; ?>" />
  38.     <strong>Telefono</strong>
  39.     <input type="text" name="telefono" value="<?php echo $rsEmp&#91;'telefono'&#93;; ?>" />
  40.     <input type="hidden" id="id" name="id" value="<?php echo $rsEmp&#91;"id"&#93;; ?>" />
  41.     <button type="submit">Guardar</button>
  42.     <button type="reset">Limpiar</button>
  43. </form>
  44. </body>
  45. </html>

Como se puede ver, editar datos de MySQL es sencillo, hay que crear la consulta y para ello concatenamos los datos enviados desde el formulario. En el ejemplo solo tenemos tres campos pero podríamos aplicarlo a cualquier cantidad de campos.

Comentarios Total 42 comentarios


Norant
Publicado: 01/03/2011 10:43 am

_ Buen artículo, para los que recien comienzan, adecuado tratamiento de las variables de seguridad, bien unijimpe.

Yamsita
Publicado: 06/03/2011 6:31 pm

hola
oie encontre este ejemplo pero no se donde puedo tener tu documento de funciones… se me hizo muy interesante gracias, espero pueda obtener una respuesta

constantino
Publicado: 17/03/2011 12:57 pm

Quiero agradecerle a la persona (s) que escribio estos codigos puestos que me fueron de mucha utilidad en mis tiempos de estudiante, espero de igual manera como ing. en sistemas que hora soy poder ayudar a otras personas que tengan alguna duda o consulta. Para ello me pueden escribir a mi email: constantino287@gmail.com y con mucho gusto les contestaré

carlos noblejas ttrujillo
Publicado: 21/03/2011 7:43 pm

hola amigos tengo un problema en este codigo me sale cuando pongo editar me sale esto:

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\update-mysql\editar.php on line 23

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\update-mysql\editar.php on line 24

Warning: Cannot modify header information – headers already sent by (output started at C:\AppServ\www\update-mysql\editar.php:23) in C:\AppServ\www\update-mysql\editar.php on line 26

amigos me podrian ayudar en este codigo, le agradesco por leer mi comentario

Programmer
Publicado: 30/03/2011 1:03 pm

hola carlos noblejas, mira, creo que te da ese error porque has dejado un espacion entre alguna linea de codigo y tu linea de “?>”

php es bien sensible en esos caso… te lo digo por experiencia propia!!

Tufik
Publicado: 31/03/2011 4:41 pm

Una buena forma de realizar las dos cosas en una sola linea de codigo es.

INSERT INTO `table` ( `id`, `title`) VALUES ($id, ‘$title’)
ON DUPLICATE KEY UPDATE title = ‘$title’

Inserta si no existe el registro, si si existe actualiza el registro existente, con esta linea sql puedes crear 1 sola funcion tanto para insertar como para actualizar y no 2 funciones apartes.

Carlos Marin Rojano
Publicado: 06/04/2011 11:19 pm

hola amigos, miren tengo este problema al momento de guardar los datos . gracias de antemano

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\Rojhi\editar.php on line 24

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\Rojhi\editar.php on line 25

Warning: Cannot modify header information – headers already sent by (output started at C:\AppServ\www\Rojhi\editar.php:24) in C:\AppServ\www\Rojhi\editar.php on line 28

FRANKCIDCO
Publicado: 28/04/2011 8:36 am

MUCHAS GRACIAS, EXCELENTE APORTE, ME HAN AYUDADO MUCHO

Saul
Publicado: 17/05/2011 10:18 am

Buenas! Tengo una inquietud, se que pasar una variable por url puede ser peligroso, más si esa variable es un identificador para hacer un update, ahora en este tutorial se utiliza un input hidden, he leido que con FireBug este campo se puede modificar a gusto y así tener una variable diferente. ¿Hay alguna otra opción o alternativa para mejorar la seguridad de las variables, o es falso que los input hidden se puedan modificar con firebug?

simon
Publicado: 24/05/2011 2:22 pm

Saul
Puedes hacer una variable de session donde guardas ese valor

Sergio Fredes
Publicado: 17/07/2011 6:29 pm

Increible articulo, me ha servido muchisimo, no quisiera abusar, pero como se pude hacer para que al lado de la opcion “Editar” aparezca la opcion “Eliminar”, para tener la opcion de borrar el registro o modificarlo….. Saludos.

daniel torres
Publicado: 25/08/2011 8:15 pm

Muchas gracias master

me has ayudado muchisimo

jose
Publicado: 14/09/2011 12:02 pm

buen dia
quisiera saber como puedo hacer una consulta cuando tengo varias tablas y quiero saber distintos datos de cada una de ellas, y que cuando los muestre tenga la opcion de editarlos.
agradezco su atencion
gracias de antemano

Alex
Publicado: 11/10/2011 2:39 pm

No cabe duda tus BLOGS son estupendos… cero lata… todo efectivo gracias…. me sirvio de mucho…

Pero si podrias darnos una manito con la opcion eliminar seria mas de gran ayuda a uno q aun es novato…. saludos… suerte….

lizbeth
Publicado: 16/11/2011 11:09 am

un favor donde en cuentro el archivo de las funciones

ivanadan
Publicado: 16/11/2011 4:45 pm

holaa, perfecto tu tuto, pero tengo una duda, tengo 3 tablas diferentes y al momento de hacer la consulta del select de la tabla, por k si acepta una tabla digamos k la principal, pero al momento d hacer otra consulta de un select no me funciona, agradeceria ke me ayudaras en esto.. sale un saludo… Gracias!

antonio
Publicado: 09/12/2011 10:37 pm

a mi muestra estos errores eh hecho todo tal como esta espero puedan ayudarme lo necesito para esta semana kien pueda ayudarme se lo agradecere de antemano gracias y saludos

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\zurdo\update-mysql\editar.php on line 27

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\zurdo\update-mysql\editar.php on line 28

Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\zurdo\update-mysql\editar.php:27) in C:\xampp\htdocs\zurdo\update-mysql\editar.php on line 30

Jossyl
Publicado: 29/12/2011 2:50 pm

Gracias por este tutorial solo que -_- este es el primero que tengo error, al estar en listado.php le doy click a Editar no ocurre nada me redirige a la misma pagina y cuando acerco el mouse veo que la direccion es http://localhost/editar.php?action=edit&id=1
espero una respuesta gracias de antemano y nuevamente me han servido los otros post (este)

RICHARD
Publicado: 05/03/2012 1:59 pm

este es el primero que tengo error, al estar en listado.php le doy click a Editar no ocurre nada me redirige a la misma pagina

EL CODIGO PARA MODIFICAR REGISTRO

hazur
Publicado: 19/04/2012 4:03 pm

Ojala esto les ayuda en el futuro, tuve este problema con el archivo listado.php

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /home/confetur/www/www/bd/update-mysql/listado.php on line 23

Les comento que lo arregle editando correctamente la línea 5:

$query = “SELECT * FROM nombre_de_tabla ORDER BY campo ASC”;

Omar Hdez
Publicado: 26/04/2012 10:35 am

Excelente aporte, me ayudo mucho para mi proyecto que me piden en la prepa, con esto tengo un gran avance.

Gracias

Saludos desde Tlaxala.

Robert
Publicado: 10/05/2012 1:32 am

Saludos : yo tengo este código para un sistema de noticias y comentarios la cual dirige los comentarios a la noticia seleccionada, a la verdad es muy bueno pero con el cambio de el uso de $_GET tuve que modificarlo y he logrado que se puedan entrelazar las noticias con los comentarios pero no he logrado que se puedan mostrar los comentarios nuevos ósea no los procesa el código original es
$id_articulos=$_GET["id_articulos"];
$sql="select * from articulos where id_articulos='$id_articulos' ";

y el modificado es
$id = isset($_GET["id_articulos"]) ? (int)$_GET["id_articulos"] : "";
$result = mysql_query("SELECT titulo, detalle,autor,fecha FROM articulos WHERE id_articulos = '".$id."' ") or die('Datos inexistente');

yo entiendo muy poco de PHP y Mysql pero sigo intentando> si me puede ayudar con gusto le enviaría todos los códigos en original ya que son muchos los que no han podido resolver este problema.
este programa es original de Cesar Cansino
Muchas gracias de antemano de este su alumno Robert

Robert
Publicado: 10/05/2012 2:00 am

Saludos: te envié los archivos por si puedes revisarlo y luego postearlo ya que se que a muchos les será de mucha utilidad.

Carlos
Publicado: 19/06/2012 11:24 am

Hola, he probado este código y cuando edito me da este error:
( ! ) Notice: Undefined index: action in C:\wamp\www\prueba\update-mysql\editar.php on line 6
Call Stack
# Time Memory Function Location
1 0.0016 401488 {main}( ) ..\editar.php:0

Por favor me gustaría que me ayudaran. Gracias

david
Publicado: 31/07/2012 7:14 pm

no se como se utilisa el get paran en edita no me lo asepta en la linea 5 no se por que si pudieras aytudarme algo

FreeDarkDemon
Publicado: 15/08/2012 4:18 pm

Por favor envienme el archivo funciones.php

Eduardo Falconi
Publicado: 22/08/2012 2:53 pm

Muchas gracias men… no me salia el modificar registros

oslay
Publicado: 25/08/2012 9:20 pm

tengo este error y nose como solucionarlo por favor depende mi puesto
Fatal error: Call to undefined function get_magic_quotes_gpc() in C:\AppServ\www\yo\funciones.php on line 5

mary
Publicado: 15/09/2012 8:53 pm

hola chico mira a mi me da un error al poderlo adaptar lo proyecto mio y este es mi error por fa ayudame
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\update-mysql\editar.php on line 36
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\update-mysql\editar.php on line 37

Warning: Cannot modify header information – headers already sent by (output started at C:\AppServ\www\update-mysql\editar.php:36) in C:\AppServ\www\update-mysql\editar.php on line 39

gracias espero tu respuesta

mary
Publicado: 15/09/2012 9:01 pm

lo probe a parte y me dio todo bien pero cuando lo adapto a lo mio ese es el error que tengo cuando le doy a editar para poder modificar el registroahi te tejo mi correo seria de muchisima ayudaa graciassssss

daniel aguilar
Publicado: 23/10/2012 9:58 pm

hola,
Muchas gracias al que a escrito toda la informacion de este sitio.
La informacion que aqui e encontrado me a ayudado mucho, tenia algunas dudas y aqui mis dudas se resolvieron ya que no me acordaba de algunos datos,
Sobre programacion,
espero siga asi escriviendo mas ya que e visto mucha informacion sobre programacion.
Gracias

jorge
Publicado: 10/11/2012 12:32 pm

Cojoooooooonnnuuuuuuuuudddoooooooooooo artículo !!
Gracias por tu ayuda.
Saludos!

Sergi
Publicado: 04/03/2013 11:47 am

Primero de todo felicitar por este gran aporte, permite dar-le a mis webs un toque mucho mas profesional con esta web.

Luego queria comentar sobre el error que he visto de que al dar editar, se redirije a la misma pagina, eso ocurre cuando 1- el link no esta bien, sea por algun “” o espacio etc, o 2- como ha sio en mi caso, que en editar.php tenia que modificar la tabla de la consulta, hay muchas consultas y hay que comprobar todas que se ajusten a nuestra BD.

Siempre estoy encantado de ayudar asi que si alguien quiere contacto para preguntaro o algo aqui dejo mi correo: djseku@gmail.com

Deyza
Publicado: 31/03/2013 8:44 am

Muy buen post pero es necesario el archivo funciones.php para poder completar la implementacion si puedes please

Myrna
Publicado: 04/04/2013 12:39 pm

Hola mi problema es en el archivo listado.php, cuando le doy clic en editar me redirecciona al mismo archivo y no a donde puedo modificar, te agradeceria mucho que me asesoraras ;)

Oscar
Publicado: 28/04/2013 11:07 pm

Comparto con Uds mi libro de PHP (para principiantes, paso a paso).

http://ocapunay.blogspot.com/2013/04/libro-de-php.html

Ruben
Publicado: 16/05/2013 2:21 pm

Hola, he probado este código y cuando edito me da este error:
( ! ) Notice: Undefined index: action in C:\wamp\www\prueba\update-mysql\editar.php on line 6, sin embargo me ayudo mucho la pagina

Wendy
Publicado: 23/08/2013 9:16 am

Y si también tengo que actualizar archivos, supongamos que el usuario sube una archivo al servidor y que también se tenga que actualizar y despues guardar el archivo actualizado en un link cómo puedo lograr eso? PORFAVOR AYUDA

Gricelda Medina
Publicado: 09/07/2014 3:55 pm

Hola, acabo de correr tu ejemplo, gracias por publicarlo es de gran ayuda, solo una pregunta, cómo para quitar este warning que me envía.

Notice: Undefined index: action in C:\xampp\htdocs\update\editar.php on line 6

Espero me puedas ayudar gracias.

Juan Carlos Oliveros
Publicado: 27/08/2014 12:13 am

Hola, muchas gracias por el aporte, pero, tengo el mismo problema:
Notice: Undefined index: action…

Agradezco su ayuda.

alejandro
Publicado: 23/06/2015 5:57 pm

amigos me gustaria saber si me pueden ayudar… tengo una foto en mi base de datos pero quiero modificarla a traves de un formulario y obvio que la foto se guarde en una carpeta y que en la base de datos reemplase la anterior tendran algun ejemplo de eso? espero que me hayan entendido mi correo es alejandro182x@gmail.com

les agradezco

Diana
Publicado: 09/07/2015 11:20 am

Me sale este error:
Notice: Undefined index: action in C:\wamp\www\mod_cat.php on line 86
tiene que ver con esto:
$action = getParam($_GET[“action”],””);
como corrijo esto?

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)