You are on page 1of 11

Conectando PHP y MySQL Para obtener los datos desde MySQL necesitamos una conexin (una forma de enlazar

o comunicarse), la cual nos permitir extraer datos de la misma. Para ello PHP tiene una serie de funciones exclusivamente para interactuar con mysql. Entonces para la conexin utilizaremos la funcin mysql_connect y luego mysql_select_db el cual nos permite definir a que base de datos del servidor deseamos conectarnos. 1. $conexion = mysql_connect("localhost", "usuario", "clave"); 2. mysql_select_db("demo", $conexion); Obteniendo registros de la Base de Datos Una vez que tenemos una conexin lo siguiente es extraer los datos, esto lo hacemos enviando consultas SQL mediante la funcin mysql_query. Tambin obtenemos el numero total de registros devueltos por nuestra consulta. 1. $queEmp = "SELECT * FROM empresa ORDER BY nombre ASC"; 2. $resEmp = mysql_query($queEmp, $conexion) or die(mysql_error()); 3. $totEmp = mysql_num_rows($resEmp); Mostrando los resultados. Finalmente mostramos los resultados obtenidos de nuestra consulta, para ello extraemos cada resultado utilizando la funcin mysql_fetch_assoc la cual devuelve una matriz asociativa utilizando los nombres de los campos de la tabla. 1. if ($totEmp> 0) { 2. while ($rowEmp = mysql_fetch_assoc($resEmp)) { 3. echo "<strong>".$rowEmp['nombre']."</strong><br>"; 4. echo "Direccion: ".$rowEmp['direccion']."<br>"; 5. echo "Telefono: ".$rowEmp['telefono']."<br><br>"; 6. } 7. } Notese que primero hemos verificado si existen resultados y luego verificamos en cada pasada de la sentencia While si existe el siguiente resultado para luego mostrarlo. Asi como hemos consultado registros, podemos insertar, editar y eliminar registros enviando sentencias SQL a la base de datos. Para finalizar les dejo el ejemplo funcionando y tambin los archivos para descargar. En un articulo anterior Conectar PHP con MySQL explicamos como realizar una conexin a MySQL y obtener datos con PHP, en esta ocasin veremos como insertar registros en nuestra base de datos. Creando la Base de datos Para este ejemplo necesitamos una base de datos que la llamaremos demo, en la cual crearemos un tabla llamada empresa la cual tendr los siguientes campos: idemp, nombre, direccion, telefono. Para los menos experimentados les dejo el script SQL para crear esta tabla. Sintaxis SQL para insertar registros Lo primero que necesitamos conocer el la sintaxis SQL para insertar registros la cual mostramos a continuacin en donde table es la tabla donde deseamos insertar los datos, field1 y field2 son los nombres de los campos y value1 y value2 los valores:

1. INSERT INTO TABLE (field1, field2) VALUES (value1, value2) Luego, para hacer la insercin utilizando PHP, lo primero es crear una conexin y luego enviar la consulta utilizando el mtodo mysql_query de la siguiente forma: 1. 2. 3. 4. 5. 6. $conexion = mysql_connect("localhost", "usuario", "clave"); mysql_select_db("demo", $conexion); $que = "INSERT INTO empresa (nombre, direccion, telefono) "; $que.= "VALUES ('Inka Tours', 'Av Pardo 728', '511 4845858') "; $res = mysql_query($que, $conexion) or die(mysql_error());

