Este artículo ya se encuentra obsoleto.
Para una referencia actual leer: Editar datos en MySQL usando PDO en PHP
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.
<?php // creamos la conexión a mysql require("conexion.php"); require("funciones.php"); // hacemos la consulta de registros $query = "SELECT * FROM empresa ORDER BY nombre ASC"; $queEmp = mysql_query($query, $conexion); ?> <html> <head> <title>Listado de Empresas</title> </head> <body> <table> <?php while ($rsEmp = mysql_fetch_assoc($quEmp)) { ?> <tr> <td><?php echo $rsEmp['nombre']; ?></td> <td><?php echo $rsEmp['direccion']; ?></td> <td><a href="editar.php?id=<?php echo $rsEmp['id']; ?>">Editar</a></td> </tr> <?php } ?> </table> </body> </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.
// 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; }
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:
<form method="post" action="editar.php?action=edit"> <strong>Nombre</strong> <input type="text" name="nombre" value="<?php echo $rsEmp['nombre']; ?>" /> <strong>Dirección</strong> <input type="text" name="direccion" value="<?php echo $rsEmp['direccion']; ?>" /> <strong>Telefono</strong> <input type="text" name="telefono" value="<?php echo $rsEmp['telefono']; ?>" /> <input type="hidden" id="id" name="id" value="<?php echo $rsEmp["id"]; ?>" /> <button type="submit">Guardar</button> <button type="reset">Limpiar</button> </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.
$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"); }
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.
<?php require("conexion.php"); require("funciones.php"); $idempresa = getParam($_GET["id"], "-1"); $action = getParam($_GET["action"], ""); if ($action == "edit") { $idempresa = getParam($_POST["id"], "-1"); $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"); } $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) { header("location: listado.php"); exit; } ?> <html> <head> <title>Editar Empresa</title> </head> <body> <h3>Editar Empresa</h3> <form method="post" action="editar.php?action=edit"> <strong>Nombre</strong> <input type="text" name="nombre" value="<?php echo $rsEmp['nombre']; ?>" /> <strong>Dirección</strong> <input type="text" name="direccion" value="<?php echo $rsEmp['direccion']; ?>" /> <strong>Telefono</strong> <input type="text" name="telefono" value="<?php echo $rsEmp['telefono']; ?>" /> <input type="hidden" id="id" name="id" value="<?php echo $rsEmp["id"]; ?>" /> <button type="submit">Guardar</button> <button type="reset">Limpiar</button> </form> </body> </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.
[download id=»52″ autop=»false»]
Comentarios Total 43 comentarios
Publicado: 01/03/2011 10:43 am
_ Buen artículo, para los que recien comienzan, adecuado tratamiento de las variables de seguridad, bien unijimpe.
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
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é
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
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!!
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.
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
Publicado: 28/04/2011 8:36 am
MUCHAS GRACIAS, EXCELENTE APORTE, ME HAN AYUDADO MUCHO
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?
Publicado: 24/05/2011 2:22 pm
Saul
Puedes hacer una variable de session donde guardas ese valor
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.
Publicado: 25/08/2011 8:15 pm
Muchas gracias master
me has ayudado muchisimo
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
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….
Publicado: 16/11/2011 11:09 am
un favor donde en cuentro el archivo de las funciones
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!
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
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)
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
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»;
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.
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
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.
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
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
Publicado: 15/08/2012 4:18 pm
Por favor envienme el archivo funciones.php
Publicado: 22/08/2012 2:53 pm
Muchas gracias men… no me salia el modificar registros
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
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
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
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
Publicado: 10/11/2012 12:32 pm
Cojoooooooonnnuuuuuuuuudddoooooooooooo artículo !!
Gracias por tu ayuda.
Saludos!
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
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
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 ;)
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
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
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
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.
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.
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
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?
Publicado: 13/01/2024 9:08 pm
Excelente información , me fue de mucha ayuda para un examen de la universidad .