martes, 27 de marzo de 2012

Actualizar registros en una base de datos MySql con PHP


Bienvenid@s en esta ocasión vamos a ver un ejemplo de como actualizar registros en un Base de datos Mysql con PHP.

Para el ejemplo en cuestión, voy a utilizar una base de datos llamada "clientes" y una tabla llamada "datosclientes" que contiene los siguientes campos: "id_cliente", "nombre", "apellidos", "direccion", "localidad" y "edad".

La tabla contiene una serie de registros que podrán ser manipulados para actualizarlos. Para el ejemplo, extraeremos todos las filas en una tabla HTML, cada fila podrá ser editada para su posterior actualización tras enviar el formulario respectivo.

También se filtrarán los datos para permitir tan sólo unos determinados caracteres en cada campo, esto es fundamental, como ya he comentado en otros posts anteriores, uno de los aspectos que hay que tener en cuenta al programar con PHP, es la seguridad, así que hay que asegurarse de filtrar los datos adecuadamente antes de enviar nada a una base de datos, cada proceso del ejemplo viene comentado para que lo entiendas fácilmente.

Debajo de la imagen del ejemplo puedes ver el código ...


Guarda el archivo como actualizar.php ...

<?php
/* By http://php-estudios.blogspot.com */

/* PARTE 1: EXTRAER TODOS LAS FILAS DE LA TABLA*/
//Datos de conexión.
$mysql_usuario = "root";
$mysql_password = "password";
$mysql_host = "localhost";
$mysql_database = "clientes";

//Asignar los datos de conexión
$conexion = mysql_connect($mysql_host, $mysql_usuario, $mysql_password, true);

//Seleccionamos la base datos y la conexión.
mysql_select_db($mysql_database, $conexion) || die('No pudo conectarse: '.mysql_error());

//Preparar la consulta para extraer todas las filas
$consulta = "SELECT * FROM datosclientes";

//Ejecutar la consulta
$resultado = mysql_query($consulta, $conexion) or die(mysql_error());

//Almacenar todas las filas en una tabla
$table = "<div class='div-table'>\n";
$table .= "<div class='div-table-row'>
           <div class='div-table-col'>ID</div>
     <div class='div-table-col'>Nombre</div>
     <div class='div-table-col'>Apellidos</div>
     <div class='div-table-col'>Dirección</div>
     <div class='div-table-col'>Localidad</div>
     <div class='div-table-col'>Edad</div>
     <div class='div-table-col'></div>
     </div>";
while($fila = mysql_fetch_assoc($resultado)){
$table .= 
     "
   <div class='div-table-row'>   
   <form method='post'>
      <div class='div-table-col'>".$fila["id_cliente"]."</div>
      <div class='div-table-col'><input type='text' name='nombre' value='".$fila["nombre"]."'></div>
      <div class='div-table-col'><input type='text' name='apellidos' value='".$fila["apellidos"]."'></div>
      <div class='div-table-col'><input type='text' name='direccion' value='".$fila["direccion"]."'></div>
      <div class='div-table-col'><input type='text' name='localidad' value='".$fila["localidad"]."'></div>
      <div class='div-table-col'><input type='text' name='edad' value='".$fila["edad"]."'></div>
   <div class='div-table-col'><input type='hidden' name='id_cliente' value='".$fila["id_cliente"]."'><input type='submit' value='Actualizar'></div>
   </form>
   </div>
   ";
    }
$table .= "</div>\n";

/* PARTE 2: EJECUTAR LA CONSULTA SI EL FORMULARIO ES ENVIADO */

