Sei sulla pagina 1di 150

INSTITUTO TECNOLOGICO SUPERIO DE MACUSPANA.

PROGRMACION WEB I
DOCENTE: LUIZ SOSA CASTRO ALUMNA:

SILVIA SANTIZ GOMEZ


CARRERA: ING. EN SISTEMAS COMPUTACIONALES

UNIDAD 1 1.1 Perspectiva histrica de internet. Es la red de redes. Sistema mundial de redes de computadoras interconectadas. Fue concebida a fines de la dcada de 1960 por el Departamento de Defensa de los Estados Unidos; ms precisamente, por la ARPA. Se la llam primero ARPANET y fue pensada para cumplir funciones de investigacin. Su uso se populariz a partir de la creacin de la World Wide Web. Actualmente es un espacio pblico utilizado por millones de personas en todo el mundo como herramienta de comunicacin e informacin. Historia de Internet 1957 La Unin Sovitica lanza el Sputnik, el primer satlite artificial. En respuesta a este hecho, Estados Unidos crea el ARPA (Organismo de Proyectos de Investigacin Avanzada) dentro del Ministerio de Defensa a fin de establecer su liderazgo en el rea de la ciencia y la tecnologa aplicada a las fuerzas armadas. 1965 El ARPA promueve un estudio sobre Redes cooperativas de computadoras de tiempo compartido. El TX-2 en el laboratorio Lincoln del MIT y el AN/FSQ-32 de la System Development Corporation quedan vinculadas directamente (sin conmutacin por paquetes) por medio de una lnea telefnica dedicada de 1200 bps; ms tarde se agrega la computadora de la Digital Equipment Corporation (DEC) en ARPA y as conforma la red experimental.

1.2 Protocolo http (protocolos de transferencia de hipertexto). El HTTP (HyperText Transfer Protocol) es el protocolo de alto nivel del World-Wide Web que rige el intercambio de mensajes entre clientes y servidores del Web. Un protocolo es: "Una descripcin formal de los formatos de los mensajes y las reglas que deben seguir dos ordenadores para intercambiar dichos mensajes. Los protocolos pueden describir detalles de bajo nivel de los interfaces de mquina a mquina (por ejemplo, el orden en el cual deben enviarse bits y bytes a travs de un cable) o intercambios de alto nivel entre programas (por ejemplo, la forma en que dos programas transfieren un fichero a travs de la Internet)." El HTTP es un protocolo genrico orientado a objetos que no mantiene la conexin entre transacciones. Ha sido especialmente diseado para atender las exigencias de un sistema hipermedia distribuido como es el World-Wide Web. Sus caractersticas principales son:

Ligereza: reduce la comunicacin entre clientes y servidores a intercambios discretos, de modo que no sobrecarga la red y permite saltos hipertextuales rpidos. Generalidad: puede utilizarse para transferir cualquier tipo de datos, segn el estndar MIME. Esto incluye tambin los que desarrollen en el futuro, ya que el cliente y el servidor pueden negociar en cualquier momento el modo de representacin de los datos: el cliente notifica al servidor una lista de formatos que entiende, y en adelante el servidor slo remitir al cliente datos que este sea capaz de manejar. El cliente debe aceptar al menos dos formatos: text/plain (texto normal) y text/html (hipertexto). Extensibilidad: contempla distintos tipos de transaccin entre clientes y servidores ("mtodos", en la jerga HTTP), y la futura implementacin de otros nuevos. Esto abre posibilidades ms all de la simple recuperacin de objetos de la red: bsquedas, anotaciones, etc. El esquema bsico de cualquier transaccin HTTP entre un cliente y un servidor es el siguiente: Conexin: El cliente establece una conexin con el servidor a travs del puerto 80 (puerto estndar), u otro especificado. Peticin: El cliente enva una peticin al servidor. Respuesta: El servidor enva al cliente la respuesta (esto es, el objeto demandado o un cdigo de error). Cierre: Ambas partes cierran la conexin. El protocolo HTTP es el que da vida a Internet, y gracias al cual, los clientes y servidores se pueden comunicar. Sus criterios de diseo han sido: Simplicidad: no se debe abandonar el criterio introducido en HTTP 1.0, que las cosas habituales sean sencillas, de forma que sea fcil implementar el protocolo. Rendimiento: debe comunicaciones. ser eficiente trasmitiendo objetos en redes de

Asncrono: las peticiones desde los clientes han de poderse hacer en paralelo a travs de una nica conexin.

Seguridad: los objetos que se transmiten deben estar encriptados, sin forzar ninguna poltica de seguridad en particular. Autenticacin: se debe poder autenticar a las dos partes de la conexin, as como a cualquier intermediario. Pagos en lnea: el protocolo debe soportar la realizacin de pagos en lnea. Servidores intermediarios: se debe soportar la comunicacin entre servidores, para el mantenimiento de cachs, espejos de datos e intermediarios de comunicacin (proxys). Visualizacin obligatoria: se debe poder obligar al cliente a mostrar ciertos datos acerca del objeto que se transmite, como el autor del objeto, el copyright y la licencia. Informacin de registro: la informacin de registro (logs) ha de poder ser enviada entre diferentes servidores. Requerimientos de red: el protocolo debe trabajar de forma independiente de la capa de transporte de la que disponga, aunque debe funcionar especialmente bien con TCP, al ser el protocolo ms utilizado en Internet.

1.2.1 Arquitectura de www. El diseo del World-Wide Web sigue el modelo cliente-servidor: un paradigma de divisin del trabajo informtico en el que las tareas se reparten entre un nmero de clientes que efectan peticiones de servicios de acuerdo con un protocolo, y un nmero de servidores que las atienden (Malkin, 1993). En el Web, nuestras estaciones de trabajo son clientes que demandan hipertextos a los servidores. Para poner en marcha un sistema como como ste ha sido necesario: a) Disear e implementar un nuevo protocolo que permitiera realizar saltos hipertextuales, esto es, de un nodo o lexa de origen a uno de destino, que podra ser un texto o parte de un texto, una imagen, un sonido, una animacin, fragmento de vdeo, etc. Es decir, cualquier tipo de informacin en formato electrnico. Este protocolo se denomina HTTP (HyperText Transfer Protocol) y es el "lenguaje" que "hablan" los servidores del WWW. b) Inventar un lenguaje para representar hipertextos que incluyera informacin sobre la estructura y el formato de representacin y, especialmente, indicar origen y destino de saltos hipertextuales. Este lenguaje es el HTML o (HyperTextex markup Language).

c) Idear una forma de codificar las instrucciones para los saltos hipertextuales de un objeto a otro de la Internet. Dada la variedad de protocolos, y por tanto, formas de almacenamiento y recuperacin de la informacin, en uso en la Internet, esta informacin es vital para que los clientes (ver el siguiente punto) puedan acceder a dicha informacin. d) Desarrollar aplicaciones cliente para todo tipo de plataforma y resolver el problema de cmo acceder a informacin que est almacenada y es accesible a travs de protocolos diversos (FTP, NNTP, Gopher, HTTP, X.500, WAIS, etc.) y representar informacin multiformato (texto, grficos, sonidos, fragmentos de vdeo, etc.). A este fin se han desarrollado diversos clientes, entre los que destaca la familia Mosaic, del NCSA (National Center for Supercomputer Applications) de la Universidad de Chicago, y su sucesor Netscape Navegador, de Netscape Communications Corporation.

1.2.2 URL. Las URL semnticas o URL amigables son aquellas URLs que son, dentro de lo que cabe, entendibles para el usuario. Lejos de las clsicas URLs de las pginas dinmicas llenas de variables GETy nmeros difciles de recordar, las URL semnticas estn formadas con palabras relacionadas con el contenido de la pgina y fciles de recordar. Estas se utilizan en los sitios web dinmicos (no estticos). Por ello se estn utilizando mucho ms que las URL extensas. URL no semntica Las urls En las pginas dinmicas suelen tener este formato. Imaginemos que entramos en una pgina web a leer una noticia que habla sobre cmo crear URL amigables: http://www.miweb.com/index.php?seccion=noticias&id_noticia=133 Si tenemos conocimiento de programacin web sabremos que estamos accediendo al archivo index.php en www.miweb.com, pasndole a este las variables seccin e id noticia con los valores "noticias" y 133 respectivamente. Si dentro de un tiempo queremos volver a esa pgina difcilmente recordaremos dicha url. Y a su vez si vemos esta URL sin entrar a la pgina nos ser imposible saber de qu trata. URL semntica Con la intencin de hacer estas URLs ms fciles de entender y a su vez de recordar surgen las URL amigables. La URL anterior podra quedar de esta forma si la semantizamos:

http://www.miweb.com/noticias/url-amigables.html De esta forma con slo leer la url sabremos de lo que trata la pgina y se nos har mucho ms fcil de recordar en un futuro.

1.2.3 Mtodos HTTP. Persistencia en http-cookies. Las cookies son utilizadas habitualmente por los servidores web para diferenciar usuarios y para actuar de diferente forma dependiendo del usuario. Las cookies se inventaron para ser utilizadas en una cesta de la compra virtual, que acta como dispositivo virtual en el que el usuario va colocando los elementos que desea adquirir, de forma que los usuarios pueden navegar por el sitio donde se muestran los objetos a la venta y aadirlos y eliminarlos de la cesta de la compra en cualquier momento. Las cookies permiten que el contenido de carrito de compra. Toda cookie est vinculada con un dominio o subdominio. Adems existe una restriccin impuesta por el propio estndar de manera que no es posible acceder a cookies de otro dominio o subdominio que no sea el de la propia URL donde se encuentra la pgina web. Esto significa que una pgina web en la direccin www.idg.es, por ejemplo, slo podr acceder a las cookies vinculadas con los dominios www.idg.es. Como ya se ver ms adelante, las distintas tecnologas, ya sean de cliente o de servidor, disponen de los mecanismos necesarios para implementar dicho vnculo. Una cookie que es del dominio .idg.es ser accesible desde cualquier URL que sea del tipo ordenadores .idg.es, Internet.idg.es, o incluso, www.ordenadores.idg.es o www.internet.idg.es. La restriccin se extiende desde el caso general hasta los casos particulares. Ahora bien, una cookie del dominio www.internet.idg.es no ser accesible desde una pgina web que se encuentre bajo la direccin URL www.ordenadores.idg.es.

1.3

Introduccin a la HTML (hiper text marrp languaje)

El HTML (Hyper Text Markup Language) es el lenguaje con el que se escriben las pginas web. Es un lenguaje de hipertexto, es decir, un lenguaje que permite escribir texto de forma estructurada, y que est compuesto por etiquetas, que marcan el inicio y el fin de cada elemento del documento. Un documento hipertexto no slo se compone de texto, puede contener imgenes, sonido, vdeos, etc., por lo que el resultado puede considerarse como un documento multimedia.

Los documentos HTML deben tener la extensin HTML o HTM, para que puedan ser visualizados en los navegadores (programas que permiten visualizar las pginas web). Los navegadores se encargan de interpretar el cdigo HTML de los documentos, y de mostrar a los usuarios las pginas web resultantes del cdigo interpretado. Las etiquetas constituyen la filosofa de este lenguaje. Por medio de ellas se pueden controlar los elementos tipogrficos del texto: tipo, color y tamao de las fuentes, el estilo (negrita, cursiva, etc.), as como tambin la inclusin de tablas, listas, formularios, la insercin de fotos, sonidos, fondos, los enlaces mencionados anteriormente. etc. Las etiquetas se pueden modificar por medio de sus atributos, stos son del tipo atributo="valor" y se colocan detrs del nombre de la etiqueta.

1.3.1 HTML como un tipo SGML Cuando tenemos un documento en soporte fsico y lo convertimos en informacin digital, sobre lo que es su contenido aadimos una capa de meta informacin comprensible para las mquinas que van a procesar ese contenido. En un principio, esos metadatos consistan en cdigos de control o macros que especificaban el formato de ese contenido para una aplicacin concreta, por lo que se conocan tambin por cdigo especfico. Para permitir la interoperabilidad de los documentos era necesario un cdigo genrico, que no dependiese de la aplicacin, al menos en teora. Uno de los padres de este concepto, Charles Goldfarb invent en 1969 el primer lenguaje de marcado junto a sus compaeros Edward Mosher y Raymond Lorie del Almaden Research Center de IBM: GML. Adems de coincidir con las iniciales de sus apellidos, GML significa Generalized Markup Language, Lenguaje de Marcado Generalizado, y adems de la idea de marcar textos con etiquetas aada dos conceptos importantes: la definicin formal del tipo de documento, y la estructura de elementos anidados.

1.3.2 Elementos del lenguaje HTML.

Los elementos son declaraciones para visualizar o dar forma a una pgina Web. Las etiquetas (en ingls: tags) son marcas insertadas en un documento HTML para proporcionar informacin sobre una unidad o contenido.

Reglas bsicas
Las etiquetas estn encerradas entre los signos Generalmente vienen en pares <p> y <p>.

"<" y ">".

Elemento A ABBR ACRONYM ADDRESS AREA B BASE BDO BIG BLOCKQUOTE BODY BR BUTTON CAPTION CITE

Definicin Enlace de hipertexto o destino de un link Abreviatura Acrnimo Direccin rea de un mapa de imagen Texto en negritas URI de base del documento Sustitucin del algoritmo de bidireccionalidad Texto ms grande Cita de bloque Cuerpo del documento Salto de lnea Botn Encabezado de una tabla Cita

CODE COL COLGROUP DD DEL DFN DIV DL DT EM FIELDSET FORM H1 H2 H3 H4 H5 H6

Cdigo de computadora Columna de una tabla Grupo de columnas de una tabla Definicin de una descripcin Texto borrado Trmino definido Contenedor genrico a nivel de bloque Lista de definiciones Trmino de una definicin Enfasis Grupo de control de fomularios Formulario interactivo Ttulo de nivel 1 Ttulo de nivel 2 Ttulo de nivel 3 Ttulo de nivel 4 Ttulo de nivel 5 Ttulo de nivel 6

HEAD HR HTML I IMG INPUT INS KBD LABEL LEGEND LI LINK MAP META NOSCRIPT OBJECT OL OPTGROUP

Encabezado del documento Lnea horizontal Documento HTML Texto en itlicas Imagen Entrada de formularios Texto insertado Texto a ser ingresado Etiqueta de un campo de formulario Encabezado de un grupo de control tem de una lista Relaciones del documento Mapa de una imagen Metadato Contenido alternativo a un script Objeto Lista ordenada Grupo de opciones

OPTION P PARAM PRE Q SAMP SCRIPT SELECT SMALL SPAN STRONG STYLE SUB SUP TABLE TBODY TD TEXTAREA

Men de opciones Prrafo Parmetros de un objeto Texto preformateado Cita corta Resultado de un ejemplo Script ejecutado en la mquina cliente Selector de opciones Texto pequeo Contenedor genrico a nivel de lnea Enfasis fuerte Hoja de estilo incrustada Subndice Superndice Tabla Cuerpo de la tabla Celda de datos de una tabla Entrada de texto de mltiples lneas

TFOOT TH THEAD TITLE TR TT UL VAR

Pie de una tabla Celda de encabezamiento de una tabla Encabezado de la tabla Ttulo del documento Fila de una tabla Texto de teletipo Lista sin ordenar Variable

1.3.3 Tablas en HTML La altura y anchura global de una tabla se indica dentro del atributo <TABLE>, que seala la apertura y cierre de una tabla. Las dimensiones se definen mediante WIDTH (ancho) y HEIGHT (alto) y pueden expresarse en pxel o en tantos por ciento respecto a la pgina: <TABLE </TABLE> WIDTH=500>

En este ejemplo de cdigo, la anchura de la tabla est expresada en pxel (500). Si se elige esta opcin, sea cual sea la resolucin con la que venga vista la pgina, la medida de la tabla no sufrir variaciones, es decir, en nuestro caso ser siempre de 500 pxel. No suceder lo mismo, sin embargo, si decidimos expresar el tamao mediante un porcentaje: <TABLE </TABLE> WIDTH=50%>

Ahora echemos un vistazo a la manera en que debe estructurarse una tabla. Para ello utilizaremos algunas imgenes:

Como vemos por esta imagen, el atributo <TABLE> genera la tabla, mientras que <TD> sirve para definir los campos presentes dentro de esta tabla. He aqu cmo el diseo puede ser transformado en cdigo y, por tanto, en una tabla propiamente dicha: <TABLE <TD </TD> <TD </TD> <TD </TD> </TABLE> WIDTH=100> WIDTH=100> BORDER=1 WIDTH=300> WIDTH=100>

1.3.4 Formularios. Un formulario HTML es una seccin de un documento que contiene contenido normal, cdigo, elementos especiales llamados controles (casillas de verificacin (checkboxes), radiobotones (radio buttons), menes, etc.), y rtulos (labels) en esos controles. Los usuarios normalmente "completan" un formulario modificando sus controles (introduciendo texto, seleccionando objetos de un men, etc.), antes de enviar el formulario a un agente para que lo procese (p.ej., a un servidor web, a un servidor de correo, etc.)

se muestra un ejemplo de un formulario simple que incluye rtulos, radiobotones y botones para reinicializar el formulario o para enviarlo: <FORM action="http://algunsitio.com/prog/usuarionuevo" method="post"> <P> <LABEL for="nombre">Nombre: </LABEL> <INPUT type="text" id="nombre"><BR> <LABEL for="apellido">Apellido: </LABEL> <INPUT type="text" id="apellido"><BR> <LABEL for="email">email: </LABEL> <INPUT type="text" id="email"><BR> <INPUT type="radio" name="sexo" value="Varn"> Varn<BR> <INPUT type="radio" name="sexo" value="Mujer"> Mujer<BR> <INPUT type="submit" value="Enviar"> <INPUT type="reset"> </P> </FORM>

Los usuarios interaccionan con los formularios a travs de los llamados controles. El "nombre de control" de un control viene dado por su atributo name. El "campo de accin" o alcance del atributo name de un control contenido en un elemento FORM es el elemento FORM. Cada control tiene tanto un valor inicial como un valor actual, que son ambos cadenas de caracteres. Consulte la definicin de cada control para obtener informacin sobre los valores iniciales y las posibles restricciones que puede imponer cada control sobre sus valores. En general, el "valor inicial" de un control puede especificarse con el atributo value del elemento de control. Sin embargo, el valor inicial de un elemento TEXTAREA viene dado por sus contenidos, y el valor inicial de un elemento OBJECT de un formulario est determinado por la implementacin del objeto (es decir, se sale fuera del alcance de esta especificacin). El "valor actual" del control se hace en primer lugar igual al valor inicial. A partir de ese momento, el valor actual del control puede ser modificado a travs de la interaccin con el usuario y mediante scripts. El valor inicial de un control no cambia. As, cuando se reinicializa el formulario, el valor actual de cada control se reinicializa a su valor inicial. Si el control no tiene un valor inicial, el efecto de una reinicializacin del formulario sobre ese control es indefinido. Cuando se enva un formulario para su procesamiento, para algunos controles se empareja su nombre con su valor actual, y estas parejas se envan con el

formulario. Aquellos controles cuyas parejas nombre/valor se envan se llaman controles con xito.

1.4

Evolucin del desarrollo de aplicaciones Web

