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 1 / 30 Contenidos 1 2 3 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 Construyendo un foro con PHP y Webmatrix Estructura de la base de datos Estructura de cheros Conclusión Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 2 / 30 Introducción a PHP Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 3 / 30 Integración con HTML Código fuente en el servidor. 1 <h t m l> 2 <h e a d> 3 < t i t l e >H o l a 4 </ h e a d> 5 <b o d y> 6 <? p h p 7 /∗ 8 $ a="<b>H o l a Comment Mundo</ t i t l e > ∗/ Mundo</b>" ; Salida en el lado del cliente. 1 <h t m l> 2 <h e a d> 3 < t i t l e >H o l a 4 </ h e a d> 5 <b o d y> 6 <b>H o l a 7 </ b o d y> 8 </ h t m l> Mundo</ t i t l e > Mundo</ b> 9 10 echo 11 ?> 12 </ b o d y> 13 </ h t m l> $a ; Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 4 / 30 Declaración de variables Las variables deben ir precedidas por el símbolo $. PHP distingue entre mayúsculas y minúsculas. 1 <?p h p /∗ 2 Variables ∗/ 3 $ c a d e n a=" H o l a , " ; 4 $ n u m e r o =3+5; 5 6 7 echo $ c a d e n a . $numero ; ?> Salida Hola,8 Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 5 / 30 Array normal Forma A: 1 Forma B: <?p h p 1 2 /∗ 3 $a = Array ∗/ a r r a y ( " C e r o " , " Uno " , " Dos " , " Tres " ) ; 4 <?p h p 2 /∗ 3 $a [ 0 ] = " Cero " ; 4 $ a [ 1 ] = " Uno " ; Array ∗/ 5 $ a [ 2 ] = " Dos " ; 5 echo $a [ 0 ] ; 6 $a [ 3 ] = " T r e s " ; 6 echo $a [ 1 ] ; 7 echo $a [ 2 ] ; echo $a [ 3 ] ; 7 8 9 ?> 8 echo $a [ 0 ] ; 9 echo $a [ 1 ] ; 10 echo $a [ 2 ] ; echo $a [ 3 ] ; 11 12 ?> Salida CeroUnoDosTres Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 6 / 30 Array asociativo Forma A: 1 Forma B: <?p h p 1 2 /∗ 3 $a = Array ∗/ a r r a y ( " n o m b r e "=>" J u a n " , <?p h p 2 /∗ Array ∗/ 3 $ a [ " n o m b r e " ]= " J u a n " ; 4 " a p e l l i d o "=>" L ó p e z " , 4 $ a [ " a p e l l i d o " ]= " L ó p e z " ; 5 " e m a i l "=>" j u a n @ w e b s i t e . com " 5 $ a [ " e m a i l " ]= " j u a n @ w e b s i t e . com " ; 6 ) ; 6 7 7 8 echo " Nombre : " ; 8 echo 9 echo $a [ " nombre " ] ; 9 echo $a [ " nombre " ] ; 10 echo "<b r />" ; 10 echo "<b r />" ; 11 echo " Apellido : " ; 11 echo " Apellido : " ; 12 echo $a [ " a p e l l i d o " ] ; 12 echo $a [ " a p e l l i d o " ] ; 13 echo "<b r />" ; 13 echo "<b r />" ; echo " Email : " ; 14 echo " Email : " ; echo $a [ " e m a i l " ] ; 15 echo $a [ " e m a i l " ] ; 14 15 16 ?> 16 " Nombre : " ; ?> Salida Nombre:Juan Apellido:López Email:[email protected] Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 7 / 30 Sentencias condicionales: if else 1 <?p h p 2 /∗ 3 $ a =5; 4 $ b =4; if else ∗/ 5 6 i f ( $a > $b ) { 7 echo 8 } 9 10 } 11 12 13 else $ a . ">" . $ b ; i f ( $ a == $b ) echo $ a . "=" . $ b ; else { echo $ a . "<" . $b ; { } ?> Salida 5>4 Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 8 / 30 Sentencias condicionales: switch 1 <?p h p 2 /∗ 3 $ a =7; ∗/ switch 4 5 s w i t c h ( $a ) { 6 case 1: 7 echo 8 break ; 9 case 10 echo 11 break ; 12 valor es 1" ; " Su valor es 5" ; valor es $a " ; default : 13 echo 14 break ; 15 16 " Su 5: " Su } ?> Salida Su valor es 7 Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 9 / 30 Bucles: for 1 <?p h p 2 /∗ 3 $a [ 0 ] = " Cero " ; 4 $ a [ 1 ] = " Uno " ; 5 $ a [ 2 ] = " Dos " ; for ∗/ 6 7 f o r ( $ i =0; $ i < s i z e o f ( $ a ) ; $ i ++){ 8 9 10 11 echo $a [ $ i ] ; echo "<b r />" ; } ?> Salida Cero Uno Dos Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 10 / 30 Bucles: foreach 1 <?p h p 2 /∗ 3 $a [ 0 ] = " Cero " ; 4 $ a [ 1 ] = " Uno " ; 5 $ a [ 2 ] = " Dos " ; foreach ∗/ 6 7 f o r e a c h ( $a 8 9 10 11 as $out ) { echo $out ; echo "<b r />" ; } ?> Salida Cero Uno Dos Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 11 / 30 Bucles: while 1 <?p h p 2 /∗ 3 $c = while ∗/ 0; 4 5 while 6 7 10) { $c . " , " ; $ c ++; 8 9 ( $c < echo } ?> 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 12 / 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. 1 <?p h p 2 i f ( i s s e t ( $_GET [ " p a g e " ] ) ) { 3 echo 4 }else 5 echo 6 7 " P a g e : " . $_GET [ " p a g e " ] ; { "No se ha definido"; } ?> Salida Page:5 Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 13 / 30 Variables GET y POST (II) Código HTML para realizar el POST: 1 ... 2 <f o r m 3 <p> 4 a c t i o n =" i n d e x . p h p " < l a b e l >U s e r :</ l a b e l > 5 <i n p u t 6 </ p> 7 <p> 8 <i n p u t 10 </ p> 11 <p 12 14 15 t y p e=" t e x t " name=" u s e r " /> < l a b e l >P a s s w o r d :</ l a b e l > 9 13 m e t h o d=" p o s t "> t y p e=" p a s s w o r d " name=" p a s s w o r d " /> a l i g n =" c e n t e r "> <i n p u t t y p e=" s u b m i t " v a l u e=" S e n d " name=" s u b m i t t e r " /> </ p> </ f o r m> ... Código PHP para capturar el POST: 1 <?p h p 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 $ p a s s w o r d=$_POST [ " p a s s w o r d " ] ; 5 6 7 8 Álvaro Gómez Giménez echo " User : $user " ; echo " Password : $password " ; } ?> (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 14 / 30 Sesiones en PHP La página 1 inicia la sesión y establece una variable. 1 <?p h p La página 2 restaura dicha sesión y obtiene el valor de la variable. 1 2 /∗ 3 session_start (); Pagina 1 ∗/ 4 /∗ 3 session_start (); Pagina 2 ∗/ 4 5 $_SESSION [ " u s e r " ]= " J u a n " ; 5 6 echo "<a 6 echo " Página 7 8 <?p h p 2 h r e f =\" p a g i n a 2 . p h p \">" ; 2</a>" ; ?> i f ( i s s e t ( $_SESSION [ " u s e r " ] ) ) { 7 "<b r />" ; 9 echo "<a echo " Página 11 (UAM.NET) $_SESSION [ " u s e r " ] ; echo } 10 Álvaro Gómez Giménez echo 8 h r e f =\" p a g i n a 1 . p h p \">" ; 1</a>" ; ?> Desarrollo PHP con Webmatrix 25-11-2011 15 / 30 Interacción con BBDD: MySQL (I) Tenemos la tabla users en la base de datos con los siguientes datos: username admin juan ana password 1234 juan89 4n4p4sw0rd email [email protected] [email protected] [email protected] ,y queremos realizar la siguiente consulta SQL: Consulta SELECT * FROM users WHERE username='admin' ,que devuelve la siguiente la: username admin Álvaro Gómez Giménez (UAM.NET) password 1234 email [email protected] Desarrollo PHP con Webmatrix 25-11-2011 16 / 30 Interacción con BBDD: MySQL (II) Código PHP para obtener los datos: 1 <?p h p 2 /∗ 3 $link 4 m y s q l _ s e l e c t _ d b ( " database_name " , Conexión con MySQL ∗/ = mysql_connect ( " l o c a l h o s t " , " r o o t " , " 1234567890 " ) ; $link ) ; 5 6 /∗ 7 $ u s e r n a m e=" a d m i n " ; 8 $result Consulta ∗/ = m y s q l _ q u e r y ( "SELECT $username ' ∗ FROM users WHERE u s e r n a m e = ' ") ; 9 10 /∗ 11 $array Obtención = de los datos ∗/ mysql_fetch_array ( $ r e s u l t ) ; 12 13 echo " U s e r n a m e : " . $ a r r a y [ " u s e r n a m e " ] . "<b r />" ; 14 echo " P a s s w o r d : " . $ a r r a y [ " p a s s w o r d " ] . "<b r />" ; echo " Email : " . 15 16 $ a r r a y [ " e m a i l " ] . "<b r />" ; ?> Salida Username:admin Password:1234 Email:[email protected] Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 17 / 30 Interacción con BBDD: MySQL (III) Sobre la misma tabla users en la base de datos: username admin juan ana password 1234 juan89 4n4p4sw0rd email [email protected] [email protected] [email protected] Queremos obtener todos los usuarios ordenados por username: Consulta SELECT * FROM users ORDER BY username ,que devuelve la siguiente tabla: username admin ana juan Álvaro Gómez Giménez (UAM.NET) password 1234 4n4p4sw0rd juan89 email [email protected] [email protected] [email protected] Desarrollo PHP con Webmatrix 25-11-2011 18 / 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. 1 <?p h p 2 /∗ 3 $link 4 mysql_select_db ( " catsandco " , Conexión con MySQL ∗/ = mysql_connect ( " l o c a l h o s t " , " r o o t " , " 1234567890 " ) ; $link ) ; 5 6 /∗ 7 $result Consulta ∗/ = m y s q l _ q u e r y ( "SELECT ∗ FROM users ORDER BY username ") ; 8 /∗ 9 10 12 13 14 15 Obtención w h i l e ( $row = 11 de los datos ∗/ mysql_fetch_array ( $ r e s u l t ) ) { echo " Username : " . $row [ " u se r na me " ] . " , " ; echo " P as sw ord : " . $row [ " p a s s w o r d " ] . " , " ; echo " Email : " . $ r o w [ " e m a i l " ] . "<b r />" ; } ?> Salida Username:admin,Password:1234,Email:[email protected] Username:ana,Password:4n4p4sw0rd,Email:[email protected] Username:juan,Password:juan89,Email:[email protected] Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 19 / 30 Otras variables superglobales: $_FILES Utilizamos el siguiente formulario para subir un archivo: 1 ... 2 <f o r m 3 <p> a c t i o n =" u p l o a d . p h p " m e t h o d=" p o s t " e n c t y p e=" m u l t i p a r t / f o r m − d a t a "> 4 < l a b e l > A r c h i v o :</ l a b e l > 5 <i n p u t 6 </ p> 7 <p> 8 9 10 11 <i n p u t t y p e=" f i l e " name=" f i l e " /> t y p e=" s u b m i t " name=" s u b m i t t e r " v a l u e=" S u b i r " /> </ p> </ f o r m> ... Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 20 / 30 Otras variables superglobales: $_FILES Código PHP para obtener el archivo: 1 <?p h p 2 i f ( i s s e t ($_POST [ " s u b m i t t e r " ] ) ) { 3 /∗ Comprobación 4 if ( $_FILES [ " f i l e " ] [ " e r r o r " ] 5 de d i e ( "<b>E r r o r 6 }else errores al subir ∗/ el > 0){ a r c h i v o </b>" ) ; { 7 /∗ Comprobamos 8 if ( f i l e _ e x i s t s ( $_FILES [ " f i l e " ] [ " name " ] ) ) 9 si el fichero existe d i e ( $_FILES [ " f i l e " ] [ " name " ] . " 10 } 11 /∗ 12 else Si no existe , lo copiamos al ya ∗/ { existe . directorio "); actual ∗/ { 13 m o v e _ u p l o a d e d _ f i l e ( $_FILES [ " f i l e " ] [ " tmp_name " ] , 14 $_FILES [ " f i l e " ] [ " name " ] ) ; 15 echo " Archivo : 16 echo " Tipo : " . $_FILES [ " f i l e " ] [ " t y p e " ] ; 17 echo " Tamaño : " . echo " Archivo temporal : 18 19 . $_FILES [ " f i l e " ] [ " name " ] ; ( $_FILES [ " f i l e " ] [ " s i z e " ] " . / 1024). " Kb" ; $_FILES [ " f i l e " ] [ " tmp_name " ] ; } 20 } 21 22 " } ?> Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 21 / 30 Otras variables superglobales: $_SERVER Se puede utilizar la variable superglobal $_SERVER para acceder a información útil sobre el servidor y el entorno. 1 <?p h p 2 echo " F i c h e r o : " . $_SERVER [ "PHP_SELF" ] . "<b r />" ; 3 echo " S e r v i d o r : " . $_SERVER [ "SERVER_NAME" ] . "<b r />" ; 4 echo " S o f t w a r e : " . $_SERVER [ "SERVER_SOFTWARE" ] . "<b r />" ; 5 echo " U s e r −A g e n t : " . $_SERVER [ "HTTP_USER_AGENT" ] . "<b r />" ; 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 22 / 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: 1 <?p h p 2 i f ( ! $ f i l e =f o p e n ( " h t t p : / / www . g o o g l e . e s / i n d e x . h t m l " , 3 echo 4 " Error al abrir el exit ; 5 } 6 while (! feof ( $ f i l e ) ){ 7 $ l i n e a=f g e t s ( $ f i l e , 4 0 9 6 ) ; 8 echo 9 $linea ; } 10 11 "r") ){ archivo " ; fclose ( $file ) ; ?> Además están disponibles funciones como: fread() fgetc() fwrite() Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 23 / 30 PHP Orientado a objetos 1 <?p h p 2 class 3 { MiClase 4 // D e c l a r a c i ó n de l a p r o p i e d a d 5 public 6 $var = "<b>H o l a Mundo</b>" ; // C o n s t r u c t o r 7 8 public 9 function echo 10 __construct ( ) " Constructor de la { c l a s e <b r />" ; } // D e c l a r a c i ó n d e l método 11 12 public 13 function echo 14 $this displayVar () −>v a r { ; } 15 } 16 17 $ a = new 18 $a−>d i s p l a y V a r ( ) ; 19 MiClase () ; ?> Salida Constructor de la clase Hola Mundo Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 24 / 30 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 id 1 2 users tendrá datos del tipo: username admin juan La tabla password 1234 juan89 email [email protected] [email protected] image images/default.png images/default.png comments tendrá datos del tipo: id user_id fecha 1 2 Álvaro Gómez Giménez 1 1 (UAM.NET) 2010-10-11 11:56:13 2010-10-11 11:29:23 Desarrollo PHP con Webmatrix isadmin 1 0 texto Comentario 1 Comentario 2 25-11-2011 26 / 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 27 / 30 Estructura de cheros II Para conservar la estructura de la página utilizaremos en todos ellos el siguiente formato: Código fuente: 1 <? p h p 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=" w r a p p e r "> < !−− 6 7 </ d i v> 8 <? p h p 9 10 C o n t e n i d o −−> get_footer () ; ?> Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 28 / 30 Conclusión Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 29 / 30 Contacto Email Web [email protected] http://www.j0k3n.com Recursos http://www.j0k3n.com/websrc/ Álvaro Gómez Giménez (UAM.NET) Desarrollo PHP con Webmatrix 25-11-2011 30 / 30