//Inicializar la variable error
$error = "";
if (isset($_POST["id_cliente"]))
{
 //Capturar los campos a editar
 $id_cliente = $_POST["id_cliente"];
 $nombre = $_POST["nombre"];
 $apellidos = $_POST["apellidos"];
 $direccion = $_POST["direccion"];
 $localidad = $_POST["localidad"];
 $edad = $_POST["edad"];

/* FILTRAR LOS DATOS SIEMPRE ANTES DE ALMACENARLOS EN LA BASE DE DATOS */
if (!preg_match("/^[a-zA-ZñÑáéíóúÁÉÍÓÚäëïöüÄËÏÖÜàèìòùÀÈÌÒÙ\s]+$/", $nombre)) //letras latinas + espacios
 {
 $error = "Ha ocurrido un error, datos no permitidos.";
 }
 else if(!preg_match("/^[a-zA-ZñÑáéíóúÁÉÍÓÚäëïöüÄËÏÖÜàèìòùÀÈÌÒÙ\s]+$/", $apellidos)) //letras latinas + espacios
 {
 $error = "Ha ocurrido un error, datos no permitidos.";
 }
 else if(!preg_match("/^[a-zA-Z0-9ñÑáéíóúÁÉÍÓÚäëïöüÄËÏÖÜàèìòùÀÈÌÒÙ\s\_\-\/\º\ª\.\,\:\;]+$/", $direccion)) //letras latinas + números + espacios + algunos caracteres más
 {
 $error = "Ha ocurrido un error, datos no permitidos.";
 }
 else if(!preg_match("/^[a-zA-ZñÑáéíóúÁÉÍÓÚäëïöüÄËÏÖÜàèìòùÀÈÌÒÙ\s]+$/", $localidad)) //letras latinas + espacios
 {
 $error = "Ha ocurrido un error, datos no permitidos.";
 }
 else if(!preg_match("/^[0-9]+$/", $edad)) //Sólo números
 {
 $error = "Ha ocurrido un error, datos no permitidos.";
 }
 /* SI TODO HA SIDO CORRECTO ENTONCES SI EJECUTAR LA CONSULTA */
    else
        {
   $consulta = "UPDATE datosclientes 
            SET 
   nombre='$nombre', 
   apellidos='$apellidos', 
   direccion='$direccion', 
   localidad='$localidad', 
   edad='$edad' 
   WHERE id_cliente=$id_cliente";

//Ejecutar la consulta
$resultado = mysql_query($consulta, $conexion) or die(mysql_error());

//Redirección nuevamente a la página para ver los datos actualizados
header("location: actualizar.php");
       }
 }
?>

<!DOCTYPE HTML>
<html>
<head>
<title>Actualizar registros en una base de datos MySql con PHP</title>

<style>
.div-table{
  display: table;         
  width: auto;                
  border: 1px solid grey;         
  border-spacing: 5px;/*cellspacing:poor IE support for  this*/
}
.div-table-row{
  display: table-row;
  width: auto;
  clear: both;
}
.div-table-col{
  float: left;/*fix for  buggy browsers*/
  display: table-column;         
  width: 120px;  
}
</style>
</head>
<body>
<?php
/* Mostrar el error */
echo "<p style='color: red;'>$error</p>";

/* Mostrar la tabla con los registros */
echo $table;

/* Cerrar la conexión */
mysql_close($conexion);
?>
</body>
</html>




9 comentarios:

ozzist dijo...

saludos y gracias por sus aportes como puedo insertar, eliminar y editar datos en una misma pagina necesito esa ayuda por favor...

Manu dijo...

Utiliza un parametro get en la url y pásale la acción que deseas realizar ...

es decir ...

if ($_GET["accion"] == "actualizar")
{
//Actualizar registro
}
else if($_GET["accion"] == "editar")
{
//Editar registro
}
...

ozzist dijo...

disculpa me sigue dando error me los puedes estructurar solo me elimina pero no me esta actualizando

Manu dijo...

Mandame el código y la tabla sql para echarle un vistazo.

ozzist dijo...