Informativos y contenido esttico (HTML esttico). DHTML (D de dinmico), que incluye la posibilidad de incluir comportamiento dinmico en la pgina. Ejemplo: mens, hojas de estilo. Lenguajes de programac in del lado del cliente como Javascript, Vbscript, Applets (Java). Incorporacin de multimedia (Flash, SilverLigth). Lenguajes de programac in del lado del servidor (tecnologa CGI). Lenguajes de programac in del lado del servidor de siguiente generacin ASP, PHP, JSP, etc.). Desarrollo de tecnologa para la seguridad (uso de claves, encriptacin). Aplicaciones en Web como Comercio Electrnico. E-Government, E-procurement, Internet banking, etc. Servicios Web.

1.5

Hojas de estilo en cascadas e introduccin al XML

Las hojas de estilo en cascada (Cascading Style Sheets, CSS) son un lenguaje formal usado para definir la presentacin de un documento estructurado escrito en HTML o XML (y por extensin en XHTML). Una vez seleccionado el formato para los diferentes elementos (body, table, h1, h2, etc.), se puede aplicar esta hoja de estilos a la pgina. Para aplicar el estilo simplemente se selecciona el archivo de estilos, y se arrastra y coloca en la pgina donde se quiere aplicar dicho es tilo. Demostracin en una hoja de es tilos en VS 2005.

XML, en ingls Extensible Markup Language (lenguaje de marcas ampliable), es un metalenguaje extensible de etiquetas desarrollado por el World Wide Web Consortium (W3C). Es una simplificacin y adaptacin del SGML y permite definir la gramtica de lenguajes especficos (de la misma manera que HTML es a su vez un lenguaje definido por SGML). Ejemplos: Crear en VS2005 un archivo XML de empleados. Ver archivo en: El navegador Web. En Excel.

UNIDAD II DESARROLLO DE APLICACIONES

Desarrollo de aplicaciones Web El diseo y desarrollo de aplicaciones web consiste en implementar sus necesidades, objetivos o ideas en Internet utilizando las tecnologas ms idneas segn su proyecto. Las aplicaciones web ofrecen servicios a los usuarios de Internet que acceden utilizando un navegador web como Internet Explorer, Firefox o Safari entre otros, dirigindose a una direccin de Internet donde obtendrn los servicios que buscan. Las aplicaciones web pueden ser de acceso pblico como tiendas virtuales, diarios digitales, portales de Internet, o de acceso restringido como son las intranets para mejorar las gestiones internas de su empresa como el reporte de horas de su personal, gestin de proyectos y tareas, control de presencia, gestores documentales, o el uso de extranets para aumentar y mejorar el servicio con sus distribuidores, clientes, proveedores, comerciales y colaboradores externos. Cada vez es ms necesario adaptar el software y los sistemas online a la lgica de negocio de cada cliente. Por este motivo, no slo es necesario que su empresa disponga de una web corporativa, un comercio virtual o una

extranet para gestionar los pedidos de sus clientes o distribuidores, sino que es muy aconsejable una integracin total con sus sistemas propietarios de facturacin, nminas, proveedores, previsiones, etc. para obtener un sistema integral y eficiente en todas las reas de su corporacin. No existe hoy en da una solucin global para desarrollos de aplicaciones web que d respuesta a todas las necesidades de una empresa. Por ello, las infraestructuras diseadas para Internet se componen de mltiples soluciones de desarrollo para aplicaciones web. Un mal anlisis inicial de la aplicacin web a desarrollar una mala seleccin de las distintas tecnologas que la componen pueden complicar de forma importante el proceso de integracin, condicionando la estrategia de negocio o llegando incluso a hacerla inviable. La presente unidad tiene por objetivo: que el lector comprenda los conceptos y elementos bsicos que involucra el desarrollo de aplicaciones.

Tecnologa. Las tecnologas ms utilizadas en desarrollos web son las siguientes: Tecnologa Adobe Flash, Paseos virtuales (QuickTime, Flash, Java), Streaming de audio y video (Real, Windows Media, Flash Video) Bases de datos Microsoft SQL Server MySQL Oracle Desarrollo Web ASP ASP.NET PHP JSP XML

HTML CSS JAVASCRIPT JAVA

Plataforma de desarrollo Windows Linux Macintosh PDA (Palm, Pocket PV)

2.1 Arquitectura de Aplicaciones Web La arquitectura tradicional de cliente/servidor tambin es conocida como arquitectura de dos capas. Requiere una interfaz de usuario que se instala y se ejecuta en una PC o estacin de trabajo y enva solicitudes a un servidor para ejecutar operaciones complejas. Por ejemplo, una estacin de trabajo utilizada como cliente puede ejecutar una aplicacin de interfaz de usuario que interroga a un servidor central de bases de datos.

Ventajas del Sistema de Dos Capas: El desarrollo de aplicaciones en un ambiente de dos capas funciona adecuadamente, pero no es necesariamente lo ms eficiente. Las herramientas para el desarrollo con dos capas son robustas y ampliamente evaluadas. Las tcnicas de ingeniera de software de prototipo se emplean fcilmente. Las soluciones de dos capas trabajan bien en ambientes no dinmicos estables, pero no se ejecutan bien en organizaciones rpidamente cambiantes. Desventajas del sistema de dos capas: Los ambientes de dos capas requieren control excesivo de las versiones y demandan esfuerzo de distribucin de la aplicacin cuando se les hacen cambios. Esto se debe al hecho de que la mayora de la aplicacin lgica existe en la estacin de trabajo del cliente. La seguridad del sistema en un diseo de dos capas es compleja y a menudo requiere administracin de las bases de datos; esto es debido al nmero de dispositivos con acceso directo al ambiente de esas bases de datos. Las herramientas del cliente y de la base de datos, utilizadas en diseos de dos capas, constantemente estn cambiando. La dependencia a largo plazo

de cualquier herramienta, puede complicar el escalamiento futuro o las implementaciones. Arquitectura de tres capas La arquitectura de tres capas es un diseo reciente que introduce una capa intermedia en el proceso. Cada capa es un proceso separado y bien definido corriendo en plataformas separadas. En la arquitectura tradicional de tres capas se instala una interfaz de usuario en la computadora del usuario final (el cliente). La arquitectura basada en Web transforma la interfaz de bsqueda existente (el explorador de Web), en la interfaz del usuario final. La arquitectura de las aplicaciones Web suelen presentar un esquema de tres niveles. El primer nivel consiste en la capa de presentacin que incluye no slo el navegador, sino tambin el servidor web que es el responsable de presentar los datos un formato adecuado. El segundo nivel est referido habitualmente a algn tipo de programa o script. Finalmente, el tercer nivel proporciona al segundo los datos necesarios para su ejecucin. Una aplicacin Web tpica recoger datos del usuario (primer nivel), los enviar al servidor, que ejecutar un programa (segundo y tercer nivel) y cuyo resultado ser formateado y presentado al usuario en el navegador (primer nivel otra vez).

Las diferentes capas suelen ser:

Ventajas de la arquitectura de tres capas: Las llamas de la interfaz del usuario en la estacin de trabajo, al servidor de capa intermedia, son ms flexibles que en el diseo de dos capas, ya que la estacin solo necesita transferir parmetros a la capa intermedia. Con la arquitectura de tres capas, la interfaz del cliente no es requerida para comprender o comunicarse con el receptor de los datos. Por lo tanto, esa estructura de los datos puede ser modificada sin cambiar la interfaz del usuario en la PC. El cdigo de la capa intermedia puede ser reutilizado por mltiples aplicaciones si est diseado en formato modular. La separacin de roles en tres capas, hace ms fcil reemplazar o modificar una capa sin afectar a los mdulos restantes.

Desventajas de las Arquitecturas de Tres Capas y basadas en Web. Los ambientes de tres capas pueden incrementar el trfico en la red y requiere ms balance de carga u tolerancia a las fallas. Los exploradores actuales no son todos iguales. La estandarizacin entre diferentes proveedores ha sido lenta en desarrollarse. Muchas organizaciones son forzadas a escoger uno en lugar de otro, mientras que cada uno ofrece sus propias y distintas ventajas.

2.2 Lenguajes de Programacin del lado del Cliente Un lenguaje del lado cliente es totalmente independiente del servidor, lo cual permite que la pgina pueda ser albergada en cualquier sitio. Pero nuestra pgina no se ver bien si la computadora cliente no tiene instalados los plug-in adecuados. El cdigo, tanto del hipertexto como de los scripts, es accesible a cualquiera y ello puede afectar a la seguridad. Javascript. Javascript es un lenguaje de programacin que realiza acciones dentro del mbito de una pgina web. Su compatibilidad con la mayora de los navegadores modernos, lo posiciona como el lenguaje de programacin del lado del cliente ms utilizado. Con Javascript podemos crear efectos especiales en las pginas y definir interaccin con el usuario. El navegador (browser) del cliente es el encargado de interpretar las instrucciones Javascript y ejecutarlas para realizar estos efectos e interactividades, de modo que el mayor recurso, y tal vez el nico, con que cuenta este lenguaje es el propio navegador. Entre las acciones tpicas que se pueden realizar en Javascript tenemos dos vertientes. Por un lado los efectos especiales sobre pginas web, para crear contenidos dinmicos y elementos de la pgina que tengan movimiento, cambien de color o cualquier otro dinamismo. Por el otro, javascript nos permite ejecutar instrucciones como respuesta a las acciones del usuario (eventos), con lo que podemos crear pginas interactivas con programas como calculadoras, agendas, o tablas de clculo.

Javascript es un lenguaje con muchas posibilidades, es orientado a objetos, con funciones, estructuras de datos complejas, etc. Adems, Javascript pone a disposicin del programador todos los elementos que forman la pgina web, para que ste pueda acceder a ellos y modificarlos dinmicamente. JavaScript no permite dos de las caractersticas clsicas de los lenguajes orientados a objetos (herencia y polimorfismo), pero permite la creacin y manipulacin de objetos sencillos, y la definicin de mtodos y propiedades para dichos objetos. JavaScript soporta el Modelo de Objetos de Documento (DOM, Document Object Model). El DOM es el conjunto de objetos predefinidos que nos permite acceder a todos los elementos de una pgina y a ciertas caractersticas especficas del navegador.

Visual Basic Script Es un lenguaje de programacin de scripts del lado del cliente, slo compatible con Internet Explorer. Es por ello se usa poco. Est basado en Visual Basic de Microsoft. Tanto su sintaxis y modo de operacin es una versin reducida del primero. El modo de funcionamiento de Visual Basic Script para construir efectos especiales en pginas web es muy similar al utilizado en Javascript y los recursos a los que se puede acceder tambin son los mismos: el navegador. Applets de Java Son programas hechos en Java, que se transfieren con las pginas web y que el navegador ejecuta en el espacio de la pgina. Los applets son ms

difciles de programar que los scripts en Javascript y requerirn conocimientos medios del lenguaje Java. La principal ventaja de utilizar applets consiste en que son independientes del navegador, del sistema operativo y multiplataformas. Cada sistema operativo dispone de una mquina Virtual de Java que puede interpretar los Byte Codes y transformarlos a sentencias ejecutables en el sistema en cuestin. Arquitectura de appletviewer El appletviewer representa la interfaz mnima de navegacin. En la figura se muestran los pasos que seguira appletviewer para presentarnos el resultado de la ejecucin del cdigo de nuestra clase.

Esta es una visin simplificada del appletviewer. La funcin principal de esta aplicacin es proporcionar al usuario un objeto de tipo Graphics sobre el que dibujar, y varias funciones para facilitar el uso del objeto Graphics. Ciclo de vida de un Applet Cuando un Applet se carga en el Applet viewer, comienza su ciclo de vida, que pasara por las siguientes fases: Se crea una instancia de la clase que controla el Applet. En el ejemplo de la figura anterior, sera la clase Hola Mundo. El Applet se incializa.

El Applet comienza a ejecutarse. El Applet empieza a recibir llamadas. Primero recibe una llamada init (inicializar), seguida de un mensaje start (empezar) y paint (pintar). Estas llamadas pueden ser recibidas asncronamente. Flash Es un programa multimedia de Adobe que se utiliza para crear presentaciones animadas. Se trata de una aplicacin del lado del cliente que es leda por los principales navegadores. Las animaciones se realizan a partir de vectores y de imgenes en base a pxeles (llamadas raster graphics) y pueden incluir audio y video. Este programa es uno de los ms utilizados para animar sitios Web y permitir la interactividad.

Crtica de Steve Jobs Flash una tecnologa 100% propietaria, argumenta que los estndares web deben de ser completamente abiertos. Adobe asevera que los dispositivos que no tienen soporte para Flash, no tienen acceso a toda la web, porque ms del 75% del vdeo en Internet es t basado en Flash". Pero lo que no dicen, es que casi todo ese contenido, tambin est disponible en formatos ms modernos como el H.264. Flash ofrece poca seguridad a sus usuarios. Dice que es uno de los principales culpables que las computadoras Mac fallen. Afirma que han

tratado de trabajar conjuntamente con Adobe para corregir los problemas, pero que estos persisten despus de varios aos. No queremos reducir la confiabilidad y la seguridad del iPhone, del iPod, o del iPad aadiendo la tecnologa Flash. Flash se desempea pobremente en los dispositivos porttiles, dado que consume mucha energa, adems de que tambin, consume demasiados recursos aunque el hardware sea capaz de reproducir dicho contenido.

2.3 Lenguajes de Programacin del lado del servidor Existe una multitud de lenguajes concebidos o no para Internet. Cada uno de ellos explota ms a fondo ciertas caractersticas que lo hacen ms o menos tiles para desarrollar distintas aplicaciones. Un lenguaje del lado del servidor es aquel que se ejecuta en el servidor web, justo antes de que se enve la pgina a travs de Internet al cliente. Las pginas que se ejecutan en el servidor pueden realizar accesos a bases de datos, conexiones en red, y otras tareas para crear la pgina final que ver el cliente. Los lenguajes de lado servidor ms ampliamente utilizados para el desarrollo de pginas dinmicas son el ASP, JSP, PERL y PHP. ASP.NET (Active Server Pages). Lenguaje comercializado por Microsoft, y usado por programadores para desarrollar entre otras funciones, sitios web. ASP.NET es el sucesor de la tecnologa ASP, fue lanzada al mercado mediante una estrategia de mercado denominada .NET. Se desarrollado para resolver las limitantes que brindaba tu antecesor ASP. Para el desarrollo de ASP.NET se puede utilizar C#, VB.NET o J#. Los archivos cuentan con la extensin (aspx). Para su funcionamiento de las pginas se necesita tener instalado IIS con el Framework .Net. Microsft Windows 2003 incluye este framework, solo se necesitar instalarlo en versiones anteriores. El lenguaje ASP consiste en una serie de clases .NET utilizadas para crear aplicaciones Web, tanto del lado cliente (Web Form) como del lado servidor (Web Service). La integracin de nativa .NET Framework con el sistema operativo Windows Server 2003 hace que su ejecucin sea ms estable y rpida que otros lenguajes de programacin.

Las pginas creadas con la tecnologa ASP.NET funcionan en todo tipo de navegadores incluyendo Netscape, Safari y Internet Explorer. Actualizaciones Dinmicas Soporte de servicios web XML Conexiones del tipo DSN, o sin utilizacin de DSN, para acceder a fuentes de datos ODBC. Ventajas: Completamente orientado a objetos. Controles de usuario y personalizados. Divisin entre la capa de aplicacin o diseo y el cdigo. Facilita el mantenimiento de grandes aplicaciones. Incremento de velocidad de respuesta del servidor. Mayor velocidad. Mayor seguridad. Desventajas: Mayor consumo de recursos. Tecnologa propietaria. Hospedaje de sitios web costosos. JSP Es un lenguaje para la creacin de sitios web dinmicos, acrnimo de Java Server Pages. Est orientado a desarrollar pginas web en Java. JSP es un lenguaje multiplataforma. JSP fue desarrollado por Sun Microsystems. Comparte ventajas similares a las de ASP.NET, desarrollado para la creacin de aplicaciones web potentes. Posee un motor de pginas basado en los servlets de Java. Para su funcionamiento se necesita tener instalado un servidor Tomcat. Caractersticas: Cdigo separado de la lgica del programa. Las pginas son compiladas en la primera peticin.

Permite separar la parte dinmica de la esttica en las pginas web. Los archivos se encuentran con la extensin (jsp). El cdigo JSP puede ser incrustado en cdigo HTML. Los elementos que pueden ser insertados en las pginas JSP son los siguientes: Cdigo: se puede incrustar cdigo Java. Directivas: permite controlar parmetros del servlet. Acciones: permite alterar el flujo normal de ejecucin de una pgina. Ventajas: Ejecucin rpida del servlets. Crear pginas del lado del servidor. Multiplataforma. Cdigo bien estructurado. Integridad con los mdulos de Java. La parte dinmica est escrita en Java. Desventajas: Complejidad de aprendizaje. PERL Perl (Practical Extraction and Report Language) es un lenguaje de programacin desarrollado por Larry Wall (lwall at netlabs.com) inspirado en otras herramientas de UNIX como son: sed, grep, awk, c-shell, para la administracin de tareas propias de sistemas UNIX. No establece ninguna filosofa de programacin concreta. No se puede decir que sea orientado a objetos, modular o estructurado aunque soporta directamente todos estos paradigmas; su punto fuerte son las labores de procesamiento de textos y archivos. Lenguaje de programacin basado en scripts portable a casi cualquier plataforma. Es muy utilizado para escribir CGIs. Uno de sus elementos ms potentes son las expresiones regulares, que a partir de su

versin en Perl han sido adoptadas por otros lenguajes y plataformas como .NET o Javascript. Ventajas Es un buen lenguaje pegamento. Se pueden juntar varios programas de una forma sencilla para alcanzar una meta determinada. Los usuarios de Windows agradecern esta propiedad ya que normalmente adolecen de un buen lenguaje tipo script. Es relativamente rpido para un lenguaje tipo script. Est disponible en mltiples plataformas y sistemas operativos (UNIX, Linux y Windows). Un programa que se escriba teniendo en cuenta la compatibilidad puede ser escrito en una plataforma y ejecutado en otra. El desarrollo de aplicaciones es muy rpido. Hay una coleccin enorme de mdulos que pueden ser incorporados a cualquier script de Perl. Estn disponibles en el CPAN (Comprehensive Perl Archive Network). En particular existe una extensin para clculo numrico denominada PDL. Perl es gratuito. Mucho ms que eso, es Software Libre. Esto quiere decir que el cdigo fuente est disponible para que cualquiera lo pueda ver o modificar, y lo que es ms importante, siempre lo estar. Aunque nunca pretendas cambiar el cdigo, es importante disponer de la posibilidad de hacerlo, ya que siempre se podr contratar a una tercera persona para que lo modifique en el caso de que haya un error, y debera ser posible solucionarlo. Le otorga al programador mucha libertad para que haga el programa como quiera. Tal como dice el eslogan de Perl Hay ms de una forma de hacerlo. Desventajas Es lento para algunas aplicaciones, como programacin a bajo nivel, escribiendo un driver para una aplicacin o corriendo modelos numricos de clculo intensivo. Si bien se pueden insertar subrutinas FORTRAN o C en Perl, teniendo lo mejor de los dos mundos, pero con algo ms de complejidad. La libertad que se le otorga al programador puede significar que el resultado sea un programa ilegible. Si no se escribe con cuidado puede llegar a ser difcil de leer. De hecho hay un concurso de Perl ofuscado.

