Jefe de Proyectos PHP 2 / 39 Yamil Quiones Nieto AGENDA Acceso a Formulario Mysql Sesiones 3 / 39 Yamil Quiones Nieto Desde PHP se puede acceder fcilmente a los datos introducidos desde un formulario HTML Vemoslo con un ejemplo simple ACCESOS A FORMULARIO Fichero uno.php <HTML> <BODY> <FORM ACTION=dos.php METHOD=POST> Edad: <INPUT TYPE=text NAME=edad> <INPUT TYPE=submit VALUE=aceptar> </FORM> </BODY> </HTML> Fichero dos.php <HTML> <BODY> <?PHP print (La edad es: $edad); ?> </BODY> </HTML> 4 / 39 Yamil Quiones Nieto ACCESOS A FORMULARIO 5 / 39 Yamil Quiones Nieto A partir de PHP 4.2.0, el valor por defecto de la directiva de PHP register_globals es off Esto tiene una gran importancia sobre los formularios, ya que no es posible acceder a las variables enviadas de la manera anterior (como variables globales). En su lugar hay que utilizar la variable predefinida de PHP $_REQUEST, escribiendo $_REQUEST[edad] en lugar de $edad Se puede poner register_globals = on en el fichero de configuracin php.ini, pero no es recomendable por motivos de seguridad. Una alternativa que permite hacer mnimos cambios en el cdigo ya existente es la siguiente: $edad = $_REQUEST[edad]; ACCESOS A FORMULARIO 6 / 39 Yamil Quiones Nieto ACCESOS A FORMULARIO Fichero uno.php <HTML> <BODY> <FORM ACTION=dos.php METHOD=POST> Edad: <INPUT TYPE=text NAME=edad> <INPUT TYPE=submit VALUE=aceptar> </FORM> </BODY> </HTML> Fichero dos.php <HTML> <BODY> <?PHP $edad = $_REQUEST[edad]; print (La edad es: $edad); ?> </BODY> </HTML> 7 / 39 Yamil Quiones Nieto Acceso a los diferentes tipos de elementos de entrada de formulario Elementos de tipo INPUT TEXT RADIO CHECKBOX BUTTON FILE HIDDEN PASSWORD SUBMIT Elemento SELECT Simple / mltiple Elemento TEXTAREA ACCESOS A FORMULARIO 8 / 39 Yamil Quiones Nieto TEXT ACCESOS A FORMULARIO Introduzca la cadena a buscar: <INPUT TYPE="text" NAME="cadena" VALUE="valor por defecto" SIZE="20"> <?PHP $cadena = $_REQUEST[cadena]; print ($cadena); ?> 9 / 39 Yamil Quiones Nieto RADIO ACCESOS A FORMULARIO Sexo: <INPUT TYPE="radio" NAME=sexo" VALUE=M CHECKED>Mujer <INPUT TYPE="radio" NAME=sexo" VALUE=H">Hombre <?PHP $sexo = $_REQUEST[sexo]; print ($sexo); ?> 10 / 39 Yamil Quiones Nieto CHECKBOX ACCESOS A FORMULARIO <INPUT TYPE="checkbox" NAME="extras[]" VALUE="garaje" CHECKED>Garaje <INPUT TYPE="checkbox" NAME="extras[]" VALUE="piscina">Piscina <INPUT TYPE="checkbox" NAME="extras[]" VALUE="jardin">Jardn <?PHP $extras = $_REQUEST[extras]; foreach ($extras as $extra) print ($extra<BR>\n); ?> 11 / 39 Yamil Quiones Nieto BUTTON Accesos a Formulario <INPUT TYPE="button" NAME=actualizar" VALUE="Actualizar datos"> <?PHP $actualizar = $_REQUEST[actualizar]; if ($actualizar) print ("Se han actualizado los datos"); ?> 12 / 39 Yamil Quiones Nieto FILE ACCESOS A FORMULARIO <FORM ACTION="procesa.php" METHOD="post ENCTYPE="multipart/form-data"> <INPUT TYPE="file" NAME="fichero"> </FORM> 13 / 39 Yamil Quiones Nieto HIDDEN ACCESOS A FORMULARIO <?PHP print(<INPUT TYPE=hidden NAME=username VALUE=$usuario>\n); ?> <?PHP $username = $_REQUEST[username]; print ($username); ?> 14 / 39 Yamil Quiones Nieto PASSWORD ACCESOS A FORMULARIO Contrasea: <INPUT TYPE="password" NAME="clave"> <?PHP $clave = $_REQUEST[clave]; print ($clave); ?> 15 / 39 Yamil Quiones Nieto SUBMIT ACCESOS A FORMULARIO <INPUT TYPE="submit" NAME="enviar" VALUE="Enviar datos"> <?PHP $enviar = $_REQUEST[enviar]; if ($enviar) print ("Se ha pulsado el botn de enviar"); ?> 16 / 39 Yamil Quiones Nieto SELECT SIMPLE ACCESOS A FORMULARIO Color: <SELECT NAME=color"> <OPTION VALUE=rojo" SELECTED>Rojo <OPTION VALUE=verde">Verde <OPTION VALUE=azul">Azul </SELECT> <?PHP $color = $_REQUEST[color]; print ($color); ?> 17 / 39 Yamil Quiones Nieto SELECT MULTIPLE ACCESOS A FORMULARIO Idiomas: <SELECT MULTIPLE SIZE="3" NAME="idiomas[]"> <OPTION VALUE="ingles" SELECTED>Ingls <OPTION VALUE="frances">Francs <OPTION VALUE="aleman">Alemn <OPTION VALUE="holandes">Holands </SELECT> <?PHP $idiomas = $_REQUEST[idiomas]; foreach ($idiomas as $idioma) print ($idioma<BR>\n); ?> 18 / 39 Yamil Quiones Nieto TEXTAREA ACCESOS A FORMULARIO Comentario: <TEXTAREA COLS=50" ROWS=4" NAME="comentario"> Este libro me parece ... </TEXTAREA> <?PHP $comentario = $_REQUEST[comentario]; print ($comentario); ?> 19 / 39 Yamil Quiones Nieto Caractersticas de MySQL Modelo relacional, multiusuario Tipos de datos Numricos tinyint, smallint, mediumint, int, integer, bigint decimal, float, numeric Fecha y hora date, time, datetime, year, timestamp Cadena char, varchar tinytext, text, mediumtext, longtext tinyblob, blob, mediumblob, longblob enum, set Debe elegirse adecuadamente el tipo y el tamao de cada campo MYQSL 20 / 39 Yamil Quiones Nieto Operadores Aritmticos +, -, *, / Comparacin =, !=, <=, <, >=, >, IS NULL, IS NOT NULL Lgicos not (!), and (&&), or (||), xor Funciones Funciones de cadena Funciones de comparacin de cadenas Funciones numricas Funciones de fecha y hora Funciones de agregado MYSQL 21 / 39 Yamil Quiones Nieto phpMyAdmin es una herramienta para la administracin del servidor de bases de datos MySQL Dispone de una interfaz grfica y es de libre distribucin Permite realizar todo tipo de operaciones sobre bases de datos: crear, borrar y modificar tablas consultar, insertar, modificar y eliminar datos definir usuarios y asignar permisos realizar copias de seguridad etc Est escrita en php y se ejecuta desde el navegador Si est instalada en la carpeta phpmyadmin, se ejecuta escribiendo en la barra de direcciones del navegador la url http://localhost/phpmyadmin/ Puede administrar bases de datos locales y remotas PHPMYADMIN 22 / 39 Yamil Quiones Nieto PHPMYADMIN 23 / 39 Yamil Quiones Nieto SQL (Structured Query Language) es el lenguaje que se utiliza para comunicarse con la base de datos Procedimiento de comunicacin con la base de datos: LENGUAJE SQL Pgina PHP Base de datos orden SQL resultado 24 / 39 Yamil Quiones Nieto Las instrucciones ms habituales son SELECT, INSERT, UPDATE, DELETE Veamos su sintaxis bsica y algunos ejemplos de uso Para ello utilizaremos una tabla noticias con cinco campos: un identificador nico de la noticia, el ttulo de la noticia, el texto de la noticia, la categora de la noticia y la fecha de publicacin de la noticia LENGUAJE SQL ttulo texto categora noticias id fecha 25 / 39 Yamil Quiones Nieto Sintaxis: SELECT expresin FROM tabla [WHERE condicin] [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...] [LIMIT [offset,] row_count | row_count OFFSET offset] Ejemplo: SELECT * from noticias WHERE fecha=CURDATE() LIMIT 10 ORDER BY fecha DESC Obtiene las noticias del da con un tope mximo de10, ordenadas de la ms reciente a la ms antigua LENGUAJE SQL 26 / 39 Yamil Quiones Nieto INSERT Sintaxis: INSERT [INTO] nombre_tabla [(nombre_columna,...)] VALUES ((expresin | DEFAULT),...), (...),... INSERT [INTO] nombre_tabla SET nombre_columna=(expresin | DEFAULT), ... Ejemplo: INSERT INTO noticias (id, titulo, texto, categoria, fecha) VALUES (37, Nueva promocin en Nervin, 145 viviendas de lujo en urbanizacin ajardinada situadas en un entorno privilegiado, promociones, CURDATE()) Inserta una noticia con los valores indicados LENGUAJE SQL 27 / 39 Yamil Quiones Nieto UPDATE Sintaxis: UPDATE nombre_tabla SET nombre_columna1=expr1 [, nombre_columna2=expr2 ...] [WHERE condicin] [ORDER BY ...] [LIMIT row_count] Ejemplo: UPDATE noticias SET categoria = ofertas WHERE id=37 Modifica la categora de la noticia con id=37 de la tabla LENGUAJE SQL 28 / 39 Yamil Quiones Nieto DELETE Sintaxis: DELETE FROM nombre_tabla [WHERE condicin] [ORDER BY ...] [LIMIT row_count] Ejemplo: DELETE FROM noticias WHERE fecha < CURDATE()-10 Borra las noticias con ms de 10 das de antigedad LENGUAJE SQL 29 / 39 Yamil Quiones Nieto Los pasos para acceder desde PHP a una base de datos son los siguientes: Conectar con el servidor de bases de datos Seleccionar una base de datos Enviar la instruccin SQL a la base de datos Obtener y procesar los resultados Cerrar la conexin con el servidor de bases de datos PHP - MYSQL 30 / 39 Yamil Quiones Nieto Las funciones concretas de MySQL que realizan estas operaciones son: Conectar con el servidor de bases de datos: mysql_connect() Seleccionar una base de datos: mysql_select_db() Enviar la instruccin SQL a la base de datos: mysql_query() Obtener y procesar los resultados: mysql_num_rows() y mysql_fetch_array() Cerrar la conexin con el servidor de bases de datos: mysql_close() PHP - MYSQL 31 / 39 Yamil Quiones Nieto Conectar con el servidor de bases de datos: mysql_connect() Devuelve un identificador de la conexin en caso de xito y false en caso contrario Sintaxis: $conexion = mysql_connect (servidor, username, password); Ejemplo: $conexion = mysql_connect (localhost, cursophp, ) or die (No se puede conectar con el servidor); $conexion = mysql_connect (localhost, cursophp- ad, php.hph) or die (No se puede conectar con el servidor); PHP - MYSQL 32 / 39 Yamil Quiones Nieto Seleccionar una base de datos: mysql_select_db() Devuelve true en caso de xito y false en caso contrario Sintaxis: mysql_select_db (database); Ejemplo: mysql_select_db (lindavista) or die (No se puede seleccionar la base de datos); PHP - MYSQL 33 / 39 Yamil Quiones Nieto Enviar la instruccin SQL a la base de datos: mysql_query() Devuelve un identificador o true (dependiendo de la instruccin) si la instruccin se ejecuta correctamente y false en caso contrario Sintaxis: $consulta = mysql_query (instruccin, $conexion); Ejemplo: $consulta = mysql_query (select * from noticias, $conexion) or die (Fallo en la consulta); PHP - MYSQL 34 / 39 Yamil Quiones Nieto Obtener y procesar los resultados: mysql_num_rows(), mysql_fetch_array() En el caso de que la instruccin enviada produzca unos resultados, mysql_query() devuelve las filas de la tabla afectadas por la instruccin mysql_num_rows() devuelve el nmero de filas afectadas Para obtener las distintas filas del resultado se utiliza la funcin mysql_fetch_array(), que obtiene una fila del resultado en un array asociativo cada vez que se invoca Sintaxis: $nfilas = mysql_num_rows ($consulta); $fila = mysql_fetch_array ($consulta); PHP - MYSQL 35 / 39 Yamil Quiones Nieto Cerrar la conexin con el servidor de bases de datos: mysql_close() Sintaxis: mysql_close ($conexion); Ejemplo mysql_close ($conexion); PHP - MYSQL 36 / 39 Yamil Quiones Nieto A veces es necesario mantener el estado de una conexin entre distintas pginas o entre distintas visitas a un mismo sitio Ejemplos: aplicaciones personalizadas, carrito de la compra, control de acceso HTTP es un protocolo sin estado: cada conexin entre el cliente y el servidor es independiente de las dems Para mantener el estado entre diferentes conexiones hay que establecer lo que se conoce como una sesin Las sesiones permiten disponer de unas variables con valores persistentes durante toda la conexin del usuario. Estas variables pueden almacenarse en el cliente mediante cookies o en el servidor PHP dispone de una biblioteca de funciones para la gestin de sesiones SESSIONES 37 / 39 Yamil Quiones Nieto Funciones de PHP para el manejo de sesiones (register_globals On) session_start () inicializa una sesin y le asigna un identificador de sesin nico. Si la sesin ya est iniciada, carga todas las variables de sesin session_register (variable) registra una variable de sesin session_unregister (variable) elimina una variable de sesin session_is_registered (variable) comprueba si una variable est registrada. Devuelve true en caso afirmativo y false en caso contrario session_destroy () cierra una sesin SESSIONES 38 / 39 Yamil Quiones Nieto Funciones de PHP para el manejo de sesiones (register_globals Off) session_start () inicializa una sesin y le asigna un identificador de sesin nico. Si la sesin ya est iniciada, carga todas las variables de sesin $_SESSION[nombre] = valor; registra una variable de sesin unset ($_SESSION[nombre]); elimina una variable de sesin if (isset($_SESSION[nombre])) comprueba si una variable est registrada. Devuelve true en caso afirmativo y false en caso contrario session_destroy () cierra una sesin SESSIONES 39 / 39 Yamil Quiones Nieto El manejo de las sesiones se realiza de la siguiente forma: Todas las pginas deben realizar una llamada a session_start() para cargar las variables de la sesin Esta llamada debe estar colocada antes de cualquier cdigo HTML Conviene llamar a session_destroy() para cerrar la sesin SESSIONES