You are on page 1of 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 histórica de internet. Es la red de redes. Sistema mundial de redes de computadoras interconectadas. Fue concebida a fines de la década de 1960 por el Departamento de Defensa de los Estados Unidos; más precisamente, por la ARPA. Se la llamó primero ARPANET y fue pensada para cumplir funciones de investigación. Su uso se popularizó a partir de la creación de la World Wide Web. Actualmente es un espacio público utilizado por millones de personas en todo el mundo como herramienta de comunicación e información. Historia de Internet 1957 La Unión Soviética lanza el Sputnik, el primer satélite artificial. En respuesta a este hecho, Estados Unidos crea el ARPA (Organismo de Proyectos de Investigación Avanzada) dentro del Ministerio de Defensa a fin de establecer su liderazgo en el área de la ciencia y la tecnología 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 conmutación por paquetes) por medio de una línea telefónica dedicada de 1200 bps; más 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 descripción 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 máquina a máquina (por ejemplo, el orden en el cual deben enviarse bits y bytes a través de un cable) o intercambios de alto nivel entre programas (por ejemplo, la forma en que dos programas transfieren un fichero a través de la Internet)." El HTTP es un protocolo genérico orientado a objetos que no mantiene la conexión entre transacciones. Ha sido especialmente diseñado para atender las exigencias de un sistema hipermedia distribuido como es el World-Wide Web. Sus características principales son:

Ligereza: reduce la comunicación entre clientes y servidores a intercambios discretos, de modo que no sobrecarga la red y permite saltos hipertextuales rápidos. Generalidad: puede utilizarse para transferir cualquier tipo de datos, según el estándar MIME. Esto incluye también los que desarrollen en el futuro, ya que el cliente y el servidor pueden negociar en cualquier momento el modo de representación de los datos: el cliente notifica al servidor una lista de formatos que entiende, y en adelante el servidor sólo 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 transacción entre clientes y servidores ("métodos", en la jerga HTTP), y la futura implementación de otros nuevos. Esto abre posibilidades más allá de la simple recuperación de objetos de la red: búsquedas, anotaciones, etc. El esquema básico de cualquier transacción HTTP entre un cliente y un servidor es el siguiente: Conexión: El cliente establece una conexión con el servidor a través del puerto 80 (puerto estándar), u otro especificado. Petición: El cliente envía una petición al servidor. Respuesta: El servidor envía al cliente la respuesta (esto es, el objeto demandado o un código de error). Cierre: Ambas partes cierran la conexión. El protocolo HTTP es el que da vida a Internet, y gracias al cual, los clientes y servidores se pueden comunicar. Sus criterios de diseño han sido: Simplicidad: no se debe abandonar el criterio introducido en HTTP 1.0, que las cosas habituales sean sencillas, de forma que sea fácil implementar el protocolo. Rendimiento: debe comunicaciones. ser eficiente trasmitiendo objetos en redes de

Asíncrono: las peticiones desde los clientes han de poderse hacer en paralelo a través de una única conexión.

una animación. etc. un sonido. El diseño del World-Wide Web sigue el modelo cliente-servidor: un paradigma de división del trabajo informático en el que las tareas se reparten entre un número de clientes que efectúan peticiones de servicios de acuerdo con un protocolo. Información de registro: la información de registro (logs) ha de poder ser enviada entre diferentes servidores. de un nodo o lexía de origen a uno de destino. Visualización obligatoria: se debe poder obligar al cliente a mostrar ciertos datos acerca del objeto que se transmite. Autenticación: se debe poder autenticar a las dos partes de la conexión. esto es. una imagen. sin forzar ninguna política de seguridad en particular. como el autor del objeto. indicar origen y destino de saltos hipertextuales. b) Inventar un lenguaje para representar hipertextos que incluyera información sobre la estructura y el formato de representación y. Es decir.Seguridad: los objetos que se transmiten deben estar encriptados. Pagos en línea: el protocolo debe soportar la realización de pagos en línea. espejos de datos e intermediarios de comunicación (proxys). Servidores intermediarios: se debe soportar la comunicación entre servidores. nuestras estaciones de trabajo son clientes que demandan hipertextos a los servidores. que podría ser un texto o parte de un texto. En el Web. fragmento de vídeo. Este protocolo se denomina HTTP (HyperText Transfer Protocol) y es el "lenguaje" que "hablan" los servidores del WWW. Este lenguaje es el HTML o (HyperTextex markup Language). así como a cualquier intermediario. al ser el protocolo más utilizado en Internet. Requerimientos de red: el protocolo debe trabajar de forma independiente de la capa de transporte de la que disponga.1 Arquitectura de www.2. y un número de servidores que las atienden (Malkin. . el copyright y la licencia. aunque debe funcionar especialmente bien con TCP. cualquier tipo de información en formato electrónico. 1993). especialmente. Para poner en marcha un sistema como como éste ha sido necesario: a) Diseñar e implementar un nuevo protocolo que permitiera realizar saltos hipertextuales. para el mantenimiento de cachés. 1.

