berni millet piero - laboratorio de php y mysql.pdf

134
Laboratorio de PHP y MySQL Piero Berni Millet Dídac Gil de la Iglesia PID_00152507

Upload: eliasfendi

Post on 19-Oct-2015

111 views

Category:

Documents


5 download

TRANSCRIPT

  • Laboratorio dePHP y MySQLPiero Berni MilletDdac Gil de la Iglesia

    PID_00152507

  • CC-BY PID_00152507 Laboratorio de PHP y MySQL

    Piero Berni Millet Ddac Gil de la Iglesia

    Piero Berni Millet est ligado al gru-po de investigacin CEIPAC del reade Historia Antigua de la Universi-dad de Barcelona desde 1989, don-de lleva a cabo diferentes proyectosinformticos de bases de datos apli-cados a las nuevas tecnologas. Des-de 1999 colabora con el grupo deinvestigacin liba, de los estudiosde Humanidades de la UOC, en eldiseo y montaje de diferentes ex-posiciones virtuales, concebidas co-mo un complemento de exposicio-nes presenciales, que forman partede un proyecto de investigacin so-bre patrimonio, museos y recursosdigitales.

    Ingeniero informtico. Trabaja co-mo gestor de sistemas y aplicacio-nes, colaborando en proyectos deadministracin de la seguridad y de-sarrollando aplicaciones web basa-das en bases de datos. Ha realizadovarios portales web dinmicos paracentros de enseanza y actualmenteest trabajando en aplicaciones inte-ligentes de monitorizacin y prontoaviso de ataques informticos.

    Primera edicin: febrero 2010 Piero Berni Millet, Ddac Gil de la IglesiaTodos los derechos reservados de esta edicin, FUOC, 2010Av. Tibidabo, 39-43, 08035 BarcelonaDiseo: Manel AndreuRealizacin editorial: Eureca Media, SLISBN: 978-84-692-9427-7Depsito legal: B-8.145-2010

    Los textos e imgenes publicados en esta obra estn sujetos excepto que se indique lo contrario a una licencia de Reconocimiento(BY) v.3.0 Espaa de Creative Commons. Podis copiarlos, distribuirlos y transmitirlos pblicamente siempre que citis elautor y la fuente (FUOC. Fundacin para la Universitat Oberta de Catalunya). La licencia completa se puede consultar enhttp://creativecommons.org/licenses/by/3.0/es/legalcode.es

  • CC-BY PID_00152507 3 Laboratorio de PHP y MySQL

    Contenidos

    Mdulo didctico1Puesta en marcha de un SGBD y un servidor web localPiero Berni Millet y Ddac Gil de la Iglesia

    1. Puesta en marcha de un SGBD y un servidor local2. Puesta en marcha de un SGBD para Windows (WAMP)3. Puesta en marcha de un SGBD para Ubuntu GNU/Linux

    Mdulo didctico2Orientacin a objetos en PHPDdac Gil de la Iglesia

    1. Porqu usar PHP OO?2. Organizacin del cdigo3. Reutilizacin de cdigo4. Multiplicidad5. Herencia6. Visibilidad7. Sobrecarga de clases8. Constructores y destructores

    Mdulo didctico3Uso de formularios en HTML para enviar y recopilar datosPiero Berni Millet

    1. Introduccin a CGI y su entorno2. Uso de formularios HTML/XHTML3. Leer datos de un formulario con PHP

    Mdulo didctico4Desarrollo web con PHP y MySQLPiero Berni Millet

    1. Grfico de barras con PHP y HTML2. Web dinmica multilenguaje3. Formulario para enviar los datos a una cuenta Gmail4. El formulario anterior con cdigo de seguridad anti spambots (captcha)5. Geolocalizacin con GeoIp y Google Maps

    Mdulo didctico5AnexosPiero Berni Millet y Ddac Gil de la Iglesia

    1. Anexo 1: Uso del servidor remoto de la UOC como SGBD y servidor deInternet

    2. Anexo 2: Mquinas virtuales

  • Puesta en marchade un SGBD y unservidor web local

    Piero Berni MilletDdac Gil de la Iglesia

    PID_00155713

  • CC-BY PID_00155713 Puesta en marcha de un SGBD y un servidor web local

    Los textos e imgenes publicados en esta obra estn sujetos excepto que se indique lo contrario a una licencia de Reconocimiento(BY) v.3.0 Espaa de Creative Commons. Podis copiarlos, distribuirlos y transmitirlos pblicamente siempre que citis elautor y la fuente (FUOC. Fundacin para la Universitat Oberta de Catalunya). La licencia completa se puede consultar enhttp://creativecommons.org/licenses/by/3.0/es/legalcode.es

  • CC-BY PID_00155713 Puesta en marcha de un SGBD y un servidor web local

    ndice

    Introduccin............................................................................................... 5

    1. Puesta en marcha de un SGBD y un servidor local................... 71.1. Qu es Apache? ......................................................................... 71.2. Qu es PHP? .............................................................................. 71.3. Qu es MySQL? ......................................................................... 91.4. El funcionamiento del sistema ................................................... 10

    2. Puesta en marcha de un SGBD para Windows (WAMP)........... 122.1. Instalacin de WampServer ........................................................ 122.2. Primeros pasos con WampServer ................................................ 172.3. Consideraciones sobre la instalacin sobre Windows 7 ............. 202.4. Consideraciones sobre los ficheros de configuracin ................. 22

    2.4.1. Fichero de configuracin de Apache ............................. 222.4.2. Fichero de configuracin de PHP (PHP.ini) ................... 242.4.3. Fichero de configuracin de MySQL ............................. 25

    3. Puesta en marcha de un SGBD para Ubuntu GNU/Linux........ 263.1. Requisitos del sistema para instalar la versin 8.10 Intrepid

    Ibex .............................................................................................. 273.2. Instalacin del servidor LAMP desde el escritorio de Ubuntu .... 273.3. Instalacin del servidor LAMP desde la consola de Ubuntu ....... 30

  • CC-BY PID_00155713 5 Puesta en marcha de un SGBD y un servidor web local

    Introduccin

    En este apartado aprenderis a instalar un sistema de gestin de bases de datoslocal para Windows con el que tendris ocasin de publicar datos en Internetde forma dinmica y en tiempo real.

    El sistema estar compuesto, entonces, por los siguientes elementos:

    1) Sistema operativo Windows 95/98/Me/NT/2000/XP/Vista.2) Apache como servidor de web.3) PHP como mdulo de ampliacin de Apache para acceder a la base de datos.4) MySQL como servidor de base de datos.

    En este apartado nos gustara facilitar al lector la tarea de instalar el sistemacompleto desde el principio. Para ello, detallaremos los pasos que hay que se-guir para la compilacin e instalacin de los diferentes paquetes, aunque laltima palabra siempre la tendr la documentacin de cada paquete en par-ticular. En algn caso, quiz la descripcin que hacemos aqu no sea lo sufi-cientemente completa, por lo que el estudiante tendr que recurrir a las ins-trucciones de instalacin de cada uno de los paquetes.

    Una vez completados estos cuatro procesos de instalacin, habremos conse-guido el objetivo principal de esta gua, objetivo que culminar con la creacinde una simple web de ejemplo conectada a una base de datos.

    General public license

    A excepcin de Windows, po-demos obtener todos los ele-mentos del sistema sin ningntipo de coste al tener licenciaGPL (general public license). Lasbases de esta licencia se en-cuentran especificadas en ladireccin de Internet:http://www.gnu.org/copyleft/gpl.html

  • CC-BY PID_00155713 7 Puesta en marcha de un SGBD y un servidor web local

    1. Puesta en marcha de un SGBD y un servidor local

    1.1. Qu es Apache?

    Apache es un servidor de web. Un servidor web es un software que responde alas solicitudes de los navegadores web. En estos momentos, Apache es uno delos servidores web ms populares del mundo. Ello se debe, entre otras cosas, aque Apache es un software de alta calidad y de cdigo abierto (open source), loque significa que puede descargarse de forma gratuita desde Internet.

    Apache es uno de los mayores xitos del software libre y su aceptacin entrelos servidores web es tan grande que ha llegado hasta el punto de llegar a serun serio competidor del servidor de web de Microsoft (IIS, Internet informationserver). Desde 1996, Apache es el servidor web ms popular de Internet, hastallegar a la actual cota de un 68% de los servidores web frente un 31% sobre IIS(Fuente: http://news.netcraft.com). Su desarrollo es continuo y su portabilidad leha llevado a plataformas como Windows NT/2000/XP y Windows 95/98/Me,a los sistemas Unix y a plataformas como MacOS.

    Una de las principales caractersticas de Apache es su extensibilidad basada enuna gran capacidad de modulacin de su cdigo fuente, hecho que ha facili-tado la aparicin de mdulos de extensin como PHP, que evitar el uso decgi-bin por completo, facilitando as enormemente la programacin de apli-caciones en el lado del servidor, en especial en el campo del acceso a bases dedatos, as como su agilidad en servir las pginas solicitadas y su seguridad.

    1.2. Qu es PHP?

    PHP corresponde a las iniciales de personal home page tools (herramientas parapginas iniciales personales). Es un lenguaje de programacin tipo script paraentornos web con unas funciones muy semejantes a las de ASP y JSP, utilizado,sobre todo, en servidores Linux para personalizar la informacin enviada alos usuarios que acceden a un sitio web. Desde un punto de vista tcnico,es un lenguaje interpretado de alto nivel, similar en construcciones lxicasy sintcticas a C, C++, Java y Perl, por lo que a quienes ya conozcan estoslenguajes les resultar muy fcil comenzar a escribir cdigo PHP.

    PHP es un lenguaje incrustado (embedded) en pginas HTML, es decir, es unlenguaje de programacin que se introduce dentro de las pginas HTML. Elcdigo PHP se interpreta en el lado del servidor de web, desde donde se generala pgina HTML solicitada antes de llevar a cabo su transmisin al navegador.De esta forma, podemos programar aplicaciones asociadas al servidor de web,aumentando, as, la funcionalidad de dicho servidor y convirtindolo en un

    El nuevo PHP

    El nuevo PHP, cuya versin esla 5, se ha ampliado, respectola versin 3, en aspectos tanimportantes como conceptosde programacin orientada aobjetos, y su sintaxis es ahoramucho ms cercana a la de C,por lo que cualquier progra-mador que haya programadoen C no tardar mucho tiempoen aprender a utilizar el len-guaje. Las construcciones sin-tcticas de PHP son ms cerca-nas a Perl que a C, ya que ensu diseo se busc un lengua-je til con el que la programa-cin fuese rpida, es decir, quefuese un lenguaje muy pro-ductivo al ms puro estilo dePerl.

  • CC-BY PID_00155713 8 Puesta en marcha de un SGBD y un servidor web local

    sistema de desarrollo de aplicaciones cliente/servidor mucho ms completo.Su principal objetivo es hacer que desarrolladores de aplicaciones basadas enla web puedan escribir pginas que se generan dinmicamente de una formasencilla y rpida.

    En cuanto a la tecnologa del intrprete de PHP, la versin 3 ya era tan rpi-da como los intrpretes existentes de ASP. Con la versin 4 de PHP, su rendi-miento y prestaciones mejoraron todava ms: el intrprete (Zend) era hasta12 veces ms rpido que el de la versin 3; se modulariz todo el diseo in-terno; se perfeccion su integracin con otros servidores HTTP como el IIS deMicrosoft, y se encar hacia la programacin orientada a objetos (Programa-cin OO). Con la versin 5, se ha rediseado completamente el motor Zend,para crear un lenguaje completamente OO, agilizando ms an su funciona-miento, y extrayendo la compatibilidad con MySQL en un mdulo externo(por cuestiones de licencia con MySQL, este SGBD ha dejado de ser "la base dedatos" de PHP, para ser una ms de las que PHP puede tratar).

    Qu es Zend? y qu es PHP?

    El nombre Zend se refiere al motor del lenguaje, es decir, el ncleo de PHP.

    El trmino PHP se refiere al sistema completo tal y como aparece desde fuera.

    Zend ocupa la parte de intrprete (analiza el cdigo de entrada de un script, lo traduce y loejecuta), y tambin un poco de la parte de funcionalidad (implementa la funcionalidaddel sistema). PHP ocupa la parte de funcionalidad y la de interfaz (habla con el servidorweb, etc.). Juntos forman el paquete completo PHP.

    Zend forma realmente el ncleo del lenguaje, mientras que PHP contiene todos los m-dulos externos (los cuales se pueden cargar en tiempo de ejecucin) e incorporados (losque se compilan directamente con PHP) que crean las posibilidades destacadas del len-guaje.

    Estructura interna de PHP

    PHP proporciona, por tanto, una gran facilidad para acceder a diferentes tiposde bases de datos como Oracle, Sybase, MySQL, PostgreSQL, Adabas, etc. Dehecho, es bastante sencillo portar una aplicacin escrita con PHP para MySQLa cualquier otro servidor de base de datos, ya que las funciones de acceso queofrece PHP son, en muchos casos, de sintaxis compartida.

  • CC-BY PID_00155713 9 Puesta en marcha de un SGBD y un servidor web local

    1.3. Qu es MySQL?

    MySQL es un sistema de gestin de bases de datos (SGBD) SQL que enalgunos aspectos es aproximadamente tan potente como Oracle (http://www.oracle.com/). Cabe mencionar que a mediados del ao 2009, Oracle, haadquirido MySQL.

    Sus principales objetivos han sido la velocidad y la robustez. Es un SGBD sen-cillo y rpido que se adapta perfectamente a entornos en los que el volumende datos sea del orden de megabytes (en la documentacin se habla de su usocon bases de datos de 50 millones de registros). En la versin 5 de MySQL haincluido el control de transacciones, procedimientos almacenados y triggers,por lo que ha rellenado el gran hueco que lo diferenciaba de grandes SGBDcomo Oracle. Si bien existe la posibilidad de comprar su soporte, Oracle sigueteniendo ms aceptacin en el mundo empresarial.

    En el ltimo benchmark realizado de SGBD, se ha visto un gran crecimiento enla potencia de MySQL, frente a sus competidores.

    Sistema Operativo SGBD Lenguaje Operaciones por minuto

    Linux MySQL 5.0 PHP 5 3664

    Linux Pico Lisp 2.2.1 Pico Lisp 2.2.1 2600

    Linux MonetDB 4.9 Java 1833

    Windows MySQL 5.0 Java 1798

    Windows MySQL 4.1 Java 1564

    Windows MySQL 4.1 PHP 5 1542

    Linux DB2 Express 8.2 Java 1537

    Linux Oracle 10g Express Java 1412

    Linux Sieben Geisslein Java 600

    Linux MySQL 5.0 Java 587

    Windows MySQL 5.0 PHP 5 444

    Windows MySQL 5.0 Python 2.4 137

    Linux PostgresSQL 8.1 PHP 5 120

    En estos ltimos aos destacadas compaas de software han desarrollado apli-caciones SQL de uso libre y con cdigo fuente (open source). En el mundo deGNU/Linux MySQL es, junto a Postgres (http://www.postgresql.org/), uno delos SGBD ms populares.

  • CC-BY PID_00155713 10 Puesta en marcha de un SGBD y un servidor web local

    MySQL tambin puede verse como un conjunto de aplicaciones o plugginsfuncionando en conjunto.

    Existen en su versin actual distintos motores de almacenamiento de datos,entre los que destacan MyISAM (permite ndices por cadenas completas) yInnoDB (que permite el uso de transacciones) o la incorporacin de buffers enmemoria que permiten agilizar la respuesta de sus resultados.

    MySQL se encuentra, igual que PHP, en fase de pleno desarrollo; se estn pu-blicando con regularidad nuevas versiones del sistema, as como herramientasque son bsicas en cualquier SGBD actual:

    Dispositivo JDBC para acceder desde Java. Dispositivo ODBC para acceder utilizando la API ODBC. API de programacin para C, Perl, C++, Python y TCL. Acceso desde PHP. Entornos visuales de gestin de la base de datos. Control de acceso basado en una base de datos de administracin.

    1.4. El funcionamiento del sistema

    Como una motivacin previa y para que el lector pueda tener una visin glo-bal desde el principio, presentamos en este apartado una visin global del sis-tema. En el siguiente grfico aparecern destacadas las partes fundamentalesdel mismo.

    Los pasos que describen la interaccin entre el usuario y la base de datos son:

    1) El usuario carga una pgina HTML con un formulario, rellena los datos yse los enva al servidor web.

  • CC-BY PID_00155713 11 Puesta en marcha de un SGBD y un servidor web local

    2) Por medio de la red TCP/IP los datos llegan a Apache.

    3) El servidor detecta que el usuario solicita una pgina PHP, por lo que informaal mdulo de PHP del programa que hay que ejecutar y le pasa los datos delformulario.

    4) El mdulo de PHP ejecuta el programa, el cual accede a MySQL utilizando,de nuevo, una comunicacin TCP/IP.

    5) MySQL procesa la peticin del programa PHP y le enva los resultados devuelta.

    6) El mdulo PHP recibe los resultados del servidor de base de datos, les daformato en una nueva pgina HTML y se los devuelve al cliente mediante elservidor Apache.

    7) El cliente recibe la pgina HTML resultado de su peticin por medio de lared TCP/IP.

    En este primer esquema ya podemos ver que la interaccin con la base de datos se hace, en su totalidad, por medio de PHP.

  • CC-BY PID_00155713 12 Puesta en marcha de un SGBD y un servidor web local

    2. Puesta en marcha de un SGBD para Windows(WAMP)

    WAMP es el acrnimo para instalaciones Apache, MySQL, PHP/Perl/Pyt-hon sobre la plataforma Windows que permite la publicacin de pgi-nas dinmicas sobre la Web.

    WampServer facilita la instalacin de los mdulos descritos anteriormente, yaque consiste en una sola aplicacin que instalar que contiene los servicios pa-ra generar un servidor WAMP. Por su simplicidad de instalacin, WampServeres una herramienta de gran utilidad a la hora de desarrollar pginas web di-nmicas.

    Existen en el mercado otras soluciones integradas para la creacin de serviciosweb dinmicos, basados igualmente en MySQL, Apache y PHP/Perl/Python.Una solucin bastante distribuida es XAMPP, y existen versiones para Win-dows, Linux, Mac y Solaris.

    A continuacin describiremos el proceso de instalacin del paquete WampSer-ver en la plataforma Windows XP y su posterior configuracin. Seguidamente,presentamos algunos puntos que se deben considerar para instalaciones reali-zadas sobre Windows 7. Finalmente, daremos una descripcin bsica sobre losficheros de configuracin de Apache, PHP y MySQL que es conveniente saberpara entender cmo solventar algunos problemas o limitaciones que un desa-rrollador puede encontrarse durante la creacin de un portal web dinmico.

    2.1. Instalacin de WampServer

    El proceso de instalacin del servicio WAMP con WampServer es muy sencillo.

    Tras la ejecucin del instalador con nombre WampServer2.0i.exe aparece lapantalla de bienvenida al inicio de la instalacin. Deberemos simplementepresionar sobre el botn Siguiente para empezar con el proceso de instala-cin.

    Descargarse la versinms reciente

    De la pgina web oficial delproducto WampServer puededescargarse la versin ms re-ciente del servidor. Las captu-ras de pantalla que se ofrecenen este captulo se han realiza-do sobre la instalacin del pro-ducto WampServer 2.0i confecha de lanzamiento 11 de ju-lio del 2009.

  • CC-BY PID_00155713 13 Puesta en marcha de un SGBD y un servidor web local

    Algunos de los enlaces de WampServer, como por ejemplo para acceder aphpMyAdmin para la gestin de las bases de datos, se realizan a travs delnavegador web. El instalador nos preguntar en este punto cul es el navega-dor web que desearemos usar. En la captura siguiente se muestra cmo se haelegido el navegador Explorer.exe, es decir, el Internet Explorer existente enla plataforma Windows.

    Despus de aceptar la licencia GNU para la instalacin del software WampSer-ver, se solicita la direccin donde instalar la aplicacin. Por defecto, la insta-lacin se realizar en la carpeta C:\wamp.

  • CC-BY PID_00155713 14 Puesta en marcha de un SGBD y un servidor web local

    Una vez entrada la ruta de la instalacin, presionaremos en el botn Siguien-te e Instalar. Con ello tendremos la aplicacin WAMP instalada en nuestroservidor local, pero ser necesario un proceso de configuracin del servidorweb dinmico, muy sencillo tambin.

  • CC-BY PID_00155713 15 Puesta en marcha de un SGBD y un servidor web local

    El servidor web WampServer, mediante libreras PHP, permite el envo de co-rreos electrnicos. Un ejemplo cotidiano de envo de correos electrnicos espara el alta a servicios web, tales como registro en foros. El primer paso deconfiguracin del servidor web dinmico es la entrada de los parmetros parausar un servidor de envo de correos electrnicos mediante protocolo SMTP.En caso de disponer de un servidor de correos, entraremos la direccin del ser-vidor de correo electrnico y la direccin de correo electrnico desde dondese mandarn los correos.

    En caso de no disponer de servidor de correo electrnico, simplemente presio-naremos en el botn Siguiente.

  • CC-BY PID_00155713 16 Puesta en marcha de un SGBD y un servidor web local

    Para finalizar, comprobaremos que la casilla Iniciar WampServer 2 ahora estactivada y presionaremos en el botn Finalizar para finalizar con el procesode configuracin del servidor web dinmico.

    Observando la barra de tareas de Windows, podemos detectar que WampSer-ver est en ejecucin (el icono en blanco mostrar que el servicio est encen-dido, mientras que el icono en rojo determina que est apagado). Pinchandosobre el icono de WampServer podemos modificar ciertos parmetros de con-figuracin, como el idioma de los mens de configuracin, encender o apagarlos servicios web o de bases de datos, activar mdulos de Apache, activar ex-tensiones para PHP, etc.

  • CC-BY PID_00155713 17 Puesta en marcha de un SGBD y un servidor web local

    2.2. Primeros pasos con WampServer

    Una vez terminada la instalacin y configuracin del servidor web dinmicocon WampServer, comprobaremos que su ejecucin es correcta. Por defecto,cuando llamamos a la raz del rbol web, se nos mostrar una pantalla de bien-venida con la configuracin actual que est usando el servidor web, as comolas extensiones de Apache que tiene activadas en dicha ejecucin. Encontra-remos tambin un enlace a phpinfo() para ver los mdulos activados en elservidor web dinmico a travs de PHP.

    Para poder ver esta pantalla de bienvenida, abriremos un navegador y escribi-remos la direccin http://localhost, o pincharemos sobre el enlace Local-host que se muestra en el men de WampServer.

  • CC-BY PID_00155713 18 Puesta en marcha de un SGBD y un servidor web local

    La gestin de las bases de datos podremos realizarla con paquetes grficos co-mo MySQL GUI Tools, que podemos descargar de MySQL.

    Por otro lado, WampServer contiene la herramienta web phpMyAdmin, queest disponible a travs de phpMyAdmin, o por medio de uno de los enlacesofrecidos en la pgina de bienvenida de WampServer.

  • CC-BY PID_00155713 19 Puesta en marcha de un SGBD y un servidor web local

    Como podremos comprobar, por defecto el usuario administrador (root) deMySQL est configurado sin contrasea, por lo que la seguridad de acceso aMySQL no es la recomendada. De todos modos, modificar la clave de accesodel administrador a MySQL no es complicado. Para hacerlo, realizaremos lossiguientes pasos:

    1) Una vez dentro de phpMyAdmin, entraremos en la seccin de Privilegiose editaremos el usuario root del servidor 127.0.0.1 pinchando sobre el botnde edicin .

    2) En la seccin Cambio de contrasea, estableceremos la clave de accesoque queremos usar para el usuario root para las conexiones a las bases de datos ypresionaremos sobre el botn Continuar para almacenar los cambios. Desdelos Estudios de Graduado Multimedia recomendamos que se establezca comoclave BBDDGM, acrnimo de Bases de DatosGraduado Multimedia.

    3) Repetiremos el proceso para cambiar la clave del usuario root en localhost,estableciendo la misma contrasea usada en el usuario root en 127.0.0.1.

  • CC-BY PID_00155713 20 Puesta en marcha de un SGBD y un servidor web local

    4) Posterior a estos cambios, phpMyAdmin no podr acceder a las bases de da-tos para su gestin, dado que est configurado para usar el usuario root sin con-trasea. Para permitir a phpMyAdmin que pueda volver a gestionar las basesde datos existentes en MySQL, deberemos modificar el fichero config.inc.phpexistente dentro de la carpeta C:\wamp\apps\phpmyadmin3.2.0.1 para quela contrasea corresponda con la que hayamos establecido. Hay que tener encuenta que el directorio wamp podr cambiar en caso de haber realizado lainstalacin en otro directorio.

    $cfg[Servers][$i][user] = root;$cfg[Servers][$i][password] = BBDDGM;

    Una vez actualizado el fichero de configuracin de phpMyAdmin, el acceso aphpMyAdmin volver a ser funcional, por lo que slo ser necesario refrescarel navegador web para acceder a http://localhost/phpmyadmin.

    2.3. Consideraciones sobre la instalacin sobre Windows 7

    El proceso de instalacin en Windows 7 slo se diferencia al de la platafor-ma XP en lo que a controles de seguridad se refiere. Al ejecutar el instalador,Windows nos prevendr de que el ejecutable quiere modificar el registro deWindows.

  • CC-BY PID_00155713 21 Puesta en marcha de un SGBD y un servidor web local

    Para poder realizar la instalacin, deberemos aceptar que Wamp abra puertospara que nuestros servicios puedan ser accedidos desde otros ordenadores. Porello, Windows 7 nos notifica sobre el riesgo de que una aplicacin est permi-tiendo conexiones remotas para acceder a recursos de nuestro ordenador.

    Wampmanager.exe es el fichero binario que Windows detecta como posibleamenaza de seguridad para nuestro ordenador. Deberemos aceptar la ejecucindel servicio presionando el botn S.

    Hasta este punto, dada la configuracin de seguridad de Windows 7, sera ne-cesario aceptar el mensaje de aviso de amenaza de seguridad cada vez que que-ramos activar los servicios ofrecidos por WampServer. En Windows 7, es posi-ble regular el nivel de avisos del sistema operativo. Para evitarlo, podemos ba-jar el nivel de seguridad al mnimo en la Configuracin de Control de cuentasde usuario. Dicha modificacin puede realizarse desde el Men de Inicio Panel de control Cuentas de usuario Cambiar configuracin de Controlde cuentas de usuario.

  • CC-BY PID_00155713 22 Puesta en marcha de un SGBD y un servidor web local

    2.4. Consideraciones sobre los ficheros de configuracin

    El uso de los servicios Apache, PHP y MySQL mediante paquetes como Wamp-Server provoca que la instalacin tenga gran sencillez, pero, por otro lado, pa-san a ignorarse muchos de los factores que pueden alterarse para la configu-racin de los servicios.

    A continuacin presentamos algunos parmetros de los ficheros de configu-racin que se deben tener en cuenta durante el desarrollo de portales web di-nmicos.

    2.4.1. Fichero de configuracin de Apache

    El fichero de configuracin de Apache (httpd.conf) contiene los par-metros para el inicio del servicio Apache.

    Como ya hemos mencionado, Apache es el servicio que permite publicar sitiosweb en nuestro servidor. Para que un sitio web publicado en Apache puedaconsultarse desde otros ordenadores, es necesario que el servicio escuche deun puerto para atender a peticiones HTTP que recibe. Las peticiones http, queson las realizadas a servidores web, suelen enlazarse al puerto 80. Por defecto,Apache est configurado para arrancar el servicio http en el puerto 80. Existenotros servicios que se asocian tambin al puerto 80, tales como el servicio webIIS o Skype. Por ello, en ocasiones es una buena solucin enlazar el servicio webApache a un puerto alternativo, comnmente el 8080. El parmetro Listen est

    Ejemplo

    Por ejemplo:http://localhost:8080/info.phpen caso de que el puerto pordefecto se haya cambiado porel puerto 8080.

  • CC-BY PID_00155713 23 Puesta en marcha de un SGBD y un servidor web local

    orientado a este efecto. Deberemos tener en cuenta que en caso de cambiar elpuerto de Apache, las peticiones que hagamos en el navegador web debernindicar el puerto al que deben lanzarse.

    Listen 127.0.0.0:8080

    En ocasiones, pueden darse errores en el servidor web o ste puede inclusodejar de funcionar. En estos casos, suele ofrecerse una direccin de correoelectrnico para contactar con el administrador del portal web. En el ficherohttpd.conf existe un parmetro para definir dicha direccin de correo electr-nico:

    ServerAdmin admin@localhost

    Los ficheros publicados en un servidor web se encuentran a partir de una car-peta inicial, llamada Raz del servidor web. La carpeta raz tambin es un pa-rmetro configurable dentro de Apache. Por defecto, durante la instalacinde Apache, se establece c:/wamp/www como carpeta para la ubicacin de losdocumentos web, pero se puede cambiar con la siguiente directiva:

    DocumentRoot c:/wamp/www/

    Normalmente, las peticiones web solicitan un documento en concreto, comopor ejemplo http://servidor.web.edu/servicio1/documento1.php.

    Pero no siempre se solicita especficamente un documento de la web, comopor ejemplo en http://servidor.web.edu/servicio1/. En dicho caso, el usuarioquiere obtener el documento de ndice que se encuentra en el directorio ser-vicio1. Para indicar qu nombre y extensin pueden tener los posibles fiche-ros de ndice y su prioridad, se utiliza la directiva DirectoryIndex.

    En el siguiente ejemplo, primero se comprobar la existencia del fichero http://servidor.web.edu/servicio1/index.php, posteriormente index.php3, y as su-cesivamente.

    Durante el desarrollo de sitios web, a menudo podemos encontrarnos con queel servidor no responde a las peticiones de la manera esperada. Los registrosdel servidor pueden servir de mucha utilidad para detectar los motivos por losque un servicio web acta incorrectamente. La directiva LogLevel nos permiteestablecer el nivel de log que queremos registrar.

    LogLevel warn

  • CC-BY PID_00155713 24 Puesta en marcha de un SGBD y un servidor web local

    Las lneas de configuracin que empiezan con el comando AddType detallana Apache cmo debe interpretar diferentes tipos de ficheros a partir de su ex-tensin. Por ejemplo, ficheros con extensin .tgz debern ser abiertos por des-compresores GZip, o ficheros con extensin .php, debern ser interpretadospor la aplicacin httpd-php o, en otras palabras, el motor para el lenguaje PHP.

    AddType application/x-compress .ZAddType application/x-gzip .gz .tgzAddType application/x-httpd-php .php

    Dada la cantidad de parmetros y opciones que pueden configurarse en Apa-che, existe tambin la posibilidad de modularizar los ficheros de configura-cin, creando un fichero de configuracin principal httpd.conf, y varios fiche-ros de configuracin complementarios. Los ficheros complementarios debenser declarados en el fichero de configuracin principal (httpd.conf) para que,al arrancar el servicio, sus parmetros sean incluidos. Esto se realiza mediantela directiva Include.

    Include conf/extra/httpd-ssl.conf

    2.4.2. Fichero de configuracin de PHP (PHP.ini)

    Dentro del fichero de configuracin php.ini se describen, entre otrascosas, las extensiones de PHP que se deben activar, las rutas para la su-bida de ficheros mediante protocolo POST, los tiempos de ejecucin deficheros PHP y el uso de la memoria RAM.

    Los documentos con extensin PHP pueden combinar cdigo HTML con c-digo PHP. El cdigo PHP debe diferenciarse del cdigo HTML, ya que el cdi-go PHP debe ser interpretado. Normalmente, el cdigo PHP se delimita me-diante las llaves , pero es posible hacerlo tambin mediante lasllaves . Por defecto, las llaves cortas (short_open_tag) no estn habili-tadas en WampServer, por lo que deber modificarse el valor del parmetroshort_open_tag (existe la opcin de activar las claves cortas mediante el mende WampServer).

    short_open_tag = Off

    Los documentos ASP usan las llaves para identificar el cdigo quedebe ser interpretado. Si deseamos que nuestras aplicaciones PHP usen las lla-ves , deberemos activar el parmetro asp_tags.

    asp_tags = On

  • CC-BY PID_00155713 25 Puesta en marcha de un SGBD y un servidor web local

    La complejidad de documento PHP puede ser elevada, lo que en algunos casospuede implicar tiempos de ejecucin largos y gran cantidad de recursos con-sumidos. El tiempo de ejecucin de un fichero PHP, as como la memoria quesu ejecucin requiere tambin son parmetros que pueden definirse dentrodel fichero php.ini.

    max_execution_time = 30max_input_time = 60memory_limit = 128M

    Del mismo modo, puede declararse el tamao mximo permitido para la su-bida de ficheros.

    post_max_size = 8M

    As como hemos visto con Apache, PHP tambin genera trazas de log que sonde gran ayuda para la interpretacin de errores durante el desarrollo de apli-caciones dinmicas en PHP. En PHP, el nivel de registro de errores puede defi-nirse de la siguiente manera:

    error_reporting = E_ALL

    Dentro del propio fichero php.ini se describe informacin sobre el efecto decada uno de los parmetros que contiene, por lo que recomendamos realizaral menos una lectura del documento de configuracin para familiarizarse conlas posibilidades existentes.

    2.4.3. Fichero de configuracin de MySQL

    La configuracin de sistema gestor de bases de datos MySQL va la edi-cin de su fichero de configuracin (MY.ini o my.cnf en instalacionesindependientes de MySQL) no suele hacerse con tanta frecuencia comoen Apache y PHP. No obstante, contiene parmetros de configuracinque pueden ser de gran inters.

    Normalmente, las comunicaciones hacia MySQL se realizan por protocoloTCP/IP sobre el puerto 3306. ste es el puerto por defecto en el que MySQL seregistra para aceptar peticiones SQL. Este puerto es configurable y puede sercambiado por un puerto alternativo. El siguiente comando permite cambiarel puerto de MySQL por defecto por el 3333.

    port = 3333

  • CC-BY PID_00155713 26 Puesta en marcha de un SGBD y un servidor web local

    3. Puesta en marcha de un SGBD para UbuntuGNU/Linux

    Linux es un trmino genrico para referirse a sistemas operativos similares aUnix basados en el ncleo de Linux. Las variantes de estos sistemas se deno-minan distribuciones de Linux y cada distribucin est enfocada para satisfa-cer las necesidades de un grupo especfico de usuarios.

    El objetivo de la denominacin GNU/Linux (GNU es un acrnimo re-cursivo que significa GNU is Not Unix) es crear un sistema operativocompletamente libre. La base de cada distribucin incluye el ncleo Li-nux, con las bibliotecas y herramientas del proyecto GNU y de muchosotros proyectos/grupos de software.

    Ubuntu es una distribucin GNU/Linux que ofrece un sistema operativo en-focado a computadores personales con soporte para servidores. Est basado enDebian GNU/Linux (distribucin Linux sin nimo de lucro ms popular delmundo) y soporta, principalmente, dos arquitecturas de hardware: Intel x86 yAMD64. Esta distribucin ha sido traducida a numerosos idiomas y concentrasus objetivos en la facilidad y libertad de uso. Sus versiones estables se liberancada 6 meses y se mantienen actualizadas en materia de seguridad hasta 18meses despus de su lanzamiento.

    Todos los lanzamientos de Ubuntu se proporcionan sin coste alguno con variasalternativas sobre el tipo de instalacin.

    1) El CDdeescritorio (comnmente llamado live CD), permite probar Ubun-tu sin hacer cambios en el equipo y agregar una opcin para instalarlo mstarde.

    2) El CDde instalacinde servidor instala Ubuntu permanentemente enuna computadora usada como servidor (no se instalar una interfaz grafica deusuario). Se pueden descargar desde los sitios oficiales.

    Ubuntu posee una gran coleccin de aplicaciones sencillas de instalar y con-figurar desde su entorno de escritorio oficial Gnome. UTF-8 es la codificacinde caracteres en forma predeterminada desde la versin 5.04. Ubuntu es ladistribucin GNU/Linux elegida por la UOC porque es un sistema operativolibre con un escritorio potente y amigable.

  • CC-BY PID_00155713 27 Puesta en marcha de un SGBD y un servidor web local

    3.1. Requisitos del sistema para instalar la versin 8.10 IntrepidIbex

    Se recomienda:

    Procesador: 1 GHz Memoria RAM: 512 MB (1 GB mnimo) Disco duro: 10 GB mnimo

    Instalacin a partir de live CD (recomendado) o a partir deWindows con Wubi (para inexpertos):

    Procesador: 600 MHz Memoria RAM: 256 MB (1 GB mnimo) Disco duro: 10 GB mnimo

    3.2. Instalacin del servidor LAMP desde el escritorio de Ubuntu

    La arquitectura LAMP se refiere a un conjunto de tecnologas de software ne-cesarias para alcanzar una solucin global, en este caso para configurar sitiosweb o servidores dinmicos. El acrnimo LAMP combina los siguientes pro-gramas: Linux (sistema operativo), Apache (servidor web), MySQL (gestor debases de datos), Perl, PHP o Python (lenguajes de programacin).

    En Ubuntu existen varios modos de aadir, eliminar o actualizar aplicacionesdel sistema. Podemos instalar los paquetes desde el CD de instalacin o, alter-nativamente, desde los sitios oficiales de Internet (ser necesario tener abiertala conexin a Internet). El gestor de paquetes Synaptic nos permitir instalar,reinstalar y eliminar paquetes de una manera grfica muy sencilla.

    El proceso de instalacin de Apache + Mysql + PHP es rpido y sencillo.

    1) Abrimos el Gestor de Paquetes Synaptic desde Men de Ubuntu: Sistema Administracin Gestor de Paquetes Synaptic

    Enlaces recomendados

    Enlacesexternos:Sitio web oficial de Ubuntu(en ingls)Comunidad hispana deUbuntu (en castellano)

    Wubi

    Wubi es un instalador deUbuntu para sistemas opera-tivos Windows que permite ausuarios de Windows, no acos-tumbrados a Linux, poder pro-bar Ubuntu sin el riesgo deperder informacin duranteun formateo o particionado,adems de desinstalar Ubuntudesde Windows.

  • CC-BY PID_00155713 28 Puesta en marcha de un SGBD y un servidor web local

    2) En Gestor de Paquetes Synaptic abrimos el men Editar y ejecutamos laopcin Marcar paquetes por tarea. Se abrir una ventana que nos preguntaQu tarea debe realizar su computadora?; marcamos la casilla Lamp ser-ver.

    3) Tras darle al botn Aceptar, se nos informa de todos los paquetes necesa-rios para instalar el servidor LAMP. Confirmamos la instalacin pulsando elbotn Marcar. Despus hacemos clic en el botn Aplicar ubicado en elmen para que comience la instalacin.

  • CC-BY PID_00155713 29 Puesta en marcha de un SGBD y un servidor web local

    4) Una vez terminado el proceso de descarga de los paquetes comienza la ins-talacin. En la configuracin de MySQL 5.0 se nos pregunta qu contraseaqueremos asignarle al administrador (root) del servidor de la base de datos.Tras este paso, concluye la instalacin del Servidor Lamp con Synaptic.

    5) Abrimos Firefox y escribimos http://localhost (alternativamente, http://127.0.0.1) y nos deber aparecer la pgina de bienvenida de Apache. Recordadque el directorio raz del servidor HTTP se encuentra en /var/www, y all esdonde se debern colocar todos los archivos del sitio web.

  • CC-BY PID_00155713 30 Puesta en marcha de un SGBD y un servidor web local

    Tambin es recomendable instalar con Synaptic el paquete phpmyadmin pa-ra administrar MySQL y sus bases de datos por medio de la interfaz web deesta aplicacin. Tras marcar el paquete e instalarlo, bastar con escribir en elnavegador:

    http://localhost/phpmyadmin/

    La pgina de inicio de phpMyAdmin nos pedir un nombre de usuario (root)y la contrasea que definimos en su momento al instalar MySQL (paso 4).

    3.3. Instalacin del servidor LAMP desde la consola de Ubuntu

    La consola de Ubuntu (tambin conocida como intrprete de comandos, ter-minal o consola) es un programa informtico que recibe y procesa rdenes detexto y tiene como funcin actuar como interfaz entre el usuario y el sistemaoperativo.

    En este apartado vamos a ver cmo instalar el servidor LAMP desde la terminalde Ubuntu. Para labores de administracin en terminal, Ubuntu incluye uncomando llamado sudo con el que se evita el uso del usuario root (adminis-trador de Linux). Esta instalacin sirve tanto para Ubuntu como para Debian(los usuarios de Debian debern identificarse como root y no utilizar el sudoen los comandos).

    Los paquetes de software son accesibles a partir de la lista de repositorios ubi-cada normalmente en /etc/apt/source.list. Si quisiramos actualizar el ndicede paquetes sincronizndolo con las ltimas versiones disponibles de cadauno, escribiramos:

  • CC-BY PID_00155713 31 Puesta en marcha de un SGBD y un servidor web local

    > sudo apt-get update

    A continuacin vamos a instalar los paquetes necesarios para montar un ser-vidor LAMP desde la terminal de Ubuntu. Abrimos la terminal (Aplicaciones-> Accesorios -> Terminal).

    1) Para instalar Apache 2.0 escribimos el siguiente comando y pulsamos En-ter:

    > sudo apt-get install apache2

    La terminal nos pedir la contrasea de root (del sistema operativo); la intro-ducimos y pulsamos de nuevo Enter.

    Los archivos de configuracin de apache estn ubicados en /etc/apache2/apache2.conf.

    La carpeta raz de la web se encuentra en /var/www/.

    Para comprobar que el servidor web est funcionando, abrimos nuestro na-vegador web (Firefox en Ubuntu) y escribimos http://localhost/; aparecer lapgina de bienvenida de Apache.

    2) A continuacin instalaremos los paquetes PHP5 y el mdulo php5 de Apa-che 2.0. Abrimos de nuevo la terminal de Ubuntu y escribimos:

    > sudo apt-get install php5 libapache2-mod-php5

    Tras la instalacin de PHP, reiniciamos Apache con el comando:

    > sudo /etc/init.d/apache2 restart

    Para comprobar que PHP funciona correctamente como mdulo de Apache,creamos un archivo de texto y dentro de ese archivo escribimos

  • CC-BY PID_00155713 32 Puesta en marcha de un SGBD y un servidor web local

    > sudo nano /var/www/test.php

    o alternativamente

    > sudo gedit /var/www/test.php

    Luego abrimos el navegador web y escribimos http://localhost/test.php; debe-r aparecer la pantalla con toda la configuracin de PHP.

    El archivo de configuracin de PHP se encuentra en /etc/php5/apache2/php.ini (cada vez que lo modifiquemos habr que reiniciar el servidor httppara que los cambios tengan efecto).

    3) Instalaremos ahora el servidor MySQL 5, el programa cliente mysql5, y elmdulo mysql para php5. Los tres paquetes que se deben instalar se indicancon el siguiente orden:

    > apt-get install mysql-server mysql-client php5-mysql

  • CC-BY PID_00155713 33 Puesta en marcha de un SGBD y un servidor web local

    4) Al finalizar el proceso de instalacin se nos pedir introducir la contraseade root del administrador del servidor MySQL (introducimos la nueva contra-sea y la confirmamos).

    Si no hemos introducido la contrasea de root, lo podremos hacer ms ade-lante, cuando lo creamos necesario. Por defecto, MySQL crea un usuario rootsin ninguna contrasea. Podemos aadir la nueva contrasea de administra-dor conectndonos al servidor de base de datos con el programa cliente mysql,y, una vez dentro de la terminal de mysql, la cambiamos.

    > mysql u root

    En la terminal de mysql escribimos:

    mysql> USE mysql;

    mysql> UPDATE user SET Password=PASSWORD(nuevo-password)WHERE user=root;

    mysql> FLUSH PRIVILEGES;

    5) La instalacin del paquete php5-mysql (paso 3) hace accesible MySQL desdeApache con la API de PHP, pero ser necesario reiniciar Apache para que estecambio tenga efecto.

    > sudo /etc/init.d/apache2 restart

    Volvemos a abrir la pgina de configuracin de PHP con el navegador y com-probamos que est disponible el mdulo Mysql de PHP en Apache.

  • CC-BY PID_00155713 34 Puesta en marcha de un SGBD y un servidor web local

    6) Opcionalmente, vamos a instalar el paquete de PhpMyAdmin desde la con-sola. Para ello, escribimos:

    > sudo apt-get install phpmyadmin

    Al final de la instalacin marcamos la casilla apache2 (Apache 2.0).

    Despus de instalar PhpMyAdmin desde los repositorios, hay que hacer un en-lace simblico desde /usr/share/phpmyadmin hacia /var/www/phpmyadminpara tener acceso a la aplicacin web.

  • CC-BY PID_00155713 35 Puesta en marcha de un SGBD y un servidor web local

    > sudo ln s /usr/share/phpmyadmin /var/www

    El archivo de configuracin de PhpMyAdmin se encuentra en el directorio:/etc/phpmyadmin

    Abrimos PhpMyAdmin con Firefox e introducimos las claves del administra-dor de MySQL para acceder a la aplicacin.

  • Orientacin aobjetos en PHP

    Ddac Gil de la Iglesia

    PID_00155710

  • CC-BY PID_00155710 Orientacin a objetos en PHP

    Los textos e imgenes publicados en esta obra estn sujetos excepto que se indique lo contrario a una licencia de Reconocimiento(BY) v.3.0 Espaa de Creative Commons. Podis copiarlos, distribuirlos y transmitirlos pblicamente siempre que citis elautor y la fuente (FUOC. Fundacin para la Universitat Oberta de Catalunya). La licencia completa se puede consultar enhttp://creativecommons.org/licenses/by/3.0/es/legalcode.es

  • CC-BY PID_00155710 Orientacin a objetos en PHP

    ndice

    Introduccin............................................................................................... 5

    1. Porqu usar PHP OO?..................................................................... 7

    2. Organizacin del cdigo.................................................................. 9

    3. Reutilizacin de cdigo.................................................................... 12

    4. Multiplicidad....................................................................................... 13

    5. Herencia................................................................................................ 17

    6. Visibilidad............................................................................................ 19

    7. Sobrecarga de clases.......................................................................... 22

    8. Constructores y destructores.......................................................... 24

  • CC-BY PID_00155710 5 Orientacin a objetos en PHP

    Introduccin

    PHP es un lenguaje de programacin estructurado con extensiones de orien-tacin a objetos (OO). A continuacin se explica cmo programar siguiendouna metodologa orientada a objetos bajo PHP.

  • CC-BY PID_00155710 7 Orientacin a objetos en PHP

    1. Porqu usar PHP OO?

    En PHP, una funcin declarada en una pgina PHP podr ser usada inmedia-tamente despus a su declaracin.

    Como primera aproximacin, uno podra plantearse programar en cada fiche-ro PHP todas las funciones necesarias que vayan a usarse en el fichero. Enproyectos grandes, esto supone un alto coste de mantenimiento debido a lacomplejidad de seguimiento del cdigo y a la duplicacin del mismo cdigoen distintas pginas. En caso de detectarse un error y el cdigo que lo corrige, oen caso de querer aplicar una mejora en una funcin, debern revisarse todoslos scripts PHP para comprobar si contienen la funcin que hay que corregir.

    Sin mucha dificultad puede observarse que la prctica de repetir cdigos enscripts PHP queda lejos de ser una va ptima para la programacin en proyec-tos.

    PHP permite definir clases, que poseen variables (tambin llamadas propieda-des) y mtodos (funciones). A continuacin vemos un ejemplo donde se creala clase Matematicas con 2 variables y dos mtodos.

    Ved tambin

    Dentro de la documentacinen lnea disponible en la webde PHP.net, existe una seccindedicada a la programacinorientada a objetos. La pro-gramacin OO se introdujo enPHP versin 4 y ha sido am-pliada dentro de la versin 5.En caso de querer exprimir laOO al mximo en PHP, es re-comendable realizar una lec-tura de las funcionalidades dis-ponibles en OO y de las quepuedan aparecer en futurasversiones.

  • CC-BY PID_00155710 8 Orientacin a objetos en PHP

    Fichero matematicas_clase.php

    Las clases permiten organizar mejor el cdigo, ampliar nuestra productividady eficiencia mediante la reutilizacin de cdigo, la multiplicidad y la versati-lidad, conceptos que trataremos en los siguientes puntos.

  • CC-BY PID_00155710 9 Orientacin a objetos en PHP

    2. Organizacin del cdigo

    En PHP orientado a objetos, cada clase se programa dentro de un nico fichero.

    Posteriormente a la creacin del fichero con la definicin de la clase, puedencrearse instancias de la clase, llamadas objetos. Si hacemos un smil con el di-seo de una silla, el prototipo de la silla es la clase. Se definen las medidas,los materiales (variables) y los usos (funciones) que la silla puede tener. Cadasilla fsica generada a partir de ese diseo ser un objeto y podr usarse den-tro de diferentes ubicaciones, entornos y para diferentes propsitos.

    En el siguiente ejemplo, se ha programado una clase llamada Texto que per-mite: formatear cadenas de texto para imprimirlas correctamente en HTML,formatear una cadena de caracteres que contenga una consulta SQL para mi-nimizar el peligro de un ataque de seguridad, concatenar cadenas y eliminarespacios innecesarios.

  • CC-BY PID_00155710 10 Orientacin a objetos en PHP

    Fichero texto_clase.php

    En el fichero aplicacion.php se crea un objeto de la clase texto con el nombrede $cadena. Slo mediante la instancia $cadena, podemos acceder a las funcio-nes existentes dentro de la clase.

  • CC-BY PID_00155710 11 Orientacin a objetos en PHP

    Fichero aplicacion.php

    Con la programacin orientada a objetos, las clases quedan localizadas dentrode un nico fichero PHP. Durante el proceso de programacin, suelen darseerrores dentro del comportamiento de las aplicaciones, por lo que es necesa-rio efectuar un anlisis para detectar la funcin que est incorrectamente im-plementada. En la programacin orientada a objetos, dada su organizacin,solamente ser necesario corregir el error dentro de la clase correspondiente,y todos los objetos de la clase creados se beneficiarn de la correccin.

    Por ejemplo, el programador podra detectar que ciertas cadenas al usarse conhtmlspecialchars no son convertidas a lenguaje HTML, por lo que podra pre-ferir usar la funcin htmlentities. Si el programador ha creado la clase Texto,simplemente deber modificar la funcin preparar_HTML.

    Si, por el contrario, no ha usado la clase, deber buscar todas las referencias ahtmlspecialchars dentro de su proyecto y sustituirlas por la nueva funcin, loque supondr una sobrecarga de tiempo, y un alto potencial a olvidarse algunareferencia sin corregir.

  • CC-BY PID_00155710 12 Orientacin a objetos en PHP

    3. Reutilizacin de cdigo

    La creacin de un portal dinmico en PHP suele componerse de pginas depresentacin, formularios, obtencin de informacin existente dentro de ba-ses de datos, tratamiento de datos obtenidos desde formularios, bases de datos,portales externos, pginas XML, RSS, etc. Hay funcionalidades comunes a lamayora de los proyectos, como la validacin de variables o el acceso a bases dedatos, por lo que el programador tiende a reutilizar cdigo implementado enproyectos anteriores, con lo que incrementa as su eficiencia y evita posibleserrores de programacin.

    Estamos acostumbrados a reutilizar cdigo de terceras personas continuamen-te, como por ejemplo la API de PHP, con funciones tales como mysql_query(),require() o hasta un simple echo().

    A mayor escala, un programador podr aprovechar un subconjunto de las fun-ciones creadas en proyectos anteriores en sus nuevos proyectos, como porejemplo funciones para establecer y gestionar sesiones, o validar los usuariosen la base de datos.

    Sin hacer uso de la programacin OO tendramos nuestro cdigo repartidoen varios ficheros PHP. Adems, el cdigo PHP que se podra reutilizar estaraentremezclado con cdigo HTML del portal.

    Usando programacin OO, todas las funciones quedarn dentro de unao varias clases y, por lo tanto, el correspondiente cdigo se encontraren un solo fichero PHP, lo que permitir separar el cdigo PHP de laslneas HTML. Para usarlo en una pgina PHP, el programador simple-mente tendr que cargar el fichero correspondiente a la clase que quierereutilizar en la pgina PHP. La carga del fichero con la clase se realizarcon la llamada require_once().

  • CC-BY PID_00155710 13 Orientacin a objetos en PHP

    4. Multiplicidad

    Como ya hemos detallado, una clase es un prototipo que define variables yfunciones que pueden realizarse sobre estas variables.

    Una vez definida una clase, podemos instanciar tantos objetos de laclase como sean necesarios, teniendo todos ellos las caractersticas de laclase, es decir, sus variables y funciones.

    Para hacer ms simple el entendimiento del concepto multiplicidad, expon-dremos el siguiente ejemplo.

    Dentro de una aplicacin web en la que se debe hacer un traspaso de dineroentre dos cuentas bancarias, existe una cuenta a la que se har un ingreso dedinero (cuenta destino, B) que proviene de una cuenta a la que se le debersustraer dicho saldo (cuenta origen, A).

    Un traspaso de un saldo supone una consulta de saldo en la cuenta origen yuna actualizacin en la misma cuenta para restar el saldo que se va a traspasar.Por la parte del beneficiario, implica una consulta del saldo actual para poderrealizar una actualizacin que lo incremente con el traspaso.

    Para ello, se ha creado una clase Cuenta que permite obtener el saldo de unacuenta corriente, as como actualizar su saldo.

  • CC-BY PID_00155710 14 Orientacin a objetos en PHP

    Fichero cuenta_clase.php

    En la aplicacin PHP, se hace uso de la clase creada Cuenta y la clase Matema-ticas.

  • CC-BY PID_00155710 15 Orientacin a objetos en PHP

  • CC-BY PID_00155710 16 Orientacin a objetos en PHP

    Dado que se va a trabajar con dos cuentas bancarias, se han instanciado dosobjetos de la clase Cuenta. La multiplicidad es la capacidad de usar mltiplesinstancias de una misma clase, con lo que se puede simplificar el cdigo deuna aplicacin PHP y mantener el estado de varios objetos al mismo tiempo.

  • CC-BY PID_00155710 17 Orientacin a objetos en PHP

    5. Herencia

    En ocasiones, el cdigo no puede reutilizarse tal cual, sino que debe especia-lizarse o refinarse para tener en cuenta nuevas necesidades. Uno podra crearuna nueva clase, reescribiendo todo el cdigo reaprovechable en ella e incluirtambin las nuevas utilidades implementando las funciones necesarias. Noobstante, eso limitara la posible reutilizacin de cdigo.

    Una de las ventajas de la programacin orientada a objetos es el uso de laherencia, que soluciona el problema anterior. La herencia permite crear unanueva clase que herede las caractersticas (variables y mtodos) de otra clase.En PHP la herencia se indica mediante el cdigo EXTENDS.

    La clase Cuenta vista en el subapartado anterior tena la limitacin de ser mo-nodivisa, por lo que las cuentas origen y destino deben compartir la mismamoneda para poder hacer las transferencias bancarias.

  • CC-BY PID_00155710 18 Orientacin a objetos en PHP

    Fichero cuenta_multidivisa_clase.php

    Haciendo una clase Cuenta_Multidivisa que extienda la clase Cuenta, podraadirse una nueva funcionalidad que haga el cambio entre divisas consul-tando el estado actual del cambio en el Banco Europeo.

  • CC-BY PID_00155710 19 Orientacin a objetos en PHP

    6. Visibilidad

    En la programacin orientada a objetos sobre PHP, las funciones y lasvariables existentes en los objetos tienen tres niveles de visibilidad, cla-sificados en Public, Protected y Private, de ms a menos permisivo res-pectivamente.

    Imaginemos la siguiente aplicacin PHP que hace uso de la claseCuenta_Multidivisa.

    Hasta el momento slo habamos accedido a las funciones de la claseCuenta_Multidivisa pero, as como podemos acceder a las funciones de la cla-se, tambin es posible acceder a sus variables.

    Por defecto, la visibilidad de las funciones y las variables es Publica, lo quequiere decir que, una vez instanciado un objeto de la clase, puede accedersedirectamente a sus variables internas y a sus funciones.

    En ciertos casos, puede ser beneficioso acceder a las variables internas de unobjeto. En otros casos, como el expuesto en el cdigo anterior, puede ser unafuente de errores. Podemos ver que el objeto cuenta_A, gracias a que ha podidoaccederse a la variable divisa, ha pasado de tener 5.000 pesetas a tener 5.000euros.

    Veamos ahora el mismo cdigo mejorado para evitar tales errores.

  • CC-BY PID_00155710 20 Orientacin a objetos en PHP

    Fichero cuentas_multidivisa_clase.php

    Siendo Private, la variable divisa slo podr ser accesible dentro de las funcio-nes de la clase. Las variables y funciones Private y Protected no son directa-mente visibles desde los objetos, por lo que la llamada siguiente dar un errorde acceso:

    $saldo_A->divisa =Euro;

    Como consecuencia, se obligar al uso de la funcin pblica establecer_divisa,que tiene implementados los cambios de divisa pertinentes para mantener laconsistencia de los datos.

  • CC-BY PID_00155710 21 Orientacin a objetos en PHP

    As como en el ejemplo del cambio de divisa, existen diversidad de casos dondevariables, e incluso funciones internas, debern ser privadas para obligar a lalectura o modificacin de estas variables a travs de funciones donde se hayanimplementado los controles deseados.

    Como ejemplos, podemos pensar en las variables de usuario en la autentica-cin de una aplicacin. El cambio de contrasea deber ser mediante la llama-da a una funcin, asegurando as que la nueva contrasea tiene la complejidadadecuada, se actualiza el valor tanto en la sesin como en la base de datos, etc.

  • CC-BY PID_00155710 22 Orientacin a objetos en PHP

    7. Sobrecarga de clases

    Como hemos visto hasta ahora, para poder instanciar objetos pertenecientesa las clases implementadas, debemos usar alguno de los comandos require,include, require_once o include_once.

    En ocasiones, la lista de clases que vamos a requerir para una aplicacin PHPpuede ser larga, por lo que deberemos hacer una gran cantidad de sentenciasrequire para poder hacer uso de todas ellas.

    En PHP versin 5, se ha creado la funcin __autoload() que, en caso de nodisponerse de una clase en la creacin de un objeto, es lanzada para tratar deevitar errores.

    Un programador puede definir el contenido de la funcin __autoload() paratratar dichos casos.

    Como habris observado, las clases generadas: Texto, Matematicas, Cuen-ta, y Cuenta_Multidivisa estn declaradas dentro de ficheros .php que tie-nen por nombre texto_clase.php, matematicas_clase.php. cuenta_clase.phpy cuenta_multidivisa_clase.php. Generalizando, podemos deducir que ca-da clase se encuentra en un fichero .php que tiene como nombre_clase.php

    Aprovechando la funcionalidad __autoload(), y una estructura de ficheros biendefinida, es posible solicitar la carga de las clases bajo demanda.

    Veamos el siguiente cdigo.

    La creacin del objeto cuenta_A por si solo dara un error de ejecucin al noconocerse la existencia de la clase Cuenta, ya que no ha sido cargada. En laversin 5 de PHP, antes de lanzar dicho mensaje de error se ejecutara la fun-cin __autoload() pasando como parmetro el nombre de la clase faltante.En nuestro caso, se lanzar __autoload(Cuenta), haciendo que se ejecute lasiguiente sentencia:

  • CC-BY PID_00155710 23 Orientacin a objetos en PHP

    require_once Cuenta_clase.php;

    Dicha sentencia corregir el problema cargando la clase Cuenta. Cabe notartambin que la clase Cuenta se aadir solamente cuando sea requerida parala instanciacin de un objeto. Su uso nos puede ahorrar la molestia de tenerque escribir el correspondiente require_once para cada una de las clases quevayamos a usar.

  • CC-BY PID_00155710 24 Orientacin a objetos en PHP

    8. Constructores y destructores

    Otro de los conceptos existentes en la programacin orientada a objetos sonlos constructores y los destructores.

    Se trata de la implementacin de funciones que se lanzan automticamente enel proceso de creacin y de destruccin de los objetos usados en una aplicacinPHP.

    Los constructores suelen usarse para la inicializacin de variables du-rante el proceso de instanciacin de objetos, y tienen como nombre defuncin __construct().

    Los destructores, por otro lado, suelen usarse para hacer salidas contro-ladas de aplicaciones, tales como el cierre de ficheros, cierre de sesionescon bases de datos o similares. La funcin destructor tiene el nombre__destruct().

    La funcin constructora __construct permite la entrada de variables para lainstanciacin.

    Como ejemplo prctico de constructores y destructores presentamos el accesoa bases de datos. Permitir establecer conexiones con una base de datos defini-da por defecto de manera automtica con slo instanciar un objeto, y asegurarsu desconexin al salir del fichero PHP.

  • CC-BY PID_00155710 25 Orientacin a objetos en PHP

  • Uso de formulariosen HTML para enviary recopilar datos

    Piero Berni Millet

    PID_00155708

  • CC-BY PID_00155708 Uso de formularios en HTML para enviar y recopilar datos

    Los textos e imgenes publicados en esta obra estn sujetos excepto que se indique lo contrario a una licencia de Reconocimiento(BY) v.3.0 Espaa de Creative Commons. Podis copiarlos, distribuirlos y transmitirlos pblicamente siempre que citis elautor y la fuente (FUOC. Fundacin para la Universitat Oberta de Catalunya). La licencia completa se puede consultar enhttp://creativecommons.org/licenses/by/3.0/es/legalcode.es

  • CC-BY PID_00155708 Uso de formularios en HTML para enviar y recopilar datos

    ndice

    1. Introduccin a CGI y su entorno.................................................. 5

    2. Uso de formularios HTML/XHTML............................................... 82.1. Tipos de entradas de formularios ............................................... 82.2. La etiqueta ..................................................................... 82.3. La etiqueta ... .................................................... 112.4. La etiqueta ... ............................................ 122.5. Distintas maneras de enviar los datos de un formulario

    (atributo method) ......................................................................... 122.6. Codificacin estndar application/x-www-form-unlencoded........... 13

    3. Leer datos de un formulario con PHP......................................... 163.1. Variables predefinidas de PHP y su relacin con los

    formularios .................................................................................. 18

  • CC-BY PID_00155708 5 Uso de formularios en HTML para enviar y recopilar datos

    1. Introduccin a CGI y su entorno

    La interfaz de pasarela comn (CGI1) es la puerta de acceso que hayentre una pgina web y el servidor de Internet donde reside la pgina.

    Si habis utilizado un navegador web, os habris encontrado con pginas webque permiten interrogar bases de datos para obtener informacin. Qu estsucediendo detrs de la pgina? En resumen, el navegador enva solicitudes alservidor y el servidor enva respuestas al navegador. Este intercambio es unacuestin sencilla cuando la solicitud es mostrar otra pgina web. Pero cuandoel navegador desea algo ms complejo, como el ltimo parte meteorolgicoen Espaa, hay grandes posibilidades de que el gestor de la informacin detrsde la pgina web sea un programa escrito con un script CGI.

    Solicitud http sencilla para mostrar otra pgina web

    (1)CGI es la sigla inglesa de com-mon gateway interface.

    Lenguaje de un script CGI

    Un script CGI puede ser escri-to en cualquier lenguaje quepueda leer de STDIN (entradaestndar), escribir en STDOUT(la salida estndar) y leer varia-bles de entorno como virtual-mente cualquier lenguaje deprogramacin, incluyendo C,Perl, PHP, o incluso scripts deShell de UNIX y LINUX.

  • CC-BY PID_00155708 6 Uso de formularios en HTML para enviar y recopilar datos

    Solicitud http combinada con CGI

    La programacin CGI consiste en el diseo y la escritura de programas quereciben sus rdenes iniciales desde una pgina web. Los formularios HTML sehan convertido en el mtodo preferido para enviar datos a travs de Internetdebido a su facilidad de uso y de configuracin.

    La idea bsica detrs de un formulario es sencilla, tal y como se ilustra enla siguiente figura. El visitante abre un formulario y lo rellena; el navegadorenva los datos al servidor; el programa CGI captura la corriente de datos delformulario y la procesa; el programa CGI devuelve algn tipo de respuesta alvisitante a travs del servidor.

  • CC-BY PID_00155708 7 Uso de formularios en HTML para enviar y recopilar datos

    La idea bsica detrs de un formulario

  • CC-BY PID_00155708 8 Uso de formularios en HTML para enviar y recopilar datos

    2. Uso de formularios HTML/XHTML

    Las etiquetas son la base para el traspaso de datos a los programas CGIen el servidor.

    Un formulario de una pgina web es una coleccin de campos de en-trada que comunican su contenido al servidor.

    En el mundo de Internet y de las pginas web se suelen utilizar para mltiplespropsitos: formularios de pedidos de una tienda electrnica, cuestionarios,encuestas, libros de invitados, consultas a bases de datos, etc. Todos ellos de-vuelven datos al propietario de la pgina web para que sean procesados pos-teriormente.

    En este apartado vamos a ver slo el modo de situar un formulario en unapgina web. Ms adelante aprenderemos a procesar los datos que se recibandesde un formulario.

    2.1. Tipos de entradas de formularios

    Los elementos de los formularios HTML/XHTML ofrecen una variedad de for-mas de aceptar las entradas de los datos de los visitantes: entradas de lneas detexto, campos de texto formados por mltiples lneas, casillas de verificacin,botones de opcin, listas de opciones de varios tipos, campos ocultos para ad-ministrar la informacin, etc.

    Podis colocar cualquiera de estos elementos en el cuerpo de un documentoHTML/XHTML si se delimitan con la etiqueta y su respectiva etiquetade fin, . Todos los elementos dentro de estas dos etiquetas componenun nico formulario. Los elementos de entrada de datos ms comunes son:, , y .

    2.2. La etiqueta

    Los elementos de entrada de un formulario se crean principalmente con laetiqueta . sta define el comportamiento y la posicin del campo paraque acepte datos del visitante en un formulario. Esta etiqueta acepta una seriede atributos como type, name, value, size, maxlength, etc.

    En el siguiente ejemplo se muestra un formulario con tres elementos para in-troducir texto, nombre, apellidos y direccion:

  • CC-BY PID_00155708 9 Uso de formularios en HTML para enviar y recopilar datos

    Los dos primeros elementos son cuadros de texto de una nicalnea (type=text) de 30 y 50 caracteres de ancho (size); permite al usuarioteclear slo 30 y 50 caracteres (maxlength), respectivamente; el contenidodel campo se muestra, por defecto, en blanco al no existir el atributo value.

    El tercer campo es otro cuadro de texto con un tamao de visualizacinde 75 caracteres y con capacidad mxima para 100 caracteres; estableceun valor inicial (value= Calle ) como encabezamiento del resto de lainformacin que va a rellenar el usuario.

    El nombre de la variable que identifica cada campo se indica en el atributoname. Este nombre es imprescindible para que el servidor pueda procesar elformulario.

    El atributo type indica el tipo de control que se incluye en el formulario y quepuede tener los siguientes valores:

    text | password | checkbox | radio | submit | reset | file| hidden | image | button

    A continuacin presentamos el significado de los controles en funcin de sutipo:

    1)type=password. Oculta la entrada del usuario reemplazndola por aste-riscos en la pantalla, por lo que es ideal para escribir contraseas y otros datosprivados. El navegador los transmite sin encriptar cuando se envan al servidor.

    Contrasea

  • CC-BY PID_00155708 10 Uso de formularios en HTML para enviar y recopilar datos

    2)type=checkbox. Las casillas de verificacin son controles de formularioque permiten al usuario seleccionar y deseleccionar opciones individualmen-te. Si se quiere mostrar un checkbox seleccionado por defecto, se utiliza elatributo checked. Las casillas de verificacin no seleccionadas no aparecen enlos datos enviados.

    3)type=radio. Botones radiales. Los controles de tipo radiobutton son si-milares a los controles de tipo checkbox, pero presentan una diferencia muyimportante: son mutuamente excluyentes. Son adecuados para aceptar un va-lor individual de un conjunto de alternativas. Todos los botones radiales deun mismo grupo reciben el mismo nombre. Solamente el botn radial selec-cionado del grupo aparece en los datos enviados. Uno de ellos puede estar se-leccionado desde el inicio si se le incluye el atributo checked.

    Tipo de inscripcin Cuota completa: 180

    Cuota general: 80

    Cuota estudiante: 50

    4)type=hidden. Los campos ocultos se emplean para aadir informacinoculta en el formulario, por lo que no aparece en la pantalla de la pgina web,de modo que el usuario desconoce que el formulario los incluye. Se utiliza paracomunicar informacin sobre el estado de la interaccin entre el cliente y elservidor, que necesita el servidor pero que no es necesario o no es posible quela establezca el usuario; por ejemplo, un identificador de transaccin.

    5)type=submit. Botn de envo de formulario. La mayora de los formula-rios disponen de un botn para enviar al servidor los datos introducidos porel usuario. El valor del atributo value es el texto que muestra el botn. Si nose establece el atributo value, el navegador muestra el texto predefinido En-viar consulta. Pero si se proporciona un atributo name, podremos incluir losatributos name y value entre los datos enviados. Esta opcin es til cuando secoloca en el formulario ms de un botn de envo, ya que brinda un modo deidentificar en qu botn del formulario se ejecut la accin.

  • CC-BY PID_00155708 11 Uso de formularios en HTML para enviar y recopilar datos

    6)type=reset. Botn de reseteo o restauracin del formulario. Se trata de unbotn especial que borra todos los datos introducidos por el usuario y devuelveel formulario a su estado original.

    2.3. La etiqueta ...

    Las casillas de verificacin y los botones de seleccin son una buena solucinpara crear preguntas y respuestas de seleccin mltiple en un formulario, peropueden llegar a convertirse en tediosas y confusas cuando aparecen en pan-talla largas listas de elementos. Una manera alternativa y ms compacta derepresentar listas de elementos es la etiqueta select que se representa como unmen desplegable o emergente, y que consta de una o de mltiples opciones.Sus atributos son los siguientes:

    name=un_nombre. El nombre de la variable que identifica este campo.

    size=valor. Nmero de filas que se muestran de la lista (por defecto slose muestra una).

    multiple. La presencia de este atributo indica que se puede seleccionar msde una opcin al mismo tiempo.

    Las listas desplegables se definen con la etiqueta y cada elemento de lalista se define mediante la etiqueta . El elemento de una lista desple-gable tiene dos atributos comunes: selected = selected, indica si el elementoaparece seleccionado por defecto al cargarse la pgina; value = texto, el valorque se enva al servidor cuando el usuario elige esa opcin. A continuacinpodemos ver un ejemplo donde se crea una lista desplegable para elegir unsistema operativo:

  • CC-BY PID_00155708 12 Uso de formularios en HTML para enviar y recopilar datos

    2.4. La etiqueta ...

    Como hemos visto, el tipo de entrada limita la entradade datos a una sola lnea de caracteres. La etiqueta da ms libertadal usuario al permitir introducir una gran cantidad de texto repartido en unalnea de texto. El texto que se extiende hasta la etiqueta de cierre se empleapara inicializar el valor del campo:

    Ttulo del proyecto Descripcin del proyecto

    Los atributos especficos son los siguientes:

    name=un_nombre. El nombre de la variable que identifica el campo. rows=numero. Nmero de lneas que mostrarn en el cuadro de texto. cols=numero. Nmero de caracteres que se muestran en cada fila.

    2.5. Distintas maneras de enviar los datos de un formulario(atributo method)

    La etiqueta de HTML se vale de los atributos especiales action y methodpara informar al navegador de cmo codificar los datos y dnde enviarlos:

    El atributo action = url proporciona la URL absoluta o relativa de la aplica-cin que va a recibir y procesar los datos del formulario. La aplicacin es t-picamente un script de un programa (escrito usualmente en Perl o PHP), quepuede separar los datos y darles formato.

    El atributo method indica cmo deben enviarse los datos desde el formularioal servidor. La diferencia entre estos dos mtodos es la siguiente:

    Con el mtodo GET los parmetros se pasan como parte de la URL quellama a la aplicacin para procesar el formulario del lado del servidor. Elnavegador agrega los datos a la URL asignada en action, separados por elsigno de interrogacin ?. El mtodo GET tiene varias limitaciones im-portantes: no puede manejar muchos datos debido a que algunos sistemasoperativos limitan el nmero y la longitud de argumentos de lnea de co-

  • CC-BY PID_00155708 13 Uso de formularios en HTML para enviar y recopilar datos

    mandos (en general, admite como mximo el envo de unos 500 bytes deinformacin), que pueden pasarse a una aplicacin a la vez. Adems, GETcoloca los parmetros del formulario directamente en la URL, donde pue-den ser capturados con facilidad por los usuarios de Internet, poniendo enpeligro la seguridad del sistema de envo. La otra gran limitacin del mto-do GET es que no permite el envo de archivos adjuntos con el formulario.

    El mtodo POST es el preferido y el ms recomendado. Este mtodo tam-bin enva los datos como un aadido a una URL, pero los enva despusde que se hayan enviado todas las cabeceras de solicitud del servidor, y porlo tanto invisible al usuario. La principal ventaja de POST es la de permitirenviar formularios con muchos campos o con campos de texto extensos.

    Si no sabis qu mtodo elegir para un formulario, existe una regla general quedice que el mtodo GET se debe utilizar en los formularios que no modificanla informacin (por ejemplo, en un formulario de bsqueda). Por su parte, elmtodo POST se debera utilizar cuando el formulario modifica la informacinoriginal (insertar, modificar o borrar alguna informacin).

    El atributo enctype especifica el tipo de codificacin empleada al enviar el for-mulario al servidor (slo se indica de manera explcita en los formularios quepermiten adjuntar archivos). El valor predeterminado es: application/x-www-form-urlencoded. Aparte de esta codificacin, el tipo de codificacin para ad-juntar un archivo se indica con multipart/form-data.

    El formato multipart/form-data se utiliza para los formularios que contienencampos para seleccionar archivos que el usuario puede obtener.

    El formato text/plain se puede utilizar junto con la URL de tipo mailto en elatributo action para enviar el formulario a una direccin de correo electrnico.Por ejemplo, para enviar los datos de un formulario por correo electrnico, sinser procesados por un servidor, escribiremos:

    2.6. Codificacin estndar application/x-www-form-unlencoded

    Los formularios lanzan sus datos con la codificacin estndar de la URL. Lasreglas principales de este formato de datos se explican a continuacin.

    Todos los datos que se han introducido desde un formulario se envan al servi-dor o al programa CGI como pares de nombre/valor. Los pares de nombre/va-lor se pasan siempre al servidor como name=value y cada nuevo par se separapor medio de un signo &, name1=value1&name2=value2.

  • CC-BY PID_00155708 14 Uso de formularios en HTML para enviar y recopilar datos

    Por ejemplo, observad la siguiente entrada:

    Al enviar los datos del ejemplo ilustrado con el mtodo GET, los datos aparecenadjuntos a la URL y codificados con el siguiente formato:

    nombre=Jordi+Domenech&edad=32

    Los datos de los dos campos del ejemplo aparecen detrs del signo de interro-gacin como pares de nombre=valor. El signo & separa los pares entre s. Den-tro de cada par, el valor de la variable se indica mediante un signo de igualdad(=). Los espacios en blanco se sustituyen por un signo ms (+).

    Los caracteres especiales de los datos que se introducen en los campos de unformulario se codifican al ser incluidos en la cadena de la URL. Por ejemplo, loscaracteres reservados a la URL (?, &, =, #, %, /) se deben codificar si no se quiereque el servidor los interprete segn sus significados especiales. Los caracteresno alfanumricos se codifican convirtindolos a sus valores hexadecimales,con el signo de porcentaje (%) delante del nmero HEX. Por ejemplo, el signointerrogacin (?) se codifica como %3F.

    Por ejemplo, la siguiente entrada:

  • CC-BY PID_00155708 15 Uso de formularios en HTML para enviar y recopilar datos

    producir esta codificacin de los datos:

    nombre=Mar%C3%ADa+Fern%C3%A1ndez&edad=33

    El lenguaje PHP proporciona una manera sencilla de manejar formularios ypermite crear programas interactivos que sepan responder segn los datos queel usuario suministre. Al disear un formulario, deberemos indicar el ficheroPHP que lo procesar, as como el mtodo por el que se le pasar la informacindel formulario.

  • CC-BY PID_00155708 16 Uso de formularios en HTML para enviar y recopilar datos

    3. Leer datos de un formulario con PHP

    Antes de ver cmo se manejan los datos desde el lado del servidor con PHP,vamos a construir un sencillo formulario de ejemplo sumando algunos de losconceptos y controles de formularios explicados hasta ahora.

    Antes, copiaremos el siguiente bloque de cdigo PHP en un archivo de textoy le pondremos el nombre formulario.php.

    Copiamos el siguiente cdigo HTML/XHTML en un archivo de texto y le po-nemos el nombre formulario.html.

  • CC-BY PID_00155708 17 Uso de formularios en HTML para enviar y recopilar datos

    Guardamos los dos ficheros en el directorio raz del servidor web de Apache:

    C:\GMMD\apache\htdocs\

    El mtodo de envo es POST y action proporciona la URL de la aplicacinque va a recibir y a procesar los datos, formulario.php; el atributo enctypeno ha sido especificado y, por lo tanto, el formulario lanzar sus datos con lacodificacin estndar de la URL.

    Podemos visualizar el formulario en la pantalla del navegador introduciendohttp://localhost/form.html. A continuacin, rellenamos los datos del formu-lario tal y como aparecen colocados en la siguiente ilustracin:

  • CC-BY PID_00155708 18 Uso de formularios en HTML para enviar y recopilar datos

    Al pulsar el botn Enviar, el contenido del formulario es enviado a la pginaque indicamos en el atributo action de la etiqueta . Las variables dedicho formulario pasan a estar automticamente disponibles en el script graciasal servidor Apache y a PHP.

    3.1. Variables predefinidas de PHP y su relacin con losformularios

    Los datos del formulario enviados con los mtodos POST o GET se encuentrandisponibles en las variables predefinidas de PHP. Estas variables se conocentambin como superglobales porque siempre estn disponibles en todos losmbitos a lo largo de un script. PHP ofrece un conjunto de variables o matricespredefinidas que contienen variables del servidor web, el entorno y entradasdel usuario. Las variables superglobales de PHP son: $GLOBALS, $_SERVER,$_GET, $_POST, $_FILES, $_COOKIE, $_SESSION, $_REQUEST, $_ENV.

  • CC-BY PID_00155708 19 Uso de formularios en HTML para enviar y recopilar datos

    Las variables superglobales que nos interesan analizar al procesar un formula-rio son: $_SERVER, $_REQUEST, $_GET, $_POST. Todas ellas son del tipo arrayasociativo:

    $_SERVER: Informacin del servidor y el entorno de ejecucin.

    $_REQUEST: Variables de peticin HTTP. Un valor tipo array asociativoque contiene de manera predeterminada los datos de $_GET, $_POST, y$_COOKIE.

    $_GET: Variables HTTP GET.

    $_POST: Variables HTTP POST.

    A continuacin vamos a modificar el script formulario.php para recoger y mos-trar en la pantalla del navegador los datos enviados desde el formulario HTML:

    El resultado en pantalla ser:

    Mtodo HTTP empleado al enviar el formulario fue: POSTCdigo de solicitud: X76345P09Nombre: Jordi DomenechEdad: 32

    Contrasea: secret

    Sexo: hombre

    Puesto de trabajo buscado: empleadoSistema operativo preferido: LinuxObservaciones: Los viernes por la tarde no ir a trabajarporque tengo compromisos familiares.

    Los arrays asociativos globales $_GET, $_POST y $_REQUEST se pueden utili-zar conjuntamente con las funciones de PHP, each() y list(), para recorrer lamatriz, y obtener as los nombres de cada variable del formulario con su valor

    Array asociativo

    Un array asociativo es un tipoabstracto de dato formado poruna coleccin de claves ni-cas y una coleccin de valo-res, con una asociacin uno auno. En vez de estar organiza-dos con ndices numricos enfuncin de su posicin dentrodel array (arrays escalares), loestn por claves (key) que pue-den ser cadenas de texto. Conello, tenemos la posibilidad deponer cualquier tipo de datopara especificar el ndice.

  • CC-BY PID_00155708 20 Uso de formularios en HTML para enviar y recopilar datos

    asignado. Estas variables se comportan en realidad como un array asociativo.Para cada elemento del formulario se crea un vnculo entre la clave y el valorasociado.

    Se pueden utilizar conjuntamente las funciones de PHP, each() y list(), pararecorrer la matriz $ _POST, y obtener as los nombres de cada variable del for-mulario con su valor asignado.

    A continuacin vamos a reescribir el script formulario.php para recorrer la ma-triz $_POST y visualizar las variables pasadas con el mtodo POST. Haremos elrecorrido mediante la funcin each():

    La funcin each() va recuperando valores del array $_POST y avanza el pun-tero. La funcin list() asigna en cada operacin los valores del array a la listade variables ($nombre, $valor) pasadas como argumento.

    El resultado en pantalla ser:

    Los valores enviados con el mtodo POST:codigo_solicitud = X76345P09nombre = Jordi Domenechedad = 32

    contrasena = secret

    sexo = hombre

    puesto_empleado = empleado

    so = Linuxobservaciones = Los viernes por la tarde no ir a trabajarporque tengo compromisos familiares.

  • Desarrollo web conPHP y MySQLEjemplos prcticos

    Piero Berni Millet

    PID_00155711

  • CC-BY PID_00155711 Desarrollo web con PHP y MySQL

    Los textos e imgenes publicados en esta obra estn sujetos excepto que se indique lo contrario a una licencia de Reconocimiento(BY) v.3.0 Espaa de Creative Commons. Podis copiarlos, distribuirlos y transmitirlos pblicamente siempre que citis elautor y la fuente (FUOC. Fundacin para la Universitat Oberta de Catalunya). La licencia completa se puede consultar enhttp://creativecommons.org/licenses/by/3.0/es/legalcode.es

  • CC-BY PID_00155711 Desarrollo web con PHP y MySQL

    ndice

    1. Grfico de barras con PHP y HTML.............................................. 5

    2. Web dinmica multilenguaje......................................................... 7

    3. Formulario para enviar los datos a una cuenta Gmail............ 13

    4. El formulario anterior con cdigo de seguridad antispambots (captcha)............................................................................ 21

    5. Geolocalizacin con GeoIp y Google Maps.................................. 255.1. Acceso a la base de datos GeoIP para resolver la IP Address

    Look Up de una IP ....................................................................... 265.2. Geoposicionar en un mapa de Google la procedencia

    geogrfica del visitante ............................................................... 27

  • CC-BY PID_00155711 5 Desarrollo web con PHP y MySQL

    1. Grfico de barras con PHP y HTML

    Combinando PHP con HTML podemos generar fcilmente grficas estadsticasde barras para datos porcentuales sin necesidad de recurrir a un plug-in extrade Flash o a una imagen GIF pregenerada dinmicamente con una libreraespecfica de PHP.

    Vamos a ver cmo se construye un grfico de barras para una encuesta sobrenavegadores de Internet, valindonos simplemente de las propiedades de lastablas HTML para emular dicho grfico.

    Navegadores % de votos Color barra grfica

    MS Internet Explorer 40 red

    Firefox 30 green

    Netscape 10 blue

    Opera 20 black

    Programa: encuesta.phpLlamada: http://localhost/encuesta.php

  • CC-BY PID_00155711 6 Desarrollo web con PHP y MySQL

  • CC-BY PID_00155711 7 Desarrollo web con PHP y MySQL

    2. Web dinmica multilenguaje

    Combinando PHP con HTML podemos crear sitios web dinmicos multilen-guaje con un alto grado de productividad. El sitio web de este ejemplo estpensado para soportar tres o ms idiomas: espaol (es), ingls (en) y cataln(cat). Los contenidos se encuentran desvinculados de la plantilla web que con-trola el diseo, la presentacin y la navegacin, lo que simplifica el manteni-miento del sitio cuando se modifican o se aaden nuevos temas.

    Estructuradelawebmultilenguaje

    Elprogramaprincipal(index.php)

    Se accede al sitio mediante el script principal index.php. El recorrido por lasdiferentes pginas de un idioma determinado se controla con los parmetrospag e idm que se pasan en la URL.

    Por ejemplo:

    http://host/index.php Si no se incluyen los parmetros en la URL se cargala pgina principal del sitio en el idioma predeterminado (ver index.php).

  • CC-BY PID_00155711 8 Desarrollo web con PHP y MySQL

    http://host/index.php?pag=01&idm=es En este caso, los parmetros indi-cados cargarn la pgina de contenido 01 (01_es.html) para el idioma es(espaol).

    El cdigo del programa principal es el siguiente:

    Laplantilla(layer_$idm.html)

    La plantilla del sitio se estructura en cuatro secciones:

    Cabecera. Espacio reservado para el ttulo del sitio con su banner. En laparte inferior izquierda se colocan el enlace de ir a la pgina de inicio,ms los tres enlaces que permiten seleccionar un idioma.

  • CC-BY PID_00155711 9 Desarrollo web con PHP y MySQL

    Menprincipal. La columna de la izquierda est reservada para el mende navegacin, que se estructura en dos niveles (seccin y subsecciones).Haciendo clic en los enlaces del men se abren las pginas de contenidoen el espacio central de la plantilla.

    Contenido. Aqu se incrustan dinmicamente los contenidos del sito. Porejemplo, los ficheros del sitio en espaol tienen la siguiente nomenclatura:0_es.html (pgina de inicio o de bienvenida), 21_es.html (la pgina decontenido del la seccin 2.1 del men 2.

    Piedepgina. Espacio reservado para los datos de contacto del sitio (di-reccin, correo electrnico).

    Puesto que el sitio web soporta tres idiomas, la plantilla deber triplicarse pa-ra cada uno de ellos con las nomenclaturas: layer_es.html, layer_en.html, ylayer_cat.html

    Incrustarloscontenidosenelcuerpodelaplantilla

    El mecanismo que controla las pginas de contenido y las incrusta en la sec-cin Contenido se basa un pequeo script de PHP que debe residir en esa po-sicin de la plantilla del sito. Este programa comprueba si existe la pgina decontenido en el sistema de archivos del servidor web. En caso de no existir,por ejemplo, el contenido 2.1_es.html, se muestra un mensaje de error.

  • CC-BY PID_00155711 10 Desarrollo web con PHP y MySQL

    El cdigo completo de la plantilla HTML es el siguiente:

  • CC-BY PID_00155711 11 Desarrollo web con PHP y MySQL

  • CC-BY PID_00155711 12 Desarrollo web con PHP y MySQL

  • CC-BY PID_00155711 13 Desarrollo web con PHP y MySQL

    3. Formulario para enviar los datos a una cuentaGmail

    Generalmente, cuando se rellenan los campos de un formulario HTML y seenvan al servidor mediante un script de PHP, los datos se registran en unabase de datos. En otros casos, lo que se suele hacer es, tras procesarlos desde ellado del servidor, enviarlos a una cuenta de correo electrnico. Tpicamentepara el envo de correo con PHP se utiliza la funcin mail(), pero esta funcintiene varias limitaciones, por ejemplo, hay que tener una cuenta de usuarioregistrada en el servidor que aloja la web y la funcin mail() no soporta elenvo de adjuntos.

    Afortunadamente, los datos recogidos mediante un formulario HTML puedenser enviados a su destinatario mediante un servicio de correo externo tipoGmail. Para ello, es necesario utilizar una clase de PHP llamada PHPMailer quefacilita el envo de correo, aadiendo funcionalidad en el envo de correoscon adjuntos, en formato HTML y con diferentes codificaciones, soporte paraimgenes embebidas, headers personalizados y adems funciona con mltiplesservidores de correo, entre los que se encuentra Gmail.

    Para llevar a cabo este ejemplo