if (isset($_POST["eliminar"]))
{
$eliminar = $_POST["eliminar"];
$consulta = "DELETE FROM datosclientes WHERE id_cliente=$eliminar";
$resultado = mysql_query($consulta, $cn) or die(mysql_error());
header("location: registro1.php");
}
if (isset($_POST['id_cliente']))
{{
$id=$_POST['id_cliente'];
$editar = $_POST["editar"];
$nombre = $_POST["nombre"];
$apellidos = $_POST["apellidos"];
$direccion = $_POST["direccion"];
$localidad = $_POST["localidad"];
$edad = $_POST["edad"]; }
if ($id=="Editar"){
$consulta1 = "UPDATE datosclientes
SET
nombre='$nombre',
apellidos='$apellidos',
direccion='$direccion',
localidad='$localidad',
edad='$edad'
WHERE id_cliente='$id'";
$resultado = mysql_query($consulta, $cn) or die(mysql_error());
header("location: registro1.php");

Manu dijo...

Comprueba haciéndolo así ...

if (isset($_POST["eliminar"]))
{
$eliminar = $_POST["eliminar"];
$consulta = "DELETE FROM datosclientes WHERE id_cliente=$eliminar";
$resultado = mysql_query($consulta, $cn) or die(mysql_error());
header("location: registro1.php");
}
if (isset($_POST['id_cliente']))
{
$id=$_POST['id_cliente'];
$editar = $_POST["editar"];
$nombre = $_POST["nombre"];
$apellidos = $_POST["apellidos"];
$direccion = $_POST["direccion"];
$localidad = $_POST["localidad"];
$edad = $_POST["edad"];
$consulta1 = "UPDATE datosclientes
SET
nombre='$nombre',
apellidos='$apellidos',
direccion='$direccion',
localidad='$localidad',
edad='$edad'
WHERE id_cliente='$id'";
$resultado = mysql_query($consulta, $cn) or die(mysql_error());
header("location: registro1.php");
}

Manu dijo...

Comprueba haciéndolo así ...

if (isset($_POST["eliminar"]))
{
$eliminar = $_POST["eliminar"];
$consulta = "DELETE FROM datosclientes WHERE id_cliente=$eliminar";
$resultado = mysql_query($consulta, $cn) or die(mysql_error());
header("location: registro1.php");
}
if (isset($_POST['id_cliente']))
{
$id=$_POST['id_cliente'];
$editar = $_POST["editar"];
$nombre = $_POST["nombre"];
$apellidos = $_POST["apellidos"];
$direccion = $_POST["direccion"];
$localidad = $_POST["localidad"];
$edad = $_POST["edad"];
$consulta1 = "UPDATE datosclientes
SET
nombre='$nombre',
apellidos='$apellidos',
direccion='$direccion',
localidad='$localidad',
edad='$edad'
WHERE id_cliente='$id'";
$resultado = mysql_query($consulta, $cn) or die(mysql_error());
header("location: registro1.php");
}

Manu dijo...
Este comentario ha sido eliminado por el autor.
Manu dijo...

ozzit te aconsejo que estructures en partes el código, por ejemplo, crea una carpeta y ve guardando cada consulta, por ejemplo, un archivo llamado eliminar.php, otro actualizar.php y otro crear.php y luego los incluyes en la acción que corresponde, como te dije ve cargando cada formulario a través de un parámetro acción, por ejemplo,
suponiendo que quieres hacerlo todo desdes un sólo archivo llamado index.php ...
<html>
<head>
<title>Editar usuarios</title>
</head>
<body>
<h1>Administración de usuarios</h1>
<ul>
<li><a href='index.php?accion=crear'>Crear usuario</a></li>
<li><a href='index.php?accion=eliminar'>Eliminar usuarios</a></li>
<li><a href='index.php?accion=actualizar'>Editar usuarios</a></li>
</ul>
<?php
if ($_GET["accion"] == "crear")
{
include "carpeta/crear.php";
/* y aquí el formulario de crear un nuevo usuario */
}
else if($_GET["accion"] == "eliminar") {
include "carpeta/eliminar.php";
/* y aquí el formulario de eliminar usuario */
}
else if ($_GET["accion"] == "actualizar")
{
include "carpeta/actualizar.php";
/* Y aquí el formulario de actualizar usuarios */
}
else
{
/*Entonces puedes mostrar un mensaje para realizar alguna acción, por ejemplo ... */
echo "<strong>Selecciona la acción que deseas realizar.</strong>";
}
?>
</body>
</html>