Creando el Formulario Para que el usuario puede ingresar los datos de manera sencilla crearemos un formulario en cual cual se ingresarn los datos de la empresa, para ello creamos el formulario en html. 1. <form id="insertar" name="insertar" method="post" action=""> 2. Nombre: 3. <input name="nombre" type="text" id="nombre" size="50" /> 4. Direccion: 5. <input name="dir" type="text" id="dir" size="50" /> 6. Telefono: 7. <input name="fono" type="text" id="fono" size="50" /> 8. <input type="submit" name="Submit" value="Insertar Registro" /> 9. <input type="hidden" name="action" value="add" /> 10. </form> Notese que hemos agregado un campo oculto llamado action el cual lo utilizaremos para verificar si se ha enviado el formulario y procesar los datos. Entonces verificamos que se enviado el formulario en cuyo caso realizamos la conexin a MySQL y enviamos la consulta para insertar los datos. 1. $state = false; 2. if ($_POST['action'] == "add") { 3. $conexion = mysql_connect("localhost", "usuario", "clave"); 4. mysql_select_db("demo", $conexion); 5. 6. $que = "INSERT INTO empresa (nombre, direccion, telefono) "; 7. $que.= "VALUES ('".$_POST['nombre']."', '".$_POST['dir']."', '".$_POST['fono']."') "; 8. $res = mysql_query($que, $conexion) or die(mysql_error()); 9. $state = true; 10. } Finalmente mostramos un mensaje cuando se ha insertado correctamente el registro en la base de datos. 1. <?php if ($state) { ?> 2. <p><em>Registro insertado correctamente</em></p> 3. <?php } ?> Observaciones Por motivos de facilitar el entendimiento del funcionamiento de la insercin de datos hemos obviado algunos puntos. Pero es necesario advertir que para insertar registros los datos que vienen desde formularios nunca deben ir directamente a la consulta pues pueden contener sentencias SQL (Esto es llamado Inyeccin SQL) proceso mediante el cual pueden ingresar a nuestros sistemas y manipular datos sin consentimiento nuestro.

Otro punto que hay que tener en cuenta es validar los datos, esto para prevenir que se ingrese texto donde debera haber nmeros por ejemplo, lo cual generara errores de SQL. Finalmente les dejo los archivos fuente para que lo descarguen y hagan sus propias pruebas para comprender el funcionamiento de este script. En artculos previos hemos explicado como interactuar con MySQL utilizando PHP, desde consultar, insertar y editar registros, ahora veremos como eliminar registros de manera sencilla. Si es que no has ledo los artculos anteriores te recomiendo revisar: PHP con MySQL: Introduccin a SQL PHP con MySQL: Crear una conexin a MySQL PHP con MySQL: Insertar datos en MySQL PHP con MySQL: Consultar datos en MySQL PHP con MySQL: Editar Registros con MySQL

Para eliminar registros seguiremos los siguientes pasos: primero haremos un listado de todos los registros de la tabla elegida, luego en el listado agregaremos un enlace a un archivo delete.php que se encargar de hacer la eliminacin. Antes de eliminar el registro le preguntaremos al usuario si desea proceder con la eliminacin. Finalmente eliminaremos el registro y redireccionaremos al usuario a listado de registros. Crear el Listado de Registros Para nuestro ejemplo utilizaremos la base de datos de ejemplo que contiene una tabla llamada empresa (Descargar el Script SQL). Creamos una consulta a la tabla 'empresa' y lo mostramos en una tabla HTML con un enlace a eliminar el registro. 1. <?php 2. // conexin a mysql 3. require("conexion.php"); 4. require("funciones.php"); 5. // 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. <td><?php echo $rsEmp['nombre']; ?></td> 18. <td><?php echo $rsEmp['direccion']; ?></td> 19. <td><a href="editar.php?id=<?php echo $rsEmp['id']; ?>">Editar</a></td> 20. <td><a href="#" onclick="delEmpresa(<?php echo $rsEmp['id']; ? >);">Eliminar</a></td> 21. </tr> 22. <?php } ?> 23. </table>

24. 25. 26. 27. 28. 29. 30. 31. 32.

<script type="text/javascript"> function delEmpresa(id) { if (window.confirm("Aviso:\nDesea eliminar el registro seleccionado?")) { window.location = "delete.php?action=del&id="+id; } } </script> </body> </html>

Hay que notar que en lugar de colocar un enlace directo a delete.php estamos llamando a una funcin Javascript delEmpresa, esta funcin le pregunta al usuario si esta seguro de eliminar el registro (Para evitar eliminar registros de manera accidental). Si el usuario acepta entonces redireccionamos a otra pgina donde pasamos el id del registro que deseamos eliminar. Eliminar el registro Creamos un archivo llamado delete.php el cual recibe dos parmetros: el identificador del registro un otro parmetro para verificar que accin se quiere realizar. Creamos la consulta para eliminar el registro y finalmente redireccionar al listado de registros. 1. // file: delete.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 == "del") { 9. $sql = "DELETE FROM empresa WHERE id = ".sqlValue($idempresa, "int"); 10. mysql_query($sql, $conexion); 11. header("location: listado.php"); 12. } Notar que estamos utilizando dos funciones especiales: getParam permite filtrar los datos enviados por el usuario y definir un valor por defecto (En el ejemplo si no se ha enviado el parmetro id devuelve como valor -1). sqlValue permite formatear el tipo de dato que acepta la consulta (Por ejemplo se puede definir que el campo es entero int, si el usuario enva un cadena de texto esta funcin la convertir a un entero). Para finalizar les dejo los archivos con el cdigo fuente que incluye el archivo de conexin y las funciones utilizadas en nuestro ejemplo.

