Está en la página 1de 21

PHP con MySQL: Introduccin a SQL SQL (Structured query language) es el lenguaje para interactuar con las bases

de datos, el cual nos permitir insertar registros, actualizar registros, buscar registros as como manipular tablas. El lenguaje SQL es semejante en todos los servidores de base de datos salvo pequeas diferencias, en nuestro caso veremos una gua de SQL para MySQL. Los ejemplos los puedes probar directamente en la lnea de comandos de MySQL o en algn cliente como phpMyAdmin o Navicat. Preparando los datos Para nuestro ejemplo imaginemos que necesitamos almacenar los datos de una empresa. Para cada empresa necesitamos guardar: nombre, direccin, telfono y una imagen con su logo. Entonces necesitaremos crear una tabla a la que llamaremos empresa la cual tendr 5 campos:

id: ser el identificador (interno) de la empresa el cual ser un nmero entero. nombre: es el campo que aceptar una cadena de texto con el nombre de la empresa. direccion: campo que guardar una cadena de texto con la direccin de la empresa. telefono: es un campo que aceptar solo nmeros que representan el telfono de la empresa. imagen: es el campo donde guardaremos el nombre del archivo del logo de la empresa. Crear tablas con SQL Para definir la estructura de la tabla utilizaremos CREATE TABLE, donde se asigna el nombre de la tabla as como cada uno de los campos indicando que tipos de datos vamos a almacenar. Entre los principales tipos de datos disponibles tenemos:

int: que permite guardar nmeros enteros. float: permite almacenar datos decimales. date: para guardar fechas, el formato de la fecha es aaaa-mm-dd. datetime: es para guardar fecha y hora, el formato es aaaa-mm-dd hh:mm:ss. time: para almacenar la hora, el formato de la hora es hh:mm:ss. char(n): almacena una cadena de texto de longitud fija n (De 0 a 255 caracteres). varchar(n): para cadenas de tamao variable de hasta n caracteres (De 0 a 255). text es un campo para almacenar textos de hasta 65535 caracteres. Para nuestro ejemplo crearamos la tabla con 5 campos, donde el primero de ellos ser el identificador de la empresa que ser un entero que ser ir autoincrementando. [SQL] CREATE TABLE empresa ( id int(11) NOT NULL AUTO_INCREMENT, nombre varchar(180), direccion varchar(180), telefono int(8), imagen varchar(50) ) [/SQL] Notese que por cada campo definimos el tipo de dato que puede almacenar. Los campos nombre y direccin aceptan textos de hasta 180 caracteres mientras que el campo imagen solo acepta 50 caracteres como mximo. Insertar datos con SQL Para insertar datos en las tablas haremos uso de la sentencia INSERT INTO, para ello podemos indicar los campos con sus respectivos valores, esto respetando los tipos de datos aceptados. Para nuestra tabla recin creada, insertaremos registros de la siguiente forma:

[SQL] INSERT INTO empresa (nombre, direccion, telefono, imagen) VALUES (Apple, 1 Infinite Loop, Cupertino, 89961010, apple.png) [/SQL] Como se aprecia no es necesario incluir el dato para el id por el del tipo AUTO_INCREMENT lo cual significa que se crear automticamente y con un valor incrementado en 1 al anterior registro. Si estamos insertando todos los valores de una tabla, podramos obviar los nombres de los campos si mantenemos el mismo orden en el que fueron creados los campos. [SQL] INSERT INTO empresa VALUES (Apple, 1 Infinite Loop, Cupertino, 89961010, apple.png) [/SQL] Tambin se pueden insertar solo algunos campos de la tabla y no necesariamente en el orden en que fueron creados los campos en donde si debemos indicar los nombres de los campos, por ejemplo: [SQL] INSERT INTO empresa (nombre, logo) VALUES (Apple, apple.png) [/SQL] Los campos para los que no asignamos valores tendrn valores nulos o el valor por defecto que hayamos definido en la creacin de la tabla. Editar datos con SQL Para actualizar datos de los registros de una tabla se puede utilizar UPDATE, donde indicamos la tabla donde se harn los cambios, los campos a reemplazar con sus respectivos valores asi como la condicin que se debe cumplir para realizar el cambio de los datos. Para hacer uso de estas condiciones, MySQL provee de funciones de comparacin como:

= para comparar si dos valores son iguales. <> para comparar si dos valores son diferentes. != para comparar si dos valores son diferentes. Igual al operador <>. <= compara si un dato es menor o igual a otro. < verifica si el datos es menor a otro. => para compara si el datos es mayor o igual a otro. > prueba si el datos es mayor a otro. IS NULL devuelve verdadero si el campo es nulo. IS NOT NULL verdadero si el campo no es nulo. Adicionalmente se pueden utilizar las funciones booleanas como NOT, AND, OR y XOR. Continuando con nuestro ejemplo, suponiendo que tenemos registrada una empresa con el identificador 57, podramos actualizar los datos de la siguiente forma: [SQL] UPDATE empresa SET nombre = Google, direccion = 1600 Amphitheatre Parkway, Mountain View WHERE id = 57 [/SQL]