Y a su vez si vemos esta URL sin entrar a la página nos será imposible saber de qué trata. etc. pasándole a este las variables sección e id noticia con los valores "noticias" y 133 respectivamente. fragmentos de vídeo. La URL anterior podría quedar de esta forma si la semantizamos: . entre los que destaca la familia Mosaic.). y su sucesor Netscape Navegador. Dada la variedad de protocolos. A este fin se han desarrollado diversos clientes. formas de almacenamiento y recuperación de la información. entendibles para el usuario. 1. en uso en la Internet. Por ello se están utilizando mucho más que las URL extensas. esta información es vital para que los clientes (ver el siguiente punto) puedan acceder a dicha información. URL semántica Con la intención de hacer estas URLs más fáciles de entender y a su vez de recordar surgen las URL amigables. WAIS. X.c) Idear una forma de codificar las instrucciones para los saltos hipertextuales de un objeto a otro de la Internet.) y representar información multiformato (texto.2. Si dentro de un tiempo queremos volver a esa página difícilmente recordaremos dicha url. Gopher. HTTP.com. Lejos de las clásicas URLs de las páginas dinámicas llenas de variables GETy números difíciles de recordar.com/index. y por tanto. dentro de lo que cabe.miweb.php en www. Estas se utilizan en los sitios web dinámicos (no estáticos).miweb. gráficos. del NCSA (National Center for Supercomputer Applications) de la Universidad de Chicago. Imaginemos que entramos en una página web a leer una noticia que habla sobre cómo crear URL amigables: http://www. etc. de Netscape Communications Corporation. URL no semántica Las urls En las páginas dinámicas suelen tener este formato. Las URL semánticas o URL amigables son aquellas URLs que son. sonidos. d) Desarrollar aplicaciones cliente para todo tipo de plataforma y resolver el problema de cómo acceder a información que está almacenada y es accesible a través de protocolos diversos (FTP.500. las URL semánticas están formadas con palabras relacionadas con el contenido de la página y fáciles de recordar. NNTP.php?seccion=noticias&id_noticia=133 Si tenemos conocimiento de programación web sabremos que estamos accediendo al archivo index.2 URL.

Es un lenguaje de hipertexto.2.html De esta forma con sólo leer la url sabremos de lo que trata la página y se nos hará mucho más fácil de recordar en un futuro.. 1. ya sean de cliente o de servidor. 1.idg.es. Las cookies son utilizadas habitualmente por los servidores web para diferenciar usuarios y para actuar de diferente forma dependiendo del usuario. Además existe una restricción impuesta por el propio estándar 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 página web. vídeos.es.idg. por ejemplo.es.es.3 Métodos HTTP.ordenadores. Las cookies se inventaron para ser utilizadas en una cesta de la compra virtual. Las cookies permiten que el contenido de carrito de compra. las distintas tecnologías.idg.es no será accesible desde una página web que se encuentre bajo la dirección URL www.idg.miweb. de forma que los usuarios pueden navegar por el sitio donde se muestran los objetos a la venta y añadirlos y eliminarlos de la cesta de la compra en cualquier momento.com/noticias/url-amigables.idg. Internet. puede contener imágenes. que actúa como dispositivo virtual en el que el usuario va “colocando” los elementos que desea adquirir. y que está compuesto por etiquetas.idg.ordenadores.internet.es será accesible desde cualquier URL que sea del tipo ordenadores .es. etc.idg. Una cookie que es del dominio . un lenguaje que permite escribir texto de forma estructurada. sonido.idg.3 Introducción a la HTML (hiper text marrp languaje) El HTML (Hyper Text Markup Language) es el lenguaje con el que se escriben las páginas web.http://www. por lo que el resultado puede considerarse como un documento multimedia.idg. Un documento hipertexto no sólo se compone de texto. www. La restricción se extiende desde el caso general hasta los casos particulares.internet. o incluso. sólo podrá acceder a las cookies vinculadas con los dominios www. que marcan el inicio y el fin de cada elemento del documento.es. es decir.es o www. Ahora bien. . Toda cookie está vinculada con un dominio o subdominio. Esto significa que una página web en la dirección www. disponen de los mecanismos necesarios para implementar dicho vínculo. Como ya se verá más adelante. Persistencia en http-cookies. una cookie del dominio www.

por lo que se conocían también por «código específico». Uno de los padres de este concepto. Por medio de ellas se pueden controlar los elementos tipográficos del texto: tipo.1 HTML como un tipo SGML Cuando tenemos un documento en soporte físico y lo convertimos en información digital. En un principio. esos metadatos consistían en códigos de control o macros que especificaban el formato de ese contenido para una aplicación concreta. .3.). etc. los enlaces mencionados anteriormente. Las etiquetas constituyen la filosofía de este lenguaje. y además de la idea de marcar textos con etiquetas añadía dos conceptos importantes: la definición formal del tipo de documento. Las etiquetas (en inglés: tags) son marcas insertadas en un documento HTML para proporcionar información sobre una unidad o contenido. Para permitir la interoperabilidad de los documentos era necesario un «código genérico». para que puedan ser visualizados en los navegadores (programas que permiten visualizar las páginas web).Los documentos HTML deben tener la extensión HTML o HTM. la inserción de fotos. cursiva. al menos en teoría. Las etiquetas se pueden modificar por medio de sus atributos. y la estructura de elementos anidados. así como también la inclusión de tablas. el estilo (negrita. sonidos. éstos son del tipo atributo="valor" y se colocan detrás del nombre de la etiqueta. sobre lo que es su contenido añadimos una capa de meta información comprensible para las máquinas que van a procesar ese contenido.3. listas. que no dependiese de la aplicación. formularios. Lenguaje de Marcado Generalizado. 1. etc. Además de coincidir con las iniciales de sus apellidos.2 Elementos del lenguaje HTML. Los navegadores se encargan de interpretar el código HTML de los documentos. fondos. GML significa Generalized Markup Language. Charles Goldfarb inventó en 1969 el primer lenguaje de marcado junto a sus compañeros Edward Mosher y Raymond Lorie del Almaden Research Center de IBM: GML. color y tamaño de las fuentes. Los elementos son declaraciones para visualizar o dar forma a una página Web. y de mostrar a los usuarios las páginas web resultantes del código interpretado. 1.

"<" y ">".Reglas básicas  Las etiquetas están encerradas entre los signos  Generalmente vienen en pares <p> y <⁄p>. Elemento A ABBR ACRONYM ADDRESS AREA B BASE BDO BIG BLOCKQUOTE BODY BR BUTTON CAPTION CITE Definición Enlace de hipertexto o destino de un link Abreviatura Acrónimo Dirección Área de un mapa de imagen Texto en negritas URI de base del documento Sustitución del algoritmo de bidireccionalidad Texto más grande Cita de bloque Cuerpo del documento Salto de línea Botón Encabezado de una tabla Cita .

CODE COL COLGROUP DD DEL DFN DIV DL DT EM FIELDSET FORM H1 H2 H3 H4 H5 H6 Código de computadora Columna de una tabla Grupo de columnas de una tabla Definición de una descripción Texto borrado Término definido Contenedor genérico a nivel de bloque Lista de definiciones Término de una definición Enfasis Grupo de control de fomularios Formulario interactivo Título de nivel 1 Título de nivel 2 Título de nivel 3 Título de nivel 4 Título de nivel 5 Título de nivel 6 .

HEAD HR HTML I IMG INPUT INS KBD LABEL LEGEND LI LINK MAP META NOSCRIPT OBJECT OL OPTGROUP Encabezado del documento Línea horizontal Documento HTML Texto en itálicas 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 Párrafo Parámetros de un objeto Texto preformateado Cita corta Resultado de un ejemplo Script ejecutado en la máquina cliente Selector de opciones Texto pequeño Contenedor genérico a nivel de línea Enfasis fuerte Hoja de estilo incrustada Subíndice Superíndice Tabla Cuerpo de la tabla Celda de datos de una tabla Entrada de texto de múltiples líneas .

3. No sucederá lo mismo. si decidimos expresar el tamaño mediante un porcentaje: <TABLE </TABLE> WIDTH=50%> Ahora echemos un vistazo a la manera en que debe estructurarse una tabla. en nuestro caso será siempre de 500 píxel. la anchura de la tabla está expresada en píxel (500). Si se elige esta opción. que señala la apertura y cierre de una tabla.TFOOT TH THEAD TITLE TR TT UL VAR Pie de una tabla Celda de encabezamiento de una tabla Encabezado de la tabla Título del documento Fila de una tabla Texto de teletipo Lista sin ordenar Variable 1. sea cual sea la resolución con la que venga vista la página.3 Tablas en HTML La altura y anchura global de una tabla se indica dentro del atributo <TABLE>. es decir. Para ello utilizaremos algunas imágenes: . la medida de la tabla no sufrirá variaciones. sin embargo. Las dimensiones se definen mediante WIDTH (ancho) y HEIGHT (alto) y pueden expresarse en píxel o en tantos por ciento respecto a la página: <TABLE </TABLE> WIDTH=500> En este ejemplo de código.

antes de enviar el formulario a un agente para que lo procese (p.4 Formularios. el atributo <TABLE> genera la tabla. código. y rótulos (labels) en esos controles.). a un servidor web. elementos especiales llamados controles (casillas de verificación (checkboxes). Los usuarios normalmente "completan" un formulario modificando sus controles (introduciendo texto. menúes. Un formulario HTML es una sección de un documento que contiene contenido normal.3. mientras que <TD> sirve para definir los campos presentes dentro de esta tabla. etc. por tanto. seleccionando objetos de un menú.ej.. a un servidor de correo.Como vemos por esta imagen. en una tabla propiamente dicha: <TABLE <TD </TD> <TD </TD> <TD </TD> </TABLE> WIDTH=100> WIDTH=100> BORDER=1 WIDTH=300> WIDTH=100> 1. etc.) . etc.). He aquí cómo el diseño puede ser transformado en código y. radiobotones (radio buttons).

A partir de ese momento. El valor inicial de un control no cambia. el valor inicial de un elemento TEXTAREA viene dado por sus contenidos. Así. el "valor inicial" de un control puede especificarse con el atributo value del elemento de control. se sale fuera del alcance de esta especificación). Cada control tiene tanto un valor inicial como un valor actual. y el valor inicial de un elemento OBJECT de un formulario está determinado por la implementación del objeto (es decir. El "campo de acción" o alcance del atributo name de un control contenido en un elemento FORM es el elemento FORM. El "valor actual" del control se hace en primer lugar igual al valor inicial. Si el control no tiene un valor inicial. Sin embargo. el valor actual de cada control se reinicializa a su valor inicial.se muestra un ejemplo de un formulario simple que incluye rótulos. el efecto de una reinicialización del formulario sobre ese control es indefinido. El "nombre de control" de un control viene dado por su atributo name. Cuando se envía un formulario para su procesamiento. Consulte la definición de cada control para obtener información sobre los valores iniciales y las posibles restricciones que puede imponer cada control sobre sus valores. cuando se reinicializa el formulario. En general. y estas parejas se envían con el . para algunos controles se empareja su nombre con su valor actual. el valor actual del control puede ser modificado a través de la interacción con el usuario y mediante scripts.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="Varón"> Varón<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 través de los llamados controles. que son ambos cadenas de caracteres. radiobotones y botones para reinicializar el formulario o para enviarlo: <FORM action="http://algunsitio.

DHTML (“D” de dinámico). Lenguajes de programac ión del lado del servidor (tecnología CGI). 1. Lenguajes de programac ión del lado del servidor de siguiente generación ASP. Aplicaciones en Web como Comercio Electrónico.formulario. Applets (Java). encriptación).5 Hojas de estilo en cascadas e introducción al XML Las hojas de estilo en cascada (Cascading Style Sheets. h2.).4 Evolución del desarrollo de aplicaciones Web Informativos y contenido estático (HTML estático). etc. Demostración en una hoja de es tilos en VS 2005. se puede aplicar esta hoja de estilos a la página. Para aplicar el estilo simplemente se selecciona el archivo de estilos. Servicios Web. Vbscript. CSS) son un lenguaje formal usado para definir la presentación de un documento estructurado escrito en HTML o XML (y por extensión en XHTML). SilverLigth).). h1. Lenguajes de programac ión del lado del cliente como Javascript. etc. Una vez seleccionado el formato para los diferentes elementos (body. JSP. table. Desarrollo de tecnología para la seguridad (uso de claves. hojas de estilo. que incluye la posibilidad de incluir comportamiento dinámico en la página. E-Government. Aquellos controles cuyas parejas nombre/valor se envían se llaman controles con éxito. Ejemplo: menús. etc. 1. Internet banking. y se arrastra y coloca en la página donde se quiere aplicar dicho es tilo. Incorporación de multimedia (Flash. PHP. . E-procurement.

objetivos o ideas en Internet utilizando las tecnologías más idóneas según su proyecto. control de presencia. Ver archivo en: El navegador Web. en inglés “Extensible Markup Language” («lenguaje de marcas ampliable»). Ejemplos: Crear en VS2005 un archivo XML de empleados. Es una simplificación y adaptación del SGML y permite definir la gramática de lenguajes específicos (de la misma manera que HTML es a su vez un lenguaje definido por SGML). gestión de proyectos y tareas. un comercio virtual o una . portales de Internet. Las aplicaciones web pueden ser de acceso público como tiendas virtuales. es un metalenguaje extensible de etiquetas desarrollado por el World Wide Web Consortium (W3C).XML. gestores documentales. no sólo es necesario que su empresa disponga de una web corporativa. dirigiéndose a una dirección de Internet donde obtendrán los servicios que buscan. o el uso de extranets para aumentar y mejorar el servicio con sus distribuidores. Las aplicaciones web ofrecen servicios a los usuarios de Internet que acceden utilizando un navegador web como Internet Explorer. UNIDAD II DESARROLLO DE APLICACIONES Desarrollo de aplicaciones Web El diseño y desarrollo de aplicaciones web consiste en implementar sus necesidades. Por este motivo. clientes. proveedores. En Excel. o de acceso restringido como son las intranets para mejorar las gestiones internas de su empresa como el reporte de horas de su personal. comerciales y colaboradores externos. Cada vez es más necesario adaptar el software y los sistemas online a la lógica de negocio de cada cliente. Firefox o Safari entre otros. diarios digitales.

No existe hoy en día una solución global para desarrollos de aplicaciones web que dé respuesta a todas las necesidades de una empresa. La presente unidad tiene por objetivo: que el lector comprenda los conceptos y elementos básicos que involucra el desarrollo de aplicaciones. Streaming de audio y video (Real. Flash. las infraestructuras diseñadas para Internet se componen de múltiples soluciones de desarrollo para aplicaciones web. Las tecnologías más utilizadas en desarrollos web son las siguientes: Tecnología Adobe Flash. Windows Media.NET PHP JSP XML . Java). nóminas. Flash Video) Bases de datos Microsoft SQL Server MySQL Oracle Desarrollo Web ASP ASP. para obtener un sistema integral y eficiente en todas las áreas de su corporación. etc. Un mal análisis inicial de la aplicación web a desarrollar ó una mala selección de las distintas tecnologías que la componen pueden complicar de forma importante el proceso de integración. Paseos virtuales (QuickTime.extranet para gestionar los pedidos de sus clientes o distribuidores. Tecnología. Por ello. sino que es muy aconsejable una integración total con sus sistemas propietarios de facturación. condicionando la estrategia de negocio o llegando incluso a hacerla inviable. previsiones. proveedores.

. Por ejemplo.HTML CSS JAVASCRIPT JAVA Plataforma de desarrollo Windows Linux Macintosh PDA (Palm.1 Arquitectura de Aplicaciones Web La arquitectura tradicional de cliente/servidor también es conocida como arquitectura de dos capas. una estación de trabajo utilizada como cliente puede ejecutar una aplicación de interfaz de usuario que interroga a un servidor central de bases de datos. Pocket PV) 2. Requiere una interfaz de usuario que se instala y se ejecuta en una PC o estación de trabajo y envía solicitudes a un servidor para ejecutar operaciones complejas.

Las herramientas para el desarrollo con dos capas son robustas y ampliamente evaluadas. La dependencia a largo plazo . Esto se debe al hecho de que la mayoría de la aplicación lógica existe en la estación de trabajo del cliente. Las herramientas del cliente y de la base de datos. pero no se ejecutan bien en organizaciones rápidamente cambiantes. esto es debido al número de dispositivos con acceso directo al ambiente de esas bases de datos. pero no es necesariamente lo más eficiente. Desventajas del sistema de dos capas: Los ambientes de dos capas requieren control excesivo de las versiones y demandan esfuerzo de distribución de la aplicación cuando se les hacen cambios. La seguridad del sistema en un diseño de dos capas es compleja y a menudo requiere administración de las bases de datos.Ventajas del Sistema de Dos Capas: El desarrollo de aplicaciones en un ambiente de dos capas funciona adecuadamente. constantemente están cambiando. Las técnicas de ingeniería de software de prototipo se emplean fácilmente. Las soluciones de dos capas trabajan bien en ambientes no dinámicos estables. utilizadas en diseños de dos capas.

En la arquitectura tradicional de tres capas se instala una interfaz de usuario en la computadora del usuario final (el cliente). Una aplicación Web típica recogerá datos del usuario (primer nivel).de cualquier herramienta. el tercer nivel proporciona al segundo los datos necesarios para su ejecución. El segundo nivel está referido habitualmente a algún tipo de programa o script. Finalmente. . Cada capa es un proceso separado y bien definido corriendo en plataformas separadas. La arquitectura de las aplicaciones Web suelen presentar un esquema de tres niveles. que ejecutará un programa (segundo y tercer nivel) y cuyo resultado será formateado y presentado al usuario en el navegador (primer nivel otra vez). Arquitectura de tres capas La arquitectura de tres capas es un diseño reciente que introduce una capa intermedia en el proceso. en la interfaz del usuario final. La arquitectura basada en Web transforma la interfaz de búsqueda existente (el explorador de Web). los enviará al servidor. El primer nivel consiste en la capa de presentación que incluye no sólo el navegador. sino también el servidor web que es el responsable de presentar los datos un formato adecuado. puede complicar el escalamiento futuro o las implementaciones.

son más flexibles que en el diseño de dos capas. . hace más fácil reemplazar o modificar una capa sin afectar a los módulos restantes. esa estructura de los datos puede ser modificada sin cambiar la interfaz del usuario en la PC. Por lo tanto. ya que la estación solo necesita transferir parámetros a la capa intermedia. La separación de roles en tres capas. al servidor de capa intermedia. El código de la capa intermedia puede ser reutilizado por múltiples aplicaciones si está diseñado en formato modular. Con la arquitectura de tres capas.Las diferentes capas suelen ser: Ventajas de la arquitectura de tres capas: Las llamas de la interfaz del usuario en la estación de trabajo. la interfaz del cliente no es requerida para comprender o comunicarse con el receptor de los datos.

Su compatibilidad con la mayoría de los navegadores modernos. lo posiciona como el lenguaje de programación del lado del cliente más utilizado. agendas.2 Lenguajes de Programación del lado del Cliente Un lenguaje del lado cliente es totalmente independiente del servidor. tanto del hipertexto como de los scripts. Javascript. javascript nos permite ejecutar instrucciones como respuesta a las acciones del usuario (eventos). para crear contenidos dinámicos y elementos de la página que tengan movimiento.Desventajas de las Arquitecturas de Tres Capas y basadas en Web. y tal vez el único. Muchas organizaciones son forzadas a escoger uno en lugar de otro. con lo que podemos crear páginas interactivas con programas como calculadoras. cambien de color o cualquier otro dinamismo. lo cual permite que la página pueda ser albergada en cualquier sitio. Pero nuestra página no se verá bien si la computadora cliente no tiene instalados los plug-in adecuados. El navegador (browser) del cliente es el encargado de interpretar las instrucciones Javascript y ejecutarlas para realizar estos efectos e interactividades. Por un lado los efectos especiales sobre páginas web. Por el otro. es accesible a cualquiera y ello puede afectar a la seguridad. Entre las acciones típicas que se pueden realizar en Javascript tenemos dos vertientes. mientras que cada uno ofrece sus propias y distintas ventajas. de modo que el mayor recurso. El código. Javascript es un lenguaje de programación que realiza acciones dentro del ámbito de una página web. Con Javascript podemos crear efectos especiales en las páginas y definir interacción con el usuario. La estandarización entre diferentes proveedores ha sido lenta en desarrollarse. Los exploradores actuales no son todos iguales. o tablas de cálculo. 2. . con que cuenta este lenguaje es el propio navegador. Los ambientes de tres capas pueden incrementar el tráfico en la red y requiere más balance de carga u tolerancia a las fallas.

JavaScript no permite dos de las características clásicas de los lenguajes orientados a objetos (herencia y polimorfismo). pero permite la creación y manipulación de objetos sencillos. sólo compatible con Internet Explorer. para que éste pueda acceder a ellos y modificarlos dinámicamente. estructuras de datos complejas. Es por ello se usa poco. Visual Basic Script Es un lenguaje de programación de scripts del lado del cliente. que se transfieren con las páginas web y que el navegador ejecuta en el espacio de la página. Javascript pone a disposición del programador todos los elementos que forman la página web. El DOM es el conjunto de objetos predefinidos que nos permite acceder a todos los elementos de una página y a ciertas características específicas del navegador. Tanto su sintaxis y modo de operación es una versión reducida del primero. Está basado en Visual Basic de Microsoft. Los applets son más . y la definición de métodos y propiedades para dichos objetos. El modo de funcionamiento de Visual Basic Script para construir efectos especiales en páginas web es muy similar al utilizado en Javascript y los recursos a los que se puede acceder también son los mismos: el navegador. etc. Además.Javascript es un lenguaje con muchas posibilidades. JavaScript soporta el Modelo de Objetos de Documento (DOM. Document Object Model). con funciones. es orientado a objetos. Applets de Java Son programas hechos en Java.

En la figura se muestran los pasos que seguiría appletviewer para presentarnos el resultado de la ejecución del código de nuestra clase.difíciles de programar que los scripts en Javascript y requerirán conocimientos medios del lenguaje Java. del sistema operativo y multiplataformas. Cada sistema operativo dispone de una máquina Virtual de Java que puede interpretar los Byte Codes y transformarlos a sentencias ejecutables en el sistema en cuestión. Arquitectura de appletviewer El appletviewer representa la interfaz mínima de navegación. 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. . que pasaría por las siguientes fases: Se crea una instancia de la clase que controla el Applet. En el ejemplo de la figura anterior. El Applet se incializa. sería la clase Hola Mundo. Esta es una visión simplificada del appletviewer. La función principal de esta aplicación es proporcionar al usuario un objeto de tipo Graphics sobre el que dibujar. La principal ventaja de utilizar applets consiste en que son independientes del navegador. comienza su ciclo de vida.

Estas llamadas pueden ser recibidas asíncronamente. no tienen acceso a toda la web. Afirma que han . El Applet empieza a recibir llamadas. es que casi todo ese contenido. Este programa es uno de los más utilizados para animar sitios Web y permitir la interactividad. Primero recibe una llamada init (inicializar). Crítica de Steve Jobs Flash una tecnología 100% propietaria. Flash Es un programa multimedia de Adobe que se utiliza para crear presentaciones animadas. seguida de un mensaje start (empezar) y paint (pintar). Adobe asevera que los dispositivos que no tienen soporte para Flash. Flash ofrece poca seguridad a sus usuarios.264“. Las animaciones se realizan a partir de vectores y de imágenes en base a píxeles (llamadas “raster graphics”) y pueden incluir audio y video. “porque más del 75% del vídeo en Internet es tá basado en Flash". Dice que es uno de los principales culpables que las computadoras Mac fallen. también está disponible en formatos más modernos como el H. Se trata de una aplicación “del lado del cliente” que es leída por los principales navegadores.El Applet comienza a ejecutarse. Pero lo que no dicen. argumenta que los estándares web deben de ser completamente abiertos.

PERL y PHP. La integración de nativa . o del iPad añadiendo la tecnología Flash“. VB. Para el desarrollo de ASP. JSP. pero que estos persisten después de varios años.NET es el sucesor de la tecnología ASP. justo antes de que se envíe la página a través de Internet al cliente.tratado de trabajar conjuntamente con Adobe para corregir los problemas. y otras tareas para crear la página final que verá el cliente. Los archivos cuentan con la extensión (aspx). Los lenguajes de lado servidor más ampliamente utilizados para el desarrollo de páginas dinámicas son el ASP. ASP.NET Framework con el sistema operativo Windows Server 2003 hace que su ejecución sea más estable y rápida que otros lenguajes de programación. Las páginas que se ejecutan en el servidor pueden realizar accesos a bases de datos. sitios web. Un lenguaje del lado del servidor es aquel que se ejecuta en el servidor web.Net.NET o J#. conexiones en red. del iPod. Lenguaje comercializado por Microsoft. Para su funcionamiento de las páginas se necesita tener instalado IIS con el Framework . Se desarrollado para resolver las limitantes que brindaba tu antecesor ASP. .NET (Active Server Pages). Microsft Windows 2003 incluye este framework. y usado por programadores para desarrollar entre otras funciones.NET se puede utilizar C#. solo se necesitará instalarlo en versiones anteriores. ASP. 2. tanto del lado cliente (Web Form) como del lado servidor (Web Service). consume demasiados recursos aunque el hardware sea capaz de reproducir dicho contenido.3 Lenguajes de Programación del lado del servidor Existe una multitud de lenguajes concebidos o no para Internet. fue lanzada al mercado mediante una estrategia de mercado denominada . El lenguaje ASP consiste en una serie de clases .NET. “No queremos reducir la confiabilidad y la seguridad del iPhone. Flash se desempeña pobremente en los dispositivos portátiles. Cada uno de ellos explota más a fondo ciertas características que lo hacen más o menos útiles para desarrollar distintas aplicaciones.NET utilizadas para crear aplicaciones Web. dado que consume mucha energía. además de que también.

Safari y Internet Explorer. Posee un motor de páginas basado en los servlets de Java. Está orientado a desarrollar páginas web en Java. Para su funcionamiento se necesita tener instalado un servidor Tomcat. Controles de usuario y personalizados.NET. Actualizaciones Dinámicas Soporte de servicios web XML Conexiones del tipo DSN. . División entre la capa de aplicación o diseño y el código. Desventajas: Mayor consumo de recursos. Incremento de velocidad de respuesta del servidor. JSP Es un lenguaje para la creación de sitios web dinámicos. JSP es un lenguaje multiplataforma. desarrollado para la creación de aplicaciones web potentes. Mayor seguridad. Características: Código separado de la lógica del programa. JSP fue desarrollado por Sun Microsystems. Tecnología propietaria. acrónimo de Java Server Pages. Ventajas: Completamente orientado a objetos. para acceder a fuentes de datos ODBC. o sin utilización de DSN. Mayor velocidad.Las páginas creadas con la tecnología ASP.NET funcionan en todo tipo de navegadores – incluyendo Netscape. Hospedaje de sitios web costosos. Comparte ventajas similares a las de ASP. Las páginas son compiladas en la primera petición. Facilita el mantenimiento de grandes aplicaciones.

grep. La parte dinámica está escrita en Java. Directivas: permite controlar parámetros del servlet. PERL Perl (Practical Extraction and Report Language) es un lenguaje de programación desarrollado por Larry Wall (lwall at netlabs. Crear páginas del lado del servidor. c-shell. Lenguaje de programación basado en scripts portable a casi cualquier plataforma. Acciones: permite alterar el flujo normal de ejecución de una página. Uno de sus elementos más potentes son las expresiones regulares.com) inspirado en otras herramientas de UNIX como son: sed. Los elementos que pueden ser insertados en las páginas JSP son los siguientes: Código: se puede incrustar código “Java”. Los archivos se encuentran con la extensión (jsp). Ventajas: Ejecución rápida del servlets.Permite separar la parte dinámica de la estática en las páginas web. No se puede decir que sea orientado a objetos. Integridad con los módulos de Java. No establece ninguna filosofía de programación concreta. para la administración de tareas propias de sistemas UNIX. su punto fuerte son las labores de procesamiento de textos y archivos. Multiplataforma. que a partir de su . Código bien estructurado. modular o estructurado aunque soporta directamente todos estos paradigmas. El código JSP puede ser incrustado en código HTML. Es muy utilizado para escribir CGIs. awk. Desventajas: Complejidad de aprendizaje.

versión 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 agradecerán esta propiedad ya que normalmente adolecen de un buen lenguaje tipo “script”. Es relativamente rápido para un lenguaje tipo “script”. Está disponible en múltiples 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 rápido. Hay una colección enorme de módulos que pueden ser incorporados a cualquier “script” de Perl. Están disponibles en el CPAN (“Comprehensive Perl Archive Network”). En particular existe una extensión para cálculo numérico denominada PDL. Perl es gratuito. Mucho más que eso, es “Software Libre”. Esto quiere decir que el código fuente está disponible para que cualquiera lo pueda ver o modificar, y lo que es más importante, siempre lo estará. Aunque nunca pretendas cambiar el código, 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 debería ser posible solucionarlo. Le otorga al programador mucha libertad para que haga el programa como quiera. Tal como dice el eslogan de Perl “Hay más de una forma de hacerlo”. Desventajas Es lento para algunas aplicaciones, como programación a bajo nivel, escribiendo un “driver” para una aplicación o corriendo modelos numéricos de cálculo intensivo. Si bien se pueden insertar subrutinas FORTRAN o C en Perl, teniendo lo mejor de los dos mundos, pero con algo más 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 difícil de leer. De hecho hay un concurso de Perl ofuscado.

Perl es un lenguaje interpretado. Este tema no es tan crítico como suena, los programas Perl no correrán mucho más rápidos cuando se compilen, la única ventaja está en la desaparición de la fase inicial de compilación al correr la aplicación. Utiliza muchos recursos de computó. Esto significa que no es tan ligero como un programa en C, pero en la práctica es ligero comparado con la potencia de procesamiento de las computadoras actuales. PHP PHP es el acrónimo de Hipertext Preprocesor. Es un lenguaje de programación del lado del servidor gratuito e independiente de plataforma, rápido, con una gran librería de funciones y mucha documentación. Fue creado originalmente en 1994 por Rasmus Lerdorf, pero como PHP está desarrollado en política de código abierto, a lo largo de su historia ha tenido muchas contribuciones de otros desarrolladores. El cliente solamente recibe una página con el código HTML resultante de la ejecución de la PHP. Como la página resultante contiene únicamente código HTML, es compatible con todos los navegadores. Ventajas: Muy fácil de aprender. Se caracteriza por ser un lenguaje muy rápido. Soporta en cierta medida la orientación a objeto. Clases y herencia. Es un lenguaje multiplataforma: Linux, Windows, entre otros. Capacidad de conexión con la mayoría de los manejadores de base de datos: MysSQL, PostgreSQL, Oracle, MS SQL Server, entre otras. Capacidad de expandir su potencial utilizando módulos. Posee documentación en su página oficial la cual incluye descripción y ejemplos de cada una de sus funciones. Es libre, por lo que se presenta como una alternativa de fácil acceso para todos. Incluye gran cantidad de funciones. No requiere definición 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 más ineficiente a medida que las solicitudes aumenten de número. La legibilidad del código puede verse afectada al mezclar sentencias HTML y PHP. La programación orientada a objetos es aún muy deficiente para aplicaciones grandes. Dificulta la modularización. Dificulta la organización por capas de la aplicación. Seguridad: PHP es un poderoso lenguaje e intérprete, ya sea incluido como parte de un servidor web en forma de módulo 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á diseñado específicamente para ser un lenguaje más seguro para escribir programas CGI que Perl o C, y con la selección correcta de opciones de configuración en tiempos de compilación y ejecución, y siguiendo algunas prácticas correctas de programación.

2.4 Ambientes para el desarrollo Web Un entorno de desarrollo integrado (IDE- Integrated Development Environment -) también conocido como entorno de diseño integrado o el medio ambiente integrado de depuración es una aplicación 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 intérprete. Herramientas de automatización. Un depurador.

Open Komodo Project. todo esto de una forma muy básica. edición. Como se menciono Dreamweaver proporciona soporte para variados modelos de Servidor entregando capacidades de creación de código estándar para una serie de funciones como son la inserción. enlaces y recursos que este utiliza. manejo de ciclos y condiciones.NET C# ASP. Dreamweaver permite trabajar con los siguientes modelos de servidor: ASP JavaScript ASP VBScript ASP. . entre otros. tiene el potencial para encargarse completamente de los enlaces relativos (recomendado). eliminación y consulta de datos. pero sin duda es un primer acercamiento para novatos.Posibilidad de ofrecer un sistema de control de versiones. IDE para Php Existen muchos entornos de desarrollo para PHP en software libre tales como: Zend Studio.NET VB COLDFUSION JSP PHP MySQL El concepto de sitios en Dreamweaver es bastante útil ya que nos permite mantener un orden lógico/físico de la estructura de nuestro sitio. incluso acceso por restringido por password. Dreamweaver de Adobe Es en una potente y flexible herramienta de desarrollo que inclute numerosas herramientas para facilitarnos el desarrollo de aplicaciones web. Eclipse + phpEclipse. Factibilidad para ayudar en la construcción de interfaces gráficas de usuario. 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.

Desarrollado en PHP y MySQL. Lo mejor de todo. es que Joomla es una solución de código abierto y está disponible libremente para cualquiera que desee utilizarlo. tiene como fundador a Matt Mullenweg. su facilidad de uso y sus características como gestor de contenidos. que le ayuda a construir sitios web y otras aplicaciones online potentes. entre otras. WordPress WordPress es un sistema de gestión de contenido enfocado a la creación de blogs (sitios web periódicamente actualizados). WordPress fue creado a partir del desaparecido b2/cafelog y se ha convertido junto a Movable Type en el CMS más popular de la blogosfera. Joomla! se utiliza en todo el mundo para generar desde una simple página web personal hasta complejas aplicaciones web corporativas. desde la introducción de contenidos e imágenes hasta la actualización de un catálogo de productos o la realización de reservaciones online. Entre los diferentes usos que la gente da a Joomla! están: Webs corporativas o portales Comercio electrónico Pequeños sitios de negocios Webs de organizaciones o ONGs Aplicaciones gubernamentales Intranets y extranets corporativas Webs de escuelas o agrupaciones Páginas personales o familiares Portales de comunidades Revistas y periódicos Joomla se puede usar para gestionar fácilmente cualquiera de los aspectos de un sitio web. bajo licencia GPL y código modificable. Las causas de su enorme crecimiento son.Joomla! es un Sistema de Gestión de Contenidos (CMS) premiado mundialmente. . su licencia.

son las mismas metodologías de desarrollo las que no tratan de manera adecuada y profunda los atributos de calidad. las cuales exigen funcionalidad. Algunas aplicaciones son: los webmails. Las aplicaciones web son populares debido a lo práctico del navegador web como cliente ligero. Estas situaciones traen como consecuencia que los atributos de calidad de los sistemas basados en la Web tales como la funcionalidad. entre otros. resultando en aplicaciones de pobre calidad. mantenibilidad. wikis. No obstante. En la ingeniería software se denomina aplicación web a aquellas aplicaciones que los usuarios pueden utilizar accediendo a un servidor web a través de Internet o de una intranet mediante un navegador. usabilidad y eficiencia por mencionar algunas características de calidad. La mayoría de los desarrolladores Web ponen poca atención en la elicitación y análisis de requisitos. la transferencia de información confidencial y ejecución de procesos online. Cada día se incrementan las transacciones financieras.2. confiabilidad. Esta relevancia de la economía genera grandes desafíos en las aplicaciones Web que son los de controlar y mejorar su calidad. Aunque las aplicaciones Web están creciendo rápidamente tanto en uso como en aceptación. intranet. así como a la facilidad para actualizarlas y mantenerlas. confiabilidad. . es una aplicación software que se codifica en un lenguaje soportado por los navegadores web en la que se confía la ejecución al navegador. weblogs. así como en las metodologías y procesos de desarrollo. su desarrollo tiende a ser ad hoc. tiendas en línea. A demás los desarrolladores de aplicaciones confían excesivamente en el conocimiento y experticia de los desarrolladores individuales y sus prácticas de desarrollo individual más bien que en las prácticas estándar. usabilidad y portabilidad no se les da la debida consideración que se merecen durante el proceso de desarrollo. En otras palabras.5 Metodologías para desarrollo de aplicaciones Web El creciente desarrollo del comercio electrónico así como el desplazamiento de las distintas organizaciones hacia la Web ha traído en la actualidad una constante evolución de las aplicaciones Web.

modelado. Las actividades que forman parte del proceso son: formulación. métodos y modelos de ingeniería de software en la Web para el aseguramiento y control de la calidad favorece a la compresión y análisis y potencialmente mejorar los desarrollos producidos. Dichas tareas serían aplicables a cualquier aplicación Web. test y evaluación del cliente. implantar y mantener aplicaciones y sistemas Web de alta calidad.Ingeniería Web es el proceso utilizado para crear. . generación de páginas. independientemente del tamaño y complejidad de la misma. que permite que el usuario se involucre activamente. planificación análisis. Esta breve definición nos lleva a abordar un aspecto clave de cualquier proyecto como es determinar que tipo de proceso es más adecuado en función de las características del mismo. Según Pressman. El Proceso de Ingeniería Web Características como inmediatez y evolución y crecimiento continuos. facilitando el desarrollo de productos que se ajustan mucho lo que éste busca y necesita. Un empleo sistemático y disciplinado de modelos. nos llevan a un proceso incremental y evolutivo. las actividades que formarían parte del marco de trabajo incluirían las tareas abajo enumeradas.

La otra. Control y Garantía de la Calidad Una de las tareas colaterales que forman parte del proceso es el Control y Garantía de la Calidad (CGC). son igualmente aplicables a la Ingeniería Web. navegacional. arquitectura. revisiones técnicas formales. El Test busca errores a todos lo niveles: contenido. El análisis especifica los requerimientos e identifica el contenido. navegación e interfaz de usuario. rendimiento. La Modelado se compone de dos secuencias paralelas de tareas. etc. Todas las actividades CGC de la ingeniería software tradicional como son: establecimiento y supervisión de estándares. En la generación de páginas se integra contenido. una buena interfaz mejora la percepción que el usuario tiene de éstos.La formulación identifica objetivos y establece el alcance de la primera entrega. navegación e interfaz para crear estética o dinámicamente el aspecto más visible de las aplicaciones. la evaluación de riesgos y el calendario del desarrollo y fechas de entrega. análisis. hace que el proceso de test sea especialmente difícil. seguimiento y registro de informes. Es importante destacar la importancia del diseño de la interfaz. funcional. Independientemente del valor del contenido y servicios prestados. las páginas. en el diseño de la arquitectura. La planificación genera la estimación del costo general del proyecto. Una consiste en el diseño y producción del contenido que forma parte de la aplicación. en la Web toman especial relevancia para valorar la calidad aspectos como: Usabilidad Funcionabilidad Fiabilidad Seguridad Eficiencia . el resultado es sometido a la evaluación del cliente. etc. y que interoperen en plataformas muy distintas. Sin embargo. Finalmente. El hecho de que las aplicaciones residan en la red.

las técnicas de control no escalan de forma adecuada. sencillos de usar y permiten crear soluciones de gran envergadura.Mantenibilidad Control de la Configuración Establecer mecanismos adecuados de control de la configuración para la Ingeniería Web es uno de los mayores desafíos a los que esta nueva disciplina se enfrenta. Los lenguajes de programación web son versátiles. Si no se procede de forma correcta. Hay mucho personal no especializado que no reconoce la importancia que tiene el control del cambio.6 Aspectos de Seguridad Hoy en día las aplicaciones web son uno de los servicios más utilizados ya sea accediendo a un servidor web a través de internet o de una intranet. Sin embargo. Escalabilidad: Es común encontrar aplicaciones que de un día para otro crecen considerablemente. Hay cuatro aspectos importantes a tener en cuenta en el desarrollo de tácticas de control de configuración para la Web. Las aplicaciones escritas en estos lenguajes están expuestas a diversas amenazas si no se toman las medidas adecuadas para evitarlo. Contenido: Considerando la dinamicidad con la que el contenido se genera. es tarea compleja organizar racionalmente los objetos que forman la configuración y establecer mecanismos de control. por este motivo se resalta la importancia de la formación en seguridad que deberían de recibir todos los programadores. La Web tiene características únicas que demandan estrategias y herramientas nuevas. las aplicaciones web desarrolladas en estos lenguajes pueden servir como puerta de entrada de un intruso a la red de la empresa. . 2. Personal: Cualquiera realiza cambios. por lo que la seguridad de este tipo de aplicaciones tiene que ser tomada como prioritaria para no exponer la seguridad de su negocio.

XSS.Esta formación está orientada a que los equipos de programadores conozcan y utilicen las buenas prácticas en el diseño y desarrollo de aplicaciones para evitar vulnerabilidades de seguridad. 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 . El objetivo del mismo es conocer como proteger la aplicación contra los fallos más comunes (SQL Injection. File Inclusion…). Las vulnerabilidades de XSS originalmente abarcaban cualquier ataque que permitiera ejecutar código de "scripting". en el contexto de otro sitio web (y recientemente esto se podría clasificar más correctamente como "distintos orígenes"). como VBScript o JavaScript. Command Execution. Las fallas de seguridad más comunes son: Cross Site Scripting (XSS).

La utilización de las diferentes aplicaciones o servicios de Internet se lleva a cabo respondiendo al llamado modelo cliente-servidor. Este último se denomina programa servidor.Este programa cliente se encarga de ponerse en contacto con el procesador remotopara solicitar el servicio deseado. Por un lado. Cuando tu aplicación necesita interactuar con el servidor (por ejemplo. como a las computadoras donde son ejecutados esos programas. La Programación del lado del servidor es una tecnología que consiste en el procesamiento de una petición de un usuario mediante la interpretación de un script en el servidor web para generar páginas HTML dinámicamente como respuesta. el usuario. o server-side processing.UNIDAD III PROGRAMACION DEL LADO DEL SERVIDOR 3. Procesamiento del lado del servidor.1. tu servidor está ejecutando código del lado del servidor. RPC). a través de la red usando invocaciones remotas a métodos (remote procedure call. Todo lo que suceda dentro del servidor es llamado procesamiento del lado del servidor. como consultar una base de datos. para cargar o guardar datos). ésta realiza una petición del lado del cliente (client-side request) desde el navegador. Los términos cliente y servidorse utilizan tanto para referirse a los programas que cumplen estas funciones. Por una parte. quien ejecuta una aplicación en procesador local: el denominado programa cliente. se establece un proceso en el que entran en juego dos partes. se encargan . transferir un archivo o participar en un foro de discusión. El procesadorremotopor su parte responderá a lo solicitado mediante un programa que está ejecutando.Mientras se está procesando una llamada RPC. Cuando se utiliza un servicio en Internet. El programa o los programas cliente que el usuario utiliza para acceder a los servicios de Internet realizan dos funciones distintas.

ejecutados e interpretados por el propio servidor y que se envían al cliente en un formato comprensible para él. por ejemplo: ASP. de solicitar un servicio concreto y de recibir los datos enviados por éste. podemos hablar de lenguajes de lado servidor que son aquellos lenguajes que son reconocidos.de gestionar la comunicación con el computador servidor. Cuando nosotros seleccionamos un enlace hipertexto. PHP. los lenguajes de lado cliente (entre los cuales no sólo se encuentra el HTML sino también el Java y el JavaScript los cuales son simplemente incluidos en el código HTML) son aquellos que pueden ser directamente "digeridos" por el navegador y no necesitan un pretratamiento. . Por otro lado. en realidad lo que pasa es que establecemos una petición 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). y por otra. JSP. Así pues. 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.

3. El término herramienta.2. Sin embargo esto no se cumple en la mayoría de las tareas del quehacer humano y mucho menos en las aplicaciones web. por regla general. lo cual permite que la página pueda ser albergada en cualquier sitio sin necesidad de pagar más ya que. los servidores que aceptan páginas con scripts de lado servidor son en su mayoría de pago o sus prestaciones son muy limitadas. útiles para realizar trabajos mecánicos que requieren la aplicación de una cierta fuerza física.Cada uno de estos tipos tiene por supuesto sus ventajas y sus inconvenientes. por ejemplo. en sentido estricto. se emplea para referirse a utensilios resistentes. Conceptos básicos de la herramienta de desarrollo Una herramienta es un objeto elaborado a fin de facilitar la realización de una tarea mecánica que requiere de una aplicación correcta de energía. un lenguaje de lado cliente es totalmente independiente del servidor. un lenguaje de lado servidor es independiente del cliente por lo que es mucho menos rígido respecto al cambio de un navegador a otro o respecto a las versiones del mismo. Cada herramienta tiene un fin específico y debería ser usado solo con un fin determinado. Inversamente. Cuando pensemos en . Así.

así como los lenguajes de programación usados. lo primero que necesitamos es un Sistema Operativo. Si pensamos desarrollar en . otras para la maquetación. son muy extensos y variados. otras para la programación. Fases de desarrollo de una web Para elegir las herramientas a utilizar. Hay que tener en cuenta las aplicaciones de las que dispone el Sistema Operativo y sus costos. desde el sistema operativo hasta el comando más insignificante.las mejores herramientas para el desarrollo web es necesario pensar en donde estará alojado nuestro sitio (hosting). Las fases de un desarrollo web. y por ello necesitamos herramientas específicas para cada una de ellas.NET este solo es soportado por windows y los costos de hospedaje son más caros que los que soportan Linux. y para la depuración. como es lógico. El lugar donde físicamente se almacenara nuestra información determina los lenguajes soportados (cliente. y por ello debemos elegir la más adecuada a nuestras necesidades y capacidades. En el desarrollo web tenemos unas herramientas para el diseño. y su elección no es tan trivial. el gestor de la base de datos y las prestaciones que podremos ofrecer a nuestros futuros usuarios. Sistema Operativo Para desarrollar una web. Si tenemos recursos ilimitados para tener nuestro propio sitio entonces tendríamos que hacer una gran investigación para seleccionar las herramientas más sofisticadas. Conoceremos a continuación las principales herramientas existentes para poder desarrollar fácilmente un proyecto web. . Todas las herramientas que usemos son muy importantes. El hosting o alojamiento web es un sistema esencial para el funcionamiento de los sitios en Internet y es el lugar donde físicamente reside nuestra información. antes debemos identificar las fases del proceso que forman el ciclo de vida de un desarrollo web. servidor).

trazas. como Photoshop. Pruebas en hosting: Realizaremos las últimas pruebas en el servidor del hosting para comprobar que el cambio de servidor no ha afectado a nada. Programación servidor: En esta fase. y es donde haremos las pruebas unitarias. etc.Diseño: Consiste en crear esbozos de la web final mediante una herramienta gráfica.NET. Java. Por ejemplo usando wampServer. Operadores Los operadores constituyen elementos esenciales de cualquier lenguaje de programación. nuestro servidor local debe tener exactamente la misma configuración que el servidor del hosting. Python. etc. Recuerde probar que sus códigos sean compatibles al menos con Firefox. dependiendo de si dominamos herramientas como Photoshop o no. Para evitar problemas. su respectiva hoja de estilos. crearemos la aplicación web en un lenguaje de servidor. aconsejo usar cute FTP es una herramienta confiable y versátil. etc.3. ASP . como puede ser PHP. Pruebas en local: En nuestro servidor local haremos todas las pruebas posibles. Con ellos podemos asignar. Programación cliente: Consiste básicamente en JavaScript. Es posible saltarse la fase anterior para comenzar directamente con esta fase. Depuración: Esta fase enlaza la anterior con la siguiente. . SSH. Maquetación HTML/CSS: Consiste en convertir los esbozos creados en la fase anterior en plantillas HTML. cambiar o comparar valores de datos. y las imágenes usadas. aserciones. Subir archivos al hosting: Dependiendo del hosting. Perl. Existen muchas librerías de distribución libre como JQUERY que nos aportan verdaderas joyas para el desarrollo. 3. que se desarrolla junto con la anterior. cambiar el flujo del programa. Safari e Internet Explorer. unir. podremos usar FTP.

$mi_numero= 319. 1 2 3 4 5 <?php $numeros= 'uno. echo$calle. Vamos a ver a continuación los operadores admitidos por PHP agrupados según su utilidad. agrega valores al contenido de una variable. $numeros. seis'. ?> . es equivalente a $var = $var + 'nuevo valor'.' '. echo$mi_numero.Los operadores son símbolos que representan operaciones sobre un valor. tres'.= '. ?> El operador.=. echo$numeros. Operador de asignación El símbolo = permite asignar valores a variables: 1 2 3 4 5 6 <?php $calle= 'Veracruz'. cuatro. cinco. dos.

$nombre. -. Operador Negación Suma Resta Ejemplo -$var1 $var1 + $var2 $var1 .' '. 3 $apellido= 'Pérez'. 6 ?> Operadores aritméticos Los operadores aritméticos de PHP son similares a los de C. Por ejemplo sea $var1 = 10 y $var2 = 5. Los símbolos +. Concatenamos cadenas 1 <?php 2 $nombre= 'Jorge'.$apellido.Operador de concatenación Usando el símbolo. Java y Javascript. /. * realizan operaciones de aritmética básica.$var2 Resultado -10 15 5 . el símbolo % obtiene el resto de una división (módulo). 4 //Concatena nombre y apellido más un espacio 5 Echo „Nombre: '.

$variable = $variable . Concatena las "concatenar" cadenas $variable y . $variable = $variable / 10.10. $variable = $variable % 10. $variable = $variable * 10. La siguiente tabla resume los operadores de asignación combinados Operador Ejemplo += -= *= /= %= $variable += 10 $variable -= 10 $variable *= 10 $variable /= 10 $variable %= 10 $variable "concatenar" .= .= Descripción $variable = $variable + 10.Operador Multiplicación División Módulo 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.

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

y post. Pre-decremento --$a Postdecremento $a-- Devuelve $a y después decrece su valor en uno. Ejemplo: Operadores de Post y Pre incremento -./images/icon-home. estilo del lenguaje C y Java. Los símbolos ++ y -. Operador Pre-incremento Post-incremento Ejemplo Efecto ++$a $a++ Incrementa $a en uno y después devuelve a.aplicados a una variable.gif' /><br />Regresar</a></p>".(incremento o decremento). 24 ?> Operadores de incremento .decremento Los operadores de incremento/decremento no afectan a los valores booleanos. permiten incrementar o decrementar su valor..decremento PHP ofrece soporte de operadores de pre.22 echo"<p class='centrado'><a href='0304Operadores05.html'>". Devuelve $a y después incrementa $a en uno. Su efecto es distinto según se empleen precediendo o siguiendo el nombre de la variable./.. . Decrece el valor de $a en uno y después devuelve $a. 23 echo"<img src='.

21 } else{echo"<p 22 ejecutar</p>". Pruebe introducir una letra que sucede. 15 $tabla. $tabla= "<table>".} class='centrado'>Falta información asi no puedes . 17 echo"$tabla".= "<tr><td>b</td><td>$b</td></tr>". 16 $tabla. if( isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST') { $titulo= "<h2>".= "<tr><td>++a</td><td>".= "</table>". 20 unset($_POST['b']).= "<tr><td>a</td><td>$a</td></tr>". $b= $_POST['b']. aunque al incrementarlos su resultado es 1. $a= $_POST['a']."</td></tr>". 14 $tabla. 13 $tabla.= "<tr><td>--b</td><td>". 1 2 3 4 5 6 7 8 9 <?php $enviar= $_POST['enviar']. echo$titulo.="<tr><td>b--</td><td>".Decremento'. 19 unset($_POST['a'])."</td></tr>".(--$b). 10 $tabla.($b--). 11 $tabla.Decrementar valores NULL tampoco tiene efecto."</td></tr>".(++$a)."</td></tr>". $tabla. 12 $tabla. 18 unset($_POST['enviar']).= "<tr><td>Ejemplo</td><td>Resultado</td></tr>".($a++).= "<tr><td>a++</td><td>"."</h2>".'Operadores de Incremento .

Con ellos es posible combinar condiciones y evaluarlas en una sola expresión.gif' /><br />Regresar</a></p>". Si $a es Falsa Ejemplo: Clasificación de huracanes según la escala Saffir-Simpson 1 2 <?php if( isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST'&& . 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../..23 echo"<p class='centrado'><a href='0304Operadores06.html'>"./images/icon-home. ?> Operadores Lógicos Los operadores lógicos o booleanos se utilizan conjuntamente con expresiones que devuelven valores lógicos. 24 echo"<img src='.

= "<td>".= "<td align='center'>". 11 } elseif(($velocidad>= 210) && ($velocidad<= 249)){ 12 $categoria= 4.".$categoria. 23 } else{ 24 echo"<p align='center'>Falta información así no puedes ejecutar</p>". 22 echo$fila.$categoria.3 4 5 6 7 8 9 $velocidad>= 119) { echomensaje(). 13 }elseif( $velocidad>= 250){ 14 $categoria= 5. 25 } ?> .= "<td><small>$efecto</small></td>". if(($velocidad>= 119) && ($velocidad<= 153)){ $categoria= 1. } elseif(($velocidad>= 154) && ($velocidad<= 177)){ $categoria= 2. } elseif(($velocidad>= 178) && ($velocidad<= 209)){ 10 $categoria= 3. //construyendo la última fila 18 $fila. 15 } 16 $imagen= "<img src='huracan/damage". 21 $fila. 20 $fila.jpg' />". 17 $fila= "<tr><td align='center'> $velocidad </td>".$imagen."</td></tr></table>". 19 $efecto= damages($categoria)."</td>".

y su salida devuelta como el valor de esta expresión (i. Ejemplo: Operador de ejecución La línea 2 carga la configuración del servidor web La línea 4 asigna al variable entorno el contenido del subdirectorio. pero cuando creamos expresiones que utilizan . PHP la evalúa de izquierda a derecha.. no tiene por qué ser simplemente volcada como salida. echo"$entorno". ?> Precedencia de operadores Cuando una expresión está formada por más de un operador del mismo tipo. PHP intentará ejecutar la instrucción contenida dentro de los apóstrofes invertidos como si fuera un comando del shell. Es equivalente a la función shell_exec y por defecto está inhabilitado su uso si php esta configurado para ejecutarse en safe_mode. echo"$entorno".Operador de ejecución PHP soporta un operador de ejecución: el apóstrofe invertido (``). puede asignarse a una variable). 1 2 3 4 5 6 <?php $entorno= `set`.e. $entorno= `ls -l`.

La precedencia de operadores específica cómo se agrupan las expresiones para ser evaluadas. La precedencia relativa de los operadores se puede modificar mediante paréntesis en las expresiones que se desea evaluar a criterio del programador. Or Xor And Print = += -= *= /= .= %= &= |= ^= ~= <<= >>= ?: || && | . A continuación 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 .más de un operador diferente. no siempre evalúa estas expresiones de la misma forma.

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 códigos dependiendo de condiciones. La evaluación de dichas condiciones retorna uno de dos valores verdadero o falso. Para PHP el 0 es equivalente a falso y cualquier otro número es verdadero.

if...else

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

1 2 3 4 5

if(condición) { //Se ejecuta si la condición es VERDADERA } else{ //Se ejecuta si la condición es FALSA }

Ejemplo: Determinar si n es par o impar

 El vector $_POST recupera los datos del formulario (Líneas 2 y 3).  La funcion isset determinan si la variable tomo valor (Líneas 4 y 5). Note que en la línea 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 función PHP que regresaverdaderosi una variable tomo valor

. 1 2 3 4 5 6 7 8 9 <?php $enviar= $_POST['enviar'].php'> 13 <img src='."01.$_POST['deporte']./.jpg'/>"..$_POST['deporte']. alt='' 10 ?> 11 <p class='centrado'> 12 <a href='0305SentenciasControl02. unset($_POST['deporte']).gif'/> 14 <br />Regresar</a></p> 15 <? 16 } else{ 17 ?> 18 <form id='forma'name='forma'method='post'action='0305SentenciasControl02. echo"<img alt='' src='deportivos/".jpg'/></p>". if( isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST') { echo"<h1>Implementos deportivos de "."02. echo"<p class='centrado'><img src='deportivos/".php'> 19 <fieldset> 20 ./images/icon-home.$_POST['deporte'].$_SERVER['REQUEST_METHOD'] método de petición se usó para acceder a la página unset destruye una variable especificada. unset($enviar)."</h1>".

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'>Béisbol</option> <option value='futbol'>Fútbol</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 instrucción o un bloque de instrucciones más de una vez. Ejemplo: .

. $i++) { $html. for($i= 1. if($num== 3){ echo"Aquí nos salimos \n". } } ?> Ejemplo: Calcular una tabla multiplicar. Ejemplo: 1 2 3 4 5 6 7 8 9 <?php for($num= 1. 10).= '<tr>'. La selección de la tabla se hace mediante la generación de un número aleatorio. $html= '<table class="simple">'. $i<= 10. 1 2 3 4 5 <?php $tabla= mt_rand( 1. El bucle for se puede romper mediante la sentencia break. $num<= 5. break.for El bucleforresulta muy útil cuando debemos ejecutar un bloque de código a condición de que una variable se encuentre entre un valor mínimo y otro máximo."<br />". $num++){ echo$num..

$html. calcula el factorial de n.= "<td>$tabla</td><td>*</td><td>$i</td>". Podemos romper un bucle while utilizando la sentencia break. La función number_format nos permite formatear los números con comas para separar los miles (Línea 15).= '</tr>'. El siguiente código dado por la formula abajo mencionada.'</table>'. 10 } 11 echo$html. $html. $html. El valor de n debe ser menor o igual a 69 por el tipo de variables que maneja PHP. 12 ?> While La sentencia while ejecuta un bloque de código mientras se cumpla una determinada condición. if( isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST') { .6 7 8 9 $r= $tabla*$i.= "<td>=</td><td>$r</td>". <?php $enviar= $_POST['enviar'].

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

Do. <?php if( isset($_POST['enviar']) && $_SERVER['REQUEST_METHOD'] == 'POST') { $n= $_POST['n'].While Esta sentencia es similar awhile. .<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 código factorial se puede optimizar y calcularlo para cualquier valor positivo mediante otros mecanismos. if($n== 0 and$n== 1) { $factorial= 1. salvo que con esta sentencia primero ejecutamos el bloque de código y después se evalúa la condición.. Ejemplo: Calcularemos el factorial de n con la sentencia do while. por lo que el bloque de código se ejecuta siempre al menos una vez.

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

$equipo['Chivas'] = 32. Consiste en identificar el índice de la matriz. do while o fores principalmente cuestión de preferencia personal. . $equipo['Monterrey'] = 36. su sintaxis es sencilla. echo"Jornada 17</h4>". 1 2 3 4 <?php echo"<h4 align = 'center'>Torneo Bicentenario 2010.<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. foreach El bucle foreach nos permite iterar en cada elemento de un vector. 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. ".

$equipo['Atlas'] = 24. echo"<td>". $equipo['San Luis'] = 14. 13 arsort($equipo). 15 echo"<thead><tr><th>Equipo</th><th>Puntos</th></tr></thead>". $i= 1. $equipo['América'] = 25. ?> . $equipo['Pumas'] = 28.$puntos. $equipo['Cruz Azul'] = 25. $equipo['Gallos Blancos'] = 21. $equipo['Pachuca'] = 25. $equipo['Morelia'] = 25."</td><td>". $equipo['Jaguares'] = 19. 10 $equipo['Atlante'] = 16. foreach( $equipoas$key=>$puntos) { echo"<tr>". 14 echo"<table>". 12 $equipo['Tigres'] = 19.5 6 7 8 9 $equipo['Santos'] = 28. $equipo['Toluca'] = 30."</td>". 11 $equipo['Puebla'] = 19. echo"</tr>". $equipo['Estudiantes'] = 19. $key. $equipo['Indios'] = 15. } echo"</table>".

Los elementos del arreglo pueden tener diferentes tipos de datos. 'oido'. El primer elemento es la posición cero.3. pero este puede crecer posteriormente en forma ilimitada (. Los array se clasifican según su naturaleza en indexadas o asociativas. 'tacto'. Arreglos Un arreglo (array) es una estructura de datos que contienen una colección de datos del mismo tipo. . $estaciones = array ('primavera'. Los array se utilizan como contenedorespara almacenar datos relacionados (en vez de declarar variables por separado para cada uno de los elementos del array).Hasta agotar la RAM -). 'vista'). Si bien es posible definir matrices de más de dos dimensiones después de casi tres décadas programando jamás necesite una. Array indexados Son aquellos en las que el índice es un valor numérico.5. 'verano'. $sentidos = array('gusto'. 'invierno'). 'olfato'. El tamaño del array se establece cuando creamos el arreglo. 'otoño'. Los elementos del array se acceden a través de la posición que ocupan dentro del conjunto de elementos del arreglo. Denominamos vector a los array unidimensionales y matricesa los array bidimensionales.

Para acceder un elemento del arreglo usaremos la notación genérica: $estaciones [$i]. Ejemplo: Generar un vector aleatorio de tamaño n y ordenarlo. 1 2 3 4 5 6 <?php $estacion= array('Primavera'. 'Invierno'). $i<=4. 2.rsort(). 50. una variable o constante que represente el elemento referenciando. arsort(). $sentidos [$i]. 70). Iniciando desde la posición cero. ksort(). $números [$i].  El método sort ordena los valores del vector de menor a mayor. El cual se recorre mediante un ciclo for. Como índice podemos usar un número. 'Verano'. for($i= 0. . Ejemplo: Se declara un arreglo denominado $estación.sort(). echo"Las estaciones del año son <br />". ?> Los arrays se ordenan usando las funciones asort(). uasort() y uksort() según el tipo de ordenación. 60.30."<br />". $i++) echo$estacion[$i].$numeros = array (1. 'Otoño'.  Usamos la función mt_rand para generar números aleatorios.

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

26.26.27.1].27). $i< $n. 23. 21.27. 22. 23. Ejemplo. .23.24. 28. 26.18. $n= count($temperatura). 25.18. $promedio= $promedio/$n. $i++) $promedio+= $temperatura[$i].19. 26. 10 $maximo= $temperatura[$n.26.27. Considere las temperaturas máximas registradas en la ciudad de Veracruz durante el mes de febrero del 2010.24.28. sort($temperatura). for($i= 1.21. 1 2 3 4 5 6 7 8 9 <?php $temperatura= array(23.<input alt='Número de elementos del vector'id='n'name='n' title='Número de elementos del vector'type='text'/> </p> <p><input id='enviar'name='enviar'type='submit'value='Enviar'/></p> </fieldset> </form> <? } ?> Otra función interesante es count que cuenta el número de elementos de un arreglo.18.26.27. $promedio= 0. 27.

12 echo"Temperatura media = $promedio <br />". 13 echo"Temperatura máxima = $maximo <br />". while(false !== ($archivo= readdir($handle))) { $archivos[] = strtolower($archivo). } closedir($handle). La función closedir en la línea 7 cierra el apuntador. La línea 4 realiza un ciclo. 1 2 3 4 5 6 7 8 <?php // llenar un array con todos los ítems de un directorio $handle= opendir('zodiaco').11 echo"Temperatura mínima = $temperatura[0] <br />". La función sort () línea 8 ordenada el vector de menor a mayor. 14 ?> Ejemplo: Obtener los archivos de un directorio ordenados alfabéticamente. . sort($archivos). La línea 5 asigna el archivo a una posición del vector. en el cual la función readdir lee uno a uno los archivos del subdirectorio. En la línea 3 se establece un apuntador al directorio indicado mediante la función opendir. La sentencia de control foreach recorre el vector.

5.90). 9. 20 imprimen el contenido del arreglo mediante la función print_r. 1 2 3 4 5 6 7 8 9 <?php $array= array(1. 4. $i<= $n. En la línea 8 se borra uno a uno el contenido del array (unset) En las líneas 14 y 19 se agregan valores en la siguiente posición del vector. $i++) { unset($array[$i]). } .70. ?> Ejemplo: Funciones básicas en arreglos En la línea 2 se declara un array numérico. Las líneas 3. // ahora borraremos los items pero el apuntador del array quedará intacto: $n= count($array). 3. for($i= 0. 6.9 foreach($archivosas$i=> $valor) { 10 echo$valor. 2. print_r($array).count ($array). 11 }. 11. La función count cuenta el número de elementos del array (Líneas 4. // Imprimimos el array echo"<br />Número de elementos en el array: ". 21)."<br />". 14. 16."<br />". // Creamos un array simple. En la línea 18 se restablecen los índices mediante la función array_values.

mixed $final [. incremento tendrá un valor predeterminado de 1. . Sintaxis array range (mixed $inicial. 13 $array[] = 60. 16 // Re-index: 17 $array= array_values($array).  Si recibe como parámetro incremento. ambos inclusive. Si no se especifica. y no 0).10 print_r($array). 15 echo"<br />Número de elementos en el array: "."<br />". number $incremento])  Range () retorna vector de elementos desde inicial hasta final. 21 ?> 22 Función Range Crea un vector que contiene una secuencia de elementos. éste será usado como el incremento entre elementos en la secuencia. 11 echo"<br />Número de elementos en el array: ".count($array). Si inicial>final."<br />".  Incremento es un número positivo. 14 print_r($array). 12 // Ahora sumaremos un item (observe que el nuevo índice es 7.count($array). 20 echo"<br />Número de elementos en el array: ". la secuencia será del mayor al menor."<br />".count($array). 18 $array[] = 57. 19 print_r($array).

<?php echo"<h1>Uso de range</h1><br />". 15 } ?> Arrays asociativos Un array está formado por conjuntos de parejas índice =>valor. 20) as$numero) { echo$numero. Los cuales se expresan comúnmente con índices . 1 2 3 4 5 6 7 8 9 foreach(range(0."<br />"."<br />". 13 foreach(range('M'. key. } echo"Vector con incremento<br />". echo"Vector simple<br />". valué."<br />". foreach(range('a'. foreach(range(0."<br />". 'z') as$letra) { 10 echo$letra. 200. } echo"Vector de letras<br />". o como suele expresarse en inglés. 11 } 12 echo"Vector de letras descendente<br />". 'C') as$letra) { 14 echo$letra. 20) as$numero) { echo$numero.

9 => 'Septiembre'. 5 => 'Mayo'. Además es posible usar strings como índices. 7 => 'Julio'. .o keys numéricos (también conocidos como arrays escalares). $semanaReturn= $semanaArray[date('D')]. 3 => 'Marzo'. 'Wed'=> 'Miercoles'. cadenas de texto. es decir. $mesReturn= $mesArray[date('n')]. 12 => 'Diciembre' ). Este tipo de array es el array asociativo: Ejemplo: Imprimiremos la fecha actual mediante el uso de arreglos. 'Sun'=> 'Domingo'. 11 => 'Noviembre'. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <?php functionimprimeFecha(){ $mesArray= array( 1 => 'Enero'. 'Sat'=> 'Sábado'. 'Tue'=> 'Martes'. 10 => 'Octubre'. 'Fri'=> 'Viernes'.  En la línea 4 se declara un arreglo asociativo que contiene los nombres del mes en español  En la línea 11 se declara un arreglo asociativo que contiene los nombres del día de la semana en español  En la línea 18 se obtiene el número del día del mes  El año se obtiene en la línea 19. 'Thu'=> 'Jueves'. 6 => 'Junio'. ). 2 => 'Febrero'. 4 => 'Abril'. $semanaArray= array( 'Mon'=> 'Lunes'. 8 => 'Agosto'.

16 $dia= date('d'). 'c'=> 'cFerrari 612 Sca glietti'. ?> Recorrer una tabla con índices numéricos mediante un bucle es sencillo. 'b'=> 'Mazda Miata'. pero ¿cómo recorremos una tabla con índices asociados? Para ello. while(list($key.' de '. 17 $año = date('Y'). utilizaremos una serie de sentencias específicas 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'."<br />".jpg'. echo$val.$año.'d'=> 'Corvette C6').$mesReturn. } ?> ."<br />".'.' '.' de '. $val) = each($deportivos)) { $foto= "deportivos/$val".$dia. echo"<img src='$foto' border='0' height='350' width='500'/>". 18 return$semanaReturn. 19 } 20 echoimprimeFecha().

Los índices pueden ser de tipo escalar . $i++) { $html.renglones . Ejemplo: Crear e imprimir una matriz r . for($i= 0. $i<= $r.  En las líneas 6 y 11 se controla el índice renglón  En las líneas 7 y 12 se controla el índice columna  mt_rand es una función PHP que genera números aleatorios en este caso entre 1 y 100. $c= $_POST['columnas'] . <?php if( isset($_POST['enviar']) && $_SERVER['REQUEST_METHOD'] == 'POST') { $r= $_POST['renglones'] . .= "<tr>".similares a una tabla de doble entrada.  $arreglo[i][j] = valor. Cada uno de los elementos se identifica unívocamente por un nombre ( $nombre) seguido de dos ([]) que contienen los índices del array. Los elementos de un arraybidimensional escalar pueden escribirse usando una de estas sintaxis:  $arreglo [][] = valor. $html= "<table class='simple'>". En este caso corresponde al programador el control de los índices.columnas -.Matrices Los arrays bidimensionales . El primer índice corresponde a renglones y el segundo a las columnas.equivalen al número de fila y columna que la celda ocupa en la tabla – o puede ser asociativos lo que equivaldría en alguna medida a usar como índices los nombres de la fila y de la columna.1.matrices .1.x c . En este caso los índices se autoincrementan iniciando los índices en cero.

/images/icon-home."</td>".gif'><br />Home</a> </p> <? } else{ ?> <form action='0306ImprimirMatriz./."</table>". $html. } $html. } echo$html.php'> <img alt= ''src='.$matriz[$i][$j]. $j++) { $matriz[$i][$j] = mt_rand(1..for($j= 0.= "</tr>". 100). = "<td>". $j<= $c.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> . ?> <p class='centrado'> <a href='0306ImprimirMatriz..

.  Un tipo de dato de retorno. al dividir nuestro código en funciones podemos aislar y perfeccionar cada una de sus funcionalidades.6. Tipo de dato del valor que la función devolverá al terminar su ejecución. No podrá haber otra función. Funciones Una función es el término para describir una secuencia de órdenes que hacen una tarea específica de una aplicación más grande. Las declaraciones de funciones generalmente son especificadas por:  Nombre de la función con el que se identifica y se distingue de otras.<input id='enviar'name='enviar'type='submit'value='Enviar'/> </p> </fieldset> </form> <? } ?> 3. de otro lado. De un lado. ni procedimiento con ese nombre (salvo sobrecarga o polimorfismo en programación orientada a objetos). Una función de usuario en PHP no es más que una porción de código que podemos llamar en cualquier momento. Para definir una función debemos usar la palabra reservada function. ya que una función puede ser llamada cuantas veces la necesitemos. podemos reutilizar este código. Para llamar la función basta con invocar su nombre.

 El código u órdenes de procesamiento.cF($g). Conjunto de órdenes y sentencias que debe ejecutar la función. } echo"<p class='centrado'>$g grados centigrados equivalen a ".8 * $grados+ 32." grados Fahrenheit</p>". arg2. Una lista de parámetros.. argn) { 2 //cuerpo de la función 3 } Ejemplo: Conventir grados centígrados a grados Fahrenheit. uno o más) que la función debe recibir para realizar su tarea.. Especificación del conjunto de argumentos (pueden ser cero. unset($_POST['centigrados']). ?> && $_SERVER["REQUEST_METHOD"] == ..  En las líneas 2 al 4 se hace la declaración de la función  La palabra reservada return regresa el valor de la función línea 3. La sintaxis de una función es la siguiente: 1 <span class="style3">function</span> nombreFuncion(arg1. <?php $g= $_POST['centigrados']. if( isset($_POST['convertir']) "POST"&& !empty($g) ) { functioncF( $grados){ return1.  En la línea 11 se hace un llamado a la función cF pasandole como parámetro una variable.

php'> <fieldset> <legend>Grados centígrados a grados Fahrenheit</legend> <p> <label for='centigrados'>Centígrados</label> <input alt='Grados centígrados'name='centigrados'maxlength='3' title='Grados centígrados'size='3'type='text'/> </p> <p class='centrado'> <input name='convertir'type='submit'value='Convertir'/> </p> </fieldset> </form> <? } ?> PHP no distingue entre mayúsculas y minúsculas al nombrar las funciones.php'><img src='..<p class='centrado'> <a href='0307Centigrados./. podrás observar que en los ../images/calcular.gif'alt=''>Home</a> </p> <? } else{ ?> <form id='forma'name='forma'method='POST'action='0307Centigrados. asi que cF sería lo mismo que CF. Como curiosidad. aunque es buena práctica ser consistente en la forma de escribir los nombres.

if( isset($convertir) && $_SERVER['REQUEST_METHOD'] == 'POST'){ $g= $_POST['grados']. aunque no pases valor alguno Una función puede retornar más de un valor. $k) = conversion($g). Ejemplo: Convertir grados Centígrados (Celsius) a grados Fahrenheit.mensajes de error. echo"$formato $f grados Fahrenheit</p>". <?php functionconversion( $grados){ $f= 1. $k= $r/1. list($f.8 * $grados+ 32.8. Los paréntesis permiten pasar valores a las funciones (parámetros). $r. $r. } $convertir= $_POST['convertir']. echo"$formato $g grados centígrados equivalen a:</p>". son siempre necesarios. $r= $f+ 459. si lo regresamos como un arreglo y lo asignamos mediante la función de PHP list. PHP siempre designa tus funciones en minúscula. returnarray($f.  Mediante la función list se recuperan los valores del array en variables.  La línea 6 regresa un array de valores. Kelvin y Rankine. $k). $formato= "<p class='centrado'>". .67.

echo"$formato $k grados Kelvin </p>"./images/home.gif'><br />Home</a> </p> <? } else{ ?> <form id='forma'name='forma'method='POST'action='0307Conversion..php'> <img alt=''src='./.. ?> <p class='centrado'><a href='0307Conversion.php'> <fieldset> <legend>Conversión 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> <? } ?> .echo"$formato $r grados Rankine</p>".

Ejemplo: Considere el cálculo del área y volumen de una esfera en función de su radio mediante las siguientes formulas. Esto es porque fueron declaradas como parámetros por referencia. Si queremos pasar nuestras variables por referencia . 1 2 3 4 <?php $radio= $_POST['radio'].Paso de parámetros por referencia Hasta el momento usamos parámetros por valor. Observe que los parámetros por referencia se denotan anteponiendo un & al $. pero aun así los variables área y volumen tomaron valor.de tal manera que los cambios en los argumentos persistan .  En la línea 4 al 7 se declara una función con parámetros por referencia.es necesario anteponer al argumento o parámetro el símbolo "&".  La función PHP number_format (Líneas 14 y 15) da formato a un parámetro numérico con separador de miles y decimales. if( isset($_POST['calcular']) 'POST'&& $radio>0) { && $_SERVER['REQUEST_METHOD'] == .  La línea 5 usa la función predifinida pi() que no necesita explicación  Observe que la función no regresa valores.

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

La notación n! fue popularizada por el matemático francés Christian Kramp. Es decir: Se define 0! = 1.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. se llama n factorial o factorial de n al producto de todos los naturales desde 1 hasta n. Ejemplo: Para todo número natural n.1)! sea también válida para n = 1. . Esta relación permite definir los factoriales por recursividad. para que la relación n! = n × (n .

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

$n2. $nr = ($n1 * ($dr / $d1) + $signo * $n2 * ($dr / $d2)). Fracciones function sumaResta($n1. if($nr == 0) { $mensaje = $cadena. $cadena .' '.'/'. .' = 0'.php'> <fieldset> <legend>Cálculo del factorial de n</legend> <p> <label for='n'>n</label> <input alt='Ingrese un número'maxlength='2'name='n'size='2'type='text'/> </p> <p> <input name='calcular'type='submit'value='Calcular'/> </p> </fieldset> </form> <? } ?> Ejemplo de aplicación: Suma.= ($signo == 1?'+':'-'). resta.$d1. División.'/'. Reducir. $d2. $signo) { $dr = mcm($d1. $d2).<form id='forma'name='forma'method='POST'action='0307Factorial.$d2.' '. multiplicación y división de quebrados Suma o Resta.$n2. $cadena = $n1. $d1.

}else{ if( $nr == $dr) { $mensaje = $cadena. o bien para mostrar información específica dirigida al usuario (como por ejemplo el anuncio más adecuado) Si deseamos que nuestro sitio sea bilingüe en inglés y español. $dr.0. 1 2 3 4 5 <? if(substr($_SERVER['HTTP_ACCEPT_LANGUAGE]. } 3. }else{ $mensaje = reducir($nr. 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 página específica en el idioma correspondiente. Ejemplos PHP Redireccionamiento de los visitantes a las páginas específicas en su idioma.html'). $cadena).' = 1'. } } return $mensaje. .2) == 'es'){ include('paginaEspanol.7. bajo el supuesto que el español y el inglés son los dos idiomas más utilizado por nuestros visitantes (nuestro idioma por defecto será español). >} else{ include('paginaIngles.html').

?> La hora local del servidor es: <? echodate("G:i:s"). } elseif($_SERVER['REQUEST_METHOD'] == 'POST'){ echo'Usaste PUT para enviar los datos'.6 7 } ?> Imprimir fecha y hora del sistema 1 2 3 4 5 6 7 <html> <body> La fecha del día de hoy es: <? echodate("Y/m/d"). El siguiente código muestra su uso. ?> </body> </html> Procesando Formularios Para conocer mediante que método recibimos el formulario en PHP usamos la variable de servidor $_SERVER['REQUEST_METHOD']. } . ?1 2 3 4 5 6 <?php if($_SERVER['REQUEST_METHOD'] == 'GET'){ echo'Usaste GET para enviar los datos'.

ereg_replacebusca cualquier ocurrencia del patrón en la cadena y la reemplaza por otra. ignorando los espacios en blanco internos (Línea 10). La función strlower convierte la cadena en minúsculas (Línea 3)."</p><br />". cambia todo espacio en blanco por vacio (Línea 4). return"<p class='centrado'>". . Observe que está función solo elimina los espacios en blanco de los extremos izquierdo y derecho de la cadena. En nuestro caso. 10 if( empty($cadena)) { 11 echo"<p class='centrado'>Enviaste una cadena vacía</p>". 12 } elseechoeliminarEspacios($cadena). 1 2 3 4 5 6 7 8 9 <?php functioneliminarEspacios($cadena) { $cadena= strtolower($cadena). $cadena= ereg_replace( ' '. } if( isset($_POST['enviar']) && $_SERVER['REQUEST_METHOD'] == 'POST') { $cadena= trim($_POST['cadena']). $cadena).$cadena.7 ?> Eliminar espacios La funcióm trim elimina los espacios en blanco de la cadena. ''.

/images/icon-home.13 ?> 14 <p class='centrado'> 15 <a href='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> <? } ?> Cálculo de áreas y perímetros ..php'> 16 <img alt=''src='./..gif'/><br />Home 17 </a> 18 </p> 19 <? 20 } else{ 21 ?> 22 <form name='forma'method='post'action='0309espacios.

El programa principal realiza una interfase básica para manejar multiples formularios en un mismo archivo. ?> <form name='cuadrado'method='post'action='0309FigurasAreaPerimetro. El componente hidden permite manejar el tipo de figura para el cálculo de área y perímetro. El procesamiento con PHP permite capturar las diferentes características de las figuras geométricas.php'> <fieldset> <legend>Cálculo del área y perímetro 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>Cálculo área y perímetro figuras geométricas</legend> <p> <label for='cuerpo'>Figura</label> <select name='cuerpo'> <option value='circulo'>Circulo</option> <option value='cuadrado'>Cuadrado</option> <option value='rectangulo'>Rectángulo</option> </select> </p> <p> <input name='calcular'type='submit'value='Calcular'/> </p> </fieldset> </form> <? } ?> .

$perimetro= number_format(2 * ($altura+ $base). '. '. $resultado= "El área de un Cuadro de lado = $lado es de $area unidades cuadradas ". } elseif($figura== 'Rectangulo') { $altura= $_POST['altura'].'. 2. '. $area= number_format($altura* $base. 2. $area= number_format($lado* $lado.').'. '. '. $base= $_POST['base']. $resultado= "El área de un Circulo de radio = $radio es de $area unidades 21 cuadradas ". $resultado. '. '. 22 } . 2.'). $area= number_format(pi() * $radio* $radio.Por último se presenta el código 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']. 2. 2.'. '. if($figura== 'Cuadrado') { $lado= $_POST['lado']. $resultado= "El área de un Rectángulo de base = $base y altura = $altura es ".'). '.= "de $area unidades cuadradas ". '. $perimetro= number_format(2 * $radio* pi(). 2.'. '. } else{ $radio= $_POST['radio'].'. $perimetro= number_format(4 * $lado.').'). '.').'.

si el mensaje va ir con copia para. $mensaje= trim($_POST['mensaje']). $asunto= trim($_POST['asunto']). si el mensaje ira con copia oculta para. $encabezado). etc. 1 2 3 4 5 6 <?php $enviar= $_POST['enviar']. $asunto. Donde:  $destino: Es la dirección a donde se enviará el mensaje  $asunto: Asunto del mensaje  $mensaje: cuerpo del mensaje  $encabezado: Aquí se anexa por ejemplo a quien se envía el mensaje.  or die manda un mesaje si ocurre un error y detiene el proceso. ?> Envio de correos Enviar correos mediante PHP es sumamente sencillo si usamos la función mail La función mail es: mail($destino. echo"<p class='centrado'>con un perímetro de $perimetro unidades</p><br />".23 echo"<p class='centrado'>$resultado</p>". if( isset($enviar) && $_SERVER["REQUEST_METHOD"] == "POST") { $destino= trim($_POST['destino']). . $mensaje. si tendrá formato html.

} else$cadena= "Faltan datos"... $asunto. FILTER_VALIDATE_EMAIL)) { mail($destino.gif'/><br <a href='0309email./. $cadena= "Mensaje enviado con éxito a $destino".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'/> . $mensaje) ordie("Su mensaje no se envio a $destino./images/icon-home. ?> <p class='centrado'> src='.7 8 9 10 11 12 13 14 15 if( !( empty($destino) orempty($asunto) orempty($mensaje))) { if( filter_var($destino."). } else$cadena= "Correo no valido".

.  La línea 3 (Editada para fines de presentación) declara un array con la representación alfabética de los números comprendidos entre 1 y 29. El número a convertir debe ser un entero positivo menor a 999.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 números a letras La función que se presenta a continuación convierte números a letras. Esta característica se debe a que dichos números no siguen un patrón para su escritura.999. 999.999.

50=>'cincuenta'.'tres'.'veintiocho'.'seis'.'doce'.'ventitres'. 70=>'setenta'.  En la línea 39 se obtiene la longitud de n.'diez'.40=>'cuarenta'. return$valor[$numero. 40 y 90.'veintinueve').'cinco'.90=>'noventa').'siete'.200.'veintiséis'.'catorce'.'veintisiete'. 'dieciocho'.'diecisiete'..  La línea 14 obtiene el módulo 10 de n.'veinte'. $x= $n% 10. if( $n<= 29) returnbasico($n).'ocho'.'diecinueve'.  La línea 21 declara un arreglo asociativo para la representación alfabética de los números 100. La línea 11 declara un arreglo asociativo que contiene la conversión de los números 30. Se regresa la posición asociada a n en el vector decenas y se hace un llamado a la función básico.80=>'ochenta'. -3) obtiene los últimos 3 caracteres de la cadena.  substr($cadena.'cuatro'.  Si el módulo 10 de n es cero se regresa la posición asociada a n en el vector decenas (línea 11).1].  La línea 30 hace uso de un operador ternario para poder manejar la escritura de los números comprendidos entre 101 y 199. .  Si el módulo 10 de n es diferente de cero. } functiondecenas($n) { $decenas= array(30=>'treinta'.'dos'. 'once'. <?php functionbasico($numero) { $valor= array('uno'. .'nueve'. En el caso de los miles está longitud varía entre 4 y 6.'trece'.'dieciséis'. y 900.'veintiuno'.'quince'.'veintidos'.'veinticinco'. línea 41.. 'veinticuatro'.60=>'sesenta'.

if( $n>= 100) { if( $n% 100 == 0 ) { return$cientos[$n]. } functioncentenas($n) { $cientos= array(100 =>'doscientos'. return(($u== 1)?'ciento':$cientos[$u*100]). 900 =>'novecientos').400=>'cuatrocientos'. } elsereturn$decenas[$n. } functionmiles($n) { if($n> 999) { if( $n== 1000) {return'mil'.$x]. } else{ $u= (int) substr($n.800=>'ochocientos'.0. $c= (int)substr($n.1.600=>'seiscientos'.300=>'trecientos'.$l-3).} else{ $l= strlen($n). $d= (int) substr($n.' '.if( $x== 0 ) { return$decenas[$n].700=>'setecientos'. basico($x).decenas($d).2).200 500=>'quinientos'.1). =>'cien'. } } elsereturndecenas($n). .0.' y '.

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

} } $convertir= $_POST['convertir']. case( $n>= 100 && $n< 1000) : returncentenas($n).case( $n>= 30 && $n< 100) : returndecenas($n).ucfirst(convertir($_POST['numero'])). if( isset($convertir) && $_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['numero']) ) { $html= "<p class='centrado'>". $html. PHP maneja en forma simple las variables de formulario.8 Formularios Los formularios no forman parte de PHP pero le permiten a este interactuar con el mundo exterior. case($n>= 1000 && $n<= 999999): returnmiles($n). break. case($n>= 1000000): returnmillones($n).' se escribe '. break. break. La sintaxis de un formulario es la siguiente: . } ?> 3. $html=''. es capaz de generar salidas HTML.= />"."</strong></p><br echo$html. "<strong>".$_POST['numero'].

php?pnombre=jorge&papellido=perez post: Los datos del formulario son agregados al cuerpo del formulario. Target Este parámetro indica dónde debe mostrarse esa información. _top: en el marco de que depende toda la ventana que estamos visualizando (si no utilizamos marcos en nuestra página (FRAMESET) equivaldrá a _self). Puede tomar los valores: _self : en este mismo marco o ventana. El atributo "method" define cómo la información de un formulario es enviada al navegador. Existen dos valores posibles para este atributo (insensibles a mayúsculas/minúsculas): get:Los datos del formulario son agregados a la URL definida en el atributo "action" (por ejemplo. pagina. Los formularios son manipulados por PHP del lado servidor.Action Identifica el archivo PHP que manipula el formulario que se envia. . _blank: en una ventana nueva.

"). J. A. equivaldrá a _top). Ideado por el estadístico belga L. dígitos. Sirve para referenciar elementos del mismo tipo. ([0-9]). por ejemplo el CURP y el RFC._parent: el marco padre de la ventana que estamos visualizando (si utilizamos FRAMESET con sólo un nivel de anidación. Quetelet. Id Nombre del formulario. y puntos (". id y name deben comenzar con una letra ([A-Za-z]) que puede estar seguida por un número cualquiera de letras. Por ejemplo la raza de un perro que identifica animales con características iguales. En el caso de los adultos se . También depende de otros factores. dos puntos (":"). subguiones ("_"). name Este atributo da nombre al elemento de modo que se pueda hacer referencia a él desde hojas de estilo o scripts. Ejemplo: El índice de masa corporal (IMC) es una medida de asociación entre el peso y la talla de un individuo. también se conoce como índice de Quetelet. como las proporciones de tejidos muscular y adiposo. guiones ("-"). Se calcula según la expresión matemática: El valor obtenido varía con la edad y el sexo. Es un identificador único.

ha utilizado como uno de los recursos para evaluar su estado nutricional, de acuerdo con los valores propuestos por la Organización 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>Valoración</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 continuación se desarrolla una calculadora básica en PHP. Se recupera la información del archivo html mediante $_POST (líneas 5, 6 y 7) el valor recuperado se logra al invocar como parámetro el id del componente.

break. 18 } 19 } else{ 20 ?> 21 <form name='forma'method='post'action='0308Calculadora.$b. $b= $_POST['b']. 11 case'*': $resultado= $a* $b. $resultado. 10 case'-': $resultado= $a. break. if( isset($calcular) && $_SERVER["REQUEST_METHOD"] == "POST") { $a= $_POST['a']."</p>". if( !empty($a) and!empty($b) ) { switch($operador) { case'+': $resultado= $a+ $b. 12 case'/': $resultado= $a/ $b. 16 } else{ 17 echo"<p class='centrado'>Por favor no jugar</p>". $operador= $_POST['operador']. break. 14 } 15 echo"<p class='centrado'>$a $operador $b = ". break. break.php'> 22 <fieldset> 23 <legend>Calculadora básica</legend> . 13 case'%': $resultado= $a% $b.1 2 3 4 5 6 7 8 9 <?php $calcular= $_POST['calcular'].

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 } .

Desde que entra en nuestro sitio. . por cookies o por url.ini. Las sesiones básicamente son varibles globales que nos permiten almacenar datos que necesiten volver a ser usados en otros accesos a la página . Las sessiones propagan su SID(SESSION ID) de dos posibles maneras. Otra razón por la que la sesiones suelen ser muy utilizadas es para la autentificación. determinando el acceso a la página según alguna variable específica de la sesión. Cuando una persona entra a una página que utiliza sesiones automáticamente 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. según php. El archivo se mantendra mientras tenga activo su navegador y se destruye al cerrar el navegador.9. la cual crea una nueva sesión o retoma una creada en otra página (del sitio). Sesiones Una sesión es la secuencia de páginas que un usuario visita en un sitio web. Para que una página use sesiones debemos inicializarla con la funcion session_start (). Este archivo posee el mismo nombre que su " id". hasta que lo abandona.48 ?> 3. es decir agregando a todos los posibles link el SID de la sesion.

Funciones de gestión de sesiones Función Significado Si es la primera solicitud genera un identificador de sesión aleatorio cuyo nombre será sess_IDsesión. si se pasa parámetro cambia el nombre de la sesión. session_unset(). borra el archivo en el servidor pero no borra la cookie. Si se invoca sin parámetro devuelve el nombre de la variable interna que tiene el id de sesiones. session_destroy(). Si se le proporciona valor modifica el valor por defecto en cambio sino se muestra el caché que tiene por . session_name([nombre]). session_id([nombre]). session_get_cookie_params(). Si no le proporcionamos ningún parámetro nos da el identificador de sesión. Borra una variable de sesión. Obtiene los parámetros cookie de la sesión de la session_start(). si es otra solicitud continua la sesión iniciada anteriormente. session_cache_limiter([cache_limiter]). Elimina todos los datos asociados con una sesión. si le proporcionamos el parámetro nombre cambia el valor del identificador por el parámetro nombre.

Iniciando con sesiones:  En la línea 2 se inicia la sesión . session_save_path([path]).destroy.session_star() - .Función Significado defecto.read. session_regenerate_id() session_encode(). El efecto solo dura en el script actual.write.De esta forma los datos pueden ser metidos en una base de datos en vez de en un archivo. después de usar esta función se actualiza la información de sesión. Permite definir su propio manejador para almacenar la información asociada con una sesión. Tenemos que pasarle como parámetro toda la información necesaria para crear y destruir sesiones. session_set_save_handler(open. Devuelve el nombre del módulo que se usa para realizar la gestión de sesiones. Cuando se invoca un parámetro se usa como nuevo gestor de sesiones.gc). Actualiza el id de sesión activa con uno más reciente Codifica los datos de la sesión actual en una cadena Descodifica la cadena que recibe como parámetro y que contiene la información de sesión. session_module_name([modulo]). session_decode(cadena). Devuelve la ruta al directorio donde se guardan los archivos asociados a la sesión.close.

header('location:0312InicioSesiona. $_SESSION['usuario'] = 'ProgramacionWEB'. 4 unset($_SESSION['usuario']). Declaramos una variable llamada usuario (línea 3) de tipo sesión. Header nos envia a la página específicada (línea 4)  1 2 3 4 5 <?php @session_start(). <?php 1 @session_start(). 5 } elseecho'Te equivocaste'. para evitar accesos indeseados (línea 6) Se elimina la variable de sesión (línea 5). 2 if($_SESSION['usuario'] == 'ProgramacionWEB') { 3 echo'Usuario: '.php'). ?> Evitando accesos indeseados En la línea 3 del segundo programa checamos que se recibió la variables esperada.$_SESSION['usuario']. 6 ?> Contador de visitas con sesiones .

Si la sesión no fue iniciada la genera (Línea 3). . 1 2 3 4 5 6 <?php $nombre_anterior= session_id(). Si la variable de sesión "visitas" existe la incrementa. Crear una tabla mysql llamada usuarios e insertar un registro. caso contrario la crea y la inicia en 1 (línea 4).Mediante el siguiente ejemplo se implementa un contador de visitas    La línea 2 captura el id de la sesión. 1 2 CREATE TABLE IF NOT EXISTS usuarios ( usuario CHAR(25) NOT NULL. ?> Note que en realidad este código cuenta el número de veces que recargamos la página durante la sesión Control de sesiones y autentificación En esta sección crearemos una forma de autentificación que puede ser usada en múltiples situaciones. if($nombre_anterior== '') session_start(). ($_SESSION['visitas']) ? >$_SESSION['visitas']++: $_SESSION['visitas'] = 1.

3 4 5 6 password CHAR(255) NOT NULL ) ENGINE = InnoDB DEFAULT CHARSET = latin1. } ?> <table border='0'> <form id='forma'name='forma'method='POST' 10 action='0312SesionLogin. De ser así lo envia a la página 0312PaginaSegura.php').php. INSERT INTO usuarios VALUES ('root'. Sesion. si el usuario esta logeado if(isset($_SESSION['usuario'])) { header('Location: 0312SesionPaginaSegura.php 1 2 3 4 5 6 7 8 9 <?php session_start().'bingo').php La línea 2 inicia la sesión La línea 3 checa si esta logeado el usuario. en caso contrario al enviar el login y el password será enviado a la página 0312Login.php'> 11 <tr><td>Usuario</td><td>:</td><td><input name='usuario' . // Iniciar sesión // Checa.

// esta página saltará a página de acceso if(!isset($_SESSION['usuario'])) { header('Location: 0312Sesion. // Inicia sesión // Si la sesión de usuario no se establece.php La línea 2 inicia la sesión La línea 5 checa que la variable de sesión usuario no exista de ser así lo envia a la página 0312Sesion.php'). } elsesession_unset('usuario'). .php -intento indebido de acceso a la página-. De existir borra la variable de sesión para evitar accesos posteriores y maneja el código html 1 2 3 4 5 6 7 <?php session_start().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 Esta página destruye las variables de sesión.php'>Desconectarse</a></p> 19 </body> 20 </html> 21 22 0312SesionLogout.</p> 18 <p><a href='0312SesionLogout. 1 2 3 <?php session_start(). .php. la misma sesión y nos reenvia automáticamente a la página 0312Sesion. ?></b> 17 <br>Usted puede poner su información restringida aquí.8 9 //Borra la variable de sesión ?> 10 <html> 11 <head> 12 <title>Página segura</title> 13 </head> 14 <body> 15 <p>Esta es una página segura con sesiones: <b> 16 <?php echo$_SESSION['usuario']. session_unset().

En PHP el trabajo con la base de datos se basa en tres etapas fundamentales: 1.php').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 intérprete que dependen del gestor de base de datos usadas o a tráves del estándar ODBC (Open Data Base Connectivity). Esto se logra en PHP mediante el uso de la función mysql_connect() . Cerrar los recursos empleados Conectar con una base de datos MySQL . ?> 3. Realizar las operaciones necesarias 3.PHP Para conectarse con una base de datos es necesario crear una conexión con el servidor. Establecer contacto con la base de datos 2. header('Location: 0312Sesion. Sintaxis .4 5 6 session_destroy().

El valor por defecto es "localhost:3306". 1 2 <?php $ruta= "localhost". No recomendado $ruta $usuario $password ruta invariablemente en un servidor de paga o remoto sera LOCALHOST Ejemplo de conexión de una base de datos MySQL desde PHP Línea 6 mediante la función mysql_connect nos conectamos al gestor MySQL La función mysql_error. . Identifica el usuario. El valor por defecto es el nombre de usuario propietario del proceso. devuelve el texto del mensaje de error de la última operación MySQL Mediante la función mysql_select_db seleccionamos la base datos (Línea 8) mysql_close cierra la conexión a la base de datos (Línea 10). $password). Opcional. Específica el servidor al cual se conecta. El valor por defecto es "". Opcional. Parámetro Descripción Opcional.mysql_connect($ruta. $usuario.

login y password. echo"conectado bravo!!!!!!". mysql_select_db( $db. Su sintaxis es la siguiente: CREATE DATABASE nombre Para generar esta sentencia desde PHP usaremos las siguientes funciones: La función mysql_connect() nos conecta al servidor mysql con los parámetros ruta.3 4 5 6 7 8 9 $login= "mi_login". 10 mysql_close($conexion). 11 ?> Crear una base de datos en MySQL . La función mysql_close() nos lleva los datos de la memoria principal a un almacenamiento secundario. $db= "miBaseDatos". $conexion) ordie(mysql_error()). $password) ordie(mysql_error()). $conexion= mysql_connect( $ruta. 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. $password= "mi_password".PHP La sentencia CREATE DATABASE es usada para crear una base de datos en MySQL. $ruta indica el sitio donde estaran nuestros datos. $login.

die muestra el mensaje de error indicado por pantalla y finaliza el script actual en el punto en el que se encuentre. } $sentencia = 'CREATE DATABASE IF NOT EXISTS prograwe_miBD'. mysql_error()).php'). mysql_close (línea 13) cierra la conexión a la base de datos. $password). 10 } else { 11 echo 'Error al crear la base de datos: '. $conexion)) { echo 'Base de datos creada'. No devuelve valor alguno. Ejemplo de creación de una base de datos MySQL desde PHP mysql_connect (línea 3) hace una conexión a la base de datos mysql_query (línea 8) hace una consulta en este caso crea la base de datos. 12 } 13 mysql_close($conexion). if(!$conexion) { die('Imposible conexión al servidor: '.mysql_error().$usuario. $conexion = mysql_connect($ruta. 1 2 3 4 5 6 7 8 9 <?php include('ruta.PHP . if (mysql_query($sentencia. 14 ?> Crear una tabla en MySQL .

Considere la siguiente tabla de datos correspondientes a los campeones de Formula 1 (2000 . nosotros usaremos en este sitio las InnoDB.El componente principal de una base de datos son las tablas. MySQL tiene varios tipos de tablas. Ejemplo: El Campeonato Mundial de Pilotos es otorgado por la Federación Internacional de Automovilismo al piloto de Fórmula 1 más exitoso de la temporada. determinado por el sistema de puntuación en relación con los resultados de los Grandes Premios. por razones de integridad referencial y concurrencia.2011) y sus escuderias. El primer Campeonato Mundial de Pilotos fue otorgado en la temporada 1950 a Giuseppe Farina. Año 2011 2010 2009 2008 2007 2006 2005 Campeón Sebastian Vettel Sebastian Vettel Jenson Button Lewis Hamilton Kimi Raikkonen Fernando Alonso Fernando Alonso Escudería Red Bull Racing Red Bull Racing Brawn GP McLaren Ferrari Renault Renault .

 La función mysql_select_db nos permite seleccionar la base de datos (línea 10). A continuación se presenta el correspondiente código PHP  En la línea 9 se crea una conexión a la base datos mediante la función mysql_connect. escuderiaCHAR( 35 ) NOT NULL.Año 2004 2003 2002 2001 2000 Campeón Michael Schumacher Michael Schumacher Michael Schumacher Michael Schumacher Michael Schumacher Escudería Ferrari Ferrari Ferrari Ferrari Ferrari A continuación se presenta el código MySQL necesario para crear una tabla CREATE TABLE f1 ( yearINT. campeonCHAR( 35 ) NOT NULL. PRIMARY KEY( year ) ) ENGINE = InnoDB. .

4 $query. ". $conexion)){ 12 echo"Tabla creada con éxito <br />".= "PRIMARY KEY ( year ) ) ". 10 mysql_select_db( $db. 6 $query. En esta actividad crearemos una tabla que contendrá el medallero de esta competencia.$password) ordie(mysql_error()). 11 if(mysql_query($query. en la ciudad de Guadalajara.= " escuderia CHAR( 35 ) NOT NULL . 1 <?php 2 $query= "CREATE TABLE IF NOT EXISTS f1 (". 3 $query. México. 7 $query. 14 mysql_close($conexion).= "campeon CHAR( 35 ) NOT NULL. Ésta es la tercera vez que nuestro país organiza unos juegos panamericanos y la primera vez que se organizan fuera de la Ciudad de México.= "year INT NOT NULL .$login.php'). .". 13 } elsedie(mysql_error()). $conexion) ordie(mysql_error()). mysql_query nos permite ejecutar un query a la base de datos (línea 12).  Mediante la función mysql_close cerramos la conexión a la base de datos. 15 ?> 16 Ejemplo: Los XVI Juegos Panamericanos se llevaron a cabo del 14 al 30 de octubre de 2011. 5 $query. 8 include('ruta.". 9 $conexion= mysql_connect($ruta.= "ENGINE = InnoDB. ".

10 $conexion= mysql_connect( $ruta.'. $query.'. $query. 12 mysql_query($query.= ' PRIMARY KEY ( PAIS ) ) ENGINE = InnoDB. La sentencia INSERT INTO es usada para agregar registros en una tabla de base de datos.'. 14 ?> Insertar registros en una tabla.'.1 2 3 4 5 6 7 8 9 <?php include('ruta. $query= 'CREATE TABLE IF NOT EXISTS panamericanos ('.= 'pais CHAR(35)NOT NULL. La sentencia tiene dos sintaxis genericas validas .= ' total INT DEFAULT 0.= ' oro INT DEFAULT 0. $login. $conexion) ordie(>mysql_error()). $query. $query. 11 mysql_select_db( $db.php').'. $query. $conexion) ordie(>mysql_error()).= ' plata INT DEFAULT 0.'.= ' bronce INT DEFAULT 0. $query. 13 mysql_close($conexion). $password) ordie(>mysql_error()).

. mysql_select_db( $db. $login. valor3.'Sebastian Vettel'..) VALUES (valor1..) Ejemplo: Inserción de registros en MySQL con PHP usaremos el caso de Formula 1 1 2 3 4 5 6 7 <?php include("ruta. $conexion= mysql_connect( $ruta.. columna3. mysql_query("INSERT INTO f1 VALUES (2011.'GP')". .. $conexion) ordie(mysql_error()). valor3.) La segunda se usa cuando solo ingresaremos datos en algunas columnas INSERT INTO nombre_tabla (columna1.. 10 $conexion) ordie(mysql_error()).'Sebastian Vettel'..php"). 8 9 mysql_query("INSERT INTO f1 VALUES (2010. valor2..'Red Bull Racing')".'Jenson Button Brawn'.. 11 mysql_query("INSERT INTO f1 VALUES (2009.La primera se usa si insertaremos valores en todas las columnas que componen la tabla INSERT INTO nombre_tabla VALUES (valor1.'Red Bull Racing')". $password) ordie(mysql_error()). columna2. $conexion) ordie(mysql_error()). valor2.

15 echo"Operación exitosa".12 $conexion) ordie(mysql_error()). $escuderia= $_POST['escuderia'].'McLaren')". ?> Insertar registros en una tabla desde una forma  La función isset checa si una variable fue declarada  $_SERVER['REQUEST_METHOD'] permite determinar de donde proviene la llamada.'Lewis Hamilton'. 16 mysql_close($conexion). if(!(isset($year) && !empty($year) && $_SERVER['REQUEST_METHOD'] == . 14 $conexion) ordie(mysql_error()). 13 mysql_query("INSERT INTO f1 VALUES (2008. 1 2 3 4 5 6 <?php if( isset($_POST['aceptar']) 'POST') { $year= $_POST['year']. $campeon= $_POST['campeon'].

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

Ejemplo: Muestra los campeones de Formula 1 desde 1950 hasta el 2010.31 } 32 } 33 ?> Mostrar el contenido de una tabla La sentencia SELECT nos permite recuperar los registros de una tabla. Para el caso de un SELECT regresa 0 o más registros. . La sintaxis básica es: SELECT * FROM nombre_tabla WHERE condición Si requiere conocer más sobre esta sentencia visite nuestro sitio En caso de una consulta usaremos básicamente las siguientes funciones  mysql_query() ejecuta una sentencia valida sobre la base de datos.  mysql_fetch_assoc regresa un conjunto de registros obtenidos por mysql_query().  mysql_num_rows() regresa el número de registros otorgados por mysql_query().

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

. . $password.La sentencia UPDATE permite modificar uno o más registros de una tabla. columna2=valor2. $escuderia) { $conexion =mysql_connect( $ruta.. La sintaxis es: UPDATE nombre_tabla SET columna1 = valor1. La variable $checaRadio contiene la definición de un Radio Group dinámico 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.. $login. $password) ordie(mysql_error()). $db. $year. WHERE alguna_columna = algun_valor Con las funciones PHP ya conocidas anteriormente es relativamente sencillo modificar registros desde una forma. $conexion ) ordie(mysql_error()). $campeon. mysql_select_db( $db.

} // END update_registro include("ruta.$query = "UPDATE f1 SET year = $year. } else if (isset($modificar)) { unset($modificar). update_registro($ruta. $db). $db. ". $conexion) ordie(mysql_error()). $conexion) ordie(mysql_error()). $campeon = $_POST['campeon']. $year. $password. $conexion ) ordie(mysql_error()). $escuderia = $_POST['escuderia']. $registros = mysql_query($query. $password) ordie(mysql_error()). $registros = mysql_query($query. mysql_select_db( $db. } else if ($aceptar) { unset($aceptar). imprime_forma($registros. campeon = '$campeon'. $escuderia). $login. $year = $_POST['year']. $conexion =mysql_connect( $ruta.inc"). if(!isset($modificar) && !isset($aceptar)) { imprime_tabla($ruta. $campeon. $year = $_POST['rg']. $query . $login. $password. . mysql_close($conexion). $login. $conexion).= "escuderia = '$escuderia' WHERE year = $year". $query = "SELECT * FROM f1 WHERE year =$year".

. } else if ($cancelar) { header http://www.  $borrar[] es un vector de tipo checkbox. visite la página de base de datos de este sitio.  implode une los elementos de un vector en una cadena. } ?> Eliminar datos desde una forma ("Location: La sentencia DELETE FROM es usada para borrar registros de una tabla en una base de datos. $db). Esta función es usada para enviar una consulta o comando MySQL al servidor de base de datos.imprime_tabla($ruta.mx/pweb/ejecutables/codigo50. Si se omite la clausula WHERE. $password.prograweb. nombre_tabla La clausula WHERE específica que registros serán eliminados.php").com. todos los registros de la tablas serán ¡eliminados! Para aprender más sobre SQL. El siguiente ejemplo permite borrar registros de una tabla mediante un formulario. Para el ejemplo une los identidicadores de los registros a eliminar mediante una coma. Para ejecutar esta sentencia usaremos la función mysql_query(). $login. Sintaxis DELETE FROM WHERE alguna_columna = algun_valor.

$conexion) die(mysql_error()). unset($borrar).")". mysql_close($conexion). } else { $registros = implode('. $password) ordie(mysql_error()). if(isset($_POST['eliminar']) &&$_SERVER["REQUEST_METHOD"] == "POST") { unset($_POST['eliminar']).php'>Eliminar más Registros</a> ]</p>"). print ("<p>[ <a href='0311borrarF1. mysql_select_db( $db. La línea $consulta = mysql_query($query.inc"). esta comentada por razones obvias. // Obtener las llaves de registros a borrar $borrar = $_POST['borrar'].$registros. $n = count($borrar). if($n == 0) { print ("<p>No elegiste registros para eliminar</p>").'. $conexion ) ordie(mysql_error()). $borrar). $login. $conexion) ordie(mysql_error()). mysql_query($query. $query = "DELETE FROM f1 WHERE year IN (". // Conectar con el servidor y la basede datos $conexion =mysql_connect( $ruta. Borrar registros Imprime Tabla or <?php include("ruta. //Cerrar conexión .

} ?> 3. $nuevo = 1. Existen diversos tipos de archivos y su descripción escapa del alcance de este curso. La solución 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 después de la ejecución 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. } imprime_tabla().imprime_tabla(). } } else { if(!isset($nuevo)) { iniciar().11 Manejo de archivos Hasta el momento almacenamos datos en constantes. variables y arreglos este almacenamiento es temporal y se pierde cuando termina la ejecución del programa. Los archivos que PHP pueden ser secuenciales y binarios. el procesamiento de archivos es una herramienta invaluable de programación. Los archivos secuenciales son archivos de texto y los binarios pueden almacenar gráficos y diversos formatos de información. Básicamente responden a las siguientes operaciones básicas: .

renombrar. substr() extrae una subcadena de una cadena. Ejemplo: La función PHP opendir() se encarga de habilitar una ruta a un subdirectorio. leer. copiar. para mostrar la totalidad de las imagenes de una carpeta. Función Descripción copy Copia un archivo Cambia el nombre del archivo de $antes a $despues Borra el archivo Sintaxis copy($origen. . $destino) rename($antes. borrar.Abrir. en este caso por ser el parámetro negativo extrae los últimos cuatro carácteres (línea 10). La funciónreaddir () se encarga de leer un archivo o subdirectorio. $despues) unlink($archivo) rename unlink Manejo de imágenes A continuación se presentan dos ejemplos. El objetivo es extraer la extensión del archivo. hasta operaciones que exigen una cierta complejidad son requeridas para la configuración de páginas Web. cerrar. closedir() cierra la ruta al subdirectorio. escribir. strlower() convierte el contenido de una cadena a minúscula. Desde las operaciones básicas como copiar. mover y eliminar.

png')) { if ($i==4) {// Cuatro imagenes por renglón $i=0. echo "<tr>".gif') or ($extension == '.. . echo "</tr>". //strlower pasa a minuscula una cadena en este caso //los 4 últimos caracteres //de la cadena if (($extension == '. 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 != ".. -4)).jpg') or ($extension == '. echo "<tr>".<?php if ($gestor = opendir('./imagenes')) { // Abre un gestor de directorios echo "<table border=1 align='center'>". echo "<td>".") { //checa que no sea subdirectorio $extension = strtolower(substr($archivo. $i=0. } $i++." and $archivo != ".

echo "</td>".echo "<a href='./imagenes/$archivo'". echo "<tr>". echo "</table>". echo "border='0' ></a>"./imagenes/$archivo'>". } } } echo "</tr>". El ciclo foreach recorre el arreglo de archivos. closedir($gestor). //Cierra el gestor } ?> Ejemplo: La función glob () realiza una búsqueda por todos los nombres de ruta que coincidan con cierto patrón. echo "<img src='. <?php echo "<table border=1 align='center'>". En este caso con los gráficos validos para html. $i = 0... sort() ordena los nombres de los archivos encontrados. //carga las imagenes de la carperta //La función glob() realiza una búsqueda por todos los nombres .

echo "<tr>". ."/></a></td>". //Recorre el vector foreach($imagenes as $foto){ if ($i==4) { $i=0. "{*. echo "</tr>". } $i++.. echo "<td><a href='". echo "</table>". *. } echo "</tr>".$foto.//de ruta que coincidan con patrón $ruta = "."'><img src='". $imagenes = glob($ruta . sort($imagenes).$foto. *. ?> Para el siguiente ejemplo usaremos 4 funciones básicas de manipulación de archivos Función filesize Descripción Obtiene el tamaño del archivo Sintaxis filesize($archivo)./imagenes/".gif. GLOB_BRACE).png}".jpg.

y se situa al inicio. Ejemplo: Mostrar una imagen Fopen además de abrir un archivo. vamos)  w+ Lectura y escritura. obtiene un apuntador a su contenido. si existe lo trunca a tamaño cero. si no existe el archivo lo crea. es la primera información que recibe el navegador en cada petición que realiza. que siguen el protocolo HTTP. apuntador al inicio del archivo  w Sólo escritura. Estas cabeceras.Función Descripción Sintaxis $id fopen($archivo. Los modos en los que se puede abrir un archivo son:  r Sólo lectura. si no existe lo crea . Si unicamente queremos recuperar su contenido (y por ejemplo mostrarlo en pantalla). si existe lo convierte en archivo de longitud cero y el apuntador se coloca en el inicio (sobreescribe el contenido. Permite modificar las cabeceras que envía el servidor al navegador. $modo). El cierre del archivo es automático al terminar el volcado del archivo. fpassthru($id). El puntero al comienzo del archivo  r+ Lectura y escritura. fopen solo debe usarse para abrir un archivo cuyo contenido vamos a manipular. = fopen Abre un archivo y le asigna un identificador id. fpassthru Lee completamente el archivo y lo muestra. antes que el contenido del archivo. header header("mensaje"). hay otras funciones mas adecuadas.

/imagenes/Shakira02.. Si existe. 'rb'). Las líneas 7 y 8 envían cabeceras HTTP para indicar el tamaño y formato del archivo. si no existe lo crea. lectura y escritura. header('Content-Length: ' . En algunos sistemas operativos como linux no existe esta diferencia asi que el indicador b será ignorado. a Modo append. // imprime el archivo y detiene el script fpassthru($id). $id = fopen($imagen. <?php // Abree el archivo en modo binario $imagen = '. filesize($imagen)).png'. si no existe lo crea. // Envia las cabeceras header('Content-Type: image/png'). el apuntador se coloca al final del archivo (listo para escribir a continuacion del contenido)  a+ Modo append. 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. fpassthru (línea 11) hace un volcado del archivo previamente definido en la línea 4. exit. sólo escritura. .

$imagen = file_get_contents($archivo).png'. ?> Leer un archivo de texto En la línea 2 se genera un apuntador al archivo alumnos. fclose (línea 5) cierra el apuntador. <? header( 'Content-type: image/png'). La función fgets lee el contenido de un archivo hasta encontrar el fin de línea (línea 4). $archivo = '../imagenes/Shakira02. ."<br />".txt'.txt La función feof (línea 4) comprueba si se encuentra el fin del archivo.?> Una versión reducida de este código lo podemos encontrar en: La función file_get_contents (línea 4) permite leer el contenido de un archivo en una cadena. echo $imagen. 'r'). <?php $archivo = fopen('0310alumnos. //Imprime una linea hasta que el //final del archivo es encontrado while(!feof($archivo)) { echo fgets($archivo).

?> Otra forma de hacerlo es mediante la función fread (línea 6) la cual lee el contenido de un archivo. La línea 14 incrementa en uno el número de visitantes o reinicia la cuenta si el archivo no tiene el dato. <?php // obtiene el contenido de un archivo en //una cadena $archivo = '0310alumnos.txt'. 'r'). echo $contenido. . ?> Contador de visitas file_exists comprueba si un archivo existe (línea 2) La línea 9 y 12 crean un puntero al archivo. fclose($id). $id = fopen($archivo. $contenido = fread($id. La línea 13 recupera el número de visitantes. filesize($archivo)).} fclose($archivo). fputs guarda la información en el archivo.

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

echo "<p align='center'> $contador </p>". etc. que compromete la estabilidad del sitio y el recurso más valioso de nuestro sitio "la información". Se han desarrollado diversas clases de validación. La validación de datos.$contador . Seguridad La seguridad y funcionamiento sin duda uno de los temas más importantes al desarrollar un portal web.gif'>". PHP versión 5 proporciona la extensión Filtercuyo objetivo es realizar esta tarea en forma sencilla. CrossScripting. es por tanto fundamental. con igual o mayor número de métodos para hacer la misma tarea estas no estan estandarizadas. Filtrado de datos Una de las mayores fortalezas de PHP es su facilidad de uso. amenazas de seguridad en la nube (Cloud Computing) y un largo etc. 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. El filtrado de datos es una de las piedras angulares en cualquier aplicación en el tema de seguridad. robusta y la estandarización de la entrada de datos del usuario. algunas mejores que otros. El no cuidarnos de esto. Las funciones base se presentan a continuación. independientemente del lenguaje con el cual se desarrolle. Lamentablemente. . este mismo beneficio se usa en contra de PHP. ?> 3.12. puede traernos problemas de inyección SQL.= "<img alt='$imagen ' src='$imagen. Cookie Poisoning. } fclose($abrir).

o FALSE si el filtro falla. Específica la variable que deseamos checar . Devuelve los datos filtrados. variable) Parámetro Descripción Requerido. específica el tipo que deseamos checar. 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. Los posibles tipos son: INPUT_GET tipo INPUT_POST INPUT_COOKIE INPUT_SERVER INPUT_ENV variable Requerida.Función filter_has_var filter_list Descripción Verifica si la variable del tipo especificado existe Devuelve una lista de todos los filtros soportados Filtra una variable con un filtro específico.

El objetivo del ejemplo es tratar de frenar invasiones a la seguridad asegurandonos que no introduzcan datos mediante la URL. Este método no es infalible contra la inyección de código SQL, pero es una aproximación..

<?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 función 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 línea 5 recorre el vector filter_list. La línea 6 imprime el nombre del filtro extraido en la línea 5. la línea 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 válido entre 40 y 150 kg.<br />"; } else { echo "$peso kg es un peso válido.<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 válido<br />"; $url = $_POST['url']; if (filter_var($url, FILTER_VALIDATE_URL)) { echo "La url $url es válida <br />"; } else echo "La url $url no es válida! <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 dirección de correo válida<br />"; $ip = filter_input(INPUT_POST, 'ip', FILTER_VALIDATE_IP); if($ip ===false) { echo "No es una IP válida <br />"; } else echo "$ip es una IP válida <br />"; } else echo "Por aqui no puedes entrar <br />"; ?>

JavaScript es un lenguaje de programación interpretado. los programas escritos con JavaScript se pueden probar directamente en cualquier navegador sin necesidad de procesos intermedios. es necesario añadir el atributo type a la etiqueta. Cómo incluir JavaScript en documentos XHTML La integración de JavaScript y XHTML es muy flexible. Su nombre es exclusivamente por marketing. Incluir JavaScript en el mismo documento XHTML El código JavaScript se encierra entre etiquetas y se incluye en cualquier parte del documento. se recomienda definir el código JavaScript dentro de la cabecera del documento (dentro de las etiquetas): Para que la página XHTML resultante sea válida. JavaScript no guarda ninguna relación directa con el lenguaje de programación Java. ya que Java era la palabra de moda en el mundo informático y de Internet de la época de desarrollo. Técnicamente. Además del atributo type. Legalmente. Una página web dinámica es aquella que incorpora efectos como texto que aparece y desaparece.UNIDAD IV Procesamiento del lado del Cliente 4. que es el que indica la URL correspondiente al archivo JavaScript que se quiere enlazar. Se pueden crear todos los archivos JavaScript (*. JavaScript es una marca registrada de la empresa Sun Microsystems.1 Lenguaje Script del Cliente JavaScript es un lenguaje de programación usado principalmente para crear páginas web dinámicas. Aunque es correcto incluir cualquier bloque de código en cualquier zona de la página. acciones activadas al pulsar botones y ventanas con mensajes de aviso al usuario. En otras palabras. ya que existen al menos tres formas para incluir código JavaScript en las páginas web en esta sección solo se presentaran dos de ellas.js) que sean necesarios y cada documento XHTML puede enlazar tantos archivos JavaScript como necesite. A pesar de su nombre. animaciones. este método requiere definir el atributo src. y no es necesario compilar los programas para ejecutarlos. . Colocadas entre las etiquetas.