Enviar a un amigoImprimir Dejar un comentario

PHP con MySQL: Insertar datos en MySQL

Continuando con la serie de artículos dedicados a explicar como trabajar PHP con MySQL, ahora nos toca explicar como insertar datos o registros en nuestras tablas de MySQL.
20 de Diciembre de 2010

Fuente: http://blog.unijimpe.net/ Autor: unijimpe

 

Continuando con la serie de artículos dedicados a explicar como trabajar PHP con MySQL, ahora nos toca explicar como insertar datos o registros en nuestras tablas de MySQL.

Requerimientos

Para guardar datos en MySQL es necesario primero crear una conexión con MySQL, también necesitamos una base de datos de ejemplo el cual pueden crear con el siguiente script SQL y finalmente conocimientos básicos de SQL.

Conceptos Básicos

PHP provee funciones nativas que permiten interactuar con MySQL, para el proceso de insertar registros utilizaremos las siguientes funciones.

  • mysql_query permite enviar cualquier consulta SQL (SELECT, INSERT, UPDATE, etc.) desde PHP.
  • mysql_insert_id devuelve el identificador del último registro ingresado.

Entonces si deseamos insertar una nueva empresa en nuestra tabla de ejemplo tendríamos:

  1. // abrimos la conexión
  2. require("conexion.php");
  3. // insertarmos el registro
  4. mysql_query("INSERT INTO empresa (nombre, direccion) VALUES ('Apple', '1 Infinite Loop')");
  5. // mostramos el ID del registro

 

Como pueden ver la creación de datos es sencilla, solo necesitamos crear la consulta adecuada y la enviamos mediante mysql_query.

Ejemplo Práctico

Veamos un ejemplo práctico, donde mediante un formulario en HTML registraremos los datos de las empresas.

Creando el Formulario

Para nuestro ejemplo creamos un formulario con tres campos (nombre, dirección y teléfono) con dos botones uno para enviar los datos y otro para limpiar el formulario.

  1. method="post" action="agregar-empresa.php">
  2.     Nombre  type="text" id="nombre" name="nombre" /> />
  3.     Direcció type="text" id="direccion" name="direccion" /> />
  4.     Teléfono    type="text" id="telefono" name="telefono" /> />
  5.     type="submit">Guardar
  6.     type="reset">Limpiar
  7.  

 

Procesando los Datos

El siguiente paso, es verificar si se están enviando datos desde un formulario para luego crear la consulta concatenando los datos enviados para finalmente guardar los datos con la función mysql_query.

  1. // file: insert-demo2.php
  2. require("conexion.php");
  3. $status = "";
  4. if (isset($_POST["nombre"])) {
  5.     $nombre = $_POST["nombre"];
  6.     $direccion = $_POST["direccion"];
  7.     $telefono = $_POST["telefono"];
  8.     // Creamos la consulta 
  9.     $sql = "INSERT INTO empresa (nombre, direccion, telefono) ";
  10.     $sql.= "VALUES ('".$nombre."', '".$direccion."', '".$telefono."')";
  11.     // enviamos la consulta
  12.     mysql_query($sql, $conexion);
  13.     $status = "ok";
  14. }

 

Uniendo el código obtenemos nuestro primer ejemplo funcionando para agregar registros desde un formulario.

Filtrando los Datos

El ejemplo anterior, funciona pero tiene un problema y es que el usuario podría haber ingresado datos inválidos (Por ejemplo texto donde solo se aceptan números) o también enviar código SQL para atacar a nuestra base de datos. Por ello antes de utilizar los datos enviados por el usuario es necesario antes normalizar estos datos.

Creamos una función llamada sqlValue, esta se encarga de convertir al tipo de dato correcto y agregarle los apostrofes necesarios para los textos y fechas.

  1. // file: funciones.php
  2. function sqlValue($value, $type) {
  3.   $value = get_magic_quotes_gpc() ? stripslashes($value) : $value;
  4.   $value = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($value) : mysql_escape_string($value);
  5.   switch ($type) {
  6.     case "text":
  7.       $value = ($value != "") ? "'" . $value . "'" : "NULL";
  8.       break;
  9.     case "int":
  10.       $value = ($value != "") ? intval($value) : "NULL";
  11.       break;
  12.     case "double":
  13.       $value = ($value != "") ? "'" . doubleval($value) . "'" : "NULL";
  14.       break;
  15.     case "date":
  16.       $value = ($value != "") ? "'" . $value . "'" : "NULL";
  17.       break;
  18.   }
  19.   return $value;
  20. }

 

Esta función recibe dos parámetros, el primero el dato que deseamos normalizar y el segundo el tipo de dato (text, int, double, date). Luego vamos a modificar nuestro primer script para verificar los datos antes de guardarlos.

  1. // file: insert-demo3.php
  2. require("conexion.php");
  3. require("funciones.php");
  4. $status = "";
  5. if (isset($_POST["nombre"])) {
  6.     $nombre = sqlValue($_POST["nombre"], "text");
  7.     $direccion = sqlValue($_POST["direccion"], "text");
  8.     $telefono = sqlValue($_POST["telefono"], "int");
  9.    
  10.     $sql = "INSERT INTO empresa (nombre, direccion, telefono) ";
  11.     $sql.= "VALUES (".$nombre.", ".$direccion.", ".$telefono.")";
  12.    
  13.     mysql_query($sql, $conexion);
  14.     $status = "ok";
  15. }

 

Unimos nuevamente el código y obtenemos una nueva forma de guardar datos en MySQL esta vez verificando los tipos de datos antes de guardarlos.

Haciendo pequeñas modificaciones podríamos guardar los datos de cualquier formulario, no importa la cantidad de datos o la complejidad de los mismos, todo este proceso se puede resumir en armar correctamente la consulta SQL para insertar los datos.

Depurar los INSERTS

Si tienen problemas en la creación de sus consultas por que no insertan o generan un error, lo mas sencillo es imprimir la consulta antes de enviarla a MySQL y detener la ejecución del script PHP.

  1. $sql = "INSERT INTO empresa (nombre, direccion, telefono) ";
  2. $sql.= "VALUES (".$nombre.", ".$direccion.", ".$telefono.")";
  3. echo $sql;
  4. mysql_query($sql, $conexion);

 

La consulta devuelta podemos revisarla y detectar algún error de sintaxis, también podríamos ejecutarla directamente en algún cliente de MySQL que tengamos para verificar si hace la inserción correctamente.

Nota Final

Para mejorar aún mas nuestro script para insertar datos, podríamos agregar validación de formularios. Ello lo podríamos hacer desde el lado del cliente mediante una librería javascript para validar formulario (Por ejemplo: Validar Formularios con Mootools o también Vanadium: Validar formularios fácilmente). La segunda forma es hacerlo con PHP verificando que los datos no estén vacíos, asignando valores por defecto si es que el campo esta vacío, entre otras verificaciones.

© 2006 - 2010 unijimpe - Utiliza este feed solo para uso personal, partes de este feed pueden ser utilizados mencionando al autor, no esta permitido publicar enteramente este feed para uso comercial sin permiso del autor.

 

Comparte:

Comentarios Comentarios
No existen comentarios
Tu Comentario Tu Comentario
Normas de uso: Esta es la opinión de los internautas y no de esta publicación. No se permiten comentarios contrarios a las leyes o que puedan ser injuriosos. Esta publicación se reserva el derecho de eliminar cualquier comentario que se considere contrario a estas normas.
 
Nombre
Email
Localidad
País
Comentario
 

Divum.es | Licencia de Uso | Enlaces de Interés
 

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.

© 2008 Powered by AuroraPress