Tambin podramos asignar una imagen por defecto a todas las empresas que no tengan logo, para ello haramos: [SQL] UPDATE empresa SET imagen = logo-default.png WHERE imagen IS NULL [/SQL] Eliminar datos con SQL Para eliminar datos utilizaremos DELETE FROM, en esta sentencia indicamos sobre que tabla vamos a realizar la eliminacin adems de la condicin que se debe cumplir para realizar la eliminacin. En nuestro ejemplo eliminaremos todas las empresas que tengan el campo del nombre vacio o nulo. [SQL] DELETE FROM empresa WHERE nombre IS NULL OR nombre = [/SQL] Consultar datos con SQL Para consultar datos (extraer datos) de una tabla se utiliza SELECT indicando los campos que deseamos extraer y el nombre de la tabla que utilizaremos. Para nuestra tabla de ejemplo si deseamos consultar todas nombres y direcciones de las empresas: [SQL]SELECT nombre, direccion FROM empresa[/SQL] Se pueden utilizar alias para los campos extrados, por ejemplo: [SQL]SELECT nombre as Empresa, direccion as Direccin FROM empresa [/SQL] Si deseamos extraer todos los campos podemos utilizar el caracter *. [SQL]SELECT * FROM empresa[/SQL] Filtrando los resultados Podemos aplicar condiciones a nuestras consultas con la directiva WHERE. Para extraer la empresa con identificador 57 la consulta sera: [SQL]SELECT * FROM empresa WHERE id = 57[/SQL] Si deseamos mostrar todas las empresas que tengan registradas su direccin: [SQL]SELECT * FROM empresa WHERE direccion IS NOT NULL[/SQL] Tambim podriamos consultar todas las empresas cuyo nombre empiece con la letra A. [SQL]SELECT * FROM empresa WHERE nombre like A%[/SQL]

Ordenando los resultados Para el ordenamiento de los resultados se utiliza ORDER BY, este define por que campo se har el ordenamiento as como si ser en forma ascendente (ASC) o descendente (ASC). Si utilizamos nuestra tabla de ejemplo podramos listar todas las empresas en orden alfabetico: [SQL]SELECT * FROM empresa ORDER BY nombre ASC[/SQL] Contando los resultados Es posible contar los registros utilizando COUNT, esto unido al filtro de datos es til para hacer conteos de datos. Si deseamos conocer cuantas empresa registradas tenemos: [SQL]SELECT COUNT(*) FROM empresa[/SQL] Podramos conocer cuantas empresas tienen registradas direcciones vacas: [SQL]SELECT COUNT(*) FROM empresa WHERE direccion = [/SQL] Limitando los resultados MySQL permite limitar la cantidad de resultados utilizando la palabra LIMIT, esta sentencia es muy flexible pues permite definir a partir de que registro y la cantidad de datos devueltos. Si deseamos visualir las 5 ultimas empresas registradas en nuestra tabla tendramos: [SQL]SELECT * FROM empresa ORDER BY id DESC LIMIT 5[/SQL] Si estamos mostrando los resultados ordenados alfabeticamente en grupos de 10, tendramos: [SQL] /* Para mostrar los primero 10 resultados */ SELECT * FROM empresa ORDER BY nombre ASC LIMIT LIMIT 0, 10 /* Para mostrar los siguientes 10 resultados */ SELECT * FROM empresa ORDER BY nombre ASC LIMIT LIMIT 10, 10 [/SQL] Ahora ya podemos crear, editar, eliminar y consultar los datos utilizando condiciones con la posibilidad de filtrar, ordenar y limitar los resultados.

PHP con MySQL: Crear una conexin a MySQL La conexin de PHP con MySQL es el primer paso para crear aplicaciones web. Al tener una conexin podremos insertar, editar y consultar registros de una Base de Datos lo cual nos permitir crear aplicaciones que permitan a los visitantes a consultar informacin de acuerdo a sus necesidades. Crear una conexin con MySQL Para crear una conexin con MySQL hacemos uso de la funcin mysql_connect y luego definimos la base de datos que vamos a utilizar por medio de la funcin mysql_select_db.

PHP 1. $conexion = mysql_connect("localhost", "usuario", "clave"); 2. mysql_select_db("demo", $conexion); En la primera lnea hemos creado la conexin a un servidor local y luego hemos seleccionado la base de datos demo la cual utilizaremos para consultar datos segn nuestras necesidades. Explicando la Conexin En el ejemplo hemos utilizado la funcin mysql_connect, el cual recibe tres parmetros. CODE 1. mysql_connect("server", "username", "password") Donde se tienen:

server: es la direccin IP o el nombre del servidor de base de datos. username: nombre usuario para acceder a MySQL. password: clave de acceso a MySQL. Cerrando la Conexin Una vez creada la conexin y hecho las consultas necesarias a nuestra base de datos, es necesario cerrar esa conexin de esta forma liberamos recursos del servidor y mejoramos el rendimiento de nuestra aplicacin. PHP 1. mysql_close($conexion); Para cerrar la conexin hemos utilizado la funcin mysql_close que recibe como parmetro el identificador de la conexin. Recomendaciones

