mailxmail - Cursos para compartir lo que sabes PHP y MySQL. Aplicaciones Web: PHP y base de datos MySQL (décima parte) Autor: Johnny Zulca Mamani 1 mailxmail - Cursos para compartir lo que sabes Presentación del curso Programación de aplicaciones Web con PHP y MySQL. Ahora te enseñaremos a conectar a una Base de Datos desde la Web con PHP. Conoce las funciones PHP para manipulación de la Base de Datos MySQL. Aprende a realizar las consultas a la Base de Datos MySQL desde la Web. También te enseñaremos, entre otros, a realizar la actualización de datos desde la Web en una Base de Datos MySQL. 2 mailxmail - Cursos para compartir lo que sabes 1. Listado de funciones PHP para MySQL PHP y Base de Datos MySQL Listado de Funciones PHP para MySQL Estas funciones le permiten acceder a servidores de base de datos MySQL. Puede encontrar más información sobre MySQL en su página web http://wwwmysql.com. 3 mailxmail - Cursos para compartir lo que sabes 2. Conexión a una base de datos desde la web Conectar a una Base de Datos desde la Web con PHP Una de las características más importantes de PHP es su integración con diversos motores de base de datos. PHP está construido para generar en forma sencilla páginas Web dinámicas a partir de información almacenda en la base de datos. A continuación mostramos las funciones más importantes y ejemplos típicos de uso para una base MySQL. Conexión a la base de datos $db_link = mysql_connect("host", "usuario", "password"); opcionales: [host] [usuario] [password] por ejemplo: $db_link = mysql_connect("localhost", "root", ""); La función realiza la conexión al servidor de base de datos MySQL; devuelve false si hubo algun error en la conexión o un link de conexión a la base si la conexión fue exitosa, el link es un número que indica la sesión dentro de MySQL. Para finalizar la conexión se debe utilizar la función: mysql_close(); Selección de la base de datos a utilizar Esta función configura cual es la base de datos que se utilizará por omisión. En este caso el db_link a utilizar en esta función es el link que se obtuvo al ejecutar la función mysql_connect. La función mysql_select_db devuelve false si se encuentra algun error, por ejemplo que no exista la base de datos. mysql_select_db("nombre_base_datos", "db_link"); opcional: [db_link] por ejemplo: mysql_select_db("libreria", $dblink); Cerrar la conexión Esta función nos sirve para cerrar la conexión a la base de datos que se usa. mysql_close($db_link); opcinal: [db_link] Liberar memoria despues de realizar una consulta mysql_free_result($result); 4 mailxmail - Cursos para compartir lo que sabes 5 mailxmail - Cursos para compartir lo que sabes 3. Proyecto Librería Virtual Proyecto Librería Virtual Del proyecto de la librería virtual, hay un sección enfocada a la búsqueda de un libro, para ello tenemos un formulario, donde se ingresan los datos requeridos para la búsqueda. Y así se realizan las siguientes tareas desde que se realiza la petición y nos retorno una respuesta: - Lleva una petición web - Una búsqueda mediante un formulario. - El formulario llama a una página que le brinda los resultados. - El motor PHP se conecta a la base de datos consulta la información y retorna una respuesta datos. Funciones PHP para manipular Base de Datos MySQL Consultas a la base de datos La función mysql_query devuelve falso en caso de que el query no pueda ejecutarse (error de SQL) o bien un resultado (result set) en los casos que devuelve algun tipo de dato como por ejemplo un select. $result = mysql_query("consulta", "db_link"); opcinal: [db_link] por ejemplo: $result = mysql_query("update clientes set ciudad=´Lima´ where idcliente=2", $db_link); por ejemplo: $query = "insert into clientes (nombre, direccion) values(`Pedro´,´Los Claveles 200´)"; $result = mysql_query($query, $db_link); Cantidad de filas consultadas o modificadas Filas Consultadas: Esta función devuelve la cantidad de filas que se obtuvieron luego de ejecutar una instrucción de consulta como por ejemplo la función select. $cantidad = mysql_num_rows($result); por ejemplo: $query = "select nombre, telefono from contactos where edad between 20 and 25 and sexo =´f´"; $result = mysql_query($query, $db_link); $result = mysql_num_rows($result); Filas Modificadas: Devuelve cuantos registros fueron afectados por una consulta (query) con insert, update o delete. $cantidad = mysql_affected_rows($db_link); por ejemplo: 6 mailxmail - Cursos para compartir lo que sabes por ejemplo: $cuantos = mysql_affected_rows($db_link); 7 mailxmail - Cursos para compartir lo que sabes 4. Obtener registros de una consulta Obtener registros de una consulta Obtener datos en un result set $var = mysql_fetch_rows($result_set); por ejemplo: $query = "select nombre, telefono from contactos where edad between 20 and 25 and sexo =´f´"; $result = mysql_query($query, $db_link); $rs = mysql_fetch_rows($result); //obtiene el primer lemento del vector de indice 0 //para extraer todos los elementos se debe recorrer este vector while($rs = mysql_fetch_rows($result)) { print("Columna 0: $rs[0] Columna 1: $rs[1]"); } Obtener datos en un vector $var = mysql_fetch_array(id_resultado, tipo_resultado); tipo_resultado pude tomar los siguentes valores: MYSQL_ASSOC: usted solo tendrá índices asociativos, MYSQL_NUM: solo obtendrá los índices numéricos y MYSQL_BOTH: obtendrá una matriz con índices asociativos y numéricos $var = mysql_fetch_array($result); por ejemplo: $query = "select nombre, telefono from contactos where edad between 20 and 25 and sexo =´f´"; $result = mysql_query($query, $db_link); $rs = mysql_fetch_array($result); //obtiene el primer elemento del vector de indice 0 //para extraer todos los elementos se debe recorrer este vector asociativo while($rs = mysql_fetch_array ($result)) { print("Columna 0: $rs["nombre"]"); } 8 mailxmail - Cursos para compartir lo que sabes 5. Consultas a la Base de Datos MySQL desde la Web (primera parte) Hacer consultas a la Base de Datos MySQL desde la Web Al realizar una búsqueda de un libro o libros que satisfacen cierto criterio de búsqueda como el que sigue: El código del formulario es el siguiente: buscador.html - Una formulario para el ingreso de criterios de búsqueda: "tipo búsqueda" y "termino a buscar" <html> <head> <title>Catálogo de Búsqueda Librería Online</title> </head> <body> <h1>Catálogo de Búsqueda Librería Online</h1> <form action="resultados.php" method="post"> Elige Tipo de Búsqueda:<br> <select name="tipobusqueda"> <option value="autor">Autor <option value="titulo">Título <option value="isbn">ISBN </select> <br>Escribe Término Búsqueda:<br> <input name="terminobusqueda" type="text"> <br><input type="submit" value="Buscar"> </form> </body> </html> Son necesarias estas funciones: Función: conectarse a la base de datos function db_connect() { $coneccion = mysql_pconnect("localhost", "root", ""); if (!$coneccion) return false; if (!mysql_select_db("libreria")) return false; return $coneccion; } 9 mailxmail - Cursos para compartir lo que sabes 6. Consultas a la Base de Datos MySQL desde la Web (segunda parte) Función: obtener resultados en un array function db_result_to_array($resultado) { $res_array = array(); for ($contador=0; $row = mysql_fetch_array($resultado); $contador++) $res_array[$contador] = $row; return $res_array; } Función: validar entradas de formulario. function valida_entradas($form_vars) { foreach ($form_vars as $key => $value){ if (!isset($key) || ($value == "")) return false; } return true; } Función: búsqueda de libros en la base de datos. function search_libros($criterio, $termino_busqueda, &$num_libros) { $conn = db_connect(); $query = "select * from libros where ".$criterio." like '%".$termino_busqueda."%' order by titulo asc"; $resultado = mysql_query($query); if (!$resultado) return false; $num_libros = mysql_num_rows($resultado); if ($num_libros == 0) return false; $resultado = db_result_to_array($resultado); return $resultado;} 10 mailxmail - Cursos para compartir lo que sabes 7. Consultas a la Base de Datos MySQL desde la Web (tercera parte) Resultados.php - scritp php se hace la consulta a la base de datos y se visualiza los resultados. <html> <head> <title>Resultados de la Búsqueda en la Librería Online</title> </head> <body> <h1>Resultados de la Búsqueda en la Librería Online</h1> <? if (!valida_entradas($_POST)){ echo "No has introducido los detalles de la busqueda. Por favor vuelve e inténtalo de nuevo."; exit; } $num_resultados = 0; $libros_array = search_libros($_POST["tipobusqueda"], trim($_POST["terminobusqueda"]), $num_resultados); ?> <p>Número de libros encontrados: <? echo $num_resultados;?></p> <? if($num_resultados > 0) {? > <table width="70%" border="1" cellpadding="4" cellspacing="0"> <tr><td>ISBN</td><td>Titulo</td><td>Autor</td><td>Precio</td></tr> <? foreach ($libros_array as $libro) { ?> <tr> <td><? echo $libro["isbn"];?></td><td><? echo $libro["titulo"];?></td> <td><? echo $libro["autor"];?></td><td><? echo number_format($libro["precio"],2) ;?></td></tr> <? } ?> </table> <? }? > </body> </html> 11 mailxmail - Cursos para compartir lo que sabes 8. Actualización de datos desde la Web en una Base de Datos MySQL (primera parte) Actualizar datos desde la Web en una Base de Datos MySQL Lo que vamos a realizar hoy es una actualización de datos para la tabla de usuarios de la aplicación "Librería Online", donde lo que viene es la actualización del password de un usuario en particular. Para este caso estaremos tocando el tema de sessiones que explicaremos luego en otra sección. form_cambiar_password.php -- El codigo es solo del formulario en que ingresamos los datos necesarios para la practica <?php session_start(); $username = "admin"; $_SESSION["username"] = $username; session_register("username"); ?> <html> <head><title>Cambiar password</title></head> <body> <form action="cambiar_password.php" method="post"> <table> <tr><td>Contraseña anterior:</td> <td><input type="password" name="anterior_password" size="16" maxlength="16"></td></tr> <tr><td>Nueva Contraseña:</td> <td><input type="password" name="nuevo_password" size="16" maxlength="16"></td></tr> <tr><td>Repite Nueva Contraseña:</td> <td><input type="password" name="nuevo_password2" size="16" maxlength="16"></td></tr> <tr><td colspan="2"><input type="submit" value="Cambiar Contraseña"></td></tr> </table> </form> </body> </html> cambiar_password.php - En este formulario se lleva a cabo el proceso de actualización de los datos directamente a la base de datos, a la tabla "usuarios". 12 mailxmail - Cursos para compartir lo que sabes 9. Actualización de datos desde la Web en una Base de Datos MySQL (segunda parte) Son necesarias estas funciones: Funcion: conectarse a la base de datos Funcion: busqueda y verificar usuario con su respectivo password $conn = db_connect(); if (!$conn) return 0; $resultado = mysql_query("select * from usuarios where usuario='".$username."' and contrasena = '".$password."'"); if (!$resultado) return 0; if (mysql_num_rows($resultado)>0) return 1; else return 0; Funcion: actualizar datos de usuario (password) function cambiar_password($username, $anterior_password, $nuevo_password) { if (login($username, $anterior_password)) { if (!($conn = db_connect())) return false; $resultado = mysql_query( "update usuarios set contrasena = '".$nuevo_password."' where usuario = '".$username."'"); if (!$resultado) return false; else return true; } else return false; } <? session_start(); ?> <html> <head> <title>Cambiar Password</title> </head> <body> <? $username = $_SESSION["username"]; $nuevo_password = $_POST["nuevo_password"]; $nuevo_password2 = $_POST["nuevo_password2"]; 13 mailxmail - Cursos para compartir lo que sabes $nuevo_password2 = $_POST["nuevo_password2"]; $anterior_password = $_POST["anterior_password"]; if ($nuevo_password!=$nuevo_password2) echo "Contraseña escrita no era la misma. No cambiado."; else if (strlen($nuevo_password)>16 || strlen($nuevo_password)<6) echo "Nueva contraseña debe estar entre 6 y 16 caracteres. Prueba de nuevo."; else{ if (cambiar_password($username, $anterior_password, $nuevo_password)) echo "Contraseña cambiada."; else echo "La contraseña no ha podido cambiarse."; } ?> </body> </html> 14 mailxmail - Cursos para compartir lo que sabes 10. Borrar datos desde la web en una base de datos MySQL (primera parte) Borrar datos desde la Web en una Base de Datos MySQL La práctica de este tema es también acerca de la tabla libros, aquí lo que haremos es; de un listado de libros que se tengan en la base de datos, listados en una tabla HTML, cada fila represntara los datos de un libro y además agregado un boton que nos diga borrar este registro y pulsando este, nos enviará a otra página que haga el proceso. lista_libros.php - una tabla con todo el listado de libros. Son necesarias estas funciones: Función: conectarse a la base de datos Función: Obtener libros almacenada en la base de datos function get_libros() //todos los libros { $conn = db_connect(); $query = "select * from libros order by titulo asc"; $resultado = mysql_query($query); if (!$resultado) return false; $num_libros = mysql_num_rows($resultado); if ($num_libros ==0) return false; $resultado = db_result_to_array($resultado); return $resultado; } <html> <head> <title>Listado de Libros</title> </head> <body> <h2>Listado de Libros</h2> <table width="70%" border="1" cellpadding="4" cellspacing="0"> <tr><td>ISBN</td><td>Titulo</td><td>Autor</td> <td>Precio</td><td>Accion</td></tr> <? $libros_array=get_libros(); foreach ($libros_array as $libro) {? > <tr> <td><? echo $libro["isbn"];?></td> <td><? echo $libro["titulo"];?></td> <td><? echo $libro["autor"];?></td> <td><? echo number_format($libro["precio"],2);?></td> <td><input type="button" onclick="document.location.href='<? echo 15 mailxmail - Cursos para compartir lo que sabes <td><input type="button" onclick="document.location.href='<? echo "borrar_libro.php?isbn=".stripslashes($libro["isbn"]);?>' " value="eliminar"> </td> </tr> <? }? > </table> </body> </html> 16 mailxmail - Cursos para compartir lo que sabes 11. Borrar datos desde la web en una base de datos MySQL (segunda parte) borrar_libro.php - la página que hace el proceso de eliminar un libro seleccionado Son necesarias estas funciones: Función: conectarse a la base de datos Función: obtener resultados en un array Función: obtener libros almacenada en la base de datos Función: borrar libro de la tabla Libros en la base de datos function borrar_libro($isbn) { if (!($conn = db_connect())) return false; $resultado = mysql_query( "delete from libros where isbn= '$isbn' "); if (!$resultado) return false; else return true; } <html> <head> <title>Listado de Libros</title> </head> <body> <? $isbn = $_GET["isbn"]; if(borrar_libro($isbn)) echo "Libro borrado."; else echo "No se ha podido borrar este libro de ISBN ".$isbn; ?> <h2>Listado de Libros</h2> <table width="70%" border="1" cellpadding="4" cellspacing="0"> <tr><td>ISBN</td><td>Titulo</td><td>Autor</td> <td>Precio</td><td>Accion</td></tr> <? $libros_array=get_libros(); foreach ($libros_array as $libro) {? > <tr> <td><? echo $libro["isbn"];?></td> <td><? echo $libro["titulo"];?></td> <td><? echo $libro["autor"];?></td> <td><? echo number_format($libro["precio"],2);?></td> <td><input type="button" onclick="document.location.href='<? echo "borrar_libro.php?isbn=".stripslashes($libro["isbn"]);?>' " value="eliminar"> </td> 17 mailxmail - Cursos para compartir lo que sabes </td> </tr> <? }? > </table> </body> </html> 18 mailxmail - Cursos para compartir lo que sabes 12. Añadir datos a la base de datos MySQL desde la Web (primera parte) Añadir datos a la base de datos MySQL desde la Web form_agregar_libro.php - formulario para ingresar los datos del nuevo libro. Son necesarias estas funciones: Función: conectarse a la base de datos Función: obtener resultados en un array Función: obtener listado de categorías de la base de datos function get_categorias() { $conn = db_connect(); $query = "select idcategoria, nombre from categorias"; $resultado = mysql_query($query); if (!$resultado) return false; $num_cats = mysql_num_rows($resultado); if ($num_cats == 0) return false; $resultado = db_result_to_array($resultado); return $resultado; } <html> <head> <title>Agregar un Libro a Librería Online</title> </head> <body> <h1>Agregar Nuevo Libro</h1> <form action="agregar_libro.php" method="post"> <table> <tr><td>ISBN:</td> <td><input type="text" name="isbn" size="6"></td></tr> <tr><td>Autor:</td> <td><input type="text" name="autor" size="20"></td></tr> <tr><td>Titulo:</td> <td><input type="text" name="titulo" size="20"></td></tr> <tr><td>Categoria:</td> <td><select name="idcat"> <? $cat_array=get_categorias(); foreach ($cat_array as $categoria) { ?> <option value="<? echo $categoria["idcategoria"];?>"><? echo $categoria["nombre"];?></option> <? } 19 mailxmail - Cursos para compartir lo que sabes } ?> </select></td> </tr> <tr><td>Precio:</td> <td><input type="text" name="precio" size="6"></td></tr> <tr><td>Descripcion:</td> <td><textarea name="descripcion" cols="20" rows="4"></textarea> </td></tr> <tr><td colspan="2"> <input type="submit" value="Agregar Libro" name="btnAgregar"> </td></tr> </table> </form> </body> </html> 20 mailxmail - Cursos para compartir lo que sabes 13. Añadir datos a la base de datos MySQL desde la Web (segunda parte) agregar_libro.php - script del proceso de agregar datos del nuevo libro. Son necesarias estas funciones: Función: conectarse a la base de datos Función: obtener resultados en un array Función: validar ntradas del formulario Función: Obtener libros almacenada en la base de datos Función: agregar nuevo libro function agregar_libro($isbn, $titulo, $autor, $idcat, $precio, $descripcion) { $conn = db_connect(); $query = "select * from libros where isbn='$isbn'"; $resultado = mysql_query($query); if (!$resultado || mysql_num_rows($resultado)!=0) return false; $query = "insert into libros values ('$isbn', '$autor', '$titulo', '$idcat', '$precio', '$descripcion')"; $resultado = mysql_query($query); if (!$resultado) return false; else return true; } <html> <head> <title>Agregar un Libro a Librería Online</title> </head> <body> <h1>Agregar Nuevo Libro</h1> <? if (valida_entradas($_POST)) { if(agregar_libro($_POST["isbn"], $_POST["titulo"], $_POST["autor"], $_POST["idcat"], $_POST["precio"], $_POST["descripcion"])) echo "Libro ".$_POST["titulo"]." ha sido añadido a la base de datos.<br>"; else echo "Libro ".$_POST["titulo"]." no ha podido ser añadido a la base de datos.<br>"; }? > <h2>Listado de Libros</h2> <table width="70%" border="1" cellpadding="4" cellspacing="0"> <tr><td>ISBN</td><td>Titulo</td><td>Autor</td><td>Precio</td></tr> <? $libros_array=get_libros(); 21 mailxmail - Cursos para compartir lo que sabes $libros_array=get_libros(); foreach ($libros_array as $libro) {? > <tr> <td><? echo $libro["isbn"];?></td> <td><? echo $libro["titulo"];?></td> <td><? echo $libro["autor"];?></td> <td><? echo number_format($libro["precio"],2);?></td> </tr> <? }? > </table> </body> </html> NOTA: Con este capítulo hemos llegado al final del curso. 22