Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 1 / 30 Desarrollo PHP con Webmatrix Álvaro Gómez Giménez UAM.NET 25-11-2011
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 2 / 30 Contenidos 1 Introducción a PHP Integración con HTML Declaración de variables Arrays Sentencias condicionales Bucles Variables GET y POST Sesiones en PHP Interacción con BBDD: MySQL Otras variables superglobales Funciones C Style PHP Orientado a objetos 2 Construyendo un foro con PHP y Webmatrix Estructura de la base de datos Estructura de cheros 3 Conclusión
Introducción a PHP Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 3 / 30
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 4 / 30 Integración con HTML Código fuente en el servidor. 1 <html> 2 <head> 3 < t i t l e>hola Mundo</ t i t l e> 4 </ head> 5 <body> 6 <? php 7 / Comment / 8 $a="<b>hola Mundo</b>" ; 9 10 echo $a ; 11?> 12 </ body> 13 </ html> Salida en el lado del cliente. 1 <html> 2 <head> 3 < t i t l e>hola Mundo</ t i t l e> 4 </ head> 5 <body> 6 <b>hola Mundo</b> 7 </ body> 8 </ html>
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 5 / 30 Declaración de variables Las variables deben ir precedidas por el símbolo $. PHP distingue entre mayúsculas y minúsculas. 2 / V a r i a b l e s / 3 $cadena="hola, " ; 4 $numero=3+5; 5 6 echo $cadena. $numero ; 7?> Salida Hola,8
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 6 / 30 Array normal Forma A: 2 / Array / 3 $a = a r r a y ( " Cero ", "Uno", "Dos ", " Tres " ) ; 4 5 echo $a [ 0 ] ; 6 echo $a [ 1 ] ; 7 echo $a [ 2 ] ; 8 echo $a [ 3 ] ; 9?> Forma B: 2 / Array / 3 $a [0]= " Cero " ; 4 $a [1]= "Uno" ; 5 $a [2]= "Dos" ; 6 $a [3]= " Tres " ; 7 8 echo $a [ 0 ] ; 9 echo $a [ 1 ] ; 10 echo $a [ 2 ] ; 11 echo $a [ 3 ] ; 12?> Salida CeroUnoDosTres
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 7 / 30 Array asociativo Forma A: 2 / Array / 3 $a = a r r a y ( "nombre"=>"juan", 4 " a p e l l i d o "=>" López ", 5 " email "=>" juan@website. com" 6 ) ; 7 8 echo "Nombre : " ; 9 echo $a [ "nombre" ] ; 10 echo "<br/>" ; 11 echo " A p e l l i d o : " ; 12 echo $a [ " a p e l l i d o " ] ; 13 echo "<br/>" ; 14 echo " Email : " ; 15 echo $a [ " email " ] ; 16?> Forma B: 2 / Array / 3 $a [ "nombre"]="juan" ; 4 $a [ " a p e l l i d o "]=" López " ; 5 $a [ " email "]=" juan@website. com" ; 6 7 8 echo "Nombre : " ; 9 echo $a [ "nombre" ] ; 10 echo "<br/>" ; 11 echo " A p e l l i d o : " ; 12 echo $a [ " a p e l l i d o " ] ; 13 echo "<br/>" ; 14 echo " Email : " ; 15 echo $a [ " email " ] ; 16?> Salida Nombre:Juan Apellido:López Email:juan@website.com
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 8 / 30 Sentencias condicionales: if else 2 / i f e l s e / 3 $a=5; 4 $b=4; 5 6 i f ( $a > $b ) { 7 echo $a. ">". $b ; 8 } e l s e i f ( $a == $b ) { 9 echo $a. "=". $b ; 10 } e l s e { 11 echo $a. "<". $b ; 12 } 13?> Salida 5>4
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 9 / 30 Sentencias condicionales: switch 2 / s w i t c h / 3 $a=7; 4 5 s w i t c h ( $a ) { 6 case 1 : 7 echo "Su v a l o r es 1" ; 8 break ; 9 case 5 : 10 echo "Su v a l o r es 5" ; 11 break ; 12 d e f a u l t : 13 echo "Su v a l o r es $a" ; 14 break ; 15 } 16?> Salida Su valor es 7
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 10 / 30 Bucles: for 2 / f o r / 3 $a [0]= " Cero " ; 4 $a [1]= "Uno" ; 5 $a [2]= "Dos" ; 6 7 f o r ( $ i =0; $i <s i z e o f ( $a ) ; $ i++){ 8 echo $a [ $ i ] ; 9 echo "<br/>" ; 10 } 11?> Salida Cero Uno Dos
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 11 / 30 Bucles: foreach 2 / f o r e a c h / 3 $a [0]= " Cero " ; 4 $a [1]= "Uno" ; 5 $a [2]= "Dos" ; 6 7 f o r e a c h ( $a as $out ) { 8 echo $out ; 9 echo "<br/>" ; 10 } 11?> Salida Cero Uno Dos
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 12 / 30 Bucles: while 2 / w h i l e / 3 $c = 0 ; 4 5 w h i l e ( $c < 10) { 6 echo $c. ", " ; 7 $c++; 8 } 9?> Salida 0,1,2,3,4,5,6,7,8,9,
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 13 / 30 Variables GET y POST (I) Consulta del cliente http://www.example.com/index.php?page=5 Código para obtener las variables en la URL. 2 i f ( i s s e t ($_GET[ " page " ] ) ) { 3 echo "Page : ".$_GET[ " page " ] ; 4 } e l s e { 5 echo "No se ha d e f i n i d o " ; 6 } 7?> Salida Page:5
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 14 / 30 Variables GET y POST (II) Código HTML para realizar el POST: 1... 2 <form a c t i o n=" i n d e x. php" method=" post "> 3 <p> 4 <l a b e l>user :</ l a b e l> 5 <i n p u t type=" t e x t " name=" u s e r " /> 6 </p> 7 <p> 8 <l a b e l>password :</ l a b e l> 9 <i n p u t type=" password " name=" password " /> 10 </p> 11 <p a l i g n=" c e n t e r "> 12 <i n p u t type=" submit " v a l u e="send" name=" s u b m i t t e r "/> 13 </p> 14 </ form> 15... Código PHP para capturar el POST: 2 i f ( i s s e t ($_POST[ " s u b m i t t e r " ] ) ) { 3 $ u s e r=$_post[ " u s e r " ] ; 4 $password=$_post[ " password " ] ; 5 echo " User : $ u s e r " ; 6 echo " Password : $password " ; 7 } 8?>
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 15 / 30 Sesiones en PHP La página 1 inicia la sesión y establece una variable. 2 / Pagina 1 / 3 s e s s i o n _ s t a r t ( ) ; 4 5 $_SESSION [ " u s e r "]="Juan" ; 6 echo "<a h r e f =\"pagina2. php\">" ; 7 echo " Página 2</a>" ; 8?> La página 2 restaura dicha sesión y obtiene el valor de la variable. 2 / Pagina 2 / 3 s e s s i o n _ s t a r t ( ) ; 4 5 i f ( i s s e t ($_SESSION [ " u s e r " ] ) ) { 6 echo $_SESSION [ " u s e r " ] ; 7 echo "<br/>" ; 8 } 9 echo "<a h r e f =\"pagina1. php\">" ; 10 echo " Página 1</a>" ; 11?>
Interacción con BBDD: MySQL (I) Tenemos la tabla users en la base de datos con los siguientes datos: username password email admin 1234 admin@website.com juan juan89 juan@website.com ana 4n4p4sw0rd ana@website.com,y queremos realizar la siguiente consulta SQL: Consulta SELECT * FROM users WHERE username='admin',que devuelve la siguiente la: username password email admin 1234 admin@website.com Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 16 / 30
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 17 / 30 Interacción con BBDD: MySQL (II) Código PHP para obtener los datos: 2 / Conexión con MySQL / 3 $ l i n k = mysql_connect ( " l o c a l h o s t ", " r o o t ", " 1234567890 " ) ; 4 mysql_select_db ( "database_name", $ l i n k ) ; 5 6 / Consulta / 7 $username=" admin" ; 8 $ r e s u l t = mysql_query ( "SELECT FROM u s e r s WHERE username=' $username ' " ) ; 9 10 / Obtención de l o s datos / 11 $ a r r a y = mysql_fetch_array ( $ r e s u l t ) ; 12 13 echo "Username : ". $ a r r a y [ " username " ]. "<br/>" ; 14 echo " Password : ". $ a r r a y [ " password " ]. "<br/>" ; 15 echo " Email : ". $ a r r a y [ " email " ]. "<br/>" ; 16?> Salida Username:admin Password:1234 Email:admin@website.com
Interacción con BBDD: MySQL (III) Sobre la misma tabla users en la base de datos: username password email admin 1234 admin@website.com juan juan89 juan@website.com ana 4n4p4sw0rd ana@website.com Queremos obtener todos los usuarios ordenados por username: Consulta,que devuelve la siguiente tabla: SELECT * FROM users ORDER BY username username password email admin 1234 admin@website.com ana 4n4p4sw0rd ana@website.com juan juan89 juan@website.com Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 18 / 30
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 19 / 30 Interacción con BBDD: MySQL (IV) Cada llamada a mysql_fetch_array devuelve un array asociativo con la siguiente la de la consulta hasta que no hay más las y devuelve FALSE. 2 / Conexión con MySQL / 3 $ l i n k = mysql_connect ( " l o c a l h o s t ", " r o o t ", " 1234567890 " ) ; 4 mysql_select_db ( " catsandco ", $ l i n k ) ; 5 6 / Consulta / 7 $ r e s u l t = mysql_query ( "SELECT FROM u s e r s ORDER BY username " ) ; 8 9 / Obtención de l o s datos / 10 w h i l e ( $row = mysql_fetch_array ( $ r e s u l t ) ) { 11 echo "Username : ". $row [ " username " ]. ", " ; 12 echo " Password : ". $row [ " password " ]. ", " ; 13 echo " Email : ". $row [ " email " ]. "<br/>" ; 14 } 15?> Salida Username:admin,Password:1234,Email:admin@website.com Username:ana,Password:4n4p4sw0rd,Email:ana@website.com Username:juan,Password:juan89,Email:juan@website.com
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 20 / 30 Otras variables superglobales: $_FILES Utilizamos el siguiente formulario para subir un archivo: 1... 2 <form a c t i o n=" upload. php" method=" post " enctype=" m u l t i p a r t /form data "> 3 <p> 4 <l a b e l>archivo :</ l a b e l> 5 <i n p u t type=" f i l e " name=" f i l e "/> 6 </p> 7 <p> 8 <i n p u t type=" submit " name=" s u b m i t t e r " v a l u e=" S u b i r " /> 9 </p> 10 </ form> 11...
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 21 / 30 Otras variables superglobales: $_FILES Código PHP para obtener el archivo: 2 i f ( i s s e t ($_POST[ " s u b m i t t e r " ] ) ) { 3 / Comprobación de e r r o r e s / 4 i f ( $_FILES [ " f i l e " ] [ " e r r o r " ] > 0){ 5 d i e ( "<b>e r r o r a l s u b i r e l a r c h i v o </b>" ) ; 6 } e l s e { 7 / Comprobamos s i e l f i c h e r o e x i s t e / 8 i f ( f i l e _ e x i s t s ( $_FILES [ " f i l e " ] [ "name" ] ) ) { 9 d i e ( $_FILES [ " f i l e " ] [ "name" ]. " ya e x i s t e. " ) ; 10 } 11 / S i no e x i s t e, l o copiamos a l d i r e c t o r i o a c t u a l / 12 e l s e { 13 move_uploaded_file ( $_FILES [ " f i l e " ] [ "tmp_name" ], 14 $_FILES [ " f i l e " ] [ "name" ] ) ; 15 echo " Archivo : ". $_FILES [ " f i l e " ] [ "name" ] ; 16 echo " Tipo : ". $_FILES [ " f i l e " ] [ " type " ] ; 17 echo "Tamaño : ". ( $_FILES [ " f i l e " ] [ " s i z e " ] / 1024). " Kb" ; 18 echo " Archivo temporal : ". $_FILES [ " f i l e " ] [ "tmp_name" ] ; 19 } 20 } 21 } 22?>
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 22 / 30 Otras variables superglobales: $_SERVER Se puede utilizar la variable superglobal $_SERVER para acceder a información útil sobre el servidor y el entorno. 2 echo " F i c h e r o : ". $_SERVER[ "PHP_SELF" ]. "<br/>" ; 3 echo " S e r v i d o r : ". $_SERVER[ "SERVER_NAME" ]. "<br/>" ; 4 echo " Software : ". $_SERVER[ "SERVER_SOFTWARE" ]. "<br/>" ; 5 echo " User Agent : ". $_SERVER[ "HTTP_USER_AGENT" ]. "<br/>" ; 6?> Salida Fichero:/pagina1.php Servidor:localhost Software:Microsoft-IIS/7.5 User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Firefox/5.0
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 23 / 30 Funcione C Style: Manejo de cheros Se pueden utilizar las funciones clásicas de manejo de cheros con la misma sintáxis que en C. Veamos un ejemplo de apertura y volcado de un chero: 2 i f (! $ f i l e=fopen ( " http ://www. google. es / i n d e x. html ", " r " ) ) { 3 echo " E r r o r a l a b r i r e l a r c h i v o " ; 4 e x i t ; 5 } 6 w h i l e (! f e o f ( $ f i l e ) ) { 7 $ l i n e a=f g e t s ( $ f i l e,4096) ; 8 echo $ l i n e a ; 9 } 10 f c l o s e ( $ f i l e ) ; 11?> Además están disponibles funciones como: fread() fgetc() fwrite()
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 24 / 30 PHP Orientado a objetos 2 c l a s s MiClase 3 { 4 // D e c l a r a c i ó n de l a p r o p i e d a d 5 p u b l i c $var = "<b>hola Mundo</b>" ; 6 7 // C o n s t r u c t o r 8 p u b l i c f u n c t i o n construct ( ) { 9 echo " C o n s t r u c t o r de l a c l a s e <br/>" ; 10 } 11 // D e c l a r a c i ó n d e l método 12 p u b l i c f u n c t i o n d i s p l a y V a r ( ) { 13 echo $ t h i s >var ; 14 } 15 } 16 17 $a = new MiClase ( ) ; 18 $a >d i s p l a y V a r ( ) ; 19?> Salida Constructor de la clase Hola Mundo
Construyendo un foro con PHP y Webmatrix Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 25 / 30
Estructura de la base de datos Utilizaremos dos tablas con la siguiente estructura: La tabla users tendrá datos del tipo: id username password email image isadmin 1 admin 1234 admin@website.com images/default.png 1 2 juan juan89 juan@website.com images/default.png 0 La tabla comments tendrá datos del tipo: id user_id fecha texto 1 1 2010-10-11 11:56:13 Comentario 1 2 1 2010-10-11 11:29:23 Comentario 2 Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 26 / 30
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 27 / 30 Estructura de cheros I La estructura general de cheros que utilizaremos para gestionar los usuarios y los comentarios en el tablón es la siguiente:
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 28 / 30 Estructura de cheros II Para conservar la estructura de la página utilizaremos en todos ellos el siguiente formato: Código fuente: 1 <? php 2 i n c l u d e ( " f u n c t i o n s. php" ) ; 3 get_header ( ) ; 4?> 5 <d i v i d=" wrapper "> 6 <! C o n t e n i d o > 7 </ d i v> 8 <? php 9 get_footer ( ) ; 10?>
Conclusión Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 29 / 30
Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 30 / 30 Contacto Email Web jokenhl@gmail.com http://www.j0k3n.com Recursos http://www.j0k3n.com/websrc/