Perl es un lenguaje interpretado. Este tema no es tan crtico como suena, los programas Perl no corrern mucho ms rpidos cuando se compilen, la nica ventaja est en la desaparicin de la fase inicial de compilacin al correr la aplicacin. Utiliza muchos recursos de comput. Esto significa que no es tan ligero como un programa en C, pero en la prctica es ligero comparado con la potencia de procesamiento de las computadoras actuales. PHP PHP es el acrnimo de Hipertext Preprocesor. Es un lenguaje de programacin del lado del servidor gratuito e independiente de plataforma, rpido, con una gran librera de funciones y mucha documentacin. Fue creado originalmente en 1994 por Rasmus Lerdorf, pero como PHP est desarrollado en poltica de cdigo abierto, a lo largo de su historia ha tenido muchas contribuciones de otros desarrolladores. El cliente solamente recibe una pgina con el cdigo HTML resultante de la ejecucin de la PHP. Como la pgina resultante contiene nicamente cdigo HTML, es compatible con todos los navegadores. Ventajas: Muy fcil de aprender. Se caracteriza por ser un lenguaje muy rpido. Soporta en cierta medida la orientacin a objeto. Clases y herencia. Es un lenguaje multiplataforma: Linux, Windows, entre otros. Capacidad de conexin con la mayora de los manejadores de base de datos: MysSQL, PostgreSQL, Oracle, MS SQL Server, entre otras. Capacidad de expandir su potencial utilizando mdulos. Posee documentacin en su pgina oficial la cual incluye descripcin y ejemplos de cada una de sus funciones. Es libre, por lo que se presenta como una alternativa de fcil acceso para todos. Incluye gran cantidad de funciones. No requiere definicin de tipos de variables ni manejo detallado del bajo nivel. Desventajas:

Todo el trabajo lo realiza el servidor y no delega al cliente. Por tanto puede ser ms ineficiente a medida que las solicitudes aumenten de nmero. La legibilidad del cdigo puede verse afectada al mezclar sentencias HTML y PHP. La programacin orientada a objetos es an muy deficiente para aplicaciones grandes. Dificulta la modularizacin. Dificulta la organizacin por capas de la aplicacin. Seguridad: PHP es un poderoso lenguaje e intrprete, ya sea incluido como parte de un servidor web en forma de mdulo o ejecutado como un binario CGI separado, es capaz de acceder a archivos, ejecutar comandos y abrir conexiones de red en el servidor. Estas propiedades hacen que cualquier cosa que sea ejecutada en un servidor web sea insegura por naturaleza. PHP est diseado especficamente para ser un lenguaje ms seguro para escribir programas CGI que Perl o C, y con la seleccin correcta de opciones de configuracin en tiempos de compilacin y ejecucin, y siguiendo algunas prcticas correctas de programacin.

2.4 Ambientes para el desarrollo Web Un entorno de desarrollo integrado (IDE- Integrated Development Environment -) tambin conocido como entorno de diseo integrado o el medio ambiente integrado de depuracin es una aplicacin de software que ofrece servicios integrales a los programadores de computadoras para el desarrollo de software. Un IDE normalmente se compone de: Un editor de texto. Un compilador. Un intrprete. Herramientas de automatizacin. Un depurador.

Posibilidad de ofrecer un sistema de control de versiones. Factibilidad para ayudar en la construccin de interfaces grficas de usuario. IDE para Php Existen muchos entornos de desarrollo para PHP en software libre tales como: Zend Studio, Open Komodo Project, Eclipse + phpEclipse, entre otros. Dreamweaver de Adobe Es en una potente y flexible herramienta de desarrollo que inclute numerosas herramientas para facilitarnos el desarrollo de aplicaciones web. Dreamweaver permite trabajar con los siguientes modelos de servidor: ASP JavaScript ASP VBScript ASP.NET C# ASP.NET VB COLDFUSION JSP PHP MySQL El concepto de sitios en Dreamweaver es bastante til ya que nos permite mantener un orden lgico/fsico de la estructura de nuestro sitio, enlaces y recursos que este utiliza, tiene el potencial para encargarse completamente de los enlaces relativos (recomendado). Como se menciono Dreamweaver proporciona soporte para variados modelos de Servidor entregando capacidades de creacin de cdigo estndar para una serie de funciones como son la insercin, edicin, eliminacin y consulta de datos, manejo de ciclos y condiciones, incluso acceso por restringido por password, todo esto de una forma muy bsica, pero sin duda es un primer acercamiento para novatos, lo importante de esto es que podemos extender esta capacidad mediante nuestros conocimientos y usar este entorno de desarrollo para facilitarnos la dura tarea de desarrollar para la Web.

Joomla! es un Sistema de Gestin de Contenidos (CMS) premiado mundialmente, que le ayuda a construir sitios web y otras aplicaciones online potentes. Lo mejor de todo, es que Joomla es una solucin de cdigo abierto y est disponible libremente para cualquiera que desee utilizarlo. Joomla! se utiliza en todo el mundo para generar desde una simple pgina web personal hasta complejas aplicaciones web corporativas. Entre los diferentes usos que la gente da a Joomla! estn: Webs corporativas o portales Comercio electrnico Pequeos sitios de negocios Webs de organizaciones o ONGs Aplicaciones gubernamentales Intranets y extranets corporativas Webs de escuelas o agrupaciones Pginas personales o familiares Portales de comunidades Revistas y peridicos Joomla se puede usar para gestionar fcilmente cualquiera de los aspectos de un sitio web, desde la introduccin de contenidos e imgenes hasta la actualizacin de un catlogo de productos o la realizacin de reservaciones online. WordPress WordPress es un sistema de gestin de contenido enfocado a la creacin de blogs (sitios web peridicamente actualizados). Desarrollado en PHP y MySQL, bajo licencia GPL y cdigo modificable, tiene como fundador a Matt Mullenweg. WordPress fue creado a partir del desaparecido b2/cafelog y se ha convertido junto a Movable Type en el CMS ms popular de la blogosfera. Las causas de su enorme crecimiento son, entre otras, su licencia, su facilidad de uso y sus caractersticas como gestor de contenidos.

2.5 Metodologas para desarrollo de aplicaciones Web El creciente desarrollo del comercio electrnico as como el desplazamiento de las distintas organizaciones hacia la Web ha trado en la actualidad una constante evolucin de las aplicaciones Web. Cada da se incrementan las transacciones financieras, la transferencia de informacin confidencial y ejecucin de procesos online, entre otros, las cuales exigen funcionalidad, confiabilidad, usabilidad y eficiencia por mencionar algunas caractersticas de calidad. Esta relevancia de la economa genera grandes desafos en las aplicaciones Web que son los de controlar y mejorar su calidad. Aunque las aplicaciones Web estn creciendo rpidamente tanto en uso como en aceptacin, su desarrollo tiende a ser ad hoc, resultando en aplicaciones de pobre calidad. La mayora de los desarrolladores Web ponen poca atencin en la elicitacin y anlisis de requisitos, as como en las metodologas y procesos de desarrollo. A dems los desarrolladores de aplicaciones confan excesivamente en el conocimiento y experticia de los desarrolladores individuales y sus prcticas de desarrollo individual ms bien que en las prcticas estndar. No obstante, son las mismas metodologas de desarrollo las que no tratan de manera adecuada y profunda los atributos de calidad. Estas situaciones traen como consecuencia que los atributos de calidad de los sistemas basados en la Web tales como la funcionalidad, confiabilidad, mantenibilidad, usabilidad y portabilidad no se les da la debida consideracin que se merecen durante el proceso de desarrollo. En la ingeniera software se denomina aplicacin web a aquellas aplicaciones que los usuarios pueden utilizar accediendo a un servidor web a travs de Internet o de una intranet mediante un navegador. En otras palabras, es una aplicacin software que se codifica en un lenguaje soportado por los navegadores web en la que se confa la ejecucin al navegador. Las aplicaciones web son populares debido a lo prctico del navegador web como cliente ligero, as como a la facilidad para actualizarlas y mantenerlas. Algunas aplicaciones son: los webmails, wikis, weblogs, tiendas en lnea, intranet.

Ingeniera Web es el proceso utilizado para crear, implantar y mantener aplicaciones y sistemas Web de alta calidad. Esta breve definicin nos lleva a abordar un aspecto clave de cualquier proyecto como es determinar que tipo de proceso es ms adecuado en funcin de las caractersticas del mismo. Un empleo sistemtico y disciplinado de modelos, mtodos y modelos de ingeniera de software en la Web para el aseguramiento y control de la calidad favorece a la compresin y anlisis y potencialmente mejorar los desarrollos producidos.

El Proceso de Ingeniera Web Caractersticas como inmediatez y evolucin y crecimiento continuos, nos llevan a un proceso incremental y evolutivo, que permite que el usuario se involucre activamente, facilitando el desarrollo de productos que se ajustan mucho lo que ste busca y necesita. Segn Pressman, las actividades que formaran parte del marco de trabajo incluiran las tareas abajo enumeradas. Dichas tareas seran aplicables a cualquier aplicacin Web, independientemente del tamao y complejidad de la misma. Las actividades que forman parte del proceso son: formulacin, planificacin anlisis, modelado, generacin de pginas, test y evaluacin del cliente.

La formulacin identifica objetivos y establece el alcance de la primera entrega. La planificacin genera la estimacin del costo general del proyecto, la evaluacin de riesgos y el calendario del desarrollo y fechas de entrega. El anlisis especifica los requerimientos e identifica el contenido. La Modelado se compone de dos secuencias paralelas de tareas. Una consiste en el diseo y produccin del contenido que forma parte de la aplicacin. La otra, en el diseo de la arquitectura, navegacin e interfaz de usuario. Es importante destacar la importancia del diseo de la interfaz. Independientemente del valor del contenido y servicios prestados, una buena interfaz mejora la percepcin que el usuario tiene de stos. En la generacin de pginas se integra contenido, arquitectura, navegacin e interfaz para crear esttica o dinmicamente el aspecto ms visible de las aplicaciones, las pginas. El Test busca errores a todos lo niveles: contenido, funcional, navegacional, rendimiento, etc. El hecho de que las aplicaciones residan en la red, y que interoperen en plataformas muy distintas, hace que el proceso de test sea especialmente difcil. Finalmente, el resultado es sometido a la evaluacin del cliente. Control y Garanta de la Calidad Una de las tareas colaterales que forman parte del proceso es el Control y Garanta de la Calidad (CGC). Todas las actividades CGC de la ingeniera software tradicional como son: establecimiento y supervisin de estndares, revisiones tcnicas formales, anlisis, seguimiento y registro de informes, etc, son igualmente aplicables a la Ingeniera Web. Sin embargo, en la Web toman especial relevancia para valorar la calidad aspectos como: Usabilidad Funcionabilidad Fiabilidad Seguridad Eficiencia

Mantenibilidad Control de la Configuracin Establecer mecanismos adecuados de control de la configuracin para la Ingeniera Web es uno de los mayores desafos a los que esta nueva disciplina se enfrenta. La Web tiene caractersticas nicas que demandan estrategias y herramientas nuevas. Hay cuatro aspectos importantes a tener en cuenta en el desarrollo de tcticas de control de configuracin para la Web. Contenido: Considerando la dinamicidad con la que el contenido se genera, es tarea compleja organizar racionalmente los objetos que forman la configuracin y establecer mecanismos de control. Personal: Cualquiera realiza cambios. Hay mucho personal no especializado que no reconoce la importancia que tiene el control del cambio. Escalabilidad: Es comn encontrar aplicaciones que de un da para otro crecen considerablemente. Sin embargo, las tcnicas de control no escalan de forma adecuada.

2.6 Aspectos de Seguridad Hoy en da las aplicaciones web son uno de los servicios ms utilizados ya sea accediendo a un servidor web a travs de internet o de una intranet. Los lenguajes de programacin web son verstiles, sencillos de usar y permiten crear soluciones de gran envergadura. Las aplicaciones escritas en estos lenguajes estn expuestas a diversas amenazas si no se toman las medidas adecuadas para evitarlo, por este motivo se resalta la importancia de la formacin en seguridad que deberan de recibir todos los programadores. Si no se procede de forma correcta, las aplicaciones web desarrolladas en estos lenguajes pueden servir como puerta de entrada de un intruso a la red de la empresa, por lo que la seguridad de este tipo de aplicaciones tiene que ser tomada como prioritaria para no exponer la seguridad de su negocio.

Esta formacin est orientada a que los equipos de programadores conozcan y utilicen las buenas prcticas en el diseo y desarrollo de aplicaciones para evitar vulnerabilidades de seguridad. El objetivo del mismo es conocer como proteger la aplicacin contra los fallos ms comunes (SQL Injection, XSS, Command Execution, File Inclusion). Las fallas de seguridad ms comunes son: Cross Site Scripting (XSS). Las vulnerabilidades de XSS originalmente abarcaban cualquier ataque que permitiera ejecutar cdigo de "scripting", como VBScript o JavaScript, en el contexto de otro sitio web (y recientemente esto se podra clasificar ms correctamente como "distintos orgenes"). Injection Flaws Insecure Remote File Include Insecure Direct Object Reference Cross Site Request Forgery (CSRF) Information Leakage and Improper Error Handling Broken Authentication and Session Management Insecure Cryptographic Storage Insecure Communications Failure to Restrict URL access

UNIDAD III PROGRAMACION DEL LADO DEL SERVIDOR

3.1. Procesamiento del lado del servidor.

La Programacin del lado del servidor es una tecnologa que consiste en el procesamiento de una peticin de un usuario mediante la interpretacin de un script en el servidor web para generar pginas HTML dinmicamente como respuesta.

Todo lo que suceda dentro del servidor es llamado procesamiento del lado del servidor, o server-side processing. Cuando tu aplicacin necesita interactuar con el servidor (por ejemplo, para cargar o guardar datos), sta realiza una peticin del lado del cliente (client-side request) desde el navegador, a travs de la red usando invocaciones remotas a mtodos (remote procedure call, RPC).Mientras se est procesando una llamada RPC, tu servidor est ejecutando cdigo del lado del servidor.

La utilizacin de las diferentes aplicaciones o servicios de Internet se lleva a cabo respondiendo al llamado modelo cliente-servidor.

Cuando se utiliza un servicio en Internet, como consultar una base de datos, transferir un archivo o participar en un foro de discusin, se establece un proceso en el que entran en juego dos partes. Por un lado, el usuario, quien ejecuta una aplicacin en procesador local: el denominado programa cliente.Este programa cliente se encarga de ponerse en contacto con el procesador remotopara solicitar el servicio deseado. El procesadorremotopor su parte responder a lo solicitado mediante un programa que est ejecutando. Este ltimo se denomina programa servidor. Los trminos cliente y servidorse utilizan tanto para referirse a los programas que cumplen estas funciones, como a las computadoras donde son ejecutados esos programas.

El programa o los programas cliente que el usuario utiliza para acceder a los servicios de Internet realizan dos funciones distintas. Por una parte, se encargan

de gestionar la comunicacin con el computador servidor, de solicitar un servicio concreto y de recibir los datos enviados por ste; y por otra, es la herramienta que presenta al usuario los datos en pantalla y que le ofrece los comandos necesarios para utilizar las prestaciones que ofrece el servidor.

Cuando nosotros seleccionamos un enlace hipertexto, en realidad lo que pasa es que establecemos una peticin de un archivo HTML residente en el servidor (una computadora que se encuentra continuamente conectado a la red) el cual es enviado e interpretado por nuestro navegador (el cliente). As pues, podemos hablar de lenguajes de lado servidor que son aquellos lenguajes que son reconocidos, ejecutados e interpretados por el propio servidor y que se envan al cliente en un formato comprensible para l, por ejemplo: ASP, PHP, JSP. Por otro lado, los lenguajes de lado cliente (entre los cuales no slo se encuentra el HTML sino tambin el Java y el JavaScript los cuales son simplemente incluidos en el cdigo HTML) son aquellos que pueden ser directamente "digeridos" por el navegador y no necesitan un pretratamiento.

Cada uno de estos tipos tiene por supuesto sus ventajas y sus inconvenientes. As, por ejemplo, un lenguaje de lado cliente es totalmente independiente del servidor, lo cual permite que la pgina pueda ser albergada en cualquier sitio sin necesidad de pagar ms ya que, por regla general, los servidores que aceptan pginas con scripts de lado servidor son en su mayora de pago o sus prestaciones son muy limitadas.

Inversamente, un lenguaje de lado servidor es independiente del cliente por lo que es mucho menos rgido respecto al cambio de un navegador a otro o respecto a las versiones del mismo.

3.2. Conceptos bsicos de la herramienta de desarrollo Una herramienta es un objeto elaborado a fin de facilitar la realizacin de una tarea mecnica que requiere de una aplicacin correcta de energa. El trmino herramienta, en sentido estricto, se emplea para referirse a utensilios resistentes, tiles para realizar trabajos mecnicos que requieren la aplicacin de una cierta fuerza fsica.

Cada herramienta tiene un fin especfico y debera ser usado solo con un fin determinado, Sin embargo esto no se cumple en la mayora de las tareas del quehacer humano y mucho menos en las aplicaciones web. Cuando pensemos en

las mejores herramientas para el desarrollo web es necesario pensar en donde estar alojado nuestro sitio (hosting). El hosting o alojamiento web es un sistema esencial para el funcionamiento de los sitios en Internet y es el lugar donde fsicamente reside nuestra informacin. Si tenemos recursos ilimitados para tener nuestro propio sitio entonces tendramos que hacer una gran investigacin para seleccionar las herramientas ms sofisticadas. El lugar donde fsicamente se almacenara nuestra informacin determina los lenguajes soportados (cliente, servidor), el gestor de la base de datos y las prestaciones que podremos ofrecer a nuestros futuros usuarios. Las fases de un desarrollo web, as como los lenguajes de programacin usados, son muy extensos y variados, y por ello necesitamos herramientas especficas para cada una de ellas. Conoceremos a continuacin las principales herramientas existentes para poder desarrollar fcilmente un proyecto web.

En el desarrollo web tenemos unas herramientas para el diseo, otras para la maquetacin, otras para la programacin, y para la depuracin. Todas las herramientas que usemos son muy importantes, desde el sistema operativo hasta el comando ms insignificante, y por ello debemos elegir la ms adecuada a nuestras necesidades y capacidades.

Sistema Operativo

Para desarrollar una web, lo primero que necesitamos es un Sistema Operativo, como es lgico, y su eleccin no es tan trivial. Hay que tener en cuenta las aplicaciones de las que dispone el Sistema Operativo y sus costos. Si pensamos desarrollar en .NET este solo es soportado por windows y los costos de hospedaje son ms caros que los que soportan Linux.

Fases de desarrollo de una web Para elegir las herramientas a utilizar, antes debemos identificar las fases del proceso que forman el ciclo de vida de un desarrollo web.