Se recomienda hacer la conexin en un archivo externo, para poder utilizarlo en diferentes pginas. De esta forma si cambiamos de servidor solo editamos el archivo de conexin con los nuevos datos de conexin. Es recomendable cerrar siempre las conexiones, esto previene que la aplicacin tenga errores por exceso de conexiones.

PHP con MySQL: Insertar datos en MySQL Continuando con la serie de artculos 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 conexin con MySQL, tambin necesitamos una base de datos de ejemplo el cual pueden crear con el siguiente script SQL y finalmente conocimientos bsicos de SQL. Conceptos Bsicos 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 tendramos:

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

Como pueden ver la creacin de datos es sencilla, solo necesitamos crear la consulta adecuada y la enviamos mediante mysql_query. Ejemplo Prctico Veamos un ejemplo prctico, 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, direccin y telfono) con dos botones uno para enviar los datos y otro para limpiar el formulario. HTML4 1. 2. 3. 4. 5. 6. 7. <form method="post" action="agregar-empresa.php"> Nombre <input type="text" id="nombre" name="nombre" /><br /> Direcci&oacute;n <input type="text" id="direccion" name="direccion" /><br/> Tel&eacute;fono <input type="text" id="telefono" name="telefono" /><br /> <button type="submit">Guardar</button> <button type="reset">Limpiar</button> </form>

Procesando los Datos El siguiente paso, es verificar si se estn enviando datos desde un formulario para luego crear la consulta concatenando los datos enviados para finalmente guardar los datos con la funcinmysql_query. PHP 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. } Uniendo el cdigo obtenemos nuestro primer ejemplo funcionando para agregar registros desde un formulario. // file: insert-demo2.php require("conexion.php"); $status = ""; if (isset($_POST["nombre"])) { $nombre = $_POST["nombre"]; $direccion = $_POST["direccion"]; $telefono = $_POST["telefono"]; // Creamos la consulta $sql = "INSERT INTO empresa (nombre, direccion, telefono) "; $sql.= "VALUES ('".$nombre."', '".$direccion."', '".$telefono."')"; // enviamos la consulta mysql_query($sql, $conexion); $status = "ok";

Filtrando los Datos El ejemplo anterior, funciona pero tiene un problema y es que el usuario podra haber ingresado datos invlidos (Por ejemplo texto donde solo se aceptan nmeros) o tambin enviar cdigo 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 funcin llamada sqlValue, esta se encarga de convertir al tipo de dato correcto y agregarle los apostrofes necesarios para los textos y fechas. PHP 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. } Esta funcin recibe dos parmetros, 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. PHP 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. } mysql_query($sql, $conexion); $status = "ok"; $sql = "INSERT INTO empresa (nombre, direccion, telefono) "; $sql.= "VALUES (".$nombre.", ".$direccion.", ".$telefono.")"; // file: insert-demo3.php require("conexion.php"); require("funciones.php"); $status = ""; if (isset($_POST["nombre"])) { $nombre = sqlValue($_POST["nombre"], "text"); $direccion = sqlValue($_POST["direccion"], "text"); $telefono = sqlValue($_POST["telefono"], "int"); } return $value; // file: funciones.php function sqlValue($value, $type) { $value = get_magic_quotes_gpc() ? stripslashes($value) : $value; $value = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($value) : mysql_escape_string($value); switch ($type) { case "text": $value = ($value != "") ? "'" . $value . "'" : "NULL"; break; case "int": $value = ($value != "") ? intval($value) : "NULL"; break; case "double": $value = ($value != "") ? "'" . doubleval($value) . "'" : "NULL"; break; case "date": $value = ($value != "") ? "'" . $value . "'" : "NULL"; break;

Unimos nuevamente el cdigo y obtenemos una nueva forma de guardar datos en MySQL esta vez verificando los tipos de datos antes de guardarlos. Haciendo pequeas modificaciones podramos 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 creacin 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 ejecucin del script PHP. PHP 1. 2. 3. 4. 5. $sql = "INSERT INTO empresa (nombre, direccion, telefono) "; $sql.= "VALUES (".$nombre.", ".$direccion.", ".$telefono.")"; echo $sql; exit; mysql_query($sql, $conexion);

La consulta devuelta podemos revisarla y detectar algn error de sintaxis, tambin podramos ejecutarla directamente en algn cliente de MySQL que tengamos para verificar si hace la insercin correctamente. Nota Final Para mejorar an mas nuestro script para insertar datos, podramos agregar validacin de formularios. Ello lo podramos hacer desde el lado del cliente mediante una librera javascript para validar formulario (Por ejemplo: Validar Formularios con Mootools o tambin Vanadium: Validar formularios fcilmente). La segunda forma es hacerlo con PHP verificando que los datos no estn vacos, asignando valores por defecto si es que el campo esta vaco, entre otras verificaciones. PHP con MySQL: Consultar datos en MySQL Consultar o extraer datos es una de las tareas mas comunes al interactuar con bases de datos, de esta forma podemos extraer los datos previamente almacenados, por ejemplo para mostrar la lista de productos de una tienda online o tambin para un buscador de documentos o el login de usuarios. Requerimientos Antes de continuar, es necesario tener una conexin abierta a MySQL, para ello pueden leer Crear una conexin a MySQL y luego crear la base de datos de ejemplo con el siguiente Script SQL. Extrayendo datos de MySQL Para extraer datos utilizaremos la funcin mysql_query mediante la cual enviamos un consulta SQL. Entonce primero incluimos el archivo para crear la conexin e inmediatamente creamos la consulta para extraer todos los datos de las empresas en nuestra base de datos. PHP 1. // incluimos la conexin 2. require("conexion.php"); 3. // creamos la consulta 4. $query = "SELECT * FROM empresa ORDER BY nombre ASC"; 5. // enviamos la consulta a MySQL 6. $queEmp = mysql_query($query, $conexion); Tambin se puede agregar una sentencia para mostrar si hay algn error en la conexin o consulta.