PHP con MySQL: Insertar datos en MySQL


12 December 2010 | 13 comentarios | General, MySQL, PHP Tags: base de datos, insert, MySQL, PHP, sql, validar 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: 1. 2. 3. 4. // abrimos la conexin require("conexion.php"); // insertarmos el registro mysql_query("INSERT INTO empresa (nombre, direccion) VALUES ('Apple', '1 Infinite Loop')"); 5. // mostramos el ID del registro 6. 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. 1. <form method="post" action="agregar-empresa.php"> 2. Nombre <input type="text" id="nombre" name="nombre" /><br /> 3. Direcci&oacute;n <input type="text" id="direccion" name="direccion" /><br /> 4. Tel&eacute;fono <input type="text" id="telefono" name="telefono" /><br /> 5. <button type="submit">Guardar</button> 6. <button type="reset">Limpiar</button> 7. </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 funcin 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 cdigo 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 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. 1. 2. 3. 4. // 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); 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 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.

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 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. 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.

PHP con MySQL: Editar Registros con MySQL


28 February 2011 | 31 comentarios | General, MySQL, PHP Tags: consulta, MySQL, PHP, query, select, sql, update 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. 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. <td><?php echo $rsEmp['nombre']; ?></td> 18. <td><?php echo $rsEmp['direccion']; ?></td> 19. <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. 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. // si no hay datos redireccionamos al listado 13. header("location: listado.php"); 14. exit; 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: 1. <form method="post" action="editar.php?action=edit"> 2. <strong>Nombre</strong> 3. <input type="text" name="nombre" value="<?php echo $rsEmp['nombre']; ?>" /> 4. <strong>Direccin</strong> 5. <input type="text" name="direccion" value="<?php echo $rsEmp['direccion']; ?>" /> 6. <strong>Telefono</strong> 7. <input type="text" name="telefono" value="<?php echo $rsEmp['telefono']; ?>" /> 8. <input type="hidden" id="id" name="id" value="<?php echo $rsEmp["id"]; ?>" /> 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 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. 1. $action = getParam($_GET["action"], ""); 2. 3. if ($action == "edit") { 4. $idempresa = sqlValue($_POST["id"], "int"); 5. $nombre = sqlValue($_POST["nombre"], "text"); 6. $direccion = sqlValue($_POST["direccion"], "text"); 7. $telefono = sqlValue($_POST["telefono"], "int"); 8. 9. $sql = "UPDATE empresa SET "; 10. $sql.= "nombre=".$nombre.", direccion=".$direccion.", telefono=".$telefono." "; 11. $sql.= "WHERE id=".$idempresa; 12. mysql_query($sql, $conexion); 13. header("location: listado.php"); 14. } 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. 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. $idempresa = getParam($_POST["id"], "-1"); 10. $nombre = sqlValue($_POST["nombre"], "text"); 11. $direccion = sqlValue($_POST["direccion"], "text"); 12. $telefono = sqlValue($_POST["telefono"], "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. <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. <strong>Nombre</strong> 38. <input type="text" name="nombre" value="<?php echo $rsEmp['nombre']; ?>" /> 39. <strong>Direccin</strong> 40. <input type="text" name="direccion" value="<?php echo $rsEmp['direccion']; ?>" /> 41. <strong>Telefono</strong> 42. <input type="text" name="telefono" value="<?php echo $rsEmp['telefono']; ?>" /> 43. <input type="hidden" id="id" name="id" value="<?php echo $rsEmp["id"]; ?>" /> 44. <button type="submit">Guardar</button> 45. <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.

You might also like