Diseo: Consiste en crear esbozos de la web final mediante una herramienta grfica, como Photoshop. Maquetacin HTML/CSS: Consiste en convertir los esbozos creados en la fase anterior en plantillas HTML, su respectiva hoja de estilos, y las imgenes usadas. Es posible saltarse la fase anterior para comenzar directamente con esta fase, dependiendo de si dominamos herramientas como Photoshop o no. Programacin cliente: Consiste bsicamente en JavaScript. Existen muchas libreras de distribucin libre como JQUERY que nos aportan verdaderas joyas para el desarrollo. Programacin servidor: En esta fase, que se desarrolla junto con la anterior, crearemos la aplicacin web en un lenguaje de servidor, como puede ser PHP, ASP .NET, Python, Perl, Java, etc. Depuracin: Esta fase enlaza la anterior con la siguiente, y es donde haremos las pruebas unitarias, aserciones, trazas, etc. Pruebas en local: En nuestro servidor local haremos todas las pruebas posibles. Por ejemplo usando wampServer.

Subir archivos al hosting: Dependiendo del hosting, podremos usar FTP, SSH, aconsejo usar cute FTP es una herramienta confiable y verstil. Pruebas en hosting: Realizaremos las ltimas pruebas en el servidor del hosting para comprobar que el cambio de servidor no ha afectado a nada. Para evitar problemas, nuestro servidor local debe tener exactamente la misma configuracin que el servidor del hosting. Recuerde probar que sus cdigos sean compatibles al menos con Firefox, Safari e Internet Explorer.

3.3. Operadores Los operadores constituyen elementos esenciales de cualquier lenguaje de programacin. Con ellos podemos asignar, unir, cambiar o comparar valores de datos, cambiar el flujo del programa, etc.

Los operadores son smbolos que representan operaciones sobre un valor. Vamos a ver a continuacin los operadores admitidos por PHP agrupados segn su utilidad. Operador de asignacin El smbolo = permite asignar valores a variables:

1 2 3 4 5 6

<?php $calle= 'Veracruz'; echo$calle.' '; $mi_numero= 319; echo$mi_numero; ?>

El operador.=, agrega valores al contenido de una variable, es equivalente a $var = $var + 'nuevo valor';

1 2 3 4 5

<?php $numeros= 'uno, dos, tres'; $numeros.= ', cuatro, cinco, seis'; echo$numeros; ?>

Operador de concatenacin

Usando el smbolo. Concatenamos cadenas 1 <?php 2 $nombre= 'Jorge'; 3 $apellido= 'Prez'; 4 //Concatena nombre y apellido ms un espacio 5 Echo Nombre: '. $nombre.' '.$apellido; 6 ?>

Operadores aritmticos Los operadores aritmticos de PHP son similares a los de C, Java y Javascript. Los smbolos +, -, /, * realizan operaciones de aritmtica bsica, el smbolo % obtiene el resto de una divisin (mdulo).

Por ejemplo sea $var1 = 10 y $var2 = 5;

Operador Negacin Suma Resta

Ejemplo -$var1 $var1 + $var2 $var1 - $var2

Resultado -10 15 5

Operador Multiplicacin Divisin Mdulo

Ejemplo $var1 * $var2 $var1 / $var2 $var1 % $var2

Resultado 50 2 0

Operadores abreviados o combinados Una forma habitual de modificar el contenido de las variables es mediante los operadores combinados. La siguiente tabla resume los operadores de asignacin combinados

Operador Ejemplo += -= *= /= %= $variable += 10 $variable -= 10 $variable *= 10 $variable /= 10 $variable %= 10 $variable "concatenar" .=

Descripcin $variable = $variable + 10; $variable = $variable - 10; $variable = $variable * 10; $variable = $variable / 10; $variable = $variable % 10; Concatena las "concatenar" cadenas $variable y

.=

Ejemplo: Tabla multiplicar usando +=

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

<?php $enviar= $_POST['enviar']; $tabla= $_POST['tabla']; if( isset($enviar) && $_SERVER["REQUEST_METHOD"] == "POST") { $titulo= "<h2 align='center'><strong>"; $titulo.= "Operadores Abreviados o Combinados"; echo$titulo."</strong></h2>"; $subtitulo= "<h2 align='center'><strong>Tabla de multiplicar usando +="; $subtitulo.= " </strong></h2></td></p>"; echo$subtitulo; $resultado= 0; echo"<table>"; for($i= 1; $i<= 10; $i++) { echo"<tr><td>".$i."</td><td>*</td><td>".$tabla."</td>"; $resultado+= $tabla; echo"<td>=</td><td>".$resultado."</td></tr>"; } echo"</table>"; unset($_POST['enviar']); unset($_POST['tabla']); } else{ echo"<p ejecutar</p>";} class='centrado'>Falta informacin asi no puedes

22 echo"<p class='centrado'><a href='0304Operadores05.html'>"; 23 echo"<img src='../../images/icon-home.gif' /><br />Regresar</a></p>"; 24 ?>

Operadores de incremento - decremento

PHP ofrece soporte de operadores de pre- y post- (incremento o decremento), estilo del lenguaje C y Java. Los smbolos ++ y -- aplicados a una variable, permiten incrementar o decrementar su valor. Su efecto es distinto segn se empleen precediendo o siguiendo el nombre de la variable.

Operador Pre-incremento Post-incremento

Ejemplo Efecto ++$a $a++ Incrementa $a en uno y despus devuelve a. Devuelve $a y despus incrementa $a en uno. Decrece el valor de $a en uno y despus devuelve $a.

Pre-decremento

--$a

Postdecremento

$a--

Devuelve $a y despus decrece su valor en uno.

Ejemplo: Operadores de Post y Pre incremento -- decremento Los operadores de incremento/decremento no afectan a los valores booleanos.

Decrementar valores NULL tampoco tiene efecto, aunque al incrementarlos su resultado es 1. Pruebe introducir una letra que sucede. 1 2 3 4 5 6 7 8 9 <?php $enviar= $_POST['enviar']; $a= $_POST['a']; $b= $_POST['b']; if( isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST') { $titulo= "<h2>".'Operadores de Incremento - Decremento'; echo$titulo."</h2>"; $tabla= "<table>"; $tabla.= "<tr><td>Ejemplo</td><td>Resultado</td></tr>";

10 $tabla.= "<tr><td>a</td><td>$a</td></tr>"; 11 $tabla.= "<tr><td>b</td><td>$b</td></tr>"; 12 $tabla.= "<tr><td>a++</td><td>".($a++)."</td></tr>"; 13 $tabla.= "<tr><td>++a</td><td>".(++$a)."</td></tr>"; 14 $tabla.="<tr><td>b--</td><td>".($b--)."</td></tr>"; 15 $tabla.= "<tr><td>--b</td><td>".(--$b)."</td></tr>"; 16 $tabla.= "</table>"; 17 echo"$tabla"; 18 unset($_POST['enviar']); 19 unset($_POST['a']); 20 unset($_POST['b']); 21 } else{echo"<p 22 ejecutar</p>";} class='centrado'>Falta informacin asi no puedes

23 echo"<p class='centrado'><a href='0304Operadores06.html'>"; 24 echo"<img src='../../images/icon-home.gif' /><br />Regresar</a></p>"; ?>

Operadores Lgicos Los operadores lgicos o booleanos se utilizan conjuntamente con expresiones que devuelven valores lgicos. Con ellos es posible combinar condiciones y evaluarlas en una sola expresin. La sintaxis de estos operadores es la siguiente:

Operador Ejemplo && and || or xor ! $a && $b

Cierto si:

Ambos son ciertos $a and $b $a || $b Si uno o ambos es cierto $a or $b $a xor $b !$a Solo si uno de los dos es cierto. Si $a es Falsa

Ejemplo: Clasificacin de huracanes segn la escala Saffir-Simpson

1 2