PHP 1. require("conexion.php"); 2. $query = "SELECT * FROM empresa ORDER BY nombre ASC"; 3. $queEmp = mysql_query($query, $conexion) or die(mysql_error()); Mostrando los Datos El siguiente paso es mostrar los datos extrados en la consulta, para ello podemos utilizar mysql_fetch_assoc el cual devolver un array asociativo con el siguiente registro devuelto por la consulta. Entonces para mostrar todos los registros devueltos por la consulta se tendra: PHP 1. while ($resEmp = mysql_fetch_assoc($queEmp)) { 2. 3. } Donde se puede ver que para acceder a cada campo del registro lo hacemos como un array donde le pasamos el nombre del campo que deseamos acceder (En el ejemplo estamos mostrando todos los nombres de las empresas consultadas). Ahora, solo depende como deseamos mostrar los datos para modificar nuestro script. Por ejemplo si deseamos mostrar los datos como una lista tendramos PHP 1. <ul> 2. <?php while ($rsEmp = mysql_fetch_assoc($quEmp)) { ?> 3. <li><?php echo $rsEmp['nombre']; ?></li> 4. <?php } ?> 5. </ul> Ahora tambin podramos mostrar los resultados en una tabla o datagrid, para ello modificamos nuestro cdigo donde utilizaremos una tabla para mostrar en varias columnas los datos consultados. PHP 1. <table> 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. <tr> <th>Nombre</th> <th>Direccin</th> <th>Telfono</th> </tr> <?php while ($rsEmp = mysql_fetch_assoc($quEmp)) { ?> <tr> <td><?php echo $rsEmp['nombre']; ?></td> <td><?php echo $rsEmp['direccion']; ?></td> <td><?php echo $rsEmp['telefono']; ?></td> echo $resEmp['nombre']."<br>";

12. </tr> 13. <?php } ?> 14. </table>

Crear un Buscador Ahora, podramos crear un buscador bsico de empresas, para ello creamos un formulario para ingresar el criterio de bsqueda.

PHP 1. <form id="frbuscar" method="get" action=""> 2. 3. <input name="criterio" id="criterio" type="text" /> <input type="submit" id="btbuscar" value="Buscar" />

4. </form> Antes de continuar decidimos el tipo de consulta SQL que vamos a utilizar, en nuestro caso la bsqueda ser por las primeras letras del nombre, para ello utilizaremos la sentencia LIKE explicada en el artculo PHP con MySQL: Introduccin a SQL. SQL 1. SELECT * FROM empresa WHERE nombre LIKE 'A%' Luego, una vez enviado el formulario procedemos a recuperar los datos para proceder a crear la consulta y enviarla a MySQL. Primero verificamos que se ha enviado un criterio de bsqueda luego creamos la consulta no sin antes normalizar los datos (para prevenir ataques de inyeccin SQL), esto lo hacemos con la funcin sqlValue que hemos creado en PHP con MySQL: Insertar datos en MySQL. PHP 1. require("conexion.php"); 2. require("funciones.php"); 3. 4. $criterio = getParam($_GET["criterio"], ""); 5. $total = 0; 6. if ($criterio != "") { 7. 8. 9. 10. 11. } Ntese que estamos utilizando una variable $total donde se almacena el total de resultados devueltos por la consulta. El total de resultados se obtiene con la funcin mysql_num_rows. Finalmente mostramos los resultados al cliente, para ello verificamos que existan resultados en la consulta. Uniendo todos los elementos tendramos: PHP 1. <?php 2. require("conexion.php"); 3. require("funciones.php"); 4. 5. $criterio = getParam($_GET["criterio"], ""); 6. $total = 0; 7. if ($criterio != "") { 8. 9. 10. 11. 12. } 13. ?> 14. <html> $slike = sqlValue($criterio."%", "text"); $query = "SELECT * FROM empresa WHERE nombre like ".$slike." ORDER BY nombre ASC"; $queEmp = mysql_query($query, $conexion); $total = mysql_num_rows($queEmp); $slike = sqlValue($criterio."%", "text"); $query = "SELECT * FROM empresa WHERE nombre like ".$slike." ORDER BY nombre ASC"; $queEmp = mysql_query($query, $conexion); $total = mysql_num_rows($queEmp);

15. <head> 16. <title>Consultar datos en MySQL</title> 17. </head> 18. <body> 19. <h3>Buscador de Empresas</h3> 20. <form id="frbuscar" method="get" action=""> 21. 22. <input name="criterio" id="criterio" type="text" /> <input type="submit" id="btbuscar" value="Buscar" />

23. </form> 24. <?php if ($total > 0) { ?> 25. <em>Total de Resultados: <?php echo $total; ?></em> 26. <table> 27. <tr> 28. 29. 30. <th>Nombre</th> <th>Direccin</th> <th>Telfono</th>

31. </tr> 32. <?php while ($rsEmp = mysql_fetch_assoc($quEmp)) { ?> 33. <tr> 34. 35. 36. <td><?php echo $rsEmp['nombre']; ?></td> <td><?php echo $rsEmp['direccion']; ?></td> <td><?php echo $rsEmp['telefono']; ?></td>

37. </tr> 38. <?php } ?> 39. </table> 40. <?php } ?> 41. <p>&nbsp;</p> 42. </body> 43. </html> Como pueden ver no es complicado hacer consultas a MySQL, solo debemos crear la cadena con la consulta SQL y luego enviarla utilizando la funcin mysql_query. Lo siguiente solo depende de como deseamos mostrar la informacin resultante de nuestra consulta. Para finalizar les dejo los archivos fuente de los ejemplos desarrollados en este artculo para que puedan hacer sus pruebas, seguir experimentando y completar su aprendizaje. PHP con MySQL: Editar Registros con MySQL Continuando con la serie de artculos 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: Introduccin 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 funcin 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 pgina donde se har la edicin de datos. HTML4 1. <?php 2. // creamos la conexin 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. <html> 10. <head> 11. <title>Listado de Empresas</title> 12. </head> 13. <body> 14. <table> 15. <?php while ($rsEmp = mysql_fetch_assoc($quEmp)) { ?> 16. <tr> 17. 18. 19. <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>

20. </tr> 21. <?php } ?> 22. </table> 23. </body> 24. </html> Como se puede ver hemos creado un enlace al archivo editar.php al cual le pasamos como parmetro 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 parmetro GET. PHP 1. // editar.php 2. require("conexion.php"); 3. require("funciones.php"); 4. 5. $idempresa = getParam($_GET["id"], "-1"); 6. // consultamos los datos 7. $sql = "SELECT * FROM empresa WHERE id = ".sqlValue($idempresa, "int"); 8. $queEmp = mysql_query($sql, $conexion); 9. $rsEmp = mysql_fetch_assoc($queEmp);

10. $total = mysql_num_rows($queEmp); 11. if ($total == 0) { 12. 13. 14. 15. } Notar que estamos utilizando la funcin 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 nmero 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 recin consultados, para ello imprimimos los datos de la variable $rsEmp y accedemos a cada campo como si fuera un array: HTML4 1. <form method="post" action="editar.php?action=edit"> 2. 3. 4. 5. 6. 7. 8. 9. 10. <strong>Nombre</strong> <input type="text" name="nombre" value="<?php echo $rsEmp['nombre']; ?>" /> <strong>Direccin</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> // si no hay datos redireccionamos al listado header("location: listado.php"); exit;

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 condicin 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 1. $action = getParam($_GET["action"], ""); 2. if ($action == "edit") { 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. } $sql = "UPDATE empresa SET "; $sql.= "nombre=".$nombre.", direccion=".$direccion.", telefono=".$telefono." "; $sql.= "WHERE id=".$idempresa; mysql_query($sql, $conexion); header("location: listado.php"); $idempresa = sqlValue($_POST["id"], "int"); $nombre = sqlValue($_POST["nombre"], "text"); $direccion = sqlValue($_POST["direccion"], "text"); $telefono = sqlValue($_POST["telefono"], "int");

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 cdigo para obtener el script para editar registros. HTML4 1. <?php 2. require("conexion.php"); 3. require("funciones.php"); 4. 5. $idempresa = getParam($_GET["id"], "-1"); 6. $action = getParam($_GET["action"], ""); 7. 8. if ($action == "edit") { 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 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. 27. 28. } 29. ?> 30. <html> 31. <head> 32. <title>Editar Empresa</title> 33. </head> 34. <body> 35. <h3>Editar Empresa</h3> 36. <form method="post" action="editar.php?action=edit"> 37. 38. 39. 40. 41. 42. <strong>Nombre</strong> <input type="text" name="nombre" value="<?php echo $rsEmp['nombre']; ?>" /> <strong>Direccin</strong> <input type="text" name="direccion" value="<?php echo $rsEmp['direccion']; ?>" /> <strong>Telefono</strong> <input type="text" name="telefono" value="<?php echo $rsEmp['telefono']; ?>" /> header("location: listado.php"); exit; $sql = "UPDATE empresa SET "; $sql.= "nombre=".$nombre.", direccion=".$direccion.", telefono=".$telefono." "; $sql.= "WHERE id=".$idempresa; mysql_query($sql, $conexion); header("location: listado.php"); $idempresa = getParam($_POST["id"], "-1"); $nombre = sqlValue($_POST["nombre"], "text"); $direccion = sqlValue($_POST["direccion"], "text"); $telefono = sqlValue($_POST["telefono"], "int");

43. 44. 45.