<?php if( isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST'&&

3 4 5 6 7 8 9

$velocidad>= 119) { echomensaje(); if(($velocidad>= 119) && ($velocidad<= 153)){ $categoria= 1; } elseif(($velocidad>= 154) && ($velocidad<= 177)){ $categoria= 2; } elseif(($velocidad>= 178) && ($velocidad<= 209)){

10 $categoria= 3; 11 } elseif(($velocidad>= 210) && ($velocidad<= 249)){ 12 $categoria= 4; 13 }elseif( $velocidad>= 250){ 14 $categoria= 5; 15 } 16 $imagen= "<img src='huracan/damage".$categoria.".jpg' />"; 17 $fila= "<tr><td align='center'> $velocidad </td>"; //construyendo la ltima fila 18 $fila.= "<td align='center'>".$categoria."</td>"; 19 $efecto= damages($categoria); 20 $fila.= "<td><small>$efecto</small></td>"; 21 $fila.= "<td>".$imagen."</td></tr></table>"; 22 echo$fila; 23 } else{ 24 echo"<p align='center'>Falta informacin as no puedes ejecutar</p>"; 25 } ?>

Operador de ejecucin PHP soporta un operador de ejecucin: el apstrofe invertido (``). PHP intentar ejecutar la instruccin contenida dentro de los apstrofes invertidos como si fuera un comando del shell; y su salida devuelta como el valor de esta expresin (i.e., no tiene por qu ser simplemente volcada como salida; puede asignarse a una variable).

Ejemplo: Operador de ejecucin

La lnea 2 carga la configuracin del servidor web La lnea 4 asigna al variable entorno el contenido del subdirectorio. Es equivalente a la funcin shell_exec y por defecto est inhabilitado su uso si php esta configurado para ejecutarse en safe_mode.

1 2 3 4 5 6

<?php $entorno= `set`; echo"$entorno"; $entorno= `ls -l`; echo"$entorno"; ?>

Precedencia de operadores

Cuando una expresin est formada por ms de un operador del mismo tipo, PHP la evala de izquierda a derecha, pero cuando creamos expresiones que utilizan

ms de un operador diferente, no siempre evala estas expresiones de la misma forma.

La precedencia de operadores especfica cmo se agrupan las expresiones para ser evaluadas. La precedencia relativa de los operadores se puede modificar mediante parntesis en las expresiones que se desea evaluar a criterio del programador. A continuacin se presenta en la tabla la precedencia de los operadores de menor a mayor.

Asociatividad Operadores Izquierda Izquierda Izquierda Izquierda Derecha Izquierda Izquierda Izquierda Izquierda Izquierda , Or Xor And Print = += -= *= /= .= %= &= |= ^= ~= <<= >>= ?: || && |

Asociatividad Operadores Izquierda Izquierda no asociativo no asociativo Izquierda Izquierda Izquierda Derecha Derecha no asociativo ^ & == != === <<= >>= <<>> +-. */% ! ~ ++ -- (int) (double) (string) (array) (object) @ [ New

3.4. Sentencias de control

Las sentencias de control permiten ejecutar bloque de cdigos dependiendo de condiciones. La evaluacin de dichas condiciones retorna uno de dos valores verdadero o falso. Para PHP el 0 es equivalente a falso y cualquier otro nmero es verdadero.

if...else

La sentencia if...elsepermite ejecutar un bloque de instrucciones si la condicin es verdadera y otro bloque de instrucciones si sta es falsa. Es importante tener en cuenta que la condicin que evaluemos ha de estar encerrada entre parntesis (esto es aplicable a todas las sentencias de control).

1 2 3 4 5

if(condicin) { //Se ejecuta si la condicin es VERDADERA } else{ //Se ejecuta si la condicin es FALSA }

Ejemplo: Determinar si n es par o impar

El vector $_POST recupera los datos del formulario (Lneas 2 y 3). La funcion isset determinan si la variable tomo valor (Lneas 4 y 5). Note que en la lnea 6 se usa el operador == para comparar.

<?php $enviar= $_POST['enviar']; $n= $_POST['n']; if( isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST'){ if( isset($n) ){ if( ( $n% 2 ) == 0 ) { $cadena= "$n es par"; } else$cadena= "$n es impar";

echo"<div align='center'>".$cadena."</div><br />"; } ?> <p class='centrado'> <a href='0305SentenciasControl01.html'> <img src='../../images/icon-home.gif'/><br />Regresar</a></p> <? } else{ ?> <form id='forma'name='forma'method='post'action='0305SentenciasControl01.php'> <fieldset> <legend>Par o impar</legend> <p><label for='n'>n</label> <input type="text"name="n"id="n"/></p> <p><input type="submit"name="enviar"id="enviar"value="Enviar"/></p> </fieldset> </form> <? } ?> Ejemplo: Construir un programa que capture un deporte y despliegue dos implementos deportivos apropiados.

isset es una funcin PHP que regresaverdaderosi una variable tomo valor

$_SERVER['REQUEST_METHOD'] mtodo de peticin se us para acceder a la pgina unset destruye una variable especificada.

1 2 3 4 5 6 7 8 9

<?php $enviar= $_POST['enviar']; if( isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST') { echo"<h1>Implementos deportivos de ".$_POST['deporte']."</h1>"; echo"<p class='centrado'><img src='deportivos/".$_POST['deporte']."01.jpg'/>"; echo"<img alt='' src='deportivos/".$_POST['deporte']."02.jpg'/></p>"; unset($enviar); unset($_POST['deporte']); alt=''

10 ?> 11 <p class='centrado'> 12 <a href='0305SentenciasControl02.php'> 13 <img src='../../images/icon-home.gif'/> 14 <br />Regresar</a></p> 15 <? 16 } else{ 17 ?> 18 <form id='forma'name='forma'method='post'action='0305SentenciasControl02.php'> 19 <fieldset> 20

21 <legend>Implementos deportivos</legend> 22 <p><label for='deporte'>Deporte</label> <select name='deporte'id='deporte'> <option value='basquet'selected='selected'>Basketball</option> <option value='baseball'>Bisbol</option> <option value='futbol'>Ftbol</option> </select></p> <p><input type='submit'name='enviar'id='enviar'value='Enviar'/></p> </fieldset> </form> <? } ?>

Estructuras de control repetitivas/interactivas A menudo es necesario ejecutar una instruccin o un bloque de instrucciones ms de una vez.

Ejemplo:

for El bucleforresulta muy til cuando debemos ejecutar un bloque de cdigo a condicin de que una variable se encuentre entre un valor mnimo y otro mximo. El bucle for se puede romper mediante la sentencia break. Ejemplo:

1 2 3 4 5 6 7 8 9

<?php for($num= 1; $num<= 5; $num++){ echo$num."<br />"; if($num== 3){ echo"Aqu nos salimos \n"; break; } } ?>

Ejemplo: Calcular una tabla multiplicar. La seleccin de la tabla se hace mediante la generacin de un nmero aleatorio.

1 2 3 4 5

<?php $tabla= mt_rand( 1, 10);; $html= '<table class="simple">'; for($i= 1; $i<= 10; $i++) { $html.= '<tr>';

6 7 8 9

$r= $tabla*$i; $html.= "<td>$tabla</td><td>*</td><td>$i</td>"; $html.= "<td>=</td><td>$r</td>"; $html.= '</tr>';

10 } 11 echo$html.'</table>'; 12 ?>

While

La sentencia while ejecuta un bloque de cdigo mientras se cumpla una determinada condicin. Podemos romper un bucle while utilizando la sentencia break.

El siguiente cdigo dado por la formula abajo mencionada, calcula el factorial de n. El valor de n debe ser menor o igual a 69 por el tipo de variables que maneja PHP.

La funcin number_format nos permite formatear los nmeros con comas para separar los miles (Lnea 15). <?php $enviar= $_POST['enviar']; if( isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST') {

$n= $_POST['n']; if($n>= 0 && $n<= 1) { $factorial= 1; } elseif( $n>= 2 and$n<= 69) { $factorial= 1; $i= 2; while( $i<= $n) { $factorial*= $i++; } } else$factorial= "indefinido"; $html= "<p class='centrado'>El factorial de $n es "; $html. = number_format ($factorial, 0, '.',',')."</p><br />"; echo$html; ?> <p class='centrado'> <a href='0305While.php'><img alt=''src='../../images/icon-home.gif'></a> </p> <? } else{ ?> <form id='forma'name='forma'method='post'action='0305While.php'> <fieldset> <legend>Factorial con whileen PHP</legend> <p> <label for='n'>n</label>

<input id='n'maxlength='2'name='n'type='text'size='2'/> </p> <p class='centrado'> <input id='enviar'name='enviar'type='submit'value='Enviar'/> </p> </fieldset> </form> <? } ?> El cdigo factorial se puede optimizar y calcularlo para cualquier valor positivo mediante otros mecanismos.

Do..While

Esta sentencia es similar awhile, salvo que con esta sentencia primero ejecutamos el bloque de cdigo y despus se evala la condicin, por lo que el bloque de cdigo se ejecuta siempre al menos una vez.

Ejemplo: Calcularemos el factorial de n con la sentencia do while.

<?php if( isset($_POST['enviar']) && $_SERVER['REQUEST_METHOD'] == 'POST') { $n= $_POST['n']; if($n== 0 and$n== 1) { $factorial= 1;

} elseif( $n< 0 or$n>69) { $factorial= 'indefenido'; } else{ $i= 2; $factorial= 1; do{ $factorial*= $i++; } while($i<= $n); } $html= "<p align='center'>El factorial de $n es "; $html. = number_format ($factorial, 0, '.',',').'</p><br />'; echo$html; ?> <p class='centrado'> <a href='0305doWhile.php'> <img alt='Calcular otro factorial'src='../../images/icon-home.gif' title='Calcular otro factorial'/> </a> </p> <? } else{ ?> <form id='forma'name='forma'method='post'action='0305doWhile.php'> <fieldset> <legend>Factorial con dowhileen PHP</legend>

<p> <label for='n'>n</label> <input id='n'maxlength='2'name='n'type='text'size='2'/> </p> <p class='centrado'> <input id='enviar'name='enviar'type='submit'value='Enviar'/> </p> </fieldset> </form> <? } ?> El usar while, do while o fores principalmente cuestin de preferencia personal. foreach

El bucle foreach nos permite iterar en cada elemento de un vector, su sintaxis es sencilla. Consiste en identificar el ndice de la matriz, mediante la expresion as y seguidamente la variable que identificar el valor del elemento:

Por ejemplo: La tabla general de la Jornada 17 del Torneo Bicentenario 2010 FEMEXFUT. 1 2 3 4 <?php echo"<h4 align = 'center'>Torneo Bicentenario 2010. "; echo"Jornada 17</h4>"; $equipo['Chivas'] = 32; $equipo['Monterrey'] = 36;

5 6 7 8 9

$equipo['Santos'] = 28; $equipo['Pumas'] = 28; $equipo['Morelia'] = 25; $equipo['Cruz Azul'] = 25; $equipo['Amrica'] = 25; $equipo['Gallos Blancos'] = 21; $equipo['Toluca'] = 30; $equipo['Pachuca'] = 25; $equipo['Atlas'] = 24; $equipo['Estudiantes'] = 19;

10 $equipo['Atlante'] = 16; $equipo['Jaguares'] = 19; 11 $equipo['Puebla'] = 19; $equipo['San Luis'] = 14; 12 $equipo['Tigres'] = 19; $equipo['Indios'] = 15; 13 arsort($equipo); 14 echo"<table>"; 15 echo"<thead><tr><th>Equipo</th><th>Puntos</th></tr></thead>"; $i= 1; foreach( $equipoas$key=>$puntos) { echo"<tr>"; echo"<td>". $key."</td><td>".$puntos."</td>"; echo"</tr>"; } echo"</table>"; ?>

3.5. Arreglos Un arreglo (array) es una estructura de datos que contienen una coleccin de datos del mismo tipo. Los array se utilizan como contenedorespara almacenar datos relacionados (en vez de declarar variables por separado para cada uno de los elementos del array).

Los elementos del array se acceden a travs de la posicin que ocupan dentro del conjunto de elementos del arreglo. El primer elemento es la posicin cero.

El tamao del array se establece cuando creamos el arreglo, pero este puede crecer posteriormente en forma ilimitada (- Hasta agotar la RAM -).

Los elementos del arreglo pueden tener diferentes tipos de datos.

Denominamos vector a los array unidimensionales y matricesa los array bidimensionales. Si bien es posible definir matrices de ms de dos dimensiones despus de casi tres dcadas programando jams necesite una. Los array se clasifican segn su naturaleza en indexadas o asociativas.

Array indexados

Son aquellos en las que el ndice es un valor numrico.

$estaciones = array ('primavera', 'verano', 'otoo', 'invierno');

$sentidos = array('gusto', 'oido', 'olfato', 'tacto', 'vista');

$numeros = array (1, 2,30, 50, 60, 70);

Para acceder un elemento del arreglo usaremos la notacin genrica:

$estaciones [$i]; $sentidos [$i]; $nmeros [$i];

Como ndice podemos usar un nmero, una variable o constante que represente el elemento referenciando. Iniciando desde la posicin cero. Ejemplo: Se declara un arreglo denominado $estacin. El cual se recorre mediante un ciclo for. 1 2 3 4 5 6 <?php $estacion= array('Primavera', 'Verano', 'Otoo', 'Invierno'); echo"Las estaciones del ao son <br />"; for($i= 0; $i<=4; $i++) echo$estacion[$i]."<br />"; ?>

Los arrays se ordenan usando las funciones asort(), ksort(),rsort(),sort(), uasort() y uksort() segn el tipo de ordenacin.

arsort(),

Ejemplo: Generar un vector aleatorio de tamao n y ordenarlo.

Usamos la funcin mt_rand para generar nmeros aleatorios. El mtodo sort ordena los valores del vector de menor a mayor.

<?php $n= $_POST['n']; if( isset($_POST['enviar']) && $_SERVER['REQUEST_METHOD'] == 'POST'&& ($n> 0 && $n< 200000)) { for($i= 0; $i<= $n; $i++) { // Genera un vector de tamao n $vector[$i] = mt_rand(1, 1000); //mt_rand genera nmeros aleatorios } sort($vector); // Ordena el vector //Imprime el Vector ordenado for($i= 0; $i<= $n; $i++) { echo$vector [$i].' '; } ?> <p class='centrado'> <a href='0306Vector.php'> <img src='../../images/icon-home.gif'/><br />Home </a> </p> <? } else{ ?> <form id='forma'name='forma'method='post'action='0306Vector.php'> <fieldset> <legend>Ordenar un vector</legend> <p><label for='n'>n</label>

<input alt='Nmero de elementos del vector'id='n'name='n' title='Nmero de elementos del vector'type='text'/> </p> <p><input id='enviar'name='enviar'type='submit'value='Enviar'/></p> </fieldset> </form> <? } ?> Otra funcin interesante es count que cuenta el nmero de elementos de un arreglo.

Ejemplo. Considere las temperaturas mximas registradas en la ciudad de Veracruz durante el mes de febrero del 2010.

1 2 3 4 5 6 7 8 9

<?php $temperatura= array(23, 25,27, 23, 27,26, 26, 28,27, 22, 26, 21, 23,24,21,18,18,19,26,28,27,27,26,18,23,26,24,27); sort($temperatura); $n= count($temperatura); $promedio= 0; for($i= 1; $i< $n; $i++) $promedio+= $temperatura[$i]; $promedio= $promedio/$n;

10 $maximo= $temperatura[$n- 1];

11 echo"Temperatura mnima = $temperatura[0] <br />"; 12 echo"Temperatura media = $promedio <br />"; 13 echo"Temperatura mxima = $maximo <br />"; 14 ?>

Ejemplo: Obtener los archivos de un directorio ordenados alfabticamente.

En la lnea 3 se establece un apuntador al directorio indicado mediante la funcin opendir. La lnea 4 realiza un ciclo, en el cual la funcin readdir lee uno a uno los archivos del subdirectorio. La lnea 5 asigna el archivo a una posicin del vector. La funcin closedir en la lnea 7 cierra el apuntador. La funcin sort () lnea 8 ordenada el vector de menor a mayor. La sentencia de control foreach recorre el vector.

1 2 3 4 5 6 7 8

<?php // llenar un array con todos los tems de un directorio $handle= opendir('zodiaco'); while(false !== ($archivo= readdir($handle))) { $archivos[] = strtolower($archivo); } closedir($handle); sort($archivos);

foreach($archivosas$i=> $valor) {

10 echo$valor."<br />"; 11 }; ?>

Ejemplo: Funciones bsicas en arreglos

En la lnea 2 se declara un array numrico. Las lneas 3, 9, 14, 20 imprimen el contenido del arreglo mediante la funcin print_r. La funcin count cuenta el nmero de elementos del array (Lneas 4, 6, 11, 16, 21). En la lnea 8 se borra uno a uno el contenido del array (unset) En las lneas 14 y 19 se agregan valores en la siguiente posicin del vector. En la lnea 18 se restablecen los ndices mediante la funcin array_values. 1 2 3 4 5 6 7 8 9 <?php $array= array(1, 2, 3, 4, 5,70,90); // Creamos un array simple. print_r($array); // Imprimimos el array echo"<br />Nmero de elementos en el array: ".count ($array)."<br />"; // ahora borraremos los items pero el apuntador del array quedar intacto: $n= count($array); for($i= 0; $i<= $n; $i++) { unset($array[$i]); }

10 print_r($array); 11 echo"<br />Nmero de elementos en el array: ".count($array)."<br />"; 12 // Ahora sumaremos un item (observe que el nuevo ndice es 7, y no 0). 13 $array[] = 60; 14 print_r($array); 15 echo"<br />Nmero de elementos en el array: ".count($array)."<br />"; 16 // Re-index: 17 $array= array_values($array); 18 $array[] = 57; 19 print_r($array); 20 echo"<br />Nmero de elementos en el array: ".count($array)."<br />"; 21 ?> 22

Funcin Range Crea un vector que contiene una secuencia de elementos. Sintaxis array range (mixed $inicial, mixed $final [, number $incremento]) Range () retorna vector de elementos desde inicial hasta final, ambos inclusive. Si inicial>final, la secuencia ser del mayor al menor. Si recibe como parmetro incremento, ste ser usado como el incremento entre elementos en la secuencia. Incremento es un nmero positivo. Si no se especifica, incremento tendr un valor predeterminado de 1.

<?php echo"<h1>Uso de range</h1><br />"; echo"Vector simple<br />"; 1 2 3 4 5 6 7 8 9 foreach(range(0, 20) as$numero) { echo$numero."<br />"; } echo"Vector con incremento<br />"; foreach(range(0, 200, 20) as$numero) { echo$numero."<br />"; } echo"Vector de letras<br />"; foreach(range('a', 'z') as$letra) {

10 echo$letra."<br />"; 11 } 12 echo"Vector de letras descendente<br />"; 13 foreach(range('M', 'C') as$letra) { 14 echo$letra."<br />"; 15 } ?>

Arrays asociativos

Un array est formado por conjuntos de parejas ndice =>valor, o como suele expresarse en ingls, key, valu. Los cuales se expresan comnmente con ndices

o keys numricos (tambin conocidos como arrays escalares). Adems es posible usar strings como ndices, es decir, cadenas de texto. Este tipo de array es el array asociativo: Ejemplo: Imprimiremos la fecha actual mediante el uso de arreglos.

En la lnea 4 se declara un arreglo asociativo que contiene los nombres del mes en espaol En la lnea 11 se declara un arreglo asociativo que contiene los nombres del da de la semana en espaol En la lnea 18 se obtiene el nmero del da del mes El ao se obtiene en la lnea 19. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

<?php functionimprimeFecha(){ $mesArray= array( 1 => 'Enero', 2 => 'Febrero', 3 => 'Marzo', 4 => 'Abril', 5 => 'Mayo', 6 => 'Junio', 7 => 'Julio', 8 => 'Agosto', 9 => 'Septiembre', 10 => 'Octubre', 11 => 'Noviembre', 12 => 'Diciembre' ); $semanaArray= array( 'Mon'=> 'Lunes', 'Tue'=> 'Martes', 'Wed'=> 'Miercoles', 'Thu'=> 'Jueves', 'Fri'=> 'Viernes', 'Sat'=> 'Sbado', 'Sun'=> 'Domingo', ); $mesReturn= $mesArray[date('n')]; $semanaReturn= $semanaArray[date('D')];

16 $dia= date('d'); 17 $ao = date('Y'); 18 return$semanaReturn.' '.$dia.' de '.$mesReturn.' de '.$ao; 19 } 20 echoimprimeFecha(); ?>

Recorrer una tabla con ndices numricos mediante un bucle es sencillo, pero cmo recorremos una tabla con ndices asociados? Para ello, utilizaremos una serie de sentencias especficas para tal fin: Each () se usa normalmente de forma conjunta a list() para recorrer una matriz: por ejemplo:

<?php $deportivos= array('a'=> 'BWM M3 Sedan', 'b'=> 'Mazda Miata', 'c'=> 'cFerrari 612 Sca glietti','d'=> 'Corvette C6'); while(list($key, $val) = each($deportivos)) { $foto= "deportivos/$val".'.jpg'; echo"<img src='$foto' border='0' height='350' width='500'/>"."<br />"; echo$val."<br />"; } ?>

Matrices Los arrays bidimensionales - matrices - similares a una tabla de doble entrada. Cada uno de los elementos se identifica unvocamente por un nombre ( $nombre) seguido de dos ([]) que contienen los ndices del array. Los ndices pueden ser de tipo escalar - equivalen al nmero de fila y columna que la celda ocupa en la tabla o puede ser asociativos lo que equivaldra en alguna medida a usar como ndices los nombres de la fila y de la columna. Los elementos de un arraybidimensional escalar pueden escribirse usando una de estas sintaxis:

$arreglo [][] = valor. En este caso los ndices se autoincrementan iniciando los ndices en cero. El primer ndice corresponde a renglones y el segundo a las columnas. $arreglo[i][j] = valor. En este caso corresponde al programador el control de los ndices.

Ejemplo: Crear e imprimir una matriz r - renglones - x c - columnas -.

En las lneas 6 y 11 se controla el ndice rengln En las lneas 7 y 12 se controla el ndice columna mt_rand es una funcin PHP que genera nmeros aleatorios en este caso entre 1 y 100. <?php if( isset($_POST['enviar']) && $_SERVER['REQUEST_METHOD'] == 'POST') { $r= $_POST['renglones'] - 1; $c= $_POST['columnas'] - 1; $html= "<table class='simple'>"; for($i= 0; $i<= $r; $i++) { $html.= "<tr>";

for($j= 0; $j<= $c; $j++) { $matriz[$i][$j] = mt_rand(1, 100); $html. = "<td>".$matriz[$i][$j]."</td>"; } $html.= "</tr>"; } echo$html."</table>"; ?> <p class='centrado'> <a href='0306ImprimirMatriz.php'> <img alt= ''src='../../images/icon-home.gif'><br />Home</a> </p> <? } else{ ?> <form action='0306ImprimirMatriz.php'id='forma'name='forma'method='post'> <fieldset> <legend>Imprimir Matriz</legend> <p><label for='renglones'>Renglones</label> <input id='renglones'maxlength='1'name='renglones'size='1'type='text'/> </p> <p><label for='columnas'>Columnas</label> <input id='columnas'maxlength='1'name='columnas'size='1'type='text'/> </p> <p>

<input id='enviar'name='enviar'type='submit'value='Enviar'/> </p> </fieldset> </form> <? } ?>

3.6. Funciones

Una funcin es el trmino para describir una secuencia de rdenes que hacen una tarea especfica de una aplicacin ms grande.

Una funcin de usuario en PHP no es ms que una porcin de cdigo que podemos llamar en cualquier momento. De un lado, al dividir nuestro cdigo en funciones podemos aislar y perfeccionar cada una de sus funcionalidades; de otro lado, podemos reutilizar este cdigo, ya que una funcin puede ser llamada cuantas veces la necesitemos.

Para definir una funcin debemos usar la palabra reservada function. Para llamar la funcin basta con invocar su nombre.

Las declaraciones de funciones generalmente son especificadas por:

Nombre de la funcin con el que se identifica y se distingue de otras. No podr haber otra funcin, ni procedimiento con ese nombre (salvo sobrecarga o polimorfismo en programacin orientada a objetos). Un tipo de dato de retorno. Tipo de dato del valor que la funcin devolver al terminar su ejecucin.

Una lista de parmetros. Especificacin del conjunto de argumentos (pueden ser cero, uno o ms) que la funcin debe recibir para realizar su tarea. El cdigo u rdenes de procesamiento. Conjunto de rdenes y sentencias que debe ejecutar la funcin. La sintaxis de una funcin es la siguiente:

1 <span class="style3">function</span> nombreFuncion(arg1, arg2,... argn) { 2 //cuerpo de la funcin 3 } Ejemplo: Conventir grados centgrados a grados Fahrenheit.

En las lneas 2 al 4 se hace la declaracin de la funcin La palabra reservada return regresa el valor de la funcin lnea 3. En la lnea 11 se hace un llamado a la funcin cF pasandole como parmetro una variable. <?php $g= $_POST['centigrados']; if( isset($_POST['convertir']) "POST"&& !empty($g) ) { functioncF( $grados){ return1.8 * $grados+ 32; } echo"<p class='centrado'>$g grados centigrados equivalen a ".cF($g)." grados Fahrenheit</p>"; unset($_POST['centigrados']); ?> && $_SERVER["REQUEST_METHOD"] ==

<p class='centrado'> <a href='0307Centigrados.php'><img src='../../images/calcular.gif'alt=''>Home</a> </p> <? } else{ ?> <form id='forma'name='forma'method='POST'action='0307Centigrados.php'> <fieldset> <legend>Grados centgrados a grados Fahrenheit</legend> <p> <label for='centigrados'>Centgrados</label> <input alt='Grados centgrados'name='centigrados'maxlength='3' title='Grados centgrados'size='3'type='text'/> </p> <p class='centrado'> <input name='convertir'type='submit'value='Convertir'/> </p> </fieldset> </form> <? } ?>

PHP no distingue entre maysculas y minsculas al nombrar las funciones, asi que cF sera lo mismo que CF, aunque es buena prctica ser consistente en la forma de escribir los nombres. Como curiosidad, podrs observar que en los

mensajes de error, PHP siempre designa tus funciones en minscula. Los parntesis permiten pasar valores a las funciones (parmetros), son siempre necesarios, aunque no pases valor alguno

Una funcin puede retornar ms de un valor, si lo regresamos como un arreglo y lo asignamos mediante la funcin de PHP list.

Ejemplo: Convertir grados Centgrados (Celsius) a grados Fahrenheit, Kelvin y Rankine.

La lnea 6 regresa un array de valores. Mediante la funcin list se recuperan los valores del array en variables. <?php functionconversion( $grados){ $f= 1.8 * $grados+ 32; $r= $f+ 459.67; $k= $r/1.8; returnarray($f, $r, $k); } $convertir= $_POST['convertir']; $formato= "<p class='centrado'>"; if( isset($convertir) && $_SERVER['REQUEST_METHOD'] == 'POST'){ $g= $_POST['grados']; list($f, $r, $k) = conversion($g); echo"$formato $g grados centgrados equivalen a:</p>"; echo"$formato $f grados Fahrenheit</p>";

echo"$formato $r grados Rankine</p>"; echo"$formato $k grados Kelvin </p>"; ?> <p class='centrado'><a href='0307Conversion.php'> <img alt=''src='../../images/home.gif'><br />Home</a> </p> <? } else{ ?> <form id='forma'name='forma'method='POST'action='0307Conversion.php'> <fieldset> <legend>Conversin de temperaturas</legend> <p> <label for='grados'>Grados</label> <input alt='Grados'maxlength='3'name='grados'size='3'type='text' title='Grados'/> </p> <p class='centrado'> <input alt=''name='convertir'type='submit'value='Convertir'/> </p> </fieldset> </form> <? } ?>

Paso de parmetros por referencia

Hasta el momento usamos parmetros por valor. Si queremos pasar nuestras variables por referencia - de tal manera que los cambios en los argumentos persistan - es necesario anteponer al argumento o parmetro el smbolo "&".

Ejemplo: Considere el clculo del rea y volumen de una esfera en funcin de su radio mediante las siguientes formulas;

En la lnea 4 al 7 se declara una funcin con parmetros por referencia. Observe que los parmetros por referencia se denotan anteponiendo un & al $. La lnea 5 usa la funcin predifinida pi() que no necesita explicacin Observe que la funcin no regresa valores, pero aun as los variables rea y volumen tomaron valor. Esto es porque fueron declaradas como parmetros por referencia. La funcin PHP number_format (Lneas 14 y 15) da formato a un parmetro numrico con separador de miles y decimales.

1 2 3 4

<?php $radio= $_POST['radio']; if( isset($_POST['calcular']) 'POST'&& $radio>0) { && $_SERVER['REQUEST_METHOD'] ==

5 6 7 8 9

functioncalculo( $radio, &$area, &$volumen){ $area= 4 * pi() * $radio* $radio; $volumen= $area* $radio/3; } $formato= "<p class='centrado'>";

10 $area= 0; 11 $volumen= 0; 12 calculo($radio, $area, $volumen); 13 echo"$formato Sea una esfera cuyo radio es $radio metros</p>"; 14 echo"$formato tiene un rea de ".number_format($area,2,'.',',')." metros<sup>2</sup></p>"; 15 echo"$formato tiene un volumen de ".number_format($volumen,2,'.',',')." 16 metros<sup>3</sup></p>"; 17 ?> 18 <p class='centrado'> 19 <a href='0307Esfera.php'> 20 <img alt=''src='../../images/icon-home.gif'> 21 </a> 22 </p> 23 <? 24 } else{ 25 ?> 26 <form name='forma'method='POST'action='0307Esfera.php'> 27 <fieldset> 28 <legend>rea y volumen de una esfera</legend>

29 <p> 30 <label for='radio'>Radio</label> 31 <input alt='Radio de una esfera'maxlength='2'name='radio'size='2'type='text'/> 32 </p> 33 <p> 34 <input name='calcular'type='submit'value='Calcular'/> 35 </p> 36 </fieldset> 37 </form> 38 <? 39 } ?>

Funciones recursiva Se denominan funciones recursivas a aquellas que se llaman a s mismas. Ejemplo: Para todo nmero natural n, se llama n factorial o factorial de n al producto de todos los naturales desde 1 hasta n. Es decir:

Se define 0! = 1, para que la relacin n! = n (n - 1)! sea tambin vlida para n = 1. Esta relacin permite definir los factoriales por recursividad. La notacin n! fue popularizada por el matemtico francs Christian Kramp.

<?php $n= $_POST['n']; $forma= "<p class='centrado'>"; if( isset($_POST['calcular']) and$_SERVER["REQUEST_METHOD"] == 'POST' and!empty($n) && ($n>= 0 and$n<= 69)) { functionfactorial($n= 1) { if($n<= 1) { return1; } else{ //llamada as misma return$n* factorial($n- 1); } } //Fin: Factorial echo"$forma El factorial de $n = ".factorial($n)."</p>"; ?> <p class='centrado'> <a alt=''href='0307Factorial.php'> <img src='../../images/icon-home.gif'><br />Home</a> </p> <? } else{ ?>

<form id='forma'name='forma'method='POST'action='0307Factorial.php'> <fieldset> <legend>Clculo del factorial de n</legend> <p> <label for='n'>n</label> <input alt='Ingrese un nmero'maxlength='2'name='n'size='2'type='text'/> </p> <p> <input name='calcular'type='submit'value='Calcular'/> </p> </fieldset> </form> <? } ?> Ejemplo de aplicacin: Suma, resta, multiplicacin y divisin de quebrados

Suma o Resta, Divisin, Reducir, Fracciones function sumaResta($n1, $d1, $n2, $d2, $signo) { $dr = mcm($d1, $d2); $nr = ($n1 * ($dr / $d1) + $signo * $n2 * ($dr / $d2)); $cadena = $n1.'/'.$d1.' '; $cadena .= ($signo == 1?'+':'-').' '.$n2.'/'.$d2; if($nr == 0) { $mensaje = $cadena.' = 0';

}else{ if( $nr == $dr) { $mensaje = $cadena.' = 1'; }else{ $mensaje = reducir($nr, $dr, $cadena); } } return $mensaje; }

3.7. Ejemplos PHP

Redireccionamiento de los visitantes a las pginas especficas en su idioma. Conocer los idiomas seleccionados en el navegador de nuestros visitantes puede ser un dato muy importante que puede utilizar para redirigir al usuario a una pgina especfica en el idioma correspondiente, o bien para mostrar informacin especfica dirigida al usuario (como por ejemplo el anuncio ms adecuado) Si deseamos que nuestro sitio sea bilinge en ingls y espaol, bajo el supuesto que el espaol y el ingls son los dos idiomas ms utilizado por nuestros visitantes (nuestro idioma por defecto ser espaol).

1 2 3 4 5

<? if(substr($_SERVER['HTTP_ACCEPT_LANGUAGE],0,2) == 'es'){ include('paginaEspanol.html'); >} else{ include('paginaIngles.html');

6 7

} ?>

Imprimir fecha y hora del sistema

1 2 3 4 5 6 7

<html> <body> La fecha del da de hoy es: <? echodate("Y/m/d"); ?> La hora local del servidor es: <? echodate("G:i:s"); ?> </body> </html>

Procesando Formularios Para conocer mediante que mtodo recibimos el formulario en PHP usamos la variable de servidor $_SERVER['REQUEST_METHOD']. El siguiente cdigo muestra su uso.

?1 2 3 4 5 6

<?php if($_SERVER['REQUEST_METHOD'] == 'GET'){ echo'Usaste GET para enviar los datos'; } elseif($_SERVER['REQUEST_METHOD'] == 'POST'){ echo'Usaste PUT para enviar los datos'; }

?>

Eliminar espacios

La funcim trim elimina los espacios en blanco de la cadena. Observe que est funcin solo elimina los espacios en blanco de los extremos izquierdo y derecho de la cadena, ignorando los espacios en blanco internos (Lnea 10). La funcin strlower convierte la cadena en minsculas (Lnea 3). ereg_replacebusca cualquier ocurrencia del patrn en la cadena y la reemplaza por otra. En nuestro caso, cambia todo espacio en blanco por vacio (Lnea 4).

1 2 3 4 5 6 7 8 9

<?php functioneliminarEspacios($cadena) { $cadena= strtolower($cadena); $cadena= ereg_replace( ' ', '', $cadena); return"<p class='centrado'>".$cadena."</p><br />"; } if( isset($_POST['enviar']) && $_SERVER['REQUEST_METHOD'] == 'POST') { $cadena= trim($_POST['cadena']);

10 if( empty($cadena)) { 11 echo"<p class='centrado'>Enviaste una cadena vaca</p>"; 12 } elseechoeliminarEspacios($cadena);

13 ?> 14 <p class='centrado'> 15 <a href='0309espacios.php'> 16 <img alt=''src='../../images/icon-home.gif'/><br />Home 17 </a> 18 </p> 19 <? 20 } else{ 21 ?> 22 <form name='forma'method='post'action='0309espacios.php'> 23 <fieldset> 24 <legend>Eliminar Espacios</legend> 25 <p> 26 <label for='cadena'>Cadena</label> 27 <input name='cadena'type='text'/> 28 </p> 29 <p class='centrado'> 30 <input name='enviar'value='Enviar'type='submit'/> 31 </p> </form> <? } ?>

Clculo de reas y permetros

El programa principal realiza una interfase bsica para manejar multiples formularios en un mismo archivo. El procesamiento con PHP permite capturar las diferentes caractersticas de las figuras geomtricas. El componente hidden permite manejar el tipo de figura para el clculo de rea y permetro. ?> <form name='cuadrado'method='post'action='0309FigurasAreaPerimetro.php'> <fieldset> <legend>Clculo del rea y permetro de un cuadrado</legend> <p> <label for='lado'>Lado</label> <input name='lado'type='text'/> </p> <p class='centrado'> <input type='submit'name='calcular'id='calcular'value='Calcular'/> </p> <input name='figura'type='hidden'value='Cuadrado'/> </fieldset> </form> <? } elseif($cuerpo== "circulo") { ?> <? } else{ ?>

<? } } else{ ?> <form name='forma'method='post'action='0309Figuras.php'> <fieldset> <legend>Clculo rea y permetro figuras geomtricas</legend> <p> <label for='cuerpo'>Figura</label> <select name='cuerpo'> <option value='circulo'>Circulo</option> <option value='cuadrado'>Cuadrado</option> <option value='rectangulo'>Rectngulo</option> </select> </p> <p> <input name='calcular'type='submit'value='Calcular'/> </p> </fieldset> </form> <? } ?>

Por ltimo se presenta el cdigo que procesa los datos de entrada

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

<?php $figura= $_POST['figura']; if($figura== 'Cuadrado') { $lado= $_POST['lado']; $area= number_format($lado* $lado, 2, '.', ','); $perimetro= number_format(4 * $lado, 2, '.', ','); $resultado= "El rea de un Cuadro de lado = $lado es de $area unidades cuadradas "; } elseif($figura== 'Rectangulo') { $altura= $_POST['altura']; $base= $_POST['base']; $area= number_format($altura* $base, 2, '.', ','); $perimetro= number_format(2 * ($altura+ $base), 2, '.', ','); $resultado= "El rea de un Rectngulo de base = $base y altura = $altura es "; $resultado.= "de $area unidades cuadradas "; } else{ $radio= $_POST['radio']; $area= number_format(pi() * $radio* $radio, 2, '.', ','); $perimetro= number_format(2 * $radio* pi(), 2, '.', ',');

$resultado= "El rea de un Circulo de radio = $radio es de $area unidades 21 cuadradas "; 22 }

23 echo"<p class='centrado'>$resultado</p>"; echo"<p class='centrado'>con un permetro de $perimetro unidades</p><br />"; ?>

Envio de correos

Enviar correos mediante PHP es sumamente sencillo si usamos la funcin mail La funcin mail es: mail($destino, $asunto, $mensaje, $encabezado); Donde:

$destino: Es la direccin a donde se enviar el mensaje $asunto: Asunto del mensaje $mensaje: cuerpo del mensaje $encabezado: Aqu se anexa por ejemplo a quien se enva el mensaje, si el mensaje va ir con copia para, si el mensaje ira con copia oculta para, si tendr formato html, etc. or die manda un mesaje si ocurre un error y detiene el proceso.

1 2 3 4 5 6

<?php $enviar= $_POST['enviar']; if( isset($enviar) && $_SERVER["REQUEST_METHOD"] == "POST") { $destino= trim($_POST['destino']); $asunto= trim($_POST['asunto']); $mensaje= trim($_POST['mensaje']);

7 8 9 10 11 12 13 14 15

if( !( empty($destino) orempty($asunto) orempty($mensaje))) { if( filter_var($destino, FILTER_VALIDATE_EMAIL)) { mail($destino, $asunto, $mensaje) ordie("Su mensaje no se envio a $destino."); $cadena= "Mensaje enviado con xito a $destino"; } else$cadena= "Correo no valido"; } else$cadena= "Faltan datos"; ?> <p class='centrado'> src='../../images/icon-home.gif'/><br

<a href='0309email.php'><img 16 />Home</a> 17 </p> 18 <? 19 } else{ 20 ?>

21 <form name='forma'method='post'action='0309email.php'> 22 <fieldset> 23 <legend>Envio de email con PHP</legend> 24 <p> 25 <label for='destino'>Destino</label> 26 <input name='destino'type='text'/> 27 </p> 28 <p> 29 <label for='asunto'>Asunto</label> 30 <input name='asunto'type='text'/>

31 </p> 32 <p> 33 <label for='mensaje'>Mensaje</label> 34 <textarea cols='40'name='mensaje'rows='5'></textarea> 35 </p> 36 <p class='centrado'> 37 <input name='enviar'type='submit'value='Enviar'/> 38 </p> 39 </fieldset> 40 </form> <? } ?>

Convertir nmeros a letras

La funcin que se presenta a continuacin convierte nmeros a letras. El nmero a convertir debe ser un entero positivo menor a 999,999, 999,999.

La lnea 3 (Editada para fines de presentacin) declara un array con la representacin alfabtica de los nmeros comprendidos entre 1 y 29. Esta caracterstica se debe a que dichos nmeros no siguen un patrn para su escritura.

La lnea 11 declara un arreglo asociativo que contiene la conversin de los nmeros 30, 40 y 90. La lnea 14 obtiene el mdulo 10 de n. Si el mdulo 10 de n es cero se regresa la posicin asociada a n en el vector decenas (lnea 11). Si el mdulo 10 de n es diferente de cero. Se regresa la posicin asociada a n en el vector decenas y se hace un llamado a la funcin bsico. La lnea 21 declara un arreglo asociativo para la representacin alfabtica de los nmeros 100,200, ... y 900. La lnea 30 hace uso de un operador ternario para poder manejar la escritura de los nmeros comprendidos entre 101 y 199. En la lnea 39 se obtiene la longitud de n. En el caso de los miles est longitud vara entre 4 y 6. substr($cadena, -3) obtiene los ltimos 3 caracteres de la cadena, lnea 41. <?php functionbasico($numero) { $valor= array('uno','dos','tres','cuatro','cinco','seis','siete','ocho','nueve','diez', 'once','doce','trece','catorce','quince','diecisis','diecisiete', 'dieciocho','diecinueve','veinte','veintiuno','veintidos','ventitres', 'veinticuatro','veinticinco','veintisis','veintisiete','veintiocho','veintinueve'); return$valor[$numero- 1]; } functiondecenas($n) { $decenas= array(30=>'treinta',40=>'cuarenta',50=>'cincuenta',60=>'sesenta', 70=>'setenta',80=>'ochenta',90=>'noventa'); if( $n<= 29) returnbasico($n); $x= $n% 10;

if( $x== 0 ) { return$decenas[$n]; } elsereturn$decenas[$n- $x].' y '. basico($x); } functioncentenas($n) { $cientos= array(100 =>'doscientos',300=>'trecientos',400=>'cuatrocientos', =>'cien',200

500=>'quinientos',600=>'seiscientos',700=>'setecientos',800=>'ochocientos', 900 =>'novecientos'); if( $n>= 100) { if( $n% 100 == 0 ) { return$cientos[$n]; } else{ $u= (int) substr($n,0,1); $d= (int) substr($n,1,2); return(($u== 1)?'ciento':$cientos[$u*100]).' '.decenas($d); } } elsereturndecenas($n); } functionmiles($n) { if($n> 999) { if( $n== 1000) {return'mil';} else{ $l= strlen($n); $c= (int)substr($n,0,$l-3);

$x= (int)substr($n,-3); if($c== 1) {$cadena= 'mil '.centenas($x);} elseif($x!= 0) {$cadena= centenas($c).' mil '.centenas($x);} else$cadena= centenas($c). ' mil'; return$cadena; } } elsereturncentenas($n); } functionmillones($n) { if($n== 1000000) {return'un milln';} else{ $l= strlen($n); $c= (int)substr($n,0,$l-6); $x= (int)substr($n,-6); if($c== 1) { $cadena= ' milln '; } else{ $cadena= ' millones '; } returnmiles($c).$cadena.(($x> 0)?miles($x):''); } } functionconvertir($n) { switch(true) { case( $n>= 1 && $n<= 29) : returnbasico($n); break;

case( $n>= 30 && $n< 100) : returndecenas($n); break; case( $n>= 100 && $n< 1000) : returncentenas($n); break; case($n>= 1000 && $n<= 999999): returnmiles($n); break; case($n>= 1000000): returnmillones($n); } } $convertir= $_POST['convertir']; $html=''; if( isset($convertir) && $_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['numero']) ) { $html= "<p class='centrado'>".$_POST['numero'].' se escribe '; $html.= />"; "<strong>".ucfirst(convertir($_POST['numero']))."</strong></p><br

echo$html; } ?>

3.8 Formularios

Los formularios no forman parte de PHP pero le permiten a este interactuar con el mundo exterior. PHP maneja en forma simple las variables de formulario, es capaz de generar salidas HTML. La sintaxis de un formulario es la siguiente:

Action

Identifica el archivo PHP que manipula el formulario que se envia. Los formularios son manipulados por PHP del lado servidor. El atributo "method" define cmo la informacin de un formulario es enviada al navegador. Existen dos valores posibles para este atributo (insensibles a maysculas/minsculas):

get:Los datos del formulario son agregados a la URL definida en el atributo "action" (por ejemplo, pagina.php?pnombre=jorge&papellido=perez post: Los datos del formulario son agregados al cuerpo del formulario.

Target

Este parmetro indica dnde debe mostrarse esa informacin. Puede tomar los valores: _self : en este mismo marco o ventana. _blank: en una ventana nueva. _top: en el marco de que depende toda la ventana que estamos visualizando (si no utilizamos marcos en nuestra pgina (FRAMESET) equivaldr a _self).

_parent: el marco padre de la ventana que estamos visualizando (si utilizamos FRAMESET con slo un nivel de anidacin, equivaldr a _top). Id

Nombre del formulario. id y name deben comenzar con una letra ([A-Za-z]) que puede estar seguida por un nmero cualquiera de letras, dgitos, ([0-9]), guiones ("-"), subguiones ("_"), dos puntos (":"), y puntos ("."). Es un identificador nico, por ejemplo el CURP y el RFC. name

Este atributo da nombre al elemento de modo que se pueda hacer referencia a l desde hojas de estilo o scripts. Sirve para referenciar elementos del mismo tipo. Por ejemplo la raza de un perro que identifica animales con caractersticas iguales.

Ejemplo: El ndice de masa corporal (IMC) es una medida de asociacin entre el peso y la talla de un individuo. Ideado por el estadstico belga L. A. J. Quetelet, tambin se conoce como ndice de Quetelet. Se calcula segn la expresin matemtica:

El valor obtenido vara con la edad y el sexo. Tambin depende de otros factores, como las proporciones de tejidos muscular y adiposo. En el caso de los adultos se

ha utilizado como uno de los recursos para evaluar su estado nutricional, de acuerdo con los valores propuestos por la Organizacin Mundial de la Salud.

<?php

functionvaloracion($imc) { if($imc>= 18.5 and$imc<= 24.99) { $valoracion= 'NORMAL'; } elseif($imc>= 25 and$imc<= 29.99) { $valoracion= 'PREOBESO'; } elseif($imc>= 30) { $valoracion= 'OBESO'; } elseif($imc< 18.5) { $valoracion= 'INFRAPESO'; } return$valoracion; } functionimc($peso, $altura) { return$peso/($altura* $altura); } functionresultado ($peso, $altura, $imc){ $html= "<h3><p class='centrado'>IMC</p></h3>"; $html.= "<table class='simple'>"; $html.= "<tr><td><strong>Peso</strong></td><td>"; $html.= $peso."</td><td>Kg</td></tr>"; $html.= "<tr><td><strong>Altura</strong></td>"; $html.= "<td>".$altura."</td><td>Mt</td></tr>";

$html.= "<tr><td><strong>IMC</strong></td>"; $html.= "<td>".number_format($imc, 2)."</td><td>kg/m<sup>2</sup></td></tr>"; $html.= "<tr><td><strong>Valoracin</strong></td><td>".valoracion($imc); $html.= "</td><td></td></tr></table>"; return$html."<br />"; } $calcular= $_POST['calcular']; if( isset($calcular) and$_SERVER['REQUEST_METHOD'] == 'POST') { $peso= $_POST['peso']; $altura= $_POST['altura']; if(!empty($peso) and!empty($altura)) { //checamos si $peso y $estatura tomaron valor $html= resultado($peso, $altura, imc($peso, $altura)); } else{ $html= "<p class='centrado'>Faltan datos <br /></p>"; } echo"<p class='centrado'>".$html."</p>"; ?> <p class='centrado'> <a href='0308IMC.php'><img src='../../images/icon-home.gif'/><br />Home</a> </p> <? } else{ ?> <form name='forma'method='post'action='0308IMC.php'>

<fieldset> <legend>ndice de masa corporal</legend> <p> <label for='peso'>Peso</label> <input name='peso'type='text'alt='Peso en kilogramos'/> Kg </p> <p> <label for='altura'>Altura</label> <input name='altura'type='text'alt='Altura en metros'/> mts </p> <p> <input type='submit'name='calcular'value='Calcular'id='calcular'/> </p> </fieldset> </form> <? } ?> Ejemplo: A continuacin se desarrolla una calculadora bsica en PHP. Se recupera la informacin del archivo html mediante $_POST (lneas 5, 6 y 7) el valor recuperado se logra al invocar como parmetro el id del componente.

1 2 3 4 5 6 7 8 9

<?php $calcular= $_POST['calcular']; if( isset($calcular) && $_SERVER["REQUEST_METHOD"] == "POST") { $a= $_POST['a']; $operador= $_POST['operador']; $b= $_POST['b']; if( !empty($a) and!empty($b) ) { switch($operador) { case'+': $resultado= $a+ $b; break;

10 case'-': $resultado= $a- $b; break; 11 case'*': $resultado= $a* $b; break; 12 case'/': $resultado= $a/ $b; break; 13 case'%': $resultado= $a% $b; break; 14 } 15 echo"<p class='centrado'>$a $operador $b = ". $resultado."</p>"; 16 } else{ 17 echo"<p class='centrado'>Por favor no jugar</p>"; 18 } 19 } else{ 20 ?> 21 <form name='forma'method='post'action='0308Calculadora.php'> 22 <fieldset> 23 <legend>Calculadora bsica</legend>

24 <p> 25 <label for='a'>a</label> 26 <input name='a'type='text'/> 27 </p> 28 <p> 29 <label for='operador'>Operador</label> 30 <select name='operador'> 31 <option value='+'>+</option> 32 <option value='-'>-</option> 33 <option value='*'>*</option> 34 <option value='/'>/</option> 35 <option value='%'>%</option> 36 </select> 37 </p> 38 <p> 39 <label for='b'>a</label> 40 <input name='b'type='text'/> 41 </p> 42 <p class='centrado'> 43 <input name='calcular'type='submit'value='Calcular'/> 44 </p> 45 </fieldset> 46 <? 47 }

48 ?>

3.9. Sesiones

Una sesin es la secuencia de pginas que un usuario visita en un sitio web. Desde que entra en nuestro sitio, hasta que lo abandona.

Las sesiones bsicamente son varibles globales que nos permiten almacenar datos que necesiten volver a ser usados en otros accesos a la pgina . Cuando una persona entra a una pgina que utiliza sesiones automticamente se crea un archivo de session en los archivos temporales del servidor y en este archivo es donde se guardan los datos que nosotros necesitamos almacenar.

Este archivo posee el mismo nombre que su " id". El archivo se mantendra mientras tenga activo su navegador y se destruye al cerrar el navegador.

Para que una pgina use sesiones debemos inicializarla con la funcion session_start (), la cual crea una nueva sesin o retoma una creada en otra pgina (del sitio).

Las sessiones propagan su SID(SESSION ID) de dos posibles maneras, segn php.ini, por cookies o por url, es decir agregando a todos los posibles link el SID de la sesion.

Otra razn por la que la sesiones suelen ser muy utilizadas es para la autentificacin, determinando el acceso a la pgina segn alguna variable especfica de la sesin.

Funciones de gestin de sesiones

Funcin

Significado Si es la primera solicitud genera un identificador de sesin aleatorio cuyo nombre ser sess_IDsesin; si es otra solicitud continua la sesin iniciada anteriormente. Elimina todos los datos asociados con una sesin, borra el archivo en el servidor pero no borra la cookie. Borra una variable de sesin. Si no le proporcionamos ningn parmetro nos da el identificador de sesin; si le proporcionamos el parmetro nombre cambia el valor del identificador por el parmetro nombre. Si se invoca sin parmetro devuelve el nombre de la variable interna que tiene el id de sesiones; si se pasa parmetro cambia el nombre de la sesin. Obtiene los parmetros cookie de la sesin de la

session_start();

session_destroy();

session_unset();

session_id([nombre]);

session_name([nombre]);

session_get_cookie_params();

session_cache_limiter([cache_limiter]);

Si se le proporciona valor modifica el valor por defecto en cambio sino se muestra el cach que tiene por

Funcin

Significado defecto. Actualiza el id de sesin activa con uno ms reciente Codifica los datos de la sesin actual en una cadena Descodifica la cadena que recibe como parmetro y que contiene la informacin de sesin, despus de usar esta funcin se actualiza la informacin de sesin. Devuelve la ruta al directorio donde se guardan los archivos asociados a la sesin. El efecto solo dura en el script actual. Devuelve el nombre del mdulo que se usa para realizar la gestin de sesiones. Cuando se invoca un parmetro se usa como nuevo gestor de sesiones.

session_regenerate_id()

session_encode();

session_decode(cadena);

session_save_path([path]);

session_module_name([modulo]);

session_set_save_handler(open,close,read,write,destroy,gc); Permite definir su propio manejador para almacenar la informacin asociada con una sesin.De esta forma los datos pueden ser metidos en una base de datos en vez de en un archivo. Tenemos que pasarle como parmetro toda la informacin necesaria para crear y destruir sesiones. Iniciando con sesiones:

En la lnea 2 se inicia la sesin - session_star() -

Declaramos una variable llamada usuario (lnea 3) de tipo sesin. Header nos envia a la pgina especficada (lnea 4)

1 2 3 4 5

<?php @session_start(); $_SESSION['usuario'] = 'ProgramacionWEB'; header('location:0312InicioSesiona.php'); ?>

Evitando accesos indeseados

En la lnea 3 del segundo programa checamos que se recibi la variables esperada, para evitar accesos indeseados (lnea 6) Se elimina la variable de sesin (lnea 5).

<?php 1 @session_start(); 2 if($_SESSION['usuario'] == 'ProgramacionWEB') { 3 echo'Usuario: '.$_SESSION['usuario']; 4 unset($_SESSION['usuario']); 5 } elseecho'Te equivocaste'; 6 ?> Contador de visitas con sesiones

Mediante el siguiente ejemplo se implementa un contador de visitas

La lnea 2 captura el id de la sesin. Si la sesin no fue iniciada la genera (Lnea 3). Si la variable de sesin "visitas" existe la incrementa, caso contrario la crea y la inicia en 1 (lnea 4).

1 2 3 4 5 6

<?php $nombre_anterior= session_id(); if($nombre_anterior== '') session_start(); ($_SESSION['visitas']) ? >$_SESSION['visitas']++: $_SESSION['visitas'] = 1; ?>

Note que en realidad este cdigo cuenta el nmero de veces que recargamos la pgina durante la sesin

Control de sesiones y autentificacin

En esta seccin crearemos una forma de autentificacin que puede ser usada en mltiples situaciones. Crear una tabla mysql llamada usuarios e insertar un registro.

1 2

CREATE TABLE IF NOT EXISTS usuarios ( usuario CHAR(25) NOT NULL,

3 4 5 6

password CHAR(255) NOT NULL ) ENGINE = InnoDB DEFAULT CHARSET = latin1; INSERT INTO usuarios VALUES ('root','bingo');

Sesion.php

La lnea 2 inicia la sesin La lnea 3 checa si esta logeado el usuario. De ser as lo envia a la pgina 0312PaginaSegura.php, en caso contrario al enviar el login y el password ser enviado a la pgina 0312Login.php

1 2 3 4 5 6 7 8 9

<?php session_start(); // Iniciar sesin // Checa, si el usuario esta logeado if(isset($_SESSION['usuario'])) { header('Location: 0312SesionPaginaSegura.php'); } ?> <table border='0'> <form id='forma'name='forma'method='POST'

10 action='0312SesionLogin.php'> 11 <tr><td>Usuario</td><td>:</td><td><input name='usuario'

12 type='text'size='25'maxlength='25'></td></tr> 13 <tr><td>Password</td><td>:</td><td><input name='password' 14 type='password'size='25'maxlength='25'></td></tr> 15 <tr><td></td><td></td><td><input name='login' 16 type='submit'id='login'value='Accesar'></td></tr> </form> </table>

SesionPaginaSegura.php La lnea 2 inicia la sesin La lnea 5 checa que la variable de sesin usuario no exista de ser as lo envia a la pgina 0312Sesion.php -intento indebido de acceso a la pgina-. De existir borra la variable de sesin para evitar accesos posteriores y maneja el cdigo html

1 2 3 4 5 6 7

<?php session_start(); // Inicia sesin // Si la sesin de usuario no se establece, // esta pgina saltar a pgina de acceso if(!isset($_SESSION['usuario'])) { header('Location: 0312Sesion.php'); } elsesession_unset('usuario');

8 9

//Borra la variable de sesin ?>

10 <html> 11 <head> 12 <title>Pgina segura</title> 13 </head> 14 <body> 15 <p>Esta es una pgina segura con sesiones: <b> 16 <?php echo$_SESSION['usuario']; ?></b> 17 <br>Usted puede poner su informacin restringida aqu.</p> 18 <p><a href='0312SesionLogout.php'>Desconectarse</a></p> 19 </body> 20 </html> 21 22

0312SesionLogout.php

Esta pgina destruye las variables de sesin, la misma sesin y nos reenvia automticamente a la pgina 0312Sesion.php.

1 2 3

<?php session_start(); session_unset();

4 5 6

session_destroy(); header('Location: 0312Sesion.php'); ?>

3.10 Conectividad entre el servidor Web y el servidor de base de datos.

PHP puede conectarse con bases de datos de dos formas: mediante el uso directo de funciones propias del intrprete que dependen del gestor de base de datos usadas o a trves del estndar ODBC (Open Data Base Connectivity).

En PHP el trabajo con la base de datos se basa en tres etapas fundamentales:

1. Establecer contacto con la base de datos 2. Realizar las operaciones necesarias 3. Cerrar los recursos empleados

Conectar con una base de datos MySQL - PHP

Para conectarse con una base de datos es necesario crear una conexin con el servidor. Esto se logra en PHP mediante el uso de la funcin mysql_connect() . Sintaxis

mysql_connect($ruta, $usuario, $password);

Parmetro

Descripcin Opcional. Especfica el servidor al cual se conecta. El valor por defecto es "localhost:3306". Opcional. Identifica el usuario. El valor por defecto es el nombre de usuario propietario del proceso. Opcional. El valor por defecto es "". No recomendado

$ruta

$usuario

$password

ruta invariablemente en un servidor de paga o remoto sera LOCALHOST

Ejemplo de conexin de una base de datos MySQL desde PHP Lnea 6 mediante la funcin mysql_connect nos conectamos al gestor MySQL La funcin mysql_error, devuelve el texto del mensaje de error de la ltima operacin MySQL Mediante la funcin mysql_select_db seleccionamos la base datos (Lnea 8) mysql_close cierra la conexin a la base de datos (Lnea 10).

1 2

<?php $ruta= "localhost";

3 4 5 6 7 8 9

$login= "mi_login"; $password= "mi_password"; $db= "miBaseDatos"; $conexion= mysql_connect( $ruta, $login, $password) ordie(mysql_error()); mysql_select_db( $db, $conexion) ordie(mysql_error()); echo"conectado bravo!!!!!!";

10 mysql_close($conexion); 11 ?>

Crear una base de datos en MySQL - PHP

La sentencia CREATE DATABASE es usada para crear una base de datos en MySQL. Su sintaxis es la siguiente:

CREATE DATABASE nombre

Para generar esta sentencia desde PHP usaremos las siguientes funciones:

La funcin mysql_connect() nos conecta al servidor mysql con los parmetros ruta, login y password. $ruta indica el sitio donde estaran nuestros datos. La ruta localhost funciona regularmente cuando nos conectamos a un servidor instalado en nuestra pc o aun servidor de paga. La funcion mysql_query ejecuta una sentencia SQL. La funcin mysql_close() nos lleva los datos de la memoria principal a un almacenamiento secundario.

die muestra el mensaje de error indicado por pantalla y finaliza el script actual en el punto en el que se encuentre. No devuelve valor alguno.

Ejemplo de creacin de una base de datos MySQL desde PHP mysql_connect (lnea 3) hace una conexin a la base de datos mysql_query (lnea 8) hace una consulta en este caso crea la base de datos. mysql_close (lnea 13) cierra la conexin a la base de datos. 1 2 3 4 5 6 7 8 9 <?php include('ruta.php'); $conexion = mysql_connect($ruta,$usuario, $password); if(!$conexion) { die('Imposible conexin al servidor: '. mysql_error()); } $sentencia = 'CREATE DATABASE IF NOT EXISTS prograwe_miBD'; if (mysql_query($sentencia, $conexion)) { echo 'Base de datos creada';

10 } else { 11 echo 'Error al crear la base de datos: '.mysql_error(); 12 } 13 mysql_close($conexion); 14 ?>

Crear una tabla en MySQL - PHP

El componente principal de una base de datos son las tablas, MySQL tiene varios tipos de tablas, nosotros usaremos en este sitio las InnoDB, por razones de integridad referencial y concurrencia.

Ejemplo: El Campeonato Mundial de Pilotos es otorgado por la Federacin Internacional de Automovilismo al piloto de Frmula 1 ms exitoso de la temporada, determinado por el sistema de puntuacin en relacin con los resultados de los Grandes Premios. El primer Campeonato Mundial de Pilotos fue otorgado en la temporada 1950 a Giuseppe Farina. Considere la siguiente tabla de datos correspondientes a los campeones de Formula 1 (2000 - 2011) y sus escuderias.

Ao 2011 2010 2009 2008 2007 2006 2005

Campen Sebastian Vettel Sebastian Vettel Jenson Button Lewis Hamilton Kimi Raikkonen Fernando Alonso Fernando Alonso

Escudera Red Bull Racing Red Bull Racing Brawn GP McLaren Ferrari Renault Renault

Ao 2004 2003 2002 2001 2000

Campen Michael Schumacher Michael Schumacher Michael Schumacher Michael Schumacher Michael Schumacher

Escudera Ferrari Ferrari Ferrari Ferrari Ferrari

A continuacin se presenta el cdigo MySQL necesario para crear una tabla

CREATE TABLE f1 ( yearINT, campeonCHAR( 35 ) NOT NULL, escuderiaCHAR( 35 ) NOT NULL, PRIMARY KEY( year ) ) ENGINE = InnoDB;

A continuacin se presenta el correspondiente cdigo PHP

En la lnea 9 se crea una conexin a la base datos mediante la funcin mysql_connect. La funcin mysql_select_db nos permite seleccionar la base de datos (lnea 10).

mysql_query nos permite ejecutar un query a la base de datos (lnea 12). Mediante la funcin mysql_close cerramos la conexin a la base de datos.

1 <?php 2 $query= "CREATE TABLE IF NOT EXISTS f1 ("; 3 $query.= "year INT NOT NULL , "; 4 $query.= "campeon CHAR( 35 ) NOT NULL,"; 5 $query.= " escuderia CHAR( 35 ) NOT NULL , "; 6 $query.= "PRIMARY KEY ( year ) ) "; 7 $query.= "ENGINE = InnoDB;"; 8 include('ruta.php'); 9 $conexion= mysql_connect($ruta,$login,$password) ordie(mysql_error()); 10 mysql_select_db( $db, $conexion) ordie(mysql_error()); 11 if(mysql_query($query, $conexion)){ 12 echo"Tabla creada con xito <br />"; 13 } elsedie(mysql_error()); 14 mysql_close($conexion); 15 ?> 16

Ejemplo: Los XVI Juegos Panamericanos se llevaron a cabo del 14 al 30 de octubre de 2011, en la ciudad de Guadalajara, Mxico. sta es la tercera vez que nuestro pas organiza unos juegos panamericanos y la primera vez que se organizan fuera de la Ciudad de Mxico. En esta actividad crearemos una tabla que contendr el medallero de esta competencia.

1 2 3 4 5 6 7 8 9

<?php include('ruta.php'); $query= 'CREATE TABLE IF NOT EXISTS panamericanos ('; $query.= 'pais CHAR(35)NOT NULL,'; $query.= ' oro INT DEFAULT 0,'; $query.= ' plata INT DEFAULT 0,'; $query.= ' bronce INT DEFAULT 0,'; $query.= ' total INT DEFAULT 0,'; $query.= ' PRIMARY KEY ( PAIS ) ) ENGINE = InnoDB;';

10 $conexion= mysql_connect( $ruta, $login, $password) ordie(>mysql_error()); 11 mysql_select_db( $db, $conexion) ordie(>mysql_error()); 12 mysql_query($query, $conexion) ordie(>mysql_error()); 13 mysql_close($conexion); 14 ?>

Insertar registros en una tabla. La sentencia INSERT INTO es usada para agregar registros en una tabla de base de datos.

La sentencia tiene dos sintaxis genericas validas

La primera se usa si insertaremos valores en todas las columnas que componen la tabla

INSERT INTO nombre_tabla VALUES (valor1, valor2, valor3,...)

La segunda se usa cuando solo ingresaremos datos en algunas columnas

INSERT INTO nombre_tabla (columna1, columna2, columna3,...) VALUES (valor1, valor2, valor3,...)

Ejemplo: Insercin de registros en MySQL con PHP usaremos el caso de Formula 1

1 2 3 4 5 6 7

<?php include("ruta.php"); $conexion= mysql_connect( $ruta, $login, $password) ordie(mysql_error()); mysql_select_db( $db, $conexion) ordie(mysql_error()); mysql_query("INSERT INTO f1 VALUES (2011,'Sebastian Vettel','Red Bull Racing')", $conexion) ordie(mysql_error());

8 9 mysql_query("INSERT INTO f1 VALUES (2010,'Sebastian Vettel','Red Bull Racing')",

10 $conexion) ordie(mysql_error()); 11 mysql_query("INSERT INTO f1 VALUES (2009,'Jenson Button Brawn','GP')",

12 $conexion) ordie(mysql_error()); 13 mysql_query("INSERT INTO f1 VALUES (2008,'Lewis Hamilton','McLaren')", 14 $conexion) ordie(mysql_error()); 15 echo"Operacin exitosa"; 16 mysql_close($conexion); ?>

Insertar registros en una tabla desde una forma

La funcin isset checa si una variable fue declarada $_SERVER['REQUEST_METHOD'] permite determinar de donde proviene la llamada.

1 2 3 4 5 6

<?php if( isset($_POST['aceptar']) 'POST') { $year= $_POST['year']; $campeon= $_POST['campeon']; $escuderia= $_POST['escuderia']; if(!(isset($year) && !empty($year) && $_SERVER['REQUEST_METHOD'] ==

7 8 9

&& isset($campeon) && !empty($campeon) && isset($escuderia) && !empty($escuderia) )

10 ) { 11 echo"Todos los campos son necesarios"; 12 } else{ 13 $n= date('Y'); // Obtiene el ao actual 14 if($year>= 1950 and$year<= $n) { //F1 inicio en 1950 15 include('ruta.php'); 16 $conexion= mysql_connect( $ruta, $login, $password) ordie(mysql_error()); 17 mysql_select_db( $db, $conexion) ordie(mysql_error()); 18 $query= "SELECT * FROM f1 WHERE year = $year"; 19 $registros= mysql_query($query, $conexion) ordie(mysql_error()); 20 $n= mysql_num_rows($registros); 21 if($n== 0) {//Checamos que no exista informacin para ese ao 22 $query= "INSERT INTO f1 VALUES ($year, "; 23 $query.= "'$campeon','$escuderia')"; 24 $resultado= mysql_query($query, $conexion); 25 if(!$resultado) { 26 echo'Ocurrio un error al insertar'. mysql_error(); 27 } elseecho'Operacin realizada con xito'; 28 } elseecho'Ya existe informacin para ese ao'; //Un solo campen por ao 29 mysql_close($conexion); 30 } elseecho'Ao fuera de rango';

31 } 32 } 33 ?>

Mostrar el contenido de una tabla

La sentencia SELECT nos permite recuperar los registros de una tabla. La sintaxis bsica es:

SELECT * FROM nombre_tabla WHERE condicin

Si requiere conocer ms sobre esta sentencia visite nuestro sitio

En caso de una consulta usaremos bsicamente las siguientes funciones

mysql_query() ejecuta una sentencia valida sobre la base de datos. Para el caso de un SELECT regresa 0 o ms registros. mysql_num_rows() regresa el nmero de registros otorgados por mysql_query(). mysql_fetch_assoc regresa un conjunto de registros obtenidos por mysql_query().

Ejemplo: Muestra los campeones de Formula 1 desde 1950 hasta el 2010.

<?php 1 include("ruta.php"); 2 $conexion= mysql_connect( $ruta, $login, $password) 3 ordie(mysql_error()); 4 mysql_select_db( $db, $conexion) ordie(mysql_error()); 5 $query= "SELECT * FROM f1 ORDER BY year DESC"; 6 $registros= mysql_query($query, $conexion) ordie(mysql_error()); 7 $n= mysql_num_rows($registros); 8 mysql_close($conexion); 9 if($n> 0) { // si hay registros 10 $html= '<center><h2>Campeones de Formula 1</h2></center>'; 11 $html.= '<table>'; 12 $html.= '<thead><tr><th>Ao</th><th>Campen</th>'; 13 $html.= '<th>Escudera</th></tr></thead>'; 14 while($registro= mysql_fetch_assoc($registros)) { 15 $html.= '<tr>'; 16 $html.= '<td>'. $registro['year'].'</td>'; 17 $html.= '<td>'. $registro['campeon'].'</td>'; 18 $html.= '<td>'. $registro['escuderia'].'</td></tr>'; 19 } $html.= '</table>'; 20 echo$html; 21 } ?>

Modificar datos desde un formulario

La sentencia UPDATE permite modificar uno o ms registros de una tabla. La sintaxis es:

UPDATE nombre_tabla SET columna1 = valor1, columna2=valor2,... WHERE alguna_columna = algun_valor

Con las funciones PHP ya conocidas anteriormente es relativamente sencillo modificar registros desde una forma.

La variable $checaRadio contiene la definicin de un Radio Group dinmico y guardara la llave con la cual reconoceremos el registro a modificar

Ejemplo para modificar registros MySQL mediante formularios con PHP

Modificar Formulario Imprime Tabla Imprime Formulario

<?php function update_registro($ruta, $login, $password, $db, $year, $campeon, $escuderia) { $conexion =mysql_connect( $ruta, $login, $password) ordie(mysql_error()); mysql_select_db( $db, $conexion ) ordie(mysql_error());

$query = "UPDATE f1 SET year = $year, campeon = '$campeon', "; $query .= "escuderia = '$escuderia' WHERE year = $year"; $registros = mysql_query($query, $conexion) ordie(mysql_error()); mysql_close($conexion); } // END update_registro

include("ruta.inc"); if(!isset($modificar) && !isset($aceptar)) { imprime_tabla($ruta, $login, $password, $db); } else if (isset($modificar)) { unset($modificar); $year = $_POST['rg']; $conexion =mysql_connect( $ruta, $login, $password) ordie(mysql_error());

mysql_select_db( $db, $conexion ) ordie(mysql_error()); $query = "SELECT * FROM f1 WHERE year =$year";

$registros = mysql_query($query, $conexion) ordie(mysql_error()); imprime_forma($registros, $conexion); } else if ($aceptar) { unset($aceptar); $year = $_POST['year'];

$campeon = $_POST['campeon']; $escuderia = $_POST['escuderia']; update_registro($ruta, $login, $password, $db, $year, $campeon, $escuderia);

imprime_tabla($ruta, $login, $password, $db); } else if ($cancelar) { header http://www.prograweb.com.mx/pweb/ejecutables/codigo50.php"); } ?> Eliminar datos desde una forma ("Location:

La sentencia DELETE FROM es usada para borrar registros de una tabla en una base de datos.

Sintaxis DELETE FROM WHERE alguna_columna = algun_valor; nombre_tabla

La clausula WHERE especfica que registros sern eliminados. Si se omite la clausula WHERE, todos los registros de la tablas sern eliminados! Para aprender ms sobre SQL, visite la pgina de base de datos de este sitio.

Para ejecutar esta sentencia usaremos la funcin mysql_query(). Esta funcin es usada para enviar una consulta o comando MySQL al servidor de base de datos.

El siguiente ejemplo permite borrar registros de una tabla mediante un formulario.

$borrar[] es un vector de tipo checkbox. implode une los elementos de un vector en una cadena. Para el ejemplo une los identidicadores de los registros a eliminar mediante una coma.

La lnea $consulta = mysql_query($query, $conexion) die(mysql_error()); esta comentada por razones obvias. Borrar registros Imprime Tabla

or

<?php include("ruta.inc"); if(isset($_POST['eliminar']) &&$_SERVER["REQUEST_METHOD"] == "POST") {

unset($_POST['eliminar']); // Obtener las llaves de registros a borrar $borrar = $_POST['borrar']; $n = count($borrar);

if($n == 0) { print ("<p>No elegiste registros para eliminar</p>"); print ("<p>[ <a href='0311borrarF1.php'>Eliminar ms Registros</a> ]</p>"); } else { $registros = implode(',', $borrar); $query = "DELETE FROM f1 WHERE year IN (".$registros.")"; unset($borrar); // Conectar con el servidor y la basede datos $conexion =mysql_connect( $ruta, $login, $password) ordie(mysql_error()); mysql_select_db( $db, $conexion ) ordie(mysql_error()); mysql_query($query, $conexion) ordie(mysql_error()); mysql_close($conexion); //Cerrar conexin

imprime_tabla(); } } else { if(!isset($nuevo)) { iniciar(); $nuevo = 1; } imprime_tabla(); } ?>

3.11 Manejo de archivos

Hasta el momento almacenamos datos en constantes, variables y arreglos este almacenamiento es temporal y se pierde cuando termina la ejecucin del programa. La solucin computacional es almacenar dichos datos en una fuente de almacenamiento secundario como por ejemplo un disco duro o pendrive entre otros medios a fin de que persistan aun despus de la ejecucin del programa que los crea y puedan ser usados inclusive por otros programas.

Para lograr esto los datos se almacenan en un recipiente llamado archivo, el procesamiento de archivos es una herramienta invaluable de programacin. Existen diversos tipos de archivos y su descripcin escapa del alcance de este curso. Los archivos que PHP pueden ser secuenciales y binarios. Los archivos secuenciales son archivos de texto y los binarios pueden almacenar grficos y diversos formatos de informacin. Bsicamente responden a las siguientes operaciones bsicas:

Abrir, borrar, cerrar, copiar, escribir, leer, renombrar. Desde las operaciones bsicas como copiar, mover y eliminar, hasta operaciones que exigen una cierta complejidad son requeridas para la configuracin de pginas Web.

Funcin Descripcin copy Copia un archivo Cambia el nombre del archivo de $antes a $despues Borra el archivo

Sintaxis copy($origen, $destino) rename($antes, $despues) unlink($archivo)

rename

unlink

Manejo de imgenes

A continuacin se presentan dos ejemplos, para mostrar la totalidad de las imagenes de una carpeta.

Ejemplo:

La funcin PHP opendir() se encarga de habilitar una ruta a un subdirectorio. La funcinreaddir () se encarga de leer un archivo o subdirectorio. strlower() convierte el contenido de una cadena a minscula. substr() extrae una subcadena de una cadena, en este caso por ser el parmetro negativo extrae los ltimos cuatro carcteres (lnea 10). El objetivo es extraer la extensin del archivo. closedir() cierra la ruta al subdirectorio.

<?php if ($gestor = opendir('../imagenes')) { // Abre un gestor de directorios echo "<table border=1 align='center'>"; echo "<tr>"; $i=0; while (false !==($archivo = readdir($gestor))) { //readdir: Lee un elemento del directorio //$gestor abierto previamente //con opendir y desplaza el puntero al elemento siguiente if ($archivo != "." and $archivo != "..") { //checa que no sea subdirectorio $extension = strtolower(substr($archivo, -4)); //strlower pasa a minuscula una cadena en este caso //los 4 ltimos caracteres //de la cadena if (($extension == '.jpg') or ($extension == '.gif') or ($extension == '.png')) { if ($i==4) {// Cuatro imagenes por rengln $i=0; echo "</tr>"; echo "<tr>"; } $i++; echo "<td>";

echo "<a href='../imagenes/$archivo'>"; echo "<img src='../imagenes/$archivo'"; echo "border='0' ></a>"; echo "</td>"; } } } echo "</tr>"; echo "</table>"; closedir($gestor); //Cierra el gestor } ?>

Ejemplo:

La funcin glob () realiza una bsqueda por todos los nombres de ruta que coincidan con cierto patrn. En este caso con los grficos validos para html. sort() ordena los nombres de los archivos encontrados. El ciclo foreach recorre el arreglo de archivos. <?php echo "<table border=1 align='center'>"; echo "<tr>"; $i = 0; //carga las imagenes de la carperta //La funcin glob() realiza una bsqueda por todos los nombres

//de ruta que coincidan con patrn $ruta = "../imagenes/"; $imagenes = glob($ruta . "{*.jpg, *.gif, *.png}", GLOB_BRACE); sort($imagenes); //Recorre el vector foreach($imagenes as $foto){ if ($i==4) { $i=0; echo "</tr>"; echo "<tr>"; } $i++; echo "<td><a href='".$foto."'><img src='".$foto."/></a></td>"; } echo "</tr>"; echo "</table>"; ?>

Para el siguiente ejemplo usaremos 4 funciones bsicas de manipulacin de archivos

Funcin filesize

Descripcin Obtiene el tamao del archivo

Sintaxis filesize($archivo);

Funcin

Descripcin

Sintaxis $id fopen($archivo, $modo); =

fopen

Abre un archivo y le asigna un identificador id.

fpassthru

Lee completamente el archivo y lo muestra. El cierre del archivo es automtico al terminar el volcado del archivo. Permite modificar las cabeceras que enva el servidor al navegador. Estas cabeceras, que siguen el protocolo HTTP, es la primera informacin que recibe el navegador en cada peticin que realiza, antes que el contenido del archivo.

fpassthru($id);

header

header("mensaje");

Ejemplo: Mostrar una imagen

Fopen adems de abrir un archivo, obtiene un apuntador a su contenido. fopen solo debe usarse para abrir un archivo cuyo contenido vamos a manipular. Si unicamente queremos recuperar su contenido (y por ejemplo mostrarlo en pantalla), hay otras funciones mas adecuadas. Los modos en los que se puede abrir un archivo son:

r Slo lectura. El puntero al comienzo del archivo r+ Lectura y escritura; apuntador al inicio del archivo w Slo escritura, si no existe el archivo lo crea, si existe lo convierte en archivo de longitud cero y el apuntador se coloca en el inicio (sobreescribe el contenido, vamos) w+ Lectura y escritura, si existe lo trunca a tamao cero, y se situa al inicio, si no existe lo crea

a Modo append, slo escritura, si no existe lo crea. Si existe, el apuntador se coloca al final del archivo (listo para escribir a continuacion del contenido) a+ Modo append, lectura y escritura, si no existe lo crea; apuntador al final del archivo b es un flag adicional a cualquiera de los anteriores que indica que vamos a operar sobre un archivo binario (en contraposicion a archivo de texto) como una imagen o un sonido. En algunos sistemas operativos como linux no existe esta diferencia asi que el indicador b ser ignorado.

Las lneas 7 y 8 envan cabeceras HTTP para indicar el tamao y formato del archivo.

fpassthru (lnea 11) hace un volcado del archivo previamente definido en la lnea 4.

<?php // Abree el archivo en modo binario $imagen = '../imagenes/Shakira02.png'; $id = fopen($imagen, 'rb');

// Envia las cabeceras header('Content-Type: image/png'); header('Content-Length: ' . filesize($imagen));

// imprime el archivo y detiene el script fpassthru($id); exit;

?> Una versin reducida de este cdigo lo podemos encontrar en:

La funcin file_get_contents (lnea 4) permite leer el contenido de un archivo en una cadena.

<? header( 'Content-type: image/png'); $archivo = '../imagenes/Shakira02.png'; $imagen = file_get_contents($archivo); echo $imagen; ?>

Leer un archivo de texto

En la lnea 2 se genera un apuntador al archivo alumnos.txt La funcin feof (lnea 4) comprueba si se encuentra el fin del archivo. La funcin fgets lee el contenido de un archivo hasta encontrar el fin de lnea (lnea 4). fclose (lnea 5) cierra el apuntador. <?php $archivo = fopen('0310alumnos.txt', 'r'); //Imprime una linea hasta que el //final del archivo es encontrado while(!feof($archivo)) { echo fgets($archivo)."<br />";

} fclose($archivo); ?>

Otra forma de hacerlo es mediante la funcin fread (lnea 6) la cual lee el contenido de un archivo.

<?php // obtiene el contenido de un archivo en //una cadena $archivo = '0310alumnos.txt'; $id = fopen($archivo, 'r'); $contenido = fread($id, filesize($archivo)); echo $contenido; fclose($id); ?>

Contador de visitas file_exists comprueba si un archivo existe (lnea 2) La lnea 9 y 12 crean un puntero al archivo. La lnea 13 recupera el nmero de visitantes. La lnea 14 incrementa en uno el nmero de visitantes o reinicia la cuenta si el archivo no tiene el dato. fputs guarda la informacin en el archivo.

Las lneas 21 al 21 imprimen el nmero de visitantes mediante imagenes de los dgitos. fclose (lnea 25) cierra el apuntador ysalva el contenido del archivo. <?php /******************************************************** * Contador de visitas programado en PHP *************** * Modificado Jose Evaristo Pacheco Velasco ******* * Mas utilidaddes para webmsters en www.desenredate.com ********************************************************/ $destino = '0310visitante.dat'; if (!file_exists($destino)) { // si el archivo no existe lo crea $abrir = fopen($destino, 'w'); $cuenta = ''; } else { $abrir = fopen($destino,'r'); $cuenta = trim(fread($abrir,filesize($destino))); } if ($cuenta != '') $cuenta++; else $cuenta = 1; fclose($abrir); $abrir = fopen($destino,'w'); fputs($abrir, $cuenta); echo "<p align='center'>Eres el visitante:</p>"; // Imprime contador for($i = 0; $i <strlen($cuenta); $i++) { $imagen = substr($cuenta, $i, 1);

$contador .= "<img alt='$imagen ' src='$imagen.gif'>"; } fclose($abrir); echo "<p align='center'> $contador </p>"; ?>

3.12. Seguridad

La seguridad y funcionamiento sin duda uno de los temas ms importantes al desarrollar un portal web. La validacin de datos, es por tanto fundamental.

El no cuidarnos de esto, puede traernos problemas de inyeccin SQL, CrossScripting, Cookie Poisoning, amenazas de seguridad en la nube (Cloud Computing) y un largo etc, etc, que compromete la estabilidad del sitio y el recurso ms valioso de nuestro sitio "la informacin". El filtrado de datos es una de las piedras angulares en cualquier aplicacin en el tema de seguridad, independientemente del lenguaje con el cual se desarrolle.

Filtrado de datos

Una de las mayores fortalezas de PHP es su facilidad de uso. Lamentablemente, este mismo beneficio se usa en contra de PHP, programadores con poca experiencia olvidan usar medidas de seguridad o carecen de los conocimientos para generar una clase que valide los datos introducidos por los usuarios finales.

Se han desarrollado diversas clases de validacin, algunas mejores que otros, con igual o mayor nmero de mtodos para hacer la misma tarea estas no estan estandarizadas. PHP versin 5 proporciona la extensin Filtercuyo objetivo es realizar esta tarea en forma sencilla, robusta y la estandarizacin de la entrada de datos del usuario. Las funciones base se presentan a continuacin.

Funcin filter_has_var filter_list

Descripcin Verifica si la variable del tipo especificado existe Devuelve una lista de todos los filtros soportados Filtra una variable con un filtro especfico. Devuelve los datos filtrados, o FALSE si el filtro falla. Obtiene una variable desde afuera de PHP y opcionalmente la filtra

filter_var

filter_input

Ejemplo de filter_has_var La sintaxis es: filter_has_var(tipo, variable)

Parmetro Descripcin Requerido. especfica el tipo que deseamos checar. Los posibles tipos son: INPUT_GET tipo INPUT_POST INPUT_COOKIE INPUT_SERVER INPUT_ENV variable Requerida. Especfica la variable que deseamos checar

El objetivo del ejemplo es tratar de frenar invasiones a la seguridad asegurandonos que no introduzcan datos mediante la URL. Este mtodo no es infalible contra la inyeccin de cdigo SQL, pero es una aproximacin..

<?php if(!filter_has_var(INPUT_POST, 'login') or !filter_has_var(INPUT_POST, 'key')) { echo('Sin Peligro'); } elsedie('Por aqu no entras'); ?>

Mediante la funcin filter_list es posible recuperar la lista de filtros soportados por nuestro servidor y con filter_id recuperados el inditificador del filtro.

Ejemplo del uso de filter_list y filter_id. La lnea 5 recorre el vector filter_list. La lnea 6 imprime el nombre del filtro extraido en la lnea 5. la lnea 7 imprime el id del filtro <body> <table> <tr><td>Nombre del Filtro</td><td>ID</td></tr>

<?php foreach(filter_list() as $id =>$filter) { echo "<tr><td>".$filter.'</td><td>';

echofilter_id($filter).'</td></tr>'."\n"; } ?> </table> </body> Ejemplo de filter_var y filter_input

<?php if (filter_has_var(INPUT_POST, 'enviar')) { $colega = filter_input(INPUT_POST, 'colega', FILTER_SANITIZE_STRING); if ($colega ===falseorempty($colega) ortrim($colega) == "" ) { echo "El nombre es un campo requerido! <br />"; } else echo "Hola $colega <br />";

$options = array('options'=> array('min_range'=>40, 'max_range'=>150)); $peso = filter_input(INPUT_POST, 'peso', FILTER_VALIDATE_INT, $options); if ($peso === false) { echo "Escriba un peso vlido entre 40 y 150 kg.<br />"; } else { echo "$peso kg es un peso vlido.<br/>";} $estatura = $_POST['estatura']; if (!filter_var($estatura, FILTER_VALIDATE_FLOAT)) {

echo "$estatura no es una variable flotante <br />"; } else echo "$estatura es una dato flotante vlido<br />"; $url = $_POST['url']; if (filter_var($url, FILTER_VALIDATE_URL)) { echo "La url $url es vlida <br />"; } else echo "La url $url no es vlida! <br />"; $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL); if ($email ===false) { echo "El email es un campo requerido! <br />"; } else echo "$email es una direccin de correo vlida<br />"; $ip = filter_input(INPUT_POST, 'ip', FILTER_VALIDATE_IP); if($ip ===false) { echo "No es una IP vlida <br />"; } else echo "$ip es una IP vlida <br />"; } else echo "Por aqui no puedes entrar <br />"; ?>

UNIDAD IV Procesamiento del lado del Cliente 4.1 Lenguaje Script del Cliente JavaScript es un lenguaje de programacin usado principalmente para crear pginas web dinmicas. Una pgina web dinmica es aquella que incorpora efectos como texto que aparece y desaparece, animaciones, acciones activadas al pulsar botones y ventanas con mensajes de aviso al usuario. Tcnicamente, JavaScript es un lenguaje de programacin interpretado, y no es necesario compilar los programas para ejecutarlos. En otras palabras, los programas escritos con JavaScript se pueden probar directamente en cualquier navegador sin necesidad de procesos intermedios. A pesar de su nombre, JavaScript no guarda ninguna relacin directa con el lenguaje de programacin Java. Legalmente, JavaScript es una marca registrada de la empresa Sun Microsystems. Su nombre es exclusivamente por marketing, ya que Java era la palabra de moda en el mundo informtico y de Internet de la poca de desarrollo. Cmo incluir JavaScript en documentos XHTML La integracin de JavaScript y XHTML es muy flexible, ya que existen al menos tres formas para incluir cdigo JavaScript en las pginas web en esta seccin solo se presentaran dos de ellas. Incluir JavaScript en el mismo documento XHTML El cdigo JavaScript se encierra entre etiquetas y se incluye en cualquier parte del documento. Aunque es correcto incluir cualquier bloque de cdigo en cualquier zona de la pgina, se recomienda definir el cdigo JavaScript dentro de la cabecera del documento (dentro de las etiquetas): Para que la pgina XHTML resultante sea vlida, es necesario aadir el atributo type a la etiqueta. Colocadas entre las etiquetas. Se pueden crear todos los archivos JavaScript (*.js) que sean necesarios y cada documento XHTML puede enlazar tantos archivos JavaScript como necesite. Adems del atributo type, este mtodo requiere definir el atributo src, que es el que indica la URL correspondiente al archivo JavaScript que se quiere enlazar.

Potrebbero piacerti anche