<input type="hidden" id="id" name="id" value="<?php echo $rsEmp["id"]; ?>" /> <button type="submit">Guardar</button> <button type="reset">Limpiar</button>

46. </form> 47. </body> 48. </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 podramos aplicarlo a cualquier cantidad de campos. Generar PDF con PHP y MySQL El presente ejemplo explica como generar un reporte en PDF extrayendo datos de MySQL utilizando PHP. Este ejemplo lo hacemos aprovechando el post anterior en el cual explicbamos como obtener datos de base de datos MySQL. Para la generacin de PDF utilizaremos la clase R&OS: pdf class de la cual ya hemos comentado en Generar PDF con PHP.

Crear el documento PDF Lo primero es crear una instancia para la creacin del documento PDF, para ello incluimos la librera class.ezpdf.php, luego creamos una variable del tipo Cezpdf en donde definimos el tipo de papel A4, luego definimos la fuente y los margenes. PHP 1. require_once('class.ezpdf.php'); 2. $pdf =& new Cezpdf('a4'); 3. $pdf->selectFont('../fonts/courier.afm'); 4. $pdf->ezSetCmMargins(1,1,1.5,1.5); Obtenemos los registros desde MySQL Ahora procedemos a extraer los registros de nuestra base de datos, en este caso solo obtenemos el nombre, direccin y telefono de la tabla empresa de nuestra base de datos. PHP 1. $conexion = mysql_connect("localhost", "usuario", "clave"); 2. mysql_select_db("demo", $conexion);

3. $queEmp = "SELECT nombre, direccion, telefono FROM empresa"; 4. $resEmp = mysql_query($queEmp, $conexion) or die(mysql_error()); 5. $totEmp = mysql_num_rows($resEmp); Creando el array de datos, ttulos y opciones A continuacin procedemos a crear matrices que luego utilizaremos en la creacin de nuestro PDF, en el caso que deseemos incluir una tabla con con datos debemos crear una matriz con estos datos, en nuestro caso asignamos los resultados de la consulta y le agregamos un campo adicional con un numero correlativo. Lo siguiente es crear la matriz con los nombres de la tabla, en este caso llamamos a esta matriz $titles en donde a cada campo agregado a la matriz de datos le hacemos corresponder un nombre que aparecer como titulo de la fila. La tercera matriz indica los colores de las celdas, la orientacin y el ancho de la tabla. PHP 1. $ixx = 0; 2. while($datatmp = mysql_fetch_assoc($resEmp)) { 3. 4. 5. } 6. $titles = array( 7. 8. 9. 10. 11. 13. 14. 15. 16. ); ); 'shadeCol'=>array(0.9,0.9,0.9), 'xOrientation'=>'center', 'width'=>500 'num'=>'<b>Num</b>', 'nombre'=>'<b>Empresa</b>', 'direccion'=>'<b>Direccion</b>', 'telefono'=>'<b>Telefono</b>' $ixx = $ixx+1; $data[] = array_merge($datatmp, array('num'=>$ixx));

12. $options = array(

Imprimiendo los Resultados Una vez que tenemos todos los datos preparados procedemos a generar el PDF con toda la informacin que deseamos. Iniciamos esto creando un titulo y subtitulo de texto, luego escribimos los resultados de la consulta con la funcin ezTable a la cual se pasamos los datos, ttulos y opciones. Finalmente al final del documento agregamos la fecha y hora de la generacin del documento. PHP 1. $txttit = "<b>BLOG.UNIJIMPE.NET</b>\n"; 2. $txttit.= "Ejemplo de PDF con PHP y MYSQL \n"; 3. 4. $pdf->ezText($txttit, 12); 5. $pdf->ezTable($data, $titles, '', $options); 6. $pdf->ezText("\n\n\n", 10); 7. $pdf->ezText("<b>Fecha:</b> ".date("d/m/Y"), 10); 8. $pdf->ezText("<b>Hora:</b> ".date("H:i:s")."\n\n", 10); 9. $pdf->ezStream(); Unimos todos estos bloques y tenemos listo nuestro script para generar reportes en PDF, pueden ver el ejemplo funcionando en php-mysql.php. Para finalizar les dejo los archivos del ejemplo para que lo prueben y modifiquen a sus necesidades.

PDFs con fondo utilizando PHP En esta oportunidad les presentamos la forma de generar archivos PDF que contengan un fondo personalizado utilizando PHP. Esto nos puede permitir crear por ejemplo diplomas o certificados de forma rpida basado en un fondo predeterminado en conjunto con la informacin extrada de una base de datos. Para la generacin de archivos PDF utilizaremos la clase R&OS: pdf class de la cual ya hemos comentado anteriormente en Generar PDF con PHP.

Requisitos Lo primero que se necesita es la clase R&OS: pdf Class que es la base para la creacin de PDF. Lo siguiente es una clase llamada backgroundPDF el cual es una extensin de la clase anterior. Esta la puedes encontrar en Background colors and images, descargan el archivo class.backgroundpdf.txt y lo renombran a class.backgroundpdf.php. Implementando Para la implementacin de los PDF con fondo, incluimos las dos clases necesarias y luego inicializamos el PDF creando una instancia de la clase backgroundPDF de la siguiente forma. PHP 1. include('class.ezpdf.php'); 2. include('class.backgroundpdf.php'); 3. 4. $pdf = new backgroundPDF('a4', 'portrait', 'image', array('img'=>'img.jpg')); En donde hemos seleccionado el tipo de papel, la orientacin del papel y la imagen que deseamos utilizar como fondo para nuestro PDF. Luego de ello continuamos con los comandos ya conocidos para la creacin de PDF con lo cual tendramos: PHP 1. include('class.ezpdf.php'); 2. include('class.backgroundpdf.php'); 3. 4. $pdf = new backgroundPDF('a4', 'portrait', 'image', array('img'=>'img.jpg')); 5. $pdf->selectFont('Helvetica.afm'); 6. $pdf->ezText('Background in PDF', 50); 7. $pdf->ezText('', 12); 8. $pdf->ezText('Ejemplo de PDF utilizando una imagen como Fondo.', 12); 9. $pdf->ezNewPage();

10. $pdf->ezText('Pagina 2', 50); 11. 12. $pdf->ezStream(); Con lo cual obtenemos el siguiente resultado que hemos colocado en pdf-background.php. Como ven es muy sencillo y tiene infinidad de utilidades. Finalmente les dejo los archivo fuente de este ejemplo para que puedan hacer sus propios cambios. Generar PDF con PHP PHP entre sus caractersticas primarias tiene la capacidad de generar archivos PDF, tiene funciones especificas para personalizar y crear estos archivos pero son muy dificiles de utilizar, para ello existe una clase llamada R&OS: pdf class el cual provee mtodos muy potentes y simplificados para la creacin de archivos PDF.

Descarga Puedes descargar los archivos de manera gratuita en pdfClassesAndFonts_009e.zip. La documentacin la puedes encontrar en readme.pdf. Primeros Pasos En la distribucin de esta clase vienen incluido dos archivos: class.ezpdf.php y class.pdf.php los cuales contienen todas las propiedades y mtodos necesarios para crear documentos PDF, adems de ello hay una carpeta llamada fonts en el cual vienen algunas fuentes que podemos utilizar en la generacin de pdfs. Luego para crear un archivo pdf el primer paso es incluir las clases con la siguiente linea. PHP 1. include ('class.ezpdf.php'); El siguiente paso es crear una instancia de la clase Cezpdf con la cual manejaremos la creacin de pdf. Entonces creamos un archivo llamado pdf01.php donde crearemos nuestro primer documento pdf. PHP 1. <?php 2. include ('class.ezpdf.php'); 3. $pdf = new Cezpdf(); 4. $pdf->selectFont('fonts/Helvetica.afm'); 5. $pdf->ezText('Mi primer pdf en PHP', 30); 6. $pdf->ezStream(); 7. ?> Hemos empleado los mtodos: selectFont para seleccionar la fuente con la que escribiremos los textos, ezText que permite agregar un texto con su respectivo tamao de fuente y finalmente generamos el archivo con la funcin ezStream. Opciones Avanzadas Una de la opciones que tiene es la de incluir los datos del creador o autor en el archivo, esto lo podemos hacer pasando un array con los datos del creador a la funcin addInfo para ello creamos el archivo pdf02.php. PHP 1. include('class.ezpdf.php'); 2. $pdf =& new Cezpdf('a4');

3. $pdf->selectFont('fonts/courier.afm'); 4. $datacreator = array ( 5. 6. 7. 8. 9. 10. 'Title'=>'Ejemplo PDF', 'Author'=>'unijimpe', 'Subject'=>'Ejemplo de PDF', 'Creator'=>'unijimpe@hotmail.com', 'Producer'=>'http://blog.unijimpe.net' );

11. $pdf->addInfo($datacreator); 12. $pdf->ezText("<b>Ejemplo de PDF en PHP</b>\n",20); 13. $pdf->ezText("Esta es una prueba de pdf\n",12); 14. $pdf->ezText("\n\n\n",10); 15. $pdf->ezText("<b>Fecha:</b> ".date("d/m/Y"),10); 16. $pdf->ezText("<b>Hora:</b> ".date("H:i:s")."\n\n",10); 17. $pdf->ezStream(); Finalmente veamos la creacin de una tabla, para ello emplearemos el mtodo ezTable el cual tiene dos parmetros, un array con con los datos a mostrar y un array con los ttulos de la tabla, esto lo hacemos en el archivo pdf03.php. PHP 1. <?php 2. include('class.ezpdf.php'); 3. $pdf =& new Cezpdf('a4'); 4. $pdf->selectFont('fonts/courier.afm'); 5. $datacreator = array ( 6. 7. 8. 9. 10. 11. 13. 14. $data[] = array('num'=>1, 'mes'=>'Enero'); 15. $data[] = array('num'=>2, 'mes'=>'Febrero'); 16. $data[] = array('num'=>3, 'mes'=>'Marzo'); 17. $data[] = array('num'=>4, 'mes'=>'Abril'); 18. $data[] = array('num'=>5, 'mes'=>'Mayo'); 19. $data[] = array('num'=>6, 'mes'=>'Junio'); 20. $data[] = array('num'=>7, 'mes'=>'Julio'); 21. $data[] = array('num'=>8, 'mes'=>'Agosto'); 22. $data[] = array('num'=>9, 'mes'=>'Septiembre'); 23. $data[] = array('num'=>10, 'mes'=>'Octubre'); 24. $data[] = array('num'=>11, 'mes'=>'Noviembre'); 25. $data[] = array('num'=>12, 'mes'=>'Diciembre'); 26. 27. $titles = array('num'=>'<b>Numero</b>', 'mes'=>'<b>Mes</b>'); 28. 29. $pdf->ezText("<b>Meses en PHP</b>\n",16); 'Title'=>'Ejemplo PDF', 'Author'=>'unijimpe', 'Subject'=>'PDF con Tablas', 'Creator'=>'unijimpe@hotmail.com', 'Producer'=>'http://blog.unijimpe.net' );

12. $pdf->addInfo($datacreator);

30. $pdf->ezText("Listado de Meses\n",12); 31. $pdf->ezTable($data,$titles,'',$options ); 32. $pdf->ezText("\n\n\n",10); 33. $pdf->ezText("<b>Fecha:</b> ".date("d/m/Y"),10); 34. $pdf->ezText("<b>Hora:</b> ".date("H:i:s")."\n\n",10); 35. $pdf->ezStream(); 36. ?> Con lo cual obtenemos el siguiente resultado en nuestro browser.

Crear PDF con Imagenes en PHP R&OS: pdf class una librera muy potente con la cual se pueden generar archivos PDF utilizando PHP tiene entre sus muchas cualidades el soporte para incluir imgenes dinmicamente. Si an no sabes como utilizar R&OS, puedes leer Generar PDF con PHP en el cual explicamos los aspectos bsicos del uso de esta librera. Insertando imgenes La librera R&OS tiene una funcin llamada ezImage la cual permite incluir una imagen desde un archivo cuya sintaxis es la siguiente: PHP 1. ezImage(image,[padding],[width],[resize],[justification]) En donde, image es la ruta de la imagen a incluir, padding es la separacin entre el contenido y la imagen expresado en pixels, width es el ancho, resize es el tipo de redimensin a aplicarse (full,width, none), justification es la justificacin de la imagen (center, left, right). Luego si deseamos incluir una imagen llamada img.jpg, que no tenga margen de separacin, de ancho 420 pixels y alineado a la izquierda. Finalmente imprimimos la fecha y hora de generacin del archivo. PHP 1. include('class.ezpdf.php'); 2. $pdf =& new Cezpdf('a4'); 3. $pdf->selectFont('fonts/courier.afm'); 4. $pdf->ezText("<b>PDF con Imagenes en PHP</b>\n",20); 5. $pdf->ezText("Ejemplo de inclusin de imagenes en pdf\n\n",12); 6. $pdf->ezImage("img.jpg", 0, 420, 'none', 'left'); 7. $pdf->ezText("<b>Fecha:</b> ".date("d/m/Y"),10);

8. $pdf->ezText("<b>Hora:</b> ".date("H:i:s"),10); 9. $pdf->ezText("<c:alink:http://unijimpe.net/>unijimpe</c:alink>"); 10. $pdf->ezStream(); Ntese que primero hemos incluido el archivo class.ezpdf.php el cual nos permite hacer uso de las funciones para crear pdf, luego creamos un pdf con tamao de papel A4, escribimos un texto luego en la lnea 6 mostramos la imagen deseada. Al final del ejemplo hemos incluido un enlace, esto utilizando la propiedad c:link. Convertir HTML a PDF con PHP dompdf en una librera PHP que te permitir convertir HTML a PDF. Puede interpretar tags html, CSS incluidos y externos con lo cual se puede lograr documentos PDF que son el reflejo de los html.

Caractersticas dompdf requiere para su funcionamiento PHP 5 y entre las cualidades mas destacables tenemos:

Soporte de propiedades, selectores CSS 2.1. Soporte de atributos HTML 4.0 Soporte para hojas de estilos externas (local o remoto) Soporte para tablas, incluyendo las propiedades de filas y columnas. Soporte de imgenes GIF, JPG y PNG. Soporte para links y anchors. Soporte inline de PHP. No necesita instalar libreras adicionales, por que utiliza R&OS PDF class. Utilizando dompdf Utilizar dompdf es muy sencillo, lo primero es incluir el archivo dompdf_config.inc.php y luego crear una instancia de la clase DOMPDF. PHP 1. require_once("dompdf_config.inc.php"); 2. $html = 3. 4. 5. 6. 7. 8. $dompdf = new DOMPDF(); 9. $dompdf->load_html($html); 10. $dompdf->render(); 11. $dompdf->stream("sample.pdf"); Como se puede observar es muy sencilla de utilizar y se puede lograr muy buenos resultados. Si deseas probar el funcionamiento puede utilizar dompdf Demo el cual muestra un formulario en el cual puedes ingresar el html que deseas y te generar automticamente el pdf. '<html><body>'. '<p>Put your html here, or generate it with your favourite '. 'templating system.</p>'. '</body></html>';

También podría gustarte