243
2.1. Arquitectura de las aplicaciones Web La arquitectura tradicional de cliente/servidor también es conocida como arquitectura de dos capas. 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. Por ejemplo, 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 . Ventajas del Sistema de Dos Capas: El desarrollo de aplicaciones en un ambiente de dos capas funciona adecuadamente, pero no es necesariamente lo más eficiente. Las herramientas para el desarrollo con dos capas son robustas y ampliamente evaluadas.

Programacion Web

Embed Size (px)

DESCRIPTION

programacion web

Citation preview

Page 1: Programacion Web

2.1. Arquitectura de las aplicaciones Web

La arquitectura tradicional de cliente/servidor también es conocida como arquitectura de dos capas. 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.

Por ejemplo, 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.

Ventajas del Sistema de Dos Capas:

El desarrollo de aplicaciones en un ambiente de dos capas funciona adecuadamente, pero no es necesariamente lo más eficiente. Las herramientas para el desarrollo con dos capas son robustas y ampliamente evaluadas.

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, pero no se ejecutan bien en organizaciones rápidamente cambiantes.

Page 2: Programacion Web

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

La seguridad del sistema en un diseño de dos capas es compleja y a menudo requiere administración de las bases de datos; esto es debido al número de dispositivos con acceso directo al ambiente de esas bases de datos.

Las herramientas del cliente y de la base de datos, utilizadas en diseños de dos capas, constantemente están cambiando. La dependencia a largo plazo de cualquier herramienta, puede complicar el escalamiento futuro o las implementaciones.

Arquitectura de tres capas

La arquitectura de tres capas es un diseño reciente que introduce una capa intermedia en el proceso. Cada capa es un proceso separado y bien definido corriendo en plataformas separadas. En la arquitectura tradicional de tres capas se instala una interfaz de usuario en la computadora del usuario final (el cliente). La arquitectura basada en Web transforma la interfaz de búsqueda existente (el explorador de Web), en la interfaz del usuario final.

La arquitectura de las aplicaciones Web suelen presentar un esquema de tres niveles. 

El primer nivel consiste en la capa de 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.

El segundo nivel está referido habitualmente a algún tipo de programa o script.

Finalmente, el tercer nivel proporciona al segundo los datos necesarios para su

ejecución. Una aplicación Web típica recogerá datos del usuario (primer nivel),

los enviará al servidor, que ejecutará un programa (segundo y tercer nivel) y

Page 3: Programacion Web

cuyo resultado será formateado y presentado al usuario en el navegador (primer nivel otra vez).

Las diferentes capas suelen ser:

Capa 1: Cliente de aplicación: Navegador Web

Capa 2 : Servidor de Aplicaciones: Apache, Servidor Tomcat con servlet’s

Capa 3 : Servidor de Datos: Base de datos, servidor SMTP…

Ventajas de la arquitectura de tres capas:

Las llamas de la interfaz del usuario en la estación de trabajo, al servidor de capa intermedia, son más flexibles que en el diseño de dos capas, ya que la estación solo necesita transferir parámetros a la capa intermedia.

Con la arquitectura de tres capas, la interfaz del cliente no es requerida para comprender o comunicarse con el receptor de los datos. Por lo tanto, esa

Page 4: Programacion Web

estructura de los datos puede ser modificada sin cambiar la interfaz del usuario en la PC.

El código de la capa intermedia puede ser reutilizado por múltiples aplicaciones si está diseíado en formato modular. La separación de roles en tres capas, hace más fácil reemplazar o modificar una capa sin afectar a los módulos restantes.

Desventajas de las Arquitecturas de Tres Capas y basadas en Web. 

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.

Los exploradores actuales no son todos iguales.

La estandarización entre diferentes proveedores ha sido lenta en desarrollarse. Muchas organizaciones son forzadas a escoger uno en lugar de otro, mientras que cada uno ofrece sus propias y distintas ventajas.

2.2. Lenguajes de programación del lado del cliente

Un lenguaje del lado cliente es totalmente independiente del servidor, 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 código, tanto del hipertexto como de losscripts, es accesible a cualquiera y ello puede afectar a la seguridad.

Javascript.

Javascript es un lenguaje de programación que realiza acciones dentro del ámbito de una página web. 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. Con Javascript podemos crear efectos especiales en las páginas y definir interacción con el usuario. El navegador (browser) del cliente es el encargado de interpretar las instrucciones Javascript y ejecutarlas

Page 5: Programacion Web

para realizar estos efectos e interactividades, de modo que el mayor recurso, y tal vez el único, con que cuenta este lenguaje es el propio navegador.

Entre las acciones típicas que se pueden realizar en Javascript tenemos dos vertientes. Por un lado los efectos especiales sobre páginas web, para crear contenidos dinámicos y elementos de la página que tengan movimiento, cambien de color o cualquier otro dinamismo.

Por el otro, javascript nos permite ejecutar instrucciones como respuesta a las acciones del usuario (eventos), con lo que podemos crear páginas interactivas con programas como calculadoras, agendas, o tablas de cálculo.

Javascript es un lenguaje con muchas posibilidades, es orientado a objetos, con funciones, estructuras de datos complejas, etc.

Además, Javascript pone a disposición del programador todos los elementos que forman la página web, para que éste pueda acceder a ellos y modificarlos dinámicamente.

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, y la definición de métodos y propiedades para dichos objetos.

JavaScript soporta el Modelo de Objetos de Documento (DOM, Document Object Model). El DOM es el conjunto de objetos predefinidos que nos permite acceder a todos los elementos de una página y a ciertas características específicas del navegador.

<html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Ejemplo JavaScript</title></head><body><script> var respuesta = confirm("Aceptame o rechazame") alert ("Has pulsado: " + respuesta) </script>

Ejecutar

Page 6: Programacion Web

</body></html>

 Visual Basic Script

Es un lenguaje de programación de scripts del lado del cliente, sólo compatible con Internet Explorer. Es por ello se usa poco. Está basado en Visual Basic de Microsoft. Tanto su sintaxis y modo de operación es una versión reducida del primero. 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.

 

Applets de Java

Son programas hechos en Java, que se transfieren con las páginas web y que el navegador ejecuta en el espacio de la página. Los applets son más difíciles de programar que los scripts en Javascript y requerirán conocimientos medios del lenguaje Java. La principal ventaja de utilizar applets consiste en que son independientes del navegador, del sistema operativo y multiplataformas.

Cada sistema operativo dispone de una 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. 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.

Page 7: Programacion Web

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, y varias funciones para facilitar el uso del objeto Graphics.

Ciclo de vida de un Applet

 

Cuando un applet se carga en el appletviewer, comienza su ciclo de vida, 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, sería la clase HolaMundo.

El applet se incializa.

El applet comienza a ejecutarse.

El applet empieza a recibir llamadas. Primero recibe una

llamada init (inicializar), seguida de un mensaje start (empezar) y paint (pintar).

Estas llamadas pueden ser recibidas asíncronamente.

Flash

Es un programa multimedia de Adobe que se utiliza para crear presentaciones animadas. Se trata de una aplicación “del lado del cliente” que es leída por los principales navegadores. Las animaciones se realizan a partir de vectores y de

Page 8: Programacion Web

imágenes en base a píxeles (llamadas “raster graphics”) y pueden incluir audio y video. Este programa es uno de los más utilizados para animar sitios Web y permitir la interactividad.

 

Crítica de Steve Jobs

Flash una tecnología 100% propietaria, argumenta que los estándares web

deben de ser completamente abiertos.

Adobe asevera que los dispositivos que no tienen soporte para Flash, no tienen

acceso a toda la web, “porque más del 75% del vídeo en Internet está basado

en Flash". Pero lo que no dicen, es que casi todo ese contenido, también está

disponible en formatos más modernos como el H.264“.

Flash ofrece poca seguridad a sus usuarios. Dice que es uno de los principales

culpables que las computadoras Mac fallen. Afirma que han tratado de trabajar

conjuntamente con Adobe para corregir los problemas, pero que estos persisten

después de varios años. “No queremos reducir la confiabilidad y la seguridad

del iPhone, del iPod, o del iPad añadiendo la tecnología Flash“.

Flash se desempeña pobremente en los dispositivos portátiles, dado que

consume mucha energía, además de que también, consume demasiados

recursos aunque el hardware sea capaz de reproducir dicho contenido.

2.3. Lenguajes de programación del lado Servidor

 

Page 9: Programacion Web

Existe una multitud de lenguajes concebidos o no para Internet. Cada uno de ellos explota más a fondo ciertas características que lo hacen más o menos útiles para desarrollar distintas aplicaciones.

Un lenguaje del lado del servidor es aquel que se ejecuta en el servidor web, justo antes de que se envíe la página a través de Internet al cliente. Las páginas que se ejecutan en el servidor pueden realizar accesos a bases de datos, conexiones en red, y otras tareas para crear la página final que verá el cliente.

Los lenguajes de lado servidor más ampliamente utilizados para el desarrollo de páginas dinámicas son el ASP, JSP, PERL y PHP.

ASP.NET (Active Server Pages).

Lenguaje comercializado por Microsoft, y usado por programadores para desarrollar entre otras funciones, sitios web. ASP.NET es el sucesor de la tecnología ASP, fue lanzada al mercado mediante una estrategia de mercado denominada .NET.

Se desarrollado para resolver las limitantes que brindaba tu antecesor ASP. Para el desarrollo de ASP.NET se puede utilizar C#, VB.NET o J#. Los archivos cuentan con la extensión (aspx). Para su funcionamiento de las páginas se necesita tener instalado IIS con el Framework .Net. Microsft Windows 2003 incluye este framework, solo se necesitará instalarlo en versiones anteriores.

El lenguaje ASP consiste en una serie de clases .NET utilizadas para crear aplicaciones Web, tanto del lado cliente (Web Form) como del lado servidor (Web Service). La integración de nativa .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 creadas con la tecnología ASP.NET funcionan en todo tipo de navegadores – incluyendo Netscape, Safari y Internet Explorer.

Page 10: Programacion Web

Actualizaciones Dinámicas Soporte de servicios web XML Conexiones del tipo DSN, o sin utilización de DSN, para acceder a fuentes de datos ODBC.

Ventajas:

Completamente orientado a objetos.

Controles de usuario y personalizados.

División entre la capa de aplicación o diseño y el código.

Facilita el mantenimiento de grandes aplicaciones.

Incremento de velocidad de respuesta del servidor.

Mayor velocidad.

Mayor seguridad.

Desventajas: 

Mayor consumo de recursos.

Tecnología propietaria.

Hospedaje de sitios web costosos.

JSP 

 

Es un lenguaje para la creación de sitios web dinámicos, acrónimo de Java Server Pages. Está orientado a desarrollar páginas web en Java. JSP es un lenguaje multiplataforma.

JSP fue desarrollado por Sun Microsystems. Comparte ventajas similares a las de ASP.NET, desarrollado para la creación de aplicaciones web potentes. Posee un motor de páginas basado en los servlets de Java. Para su funcionamiento se necesita tener instalado un servidor Tomcat.

Características:

Código separado de la lógica del programa.

Las páginas son compiladas en la primera petición.

Page 11: Programacion Web

Permite separar la parte dinámica de la estática en las páginas web.

Los archivos se encuentran con la extensión (jsp).

El código JSP puede ser incrustado en código HTML.

Los elementos que pueden ser insertados en las páginas JSP son los siguientes:

Código: se puede incrustar código “Java”.

Directivas: permite controlar parámetros del servlet.

Acciones: permite alterar el flujo normal de ejecución de una página.

Ventajas:

 

Ejecución rápida del servlets.

Crear páginas del lado del servidor.

Multiplataforma.

Código bien estructurado.

Integridad con los módulos de Java.

La parte dinámica está escrita en Java.

Desventajas:

 

Complejidad de aprendizaje.

 

PERL

 

Perl (Practical Extraction and Report Language) es un lenguaje de programación desarrollado por Larry Wall (lwall at netlabs.com) inspirado en otras herramientas de UNIX como son: sed, grep, awk, c-shell, para la administración de tareas propias de sistemas UNIX. No establece ninguna filosofía de programación concreta. No se puede decir que sea orientado a objetos, modular o estructurado aunque soporta directamente todos estos paradigmas; su punto fuerte son las labores de procesamiento de textos y

Page 12: Programacion Web

archivos. Lenguaje de programación basado en scripts portable a casi cualquier plataforma. Es muy utilizado para escribir CGIs. Uno de sus elementos más potentes son las expresiones regulares, que a partir de su 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.

Page 13: Programacion Web

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.

Page 14: Programacion Web

 

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 de aplicaciones 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.

Page 15: Programacion Web

Un intérprete.

Herramientas de automatización.

Un depurador.

Posibilidad de ofrecer un sistema de control de versiones.

Factibilidad para ayudar en la construcción de interfaces gráficas de usuario.

IDE para Php

Existen muchos entornos de desarrollo para PHP en software libre tales como: Zend Studio, Open Komodo Project, Eclipse + phpEclipse, entre otros.

Dreamweaver de Adobe

Es en una potente y flexible herramienta de desarrollo que inclute numerosas herramientas para facilitarnos el desarrollo de aplicaciones web.

Dreamweaver permite trabajar con los siguientes modelos de servidor:

ASP JavaScript

ASP VBScript

ASP.NET C#

ASP.NET VB

COLDFUSION

JSP

PHP MySQL

El concepto de sitios en Dreamweaver es bastante útil ya que nos permite mantener un orden lógico/físico de la estructura de nuestro sitio, enlaces y recursos que este utiliza, tiene el potencial para encargarse completamente de los enlaces relativos (recomendado).

Como se menciono Dreamweaver proporciona soporte para variados modelos de Servidor entregando capacidades de creación de código estándar para una

Page 16: Programacion Web

serie de funciones como son la inserción, edición, eliminación y consulta de datos, manejo de ciclos y condiciones, incluso acceso por restringido por password, todo esto de una forma muy básica, pero sin duda es un primer acercamiento para novatos, lo importante de esto es que podemos extender esta capacidad mediante nuestros conocimientos y usar este entorno de desarrollo para facilitarnos la dura tarea de desarrollar para la Web.

Jomla!

Joomla! es un Sistema de Gestión de Contenidos (CMS) premiado mundialmente, que le ayuda a construir sitios web y otras aplicaciones online potentes. Lo mejor de todo, es que Joomla es una solución de código abierto y está disponible libremente para cualquiera que desee utilizarlo.

Joomla! se utiliza en todo el mundo para generar desde una simple página web personal hasta complejas aplicaciones web corporativas. 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, 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.

WordPress

Page 17: Programacion Web

WordPress es un sistema de gestión de contenido enfocado a la creación de blogs (sitios web periódicamente actualizados). Desarrollado en PHP y MySQL, bajo licencia GPL y código modificable, tiene como fundador a Matt Mullenweg.

WordPress fue creado a partir del desaparecido b2/cafelog y se ha convertido junto a Movable Type en el CMS más popular de la blogosfera.

Las causas de su enorme crecimiento son, entre otras, su licencia, su facilidad de uso y sus características como gestor de contenidos.

2.5 Metodologías para el 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 actualidaduna constante evolución de las aplicaciones Web. Cada día se incrementan las transacciones financieras, la transferencia de información confidencial y ejecución de procesos online, entre otros, las cuales exigen funcionalidad, confiabilidad, usabilidad y eficiencia por mencionar algunas características de calidad. 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, su desarrollo tiende a ser ad hoc, resultando en aplicaciones de pobre calidad. La mayoría de los desarrolladores Web ponen poca atención en la elicitación y análisis de requisitos, así como en las metodologías y procesos de desarrollo. 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. No obstante, son las mismas metodologías de desarrollo las que no tratan de manera adecuada y profunda los atributos de calidad. Estas situaciones traen como consecuencia que los atributos de calidad de los sistemas basados en la Web tales como la funcionalidad, confiabilidad, mantenibilidad, usabilidad y portabilidad no se les da la debida consideración que se merecen durante el proceso de desarrollo.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. En otras palabras, 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.

Page 18: Programacion Web

Las aplicaciones web son populares debido a lo práctico del navegador web como cliente ligero, así como a la facilidad para actualizarlas y mantenerlas. Algunas aplicaciones son: los webmails, wikis, weblogs, tiendas en línea, intranet.Ingeniería Web es el proceso utilizado para crear, implantar y mantener aplicaciones y sistemas Web de alta calidad. 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.

Un empleo sistemático y disciplinado de modelos, 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.

El Proceso de Ingeniería Web

Características como inmediatez y evolución y crecimiento continuos, nos llevan a un proceso incremental y evolutivo, que permite que el usuario se involucre activamente, facilitando el desarrollo de productos que se ajustan mucho lo que éste busca y necesita.

Según Pressman, las actividades que formarían parte del marco de trabajo incluirían las tareas abajo enumeradas. Dichas tareas serían aplicables a cualquier aplicación Web, independientemente del tamaño y complejidad de la misma.

Las actividades que forman parte del proceso son: formulación, planificación análisis, modelado, generación de páginas, test y evaluación del cliente.

La formulación identifica objetivos y establece el alcance de la primera

entrega.

Page 19: Programacion Web

La planificación genera la estimación del costo general del proyecto, la

evaluación de riesgos y el calendario del desarrollo y fechas de entrega.

El análisis especifica los requerimientos e identifica el contenido.

La Modelado se compone de dos secuencias paralelas de tareas. Una consiste

en el diseño y producción del contenido que forma parte de la aplicación. La

otra, en el diseño de la arquitectura, navegación e interfaz de usuario. Es

importante destacar la importancia del diseño de la interfaz.

Independientemente del valor del contenido y servicios prestados, una buena

interfaz mejora la percepción que el usuario tiene de éstos.

En la generación de páginas se integra contenido, arquitectura, navegación e

interfaz para crear estética o dinámicamente el aspecto más visible de las

aplicación, las páginas.

El Test busca errores a todos lo niveles: contenido, funcional, navegacional,

rendimiento, etc. El hecho de que las aplicaciones residan en la red, y que

interoperen en plataformas muy distintas, hace que el proceso de test sea

especialmente difícil.

Finalmente, el resultado es sometido a la evaluación del cliente.

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). Todas las actividades CGC de la ingeniería software tradicional como son: establecimiento y supervisión de estándares, revisiones técnicas formales, análisis, seguimiento y registro de informes, etc, son igualmente aplicables a la Ingeniería Web. Sin embargo, en la Web toman especial relevancia para valorar la calidad aspectos como:

Usabilidad

Funcionabilidad

Fiabilidad

Seguridad

Eficiencia

Mantenibilidad

Control de la Configuración

Page 20: Programacion Web

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. La Web tiene características únicas que demandan estrategias y herramientas nuevas. Hay cuatro aspectos importantes a tener en cuenta en el desarrollo de tácticas de control de configuración para la Web.

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.

Personal: Cualquiera realiza cambios. Hay mucho personal no especializado

que no reconoce la importancia que tiene el control del cambio.

Escalabilidad: Es común encontrar aplicaciones que de un día para otro

crecen considerablemente. Sin embargo, las técnicas de control no escalan de

forma adecuada.

Política: ¿Quién posee la información? ¿Quién asume la responsabilidad y

coste de mantenerla?

La Gestión del Proceso

En un proceso tan rápido como es el proceso de Ingeniería Web, donde los tiempos de desarrollo y los ciclos de vida de los productos son tan cortos,¿merece la pena el esfuerzo requerido por la gestión? La respuesta es que dada su complejidad es imprescindible. Entre los aspectos que añaden dificultad a la gestión destacamos:

Alto porcentaje de contratación a terceros

El desarrollo incluye una gran variedad de personal técnico y no técnico

trabajando en paralelo

El equipo de desarrollo debe dominar aspectos tan varidos como, software

basado en componentes, redes, diseño de arquitectura y navegación, diseño

gráfico y de interfaces, lenguajes y estándares en Internet, test de aplicaciones

Web, etc, lo que hace que el proceso de búsqueda y contratación de personal

sea arduo.

¿Qué marca la diferencia?

A modo de breve resumen enumeramos las siguientes diferencias: Confluencia de disciplinas: Sistemas de información, ingeniería software y

diseño gráfico que requiere equipos multidisciplinares y polivalentes. Ciclos de

vida y tiempo de desarrollo muy cortos

Cambio continuo:

Page 21: Programacion Web

Necesidad de soluciones que permitan flexibilidad y adaptación conforme el

proyecto cambia.

Requisitos fuertes de seguridad, rendimiento y usabilidad.

¿Por qué es necesaria?

La Web evoluciona y crece sin diseño alguno. Prácticas tan pobres de calidad pueden introducir defectos que dejen al efecto 2000 como un juego de niños. Es deber de todos proporcionar cimientos firmes a una tecnología que “mágicamente” nos permite acceder a cualquier hora a cualquier punto del planeta para obtener bienes tan valiosos como son los servicios y la información.

Conclusiones

La aplicación de principios de ingeniería pueden evitar el caos potencial al que nos enfrentamos, y poner bajo control el desarrollo de las aplicaciones Web, minimizando riesgos y mejorando el mantenimiento y calidad.

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

 

Los lenguaje de programación web son versátiles, sencillos de usar y permiten crear soluciones de gran envergadura.

Las aplicaciones escritas en estos lenguajes están expuestas a diversas amenazas si no se toman las medidas adecuadas para evitarlo, por este motivo se resalta la importancia de la formación en seguridad que deberían de recibir todos los programadores.

 

Si no se procede de forma correcta, las aplicaciones web desarrolladas en estos lenguajes pueden servir como puerta de entrada de un intruso a la red de la empresa, por lo que la seguridad de este tipo de aplicaciones tiene que ser tomada como prioritaria para no exponer la seguridad de su negocio.

 

Page 22: Programacion Web

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.

 

El objetivo del mismo es conocer como proteger la aplicación contra los fallos más comunes (SQL Injection, XSS, Command Execution, File Inclusion …).

Las fallas de seguridad más comunes son:

 

Cross Site Scripting  (XSS). Las vulnerabilidades de XSS originalmente

abarcaban cualquier ataque que permitiera ejecutar código de "scripting", como VBScript o JavaScript, en el contexto de otro sitio web (y recientemente esto se

podría clasificar más correctamente como "distintos orígenes").

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

3.1. Procesamiento del lado del servidor.

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.

Todo lo que suceda dentro del servidor es llamado procesamiento del lado del servidor, o server-side processing. Cuando tu aplicación necesita interactuar con el servidor (por ejemplo, para cargar o guardar datos), ésta realiza una petición del lado del cliente (client-side request) desde el navegador, a través de la red usando invocaciones remotas a métodos (remote procedure

Page 23: Programacion Web

call, RPC). Mientras se está procesando una llamada RPC, tu servidor está ejecutando código del lado del servidor.

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

Cuando se utiliza un servicio en Internet, como consultar una base de datos, transferir un archivo o participar en un foro de discusión, se establece un proceso en el que entran en juego dos partes. Por un lado, el usuario, quien ejecuta una aplicación en procesador local: el denominado programacliente. Este programa cliente se encarga de ponerse en contacto con el procesador remoto para solicitar el servicio deseado. El procesador remoto por su parte responderá a lo solicitado mediante un programa que esta ejecutando. Este último se denomina programa servidor. Los términos cliente y servidor se utilizan tanto para referirse a los programas que cumplen estas funciones, como a las computadoras donde son ejecutados esos programas. 

El programa o los programas cliente que el usuario utiliza para acceder a los servicios de Internet realizan dos funciones distintas. Por una parte, se encargan de gestionar la comunicación con el computador servidor, de solicitar un servicio concreto y de recibir los datos enviados por éste; y por otra, es la herramienta que presenta al usuario los datos en pantalla y que le ofrece los comandos necesarios para utilizar las prestaciones que ofrece el servidor.

Page 24: Programacion Web

Cuando nosotros seleccionamos un enlace hipertexto, 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). 

Así pues, podemos hablar de lenguajes de lado servidor que son aquellos lenguajes que son reconocidos, ejecutados e interpretados por el propio servidor y que se envían al cliente en un formato comprensible para él, por ejemplo: ASP, PHP, JSP.

Por otro lado, los lenguajes de lado cliente (entre los cuales no 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.

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

Page 25: Programacion Web

Inversamente, 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.

3.2. 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. El término herramienta, en sentido estricto, se emplea para referirse a utensilios resistentes, útiles para realizar trabajos mecánicos que requieren la aplicación de una cierta fuerza física.

Cada herramienta tiene un fin específico y debería ser usado solo con un fin determinado, Sin embargo esto no se cumple en la mayoría de las tareas del quehacer humano y mucho menos en las aplicaciones web. Cuando pensemos en las mejores herramientas para el desarrollo web es necesario pensar en donde estará alojado nuestro sitio (hosting).

El hosting o alojamiento web es un sistema esencial para el funcionamiento de los sitios en Internet y es el lugar donde físicamente reside nuestra información. Si tenemos recursos ilimitados para tener nuestro propio sitio entonces tendriamos que hacer una gran investigación para seleccionar las herramientas más sofisticadas. Sin embargo para la mayoría de las aplicaciones debemos pagar porque nuestra información sea colocada en cierto servidor.

El lugar donde físicamente se almacenara nuestra información determina los lenguajes soportados (cliente, servidor), el gestor de la base de datos y las prestaciones que podremos ofrecer a nuestro futuros usuarios.

Sin el afan de romperse las camisas discutiendo este punto, las herramientas que usaremos para desarrollar el sitio, dependen de las preferencias, del acceso a las herramientas ("licencias") y la disponibilidad . En resumen cada quien habla como le va en la feria. Si somos expertos en un X lenguaje y el sistema Operativo de nuestro host no lo soporta, podremos tener las herramientas más sofisticadas pero no servirán de nada.

Page 26: Programacion Web

Las fases de un desarrollo web, así como los lenguajes de programación usados, son muy extensas y variadas, y por ello necesitamos herramientas específicas para cada una de ellas. Conoceremos a continuación las principales herramientas existentes para poder desarrollar fácilmente unproyecto web.

En el desarrollo web tenemos unas herramientas para el diseño, otras para la maquetación, otras para la programación, y para la depuración.Todas las herramientas que usemos son muy importantes, desde el sistema operativo hasta el comando más insignificante, y por ello debemos elegir la más adecuada a nuestras necesidades y capacidades.

Sistema Operativo

Para desarrollar una web, lo primero que necesitamos es un Sistema Operativo, como es lógico, y su elección no es tan trivial. Hay que tener en cuenta las aplicaciones de las que dispone el Sistema Operativo y sus costos.

 

Si pensamos desarrollar en .NET este solo es soportado por windows y los costos de hospedaje son mas caros que los que soportan Linux.

Fases de desarrollo de una web

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

Page 27: Programacion Web

Diseño: consiste en crear esbozos de la web final mediante una herramienta

gráfica, como Photoshop

Maquetación HTML/CSS: consiste en convertir los esbozos creados en la

fase anterior en plantillas HTML, su respectiva hoja de estilos, y las imágenes

usadas. Es posible saltarse la fase anterior para comenzar directamente con

esta fase, dependiendo de si dominamos herramientas como Photoshop o no.

Programación cliente: consiste básicamente en Javascript. Existen muchas

librerias de distribución libre como JQUERY que nos aportan verdaderas joyas

para el desarrollo.

Programación servidor: en esta fase, que se desarrolla junto con la anterior,

crearemos la aplicación web en un lenguaje de servidor, como puede ser PHP,

ASP .NET, Python, Perl, Java, etc.

Depuración: esta fase enlaza la anterior con la siguiente, y es donde haremos

las pruebas unitarias, aserciones, trazas, etc.

Pruebas en local: en nuestro servidor local haremos todas las pruebas

posibles. Por ejemplo usando wampServer

Subir archivos al hosting: Dependiendo del hosting, podremos usar FTP,

SSH, aconsejo usar cuteFTP es una herramienta confiable y versatil.

Pruebas en hosting: realizaremos las últimas pruebas en el servidor del

hosting para comprobar que el cambio de servidor no ha afectado a nada. Para

evitar problemas, nuestro servidor local debe tener exactamente la misma

configuración que el servidor del hosting. Recuerde probar que sus códigos

sean compatibles al menos con Firefox, Safari e Internet explorer

En general podemos usar comercialmente la suite de Adobe que incluye a Dreamwever y sus herramientas de edición un servidor FTP, además de validar nuestros códigos javascript y css. Con el inconveniente de ser una herramienta muy cara.

En contra parte, va versión Joomla! edition de kademar Linux es la adaptación de la versión de Escritorio DVD (Leo) 4.9.1 con la inclusión de los programas necesarios para trabajar con el gestor de contenidos Joomla!.

En esta edición se incluye instalado el gestor de contenidos Joomla, junto con los programas necesarios para su funcionamiento totalmente instalados y configurados. Es posible aprender a usar Joomla! sin necesidad de buscar un

Page 28: Programacion Web

servidor de hosting para crear páginas web. Está funcionando en local y no se tiene que pelear con la instalación de todo lo necesario: base de datos MySql, phpmyadmin, apache.... etc. Todo está ya instalado y configurado, plenamente funcional para usarlo inmediatamente.

3.3. Variables

Para ejemplificar como se estructura un programa en PHP, checaremos el siguiente código para probar nuestro primer programa. El cual, muestra el himno del Tecnológico de Veracruz.

Los programas en PHP inician con "<?php" y terminan con el tag "?>". En el código la instrucción echo imprime en pantalla la cadena encerrada entre pares de '"'. Note que entre las líneas encontramos el tag html "<br />" lo cual regresa un retorno de línea.

Además observe que cada línea termina con un ";".

?123456789

<?php   echo "Himno del Instituto Tecnológico de Veracruz";   echo"Letra: Francisco Rivera Ávila. ";   echo"Música: Agustín Lara y Aguirre";    echo "Con ilusión, prestancia y con valor,";   echo "con juvenil deseo de vencer,";   echo "a mi Instituto voy con sin igual fervor,";   echo "en busca de la luz y del saber.";   ?>

DescargarEjecutar

Variables.

Las variables en PHP no necesitan, a diferencia de otros lenguajes de programación ser declaradas específicamente dado que cuando a una variable se le asigna un valor esta se inicializa en forma automática determinando la cantidad de memoria necesaria para dicha variable.

Page 29: Programacion Web

Los nombres de las variables van precedidas del signo "$". Los nombres de las variables son sensibles al uso de las mayúsculas y minúsculas. De tal forma que la sintaxis correcta es:

$nombreVariable = valor;

Por ejemplo, las siguientes asignaciones serían perfectamente validas

?1234

$miNovia = "Gabriela Vergara <br />";$nacio = "Caracas, Venezuela<br />";$cumple = "29 de Mayo <br />";$signo = "Géminis <br />"

El nombre de una variable también se conoce como identificador y debe cumplir las siguientes normas:

Sólo puede estar formada por letras y números y los símbolos ($ dólar

y _ guión bajo).

El primer carácter del nombre del identificador o varible debe ser estrictamente

el signo de dólar.

Ahora observe el siguiente código, después de ejecutarlo, use la opción ver código fuente de su navegador y encontraras solo código html.

?123456789101112

<?php

  $foto    = "<img src='../img/artistas/gabrielaVergara.jpg' />";  $miNovia = 'Gabriela Vergara';   $nacio   = 'Caracas, Venezuela';   $cumple  = '29 de Mayo';   $signo   = 'Géminis';   echo $foto;  echo 'Mi novia: '.$miNovia."<br />";  echo 'Nacio: '.$nacio."<br />";  echo 'Cumpleaños: '.$cumple."<br />";  echo 'Signo: '.$signo."<br />";?>

Page 30: Programacion Web

DescargarEjecutar

Tipos de datos

PHP soporta los siguientes tipos y son definidos en tiempo de ejecución

integer. Son datos de tipo numérico entero

double. Datos numéricos en coma flotante ( manejo de decimales)

string. Cadenas alfanuméricas.

boolean. Valores de tipo Verdadero o Falso como resultado de evaluar una

condición, estado de una variable, etc. array . Matrices

object. Estructuras complejas de datos.

class. Moldes mediante los cuales se crean los objetos

unknown type. Tipo desconocido

NULL.Es el tipo de una variable a la que aún no se le asigna valor alguno.

Para forzar una variable a un tipo concreto use la función settype()

Dado que las variables no se declaran, el tipo se adquiere en tiempo de ejecución al tipo que usted quiera. Dependiendo de la información que contenga, una variable puede ser considerada de uno u otro tipo:

Usos de las variables

Tipo Asignación Resultado

Entero $edad = 45; Números sin decimales

Real$pi = 3.1415;

Números en punto flotante.

Octal $a = 0123 Número octal (equivalente al 83 decimal).

Hexadecimal $b = 0x12Número hexadecimal (equivalente al 18 decimal).

Alfanuméricas

$c = "a" Variable alfanumérica

Page 31: Programacion Web

Usos de las variables

Tipo Asignación Resultado

Alfanuméricas

$c = 'a' Variable alfanumérica

Ejemplos:Expresión Resultado

$algo = 1 + 5; 6

$algo = 1 + "5"; 6

$algo = 3 + "4 es basura"; 7!!!

$algo = "4 es basura" + 7; 11!!!

$algo = "4.2 es basura" + 7.2 11.4!!!!!

DescargarEjecutar

Las cadenas (string) de caracteres se especifican entre uno de dos tipos de delimitadores (" o '). Encerrada entre doble comillas " es posible emplear los siguientes caracteres especiales.

Caracteres protegidos

 

Secuencia Significado

\n Nueva línea

\r Retorno de carro

\t Tabulación horizontal

\\ Barra invertida

\$ Signo de dólar

\" Comillas dobles

\[0-7]{1,3}La secuencia de caracteres que coincide con la expresión regular es un carácter en notación octal

\x[0-9A-Fa-f]{1,2}

La secuencia de caracteres que coincide con la expresión regular es un carácter en notación hexadecimal

Page 32: Programacion Web

Nuevamente, si intenta escapar cualquier otro carácter, ¡la barra invertida será impresa también! Antes de PHP 5.1.1, la barra invertida en \{$var} no venía imprimiéndose.

A diferencia de otros lenguajes, PHP posee una gran flexibilidad a la hora de operar con variables. En efecto, cuando definimos una variable asignándole un valor, el computador le atribuye un tipo. Si por ejemplo definimos una variable entre comillas, la variable será considerada de tipo cadena:

$variable="5"; //esto es una cadena

Sin embargo si pedimos en nuestro script realizar una operación matemática con esta variable, no obtendremos un mensaje de error sino que la variable cadena se tomara como numérica:

?12345678

<?php  //esto es una cadena  $cadena = '25';   //esto es un entero  $entero = 15;   echo "$cadena + $entero = ";  echo $cadena + $entero?>

DescargarEjecutar

Este script dará como resultado "40". La variable cadena ha sido asimilada en entero (aunque su tipo sigue siendo cadena) para poder realizar la operación matemática. Del mismo modo, podemos operar entre variables tipo entero y real.

PHP se encarga durante la ejecución de interpretar el tipo de variable necesario para el buen funcionamiento del programa. Esto podría parecer una ventaja pero en la práctica es un dolor de cabeza.

Sin embargo, en contraste, hay que tener cuidado en no cambiar mayúsculas por minúsculas ya que, en este sentido, PHP es sensible. Conviene por lo tanto trabajar ya sea siempre en mayúsculas o siempre en minúsculas para evitar este conflicto regularmente difícil de identificar.

Page 33: Programacion Web

Variables predefinidas

 

PHP dispone de una gran cantidad de variables que ya están definidas, y que tenemos a disposición para usarlas dentro de nuestros script. Para ver todas las variables que tenemos disponibles en nuestro servidor y versión de PHP, es necesario hacer un llamado a la función predefinida phpinfo(). Por ejemplo:

?123

<?php  echo phpinfo();?>

Ejecutar

A continuación se presentan algunas de las variables predefinidas. El resto de las variables las puede obtener de la página resultado del programa anterior.

Variable Descripción

$DOCUMENT_ROOTNombre del subdirectorio donde se ejecuta el script

$HTTP_ACCEPT_LANGUAGE Idioma utilizado

$HTTP_CONNECTIONIndica los contenidos de la cabecera Conecction.

$HTTP_REFERER http://localhost/

$HTTP_USER_AGENT Indica el navegador del cliente

$PHP_SELFNombre del archivo donde se está ejecutando el script

$QUERY_STRINGDevuelve la QueryString. Variables y sus valores

$REMOTE_ADDR IP del cliente

$REQUEST_METHODMétodo de petición con el cual se accedio a la página

$SERVER_FILENAMERuta y nombre del script que se esta ejecutando

$SERVER_PORT Puerto desde donde se ejecuta el scipt

$SERVER_PROTOCOL Versión del protocolo HTTP

Page 34: Programacion Web

Variable Descripción

$SERVER_SOFTWARENombre del servidor Web que está corriendo el script

$_SERVERVersión del servidor web y la versión de PHP

Con estas variables predefinidas se pueden hacer cosas interesantes, como por ejemplo pedir la $HTTP_ACCEPT_LANGUAGE y dependiendo de su contenido, enviar a los usuarios a sitios en su idioma. Para visualizar el contenido de cualquiera de estas variables predefinidas de PHP, use el siguiente código:

?123456789

<?php  echo "Idioma:           ".$HTTP_ACCEPT_LANGUAGE;  echo "Navegador:        ".$HTTP_USER_AGENT";  echo "Cabecera:         ".$HTTP_CONNECTION;  echo "IP cliente:       ".$REMOTE_ADDR.";  echo "Nombre del archivo:".$PHP_SELF;  echo "Versión Apache:    ".$SERVER_SOFTWARE;  echo "Puerto:            ".$SERVER_PORT;  ?>

DescargarEjecutar

Ejemplo: Dirección IP del cliente

getIPReal es una función que nos regresa la IP del cliente

empty es una función PHP que nos dice si una variable está vacia o es nula.

?123456789

<?php  function getIpReal() {    if (!empty($_SERVER['HTTP_CLIENT_IP'])) {        $ip = $_SERVER['HTTP_CLIENT_IP'];    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];    } else { $ip = $_SERVER['REMOTE_ADDR']; }    return $ip;  }  echo 'ip = '.getIpReal();?>

Page 35: Programacion Web

1011

DescargarEjecutar

Expansión de variables

Propiedad de PHP de incluir el valor de la variables en una cadena. Y funciona si la cadena se dilimita con ".

La variable escudo se expande en la línea 5.

La variable capital se expande en la línea 11.

?123456789101112

<?php   $estado = 'VERACRUZ DE IGNACIO DE LA LLAVE';   $escudo = '../img/escudoVeracruz.jpg';   $capital = 'Xalapa';    echo "<img src='$escudo' border='0' />";   echo "El nombre oficial de nuestro Estado es $estado, "   echo "su origen se";   echo ' enmarca en una serie de acontecimientos históricos ';   echo 'que marcaron un hito en la vida política, económica y ';   echo 'social ';   echo "de nuestro país. Su capital es $capital."; ?>

DescargarEjecutar

Variables de variables

PHP puede reconocer y manejar variables que se refieran a otras variables. Se trata de variables cuyo contenido es el nombre de otras variables. Por ejemplo: Las líneas 4, 7 y 10 hacen uso de la propiedad de referenciar variables.

?12

<?php

  $saludo  = 'Programmation en PHP';

Page 36: Programacion Web

34567891011

  $mensaje = 'saludo';     echo $$mensaje."<br />";   $saludo = 'Programming in PHP';  $mensaje = 'saludo';     echo $$mensaje."<br />";   $saludo = 'Programacion en PHP';  $mensaje = 'saludo';     echo $$mensaje."<br />";?>

DescargarEjecutar

Otra forma de hacer uso de las variables de variables es:

Las líneas del 2 al 9 declaran variables con el nombre de los estados de la

Republica Mexicana

Mediante la expresión ${"estado".$i} se aplica la variable de variables (líneas

12 y 14)

?1234567891011121314151617

<?php  $estado1 = 'Aguascalientes';  $estado2 = 'Baja California';  $estado3 = 'Baja California Sur';  $estado4 = 'Campeche';  . . .  $estado30 = 'Veracruz';  $estado31 = 'Yucatan';  $estado32 = 'Zacatecas';  $cadena = '';  for($i = 1;$i <= 32; $i++) {    $estado = 'estados/'.${'estado'.$i}.'.jpg';    $cadena .= "<img src='$estado' />";    $cadena .= ${'estado'.$i};  }  echo $cadena;?>

DescargarEjecutar

Constantes

Page 37: Programacion Web

Una constante es un dato cuyo valor no puede variar durante la ejecución del

programa. 

El nombre de las constantes es sensible a mayúsculas.

Por convención, los identificadores (nombres) de las constantes suelen

declararse en mayúsculas.

El alcance de una constante es global, es decir, es posible acceder a ellas sin

preocuparse por el ámbito de alcance.

Importante: Un nombre de constante válido empieza con una letra o el carácter de subrayado, seguido por una serie letras, números, o subrayados. Los nombres de constantes en PHP no admiten espacios en blanco, signos de puntuación (acentos, ¡!, ¿?, etc), ni caracteres especiales(%, ñ, etc).

Sintaxis

Se puede definir una constante usando la función define(). Una vez definida, no

puede ser modificada, ni eliminada.

Solo se puede definir como constantes valores escalares (boolean, integer, float

y string ). Los tipos escalares son aquellos cuyos valores no pueden 'dividirse'

en partes menores, no como los arrays, por ejemplo.

Para obtener el valor de una constante solo es necesario especificar su nombre.

A diferencia de las variables, no se tiene que especificar el prefijo $. También se

puede utilizar la función constant() para obtener el valor de una constante.

Diferencias entre constantes y variables:

No son precedidas por un símbolo de dólar ($).

Son declaradas usando la función() define , nunca por asignación simple.

Se definen y acceden sin tener en cuenta las reglas de alcance del ámbito.

No pueden ser redefinidas o eliminadas después de establecerse.

Las constantes solo puede albergar valores escalares (boolean, integer, float y

string ).

Page 38: Programacion Web

Ejemplo: Definición de constantes

?12345678910

<?php  define('YARDA', 0.9144 );  define('RECORD', 5048 );

  $cadena  = 'El record de Dan Marino en Yardas ';  $cadena .= 'por pase en una temporada es de ';  $cadena .= RECORD. 'Yardas';  $record = RECORD * YARDA;   $cadena .= "Es decir $record metros";  echo $cadena;?>

DescargarEjecutar

Constantes predifinicas

En PHP exiten algunas constantes predefinidas que no requieren la instrucción: define("Nombre","Valor"). A continuación se presenta un ejemplo del uso de estas variables.

?12345678

<?

  $cadena  = 'Ruta: '.__FILE__.'<br />';  $cadena .=  'Esta es la línea: ';  $cadena .=  __LINE__.' del archivo<br />';  $cadena .= 'Versión PHP: '.PHP_VERSION;  $cadena .= 'Sistema operativo: '.PHP_OS;  echo $cadena;?>

DescargarEjecutar

Funciones de manejo de variables

 

PHP proporciona funciones para manipular las variables que se usaran intensivamente en secciones posteriores. Como por ejemplo:

Page 39: Programacion Web

Función Descripción Sintaxis

issetDetermina si una variable tiene valor. Su argumento es un nombre de variable

isset($var)

unsetElimina el contenido de una variable. El resultado es un NULL unset($var)

emptyRegresa un true si la variable todavía no ha recibido valor

empty($var)

gettypePermite conocer el tipo de datos de la variable

gettype($var)

settypePermite modificar el tipo de dato de una variable

settype($var, "tipo")

lowercaseConvierte el contenido de una variable alfanumérica en minúscula

lowercase($var)

uppercase

Convierte el contenido de una variable alfanumérica en mayúscula

uppercase($var)

is_intEsta función regresa true si la variable pasada como argumento es entera; en caso contrario devuelvefalse.

is_int($var)

is_floatRegresa true si la variable pasada como argumento es de tipo float; en caso contrario regresa false.

is_float($var)

is_number

Regresa true si la variable pasada como argumentp es un número o una cadena numérica; en caso contrario, devuelve false.

is_number($var)

3.4. Operadores

Los operadores constituyen elementos esenciales de cualquier lenguaje de programación. Con ellos podemos asignar, unir, cambiar ocomparar valores de datos, cambiar el flujo del programa, etc.

Page 40: Programacion Web

Los operadores son símbolos que representan operaciones sobre un valor. Vamos a ver a continuación los operadores admitidos por PHP agrupados según su utilidad.

Operador de asignación

El símbolo = permite asignar valores a variables:

?

1

2

3

4

5

6

<?php

  $calle = 'Veracruz';

  echo $calle.' ';

  $mi_numero = 319;

  echo $mi_numero;

?>

Descargar

Ejecutar

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

?

1

2

3

4

5

<?php

  $numeros = 'uno, dos, tres';

  $numeros .= ', <span class="e2507h48" id="e2507h48_2">cuatro</span>, cinco, seis';

  echo $numeros;

?>

Page 41: Programacion Web

Descargar

Ejecutar

Operador de concatenación

Usando el símbolo . concatenamos cadenas

?

1

2

3

4

5

6

<?php

  $nombre = 'Jorge';

  $apellido = 'Perez';

  //Concatena nombre y apellido m'as un espacio

  echo 'Nombre: '.$nombre.' '.$apellido;

?>

Descargar

Ejecutar

Operadores aritméticos

Los operadores aritméticos de PHP son similares a los de C, Java y Javascript. Los símbolos +, -, /, * realizan operaciones de aritmética básica, el símbolo % obtiene el resto de una división (módulo).

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

Operador Ejemplo Resultado

Negación -$var1 -10

Suma $var1 + $var2 15

Page 42: Programacion Web

Operador Ejemplo Resultado

Resta $var1 - $var2 5

Multiplicación

$var1 * $var2 50

División $var1 / $var2 2

Módulo $var1 % $var2 0

Ejemplo: Uso de los operadores aritméticos

?

<?php

  $enviar = $_POST['enviar'];

  if( isset($enviar) and $_SERVER['REQUEST_METHOD'] == 'POST' ) {

    $a = $_POST['a'];

    $b = $_POST['b'];

    if( $a*$b !== 0 ) { 

      $titulo = '<h2>Operadores Aritméticos</h2>';

      $tabla = '<table><thead>';

      $tabla .= '<tr><td>Ejemplo</td><td>Resultado</td></tr>';

      $tabla .= '</thead>';

      $finlinea = '</div></td></tr>'; 

      $tabla .= "<tr><td>a</td><td>$a</td></tr>";

      $tabla .= "<tr><td>b</td><td>$b</td></tr>";

      $tabla .= '<tr><td>a + b</td><td>'.($a + $b).'</td></tr>';

      $tabla .= '<tr><td>a - b</td><td>'.($a - $b).'</td></tr>';

      $tabla .= '<tr><td>a * b</td><td>'.($a * $b).'</td></tr>';

      $tabla .= '<tr><td>a / b</td><td>'.($a / $b).'</td></tr>';

      $tabla .= '<tr><td>a % b</td><td>'.($a % $b).'</td></tr>';

      $tabla .= '</table>';

Page 43: Programacion Web

      echo $tabla';

    } else { echo "<p class='centrado'>División por cero</p>";}

  } else { echo "<p  class='centrado'>Falta información asi no puedes ejecutar</p>";}

  echo "<p class='centrado'><a href='0304Operadores04.html'>Regresar</a>";  

?>

DescargarEjecutar

Operadores abreviados o combinados

Una forma habitual de modificar el contenido de las variables es mediante los operadores combinados. La siguiente tabla resume los operadores de asignación combinados

Operador Ejemplo Descripción

+= $variable += 10 $variable = $variable + 10;

-= $variable -= 10 $variable = $variable - 10;

*= $variable *= 10 $variable = $variable * 10;

/= $variable /= 10 $variable = $variable / 10;

%= $variable %= 10 $variable = $variable % 10;

.=$variable .= "concatenar"

Concatena las cadenas $variable y "concatenar"

Ejemplo: Tabla multiplicar usando +=

?

Page 44: Programacion Web

= $_POST['enviar'];

= $_POST['tabla'];

if( isset($enviar) && $_SERVER["REQUEST_METHOD"] == "POST" ) {

= "<h2 align='center'><strong>";

.= "Operadores Abreviados o Combinados";

$titulo."</strong></h2>";

= "<h2 align='center'><strong>Tabla de multiplicar usando +=";

.= " </strong></h2></td></p>";

$subtitulo;

= 0;

"<table>";

= 1; $i <= 10; $i++) {

"<tr><td>".$i."</td><td>*</td><td>".$tabla."</td>";

$resultado += $tabla;

"<td>=</td><td>".$resultado."</td></tr>";

"</table>";

unset($_POST['enviar']);

unset($_POST['tabla']);

"<p class='centrado'>Falta información asi no puedes ejecutar</p>";}

"<p class='centrado'><a href='0304Operadores05.html'>";

"<img src='../../images/icon-<span class="e2507h48" id="e2507h48_6">home</span>.gif' /><br />Regresar</a></p>";

DescargarEjecutar

Operadores de incremento - decremento

Page 45: Programacion Web

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

Operador Ejemplo Efecto

Pre-incremento ++$a Incrementa $a en uno y después devuelve a.

Post-incremento $a++ Devuelve $a y después incrementa $a en uno.

Pre-decremento --$a Decrece el valor de $a en uno y después devuelve $a.

Post-decremento

$a-- Devuelve $a y después decrece su valor en uno.

 Ejemplo: Operadores de Post y Pre incremento -- decremento

Los operadores de incremento/decremento no afectan a los valores booleanos.

Decrementar valores NULL tampoco tiene efecto, aunque al incrementarlos su

resultado es 1.

Pruebe introducir una letra que sucede

Ads not by this site

?

<?php

  $enviar = $_POST['enviar'];

  $a = $_POST['a'];

  $b = $_POST['b'];

  if( isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST' ) {

    $titulo = "<h2>".'Operadores de Incremento - Decremento';

    echo $titulo."</h2>";

    $tabla = "<table>";

    $tabla .= "<tr><td>Ejemplo</td><td>Resultado</td></tr>";  

    $tabla .= "<tr><td>a</td><td>$a</td></tr>";

    $tabla .= "<tr><td>b</td><td>$b</td></tr>";

Page 46: Programacion Web

    $tabla .= "<tr><td>a++</td><td>".($a++)."</td></tr>";

    $tabla .= "<tr><td>++a</td><td>".(++$a)."</td></tr>";

    $tabla .= "<tr><td>b--</td><td>".($b--)."</td></tr>";

    $tabla .= "<tr><td>--b</td><td>".(--$b)."</td></tr>";

    $tabla .= "</table>";

    echo "$tabla";

    unset($_POST['enviar']);

    unset($_POST['a']);

    unset($_POST['b']);

  } else {echo "<p class='centrado'>Falta información asi no puedes ejecutar</p>";}

  echo "<p class='centrado'><a href='0304Operadores06.html'>";

  echo "<img src='../../images/icon-home.gif' /><br />Regresar</a></p>";

?>

DescargarEjecutar

Operadores de Comparación.

Los operadores de comparación, como su nombre indica, permiten comparar dos valores.

Operador Ejemplo Cierto si:

Igualdad $a == $b $a es igual a $b.

Identidad $a === $b $a es igual a $b y además son del mismo tipo

Desigualdad

$a != $b $a no es igual a $b.

$a !== $b Los operandos no son iguales o del mismo tipo

Menor que $a < $b $a es estrictamente menor que $b.

Page 47: Programacion Web

Operador Ejemplo Cierto si:

Menor o igual que

$a <= $b $a es menor o igual que $b.

Mayor que $a > $b $a es estrictamente mayor que $b.

Mayor o igual que $a >= $b $a es mayor o igual que $b.

Ejemplo: Operadores de comparación

?

<?php

  $enviar = $_POST['enviar'];

  $a = $_POST['a'];

  $b = $_POST['b'];

  $c = $_POST['c'];

  if( isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST' ) {

    $titulo = "<h2 align='center'><strong>";

    $titulo .= "Operadores de Comparación</strong></h2>";

    echo $titulo;

    echo '<p align="center">'.'$a = '.$a."</p><br>";

    echo '<p align="center">'.'$b = '.$b."</p><br>";

    echo '<p align="center">'.'$c = '.$c."</p><br>";

    $res0 = '($a == $c)';

    $res2 = '($a === $c)';

    $res4 = '($a >= $b)';

    if ($a == $c)  {$res1 = 'TRUE';} else {$res1 = 'FALSE';}

    if ($a === $c) {$res3 = 'TRUE';} else {$res3 = 'FALSE';}

    if ($a >= $b)  {$res5 = 'TRUE';} else {$res5 = 'FALSE';}

    $tabla = "<table border='1' align='center' ";

    $tabla .= "<tr><td>Ejemplo</td><td>Resultado</td></tr>";

Page 48: Programacion Web

    $tabla .= "<tr><td>$res0</td><td>$res1</td></tr>";

    $tabla .= "<tr><td>$res2</td><td>$res3</td></tr>";

    $tabla .= "<tr><td>$res4</td><td>$res5</td></tr></table>";

    echo "<pre>$tabla</pre>";

    unset($_POST['enviar']);

    unset($_POST['a']);

    unset($_POST['b']);

  } else { echo "<p>Falta información así no puedes ejecutar</p>";}

  echo "<a href='0304Operadores07.html'><img src='../../images/icon-home.gif' ";

  echo " /><br />Regresar</a></div>";  

?>

DescargarEjecutar

Otro operador condicional es el operador "?:" (o ternario), que funciona como en C, Java y otros muchos lenguajes:

(expr1) ? (expr2) : (expr3);

 

La expresión toma el valor expr2 si expr1 se evalúa a cierto, y expr3 si expr1 se evalúa a falso.

Operadores Lógicos

Los operadores lógicos o booleanos se utilizan conjuntamente con expresiones que devuelven valores lógicos. Con ellos es posible combinar condiciones y evaluarlas en una sola expresión. La sintaxis de estos operadores es la siguiente:

Page 49: Programacion Web

Operador Ejemplo Cierto si:

&& $a && $b

Ambos son ciertos

and $a and $b

|| $a || $b

Si uno o ambos es cierto

or $a or $b

xor $a xor $b Solo si uno de los dos es cierto.

! !$a Si $a es Falsa

Ejemplo: Clasificación de huracanes según la escala Saffir-Simpson

?

<?php

  if( isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST' && $velocidad >= 119) {

    echo mensaje();

    if(($velocidad >= 119) && ($velocidad <= 153)){

        $categoria = 1;

    } elseif(($velocidad >= 154) && ($velocidad <= 177)){

        $categoria = 2;

    } elseif(($velocidad >= 178) && ($velocidad <= 209)){

        $categoria = 3;

    } elseif(($velocidad >= 210) && ($velocidad <= 249)){

        $categoria = 4;

    }elseif( $velocidad >= 250){

        $categoria = 5;

    }

    $imagen = "<img src='huracan/damage".$categoria.".jpg' />";

    $fila = "<tr><td align='center'> $velocidad </td>";  //construyendo la última fila

    $fila .= "<td align='center'>".$categoria."</td>";

Page 50: Programacion Web

    $efecto =  damages($categoria);

    $fila .= "<td><small>$efecto</small></td>";

    $fila .= "<td>".$imagen."</td></tr></table>";

    echo $fila;

  } else {

      echo "<p align='center'>Falta información así no puedes ejecutar</p>";

  }

?>

DescargarEjecutar

Operador de ejecución 

PHP soporta un operador de ejecución: el apóstrofe invertido (``). PHP intentará ejecutar la instrucción contenida dentro de los apóstrofes invertidos como si fuera un comando del shell; y su salida devuelta como el valor de esta expresión (i.e., no tiene por qué ser simplemente volcada como salida; puede asignarse a una variable).

Ejemplo: Operador de ejecución

La línea 2 carga la configuración del servidor web

La línea 4 asigna a la variable entorno el contenido del subdirectorio

Es equivalente a la función shell_exec y por defecto está inhabilitado su uso si php esta configurado para ejecutarse en safe_mode.

?

1

2

<?php

  $entorno = `set`;

Page 51: Programacion Web

3

4

5

6

  echo "$entorno";

  $entorno = `ls -l`;

  echo "$entorno";

?>

Precedencia de operadores

Cuando una expresión está formada por más de un operador del mismo tipo, PHP la evalúa de izquierda a derecha, pero cuando creamos expresiones que utilizan más de un operador diferente, no siempre evalúa estas expresiones de la misma forma.

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.

A continuación se presenta en la tabla la precedencia de los operadores de menor a mayor.

Asociatividad Operadores

izquierda ,

izquierda or

izquierda xor

izquierda and

derecha print

izquierda = += -= *= /= .= %= &= |= ^= ~= <<= >>=

Page 52: Programacion Web

Asociatividad Operadores

izquierda ? :

izquierda ||

izquierda &&

izquierda |

izquierda ^

izquierda &

no asociativo == != ===

no asociativo < <= > >=

izquierda << >>

izquierda + - .

izquierda * / %

derecha! ~ ++ -- (int) (double) (string) (array) (object) @

derecha [

no asociativo new

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

Page 53: Programacion Web

valores verdadero o falso. Para PHP el 0 es equivalente a falso y cualquier otro número es verdadero.

if...else

La sentencia if...else permite 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 la sentencias de control).

?12345

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.

?

= $_POST['enviar'];

if( isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST' ){

% 2 ) == 0 ) {= "$n es par";

= "$n es impar";"<div align='center'>".$cadena."</div><br />";

<p class='centrado'><a href='0305SentenciasControl01.html'><img src='../../images/icon-<span class="e2507h48" id="e2507h48_6">home</span>.gif' /><br />Regresar</a></p>       

<form <span class="e2507h48" id="e2507h48_4">id</span>='forma' name='forma' method='post' action='0305SentenciasControl01.php'>

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

Page 54: Programacion Web

DescargarEjecutar

Ejemplo: Construir un programa que capture un deporte y despliegue dos implementos deportivos apropiados.

isset es una función PHP que regresa verdadero si una variable tomo valor

$_SERVER['REQUEST_METHOD'] método de petición se usó para

acceder a la página unset destruye una variable especificada

?<?php  $enviar = $_POST['enviar'];  if( isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST' ) {     echo "<h1>Implementos deportivos de ".$_POST['deporte']."</h1>";     echo "<p class='centrado'><img alt='' src='deportivos/".$_POST['deporte']."01.jpg' />";     echo "<img alt='' src='deportivos/".$_POST['deporte']."02.jpg' /></p>";     unset($enviar);     unset($_POST['deporte']);     ?>       <p class='centrado'>       <a href='0305SentenciasControl02.php'>       <img src='../../images/icon-home.gif' />       <br />Regresar</a></p>      <?  } else {       ?>        <form id='forma' name='forma' method='post' action='0305SentenciasControl02.php'>          <fieldset>          <legend>Implementos deportivos</legend>            <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>    <?  }?>

Page 55: Programacion Web

DescargarEjecutar

Existe una forma sencilla de usar la sentencia if cuando no tenemos que usar el else y solo tenenemos que ejecutar una línea de código.

?12

$a = 6;if ($a > 4) echo "$a es mayor que 4";

Ejemplo: Cálculo del área y perímetro de un triángulo dados sus lados, mediante la formula de Herón. Note que si el radical de área es negativo, los lados proporcionados no forman un triángulo

Ads not by this site

?<?php>  $a = $_POST['a']; $b = $_POST['b']; $c = $_POST['c'];  $datos = empty($a) or empty($b) or empty($c);  $enviar = $_POST['enviar'];  if( !$datos && isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST' ) {     $perimetro = $a + $b + $c; //semiperimetro     $p = $perimetro/2;     $radical = $p*($p - $a) * ($p - $b) * ($p - $c);     if($radical < 0 ) {        $resultado = 'No es un triángulo'."<br />";     } else {         $resultado  = "<strong>Área = </strong>".sqrt($radical)."<br />";         $resultado .= "<strong>Perímetro </strong>= ".$perimetro."<br />";         echo "<p class='centrado'>".$resultado."</p>";     }     ?>       <p class='centrado'>

Page 56: Programacion Web

          <a href='0305Triangulo.php'><img src='../../images/icon-home.gif' />          <br />Regresar</a>       </p>     <?  } else {     ?>       <form id='forma' name='forma' action='0305Triangulo.php' method='post'>       <fieldset>         <legend>Área y perímetro de un triángulo</legend>         <p><label for='a'>a</label>            <input id='a' name='a' maxlength='4' type='text' size='4' /></p>         <p><label for="b">b</label>            <input id='b' name='b' maxlength='4' type='text' size='4' /></p>         <p><label for="c">c</label>            <input id='c' name='c' maxlength='4' type='text' size='4' /></p>         <p><input id='enviar' name='enviar' type='submit' value='Enviar' /></p>       </fieldset>       </form>     <?  }?>

DescargarEjecutar

switch...case...default

Una alternativa a if...elseif...else, es  la sentencia switch, la cual evalúa y compara cada expresión de la sentencia case con la expresión que evaluamos, si llegamos al final de la lista de case y no encontramos condición verdadera, ejecuta el código de bloque que haya en la sentenciadefault.

Si encontramos una condición verdadera debemos ejecutar un break para que la sentencia switch no siga buscando en la lista de case.

Ejemplo: El siguiente código imprime el día de la semana actual.

Las líneas 3 al 13 describen un vector asociativo para representar el nombre

largo en español del día.

Page 57: Programacion Web

La función DATE maneja diversos parámetros como se obtienen el día de la

semana abreviado en inglés (Línea 12).

Observe que la sentencia break evita que la ejecución del código continue

evaluando

?12345678910111213141516171819202122232425

<?php  function diaSemana(){    $semanaArray = array(        'Mon' => 'Lunes',         'Tue' => 'Martes',         'Wed' => 'Miercoles',         'Thu' => 'Jueves',         'Fri' => 'Viernes',         'Sat' => 'Sábado',         'Sun' => 'Domingo',     );      return $semanaArray[date('D')];  } //diaSemana

   switch (diaSemana()) {    case 'Lunes': echo 'Hoy es Lunes'; break;    case 'Martes': echo 'Hoy es Martes'; break;    case 'Miercoles': echo 'Hoy es Miercoles'; break;    case 'Jueves': echo 'Hoy es Jueves'; break;    case 'Viernes': echo 'Hoy es Viernes'; break;    case 'Sábado': echo 'Hoy es Sábado'; break;    case 'Domingo': echo 'Hoy es Domingo'; break;    default: echo 'Esa cadena no corresponde a ningún día de la semana';  }?>

DescargarEjecutar

A continuación se presenta un código donde no se evalua una variable, lo que se efectua es una evaluación de expresiones. Usaremos nuevamente el ejemplo de los huracanes.

La función mt_rand(119,400) genera valores aleatorios entre 119 y 400

(Liínea 32)

switch (true) permitirá que siempre se evalue la expresión a cierto o falso según

sea el caso (Línea 34)

?

Page 58: Programacion Web

<?php  function damages($i) {    $damage = array();    $damage[1]  = 'No daño efectivo a edificios <br/> Daños a remolques y arboles <br/>';    $damage[5] .= '460 mts de la costa<br/>';    return $damage[$i];  }

     function mensaje() {     ?>       <h1>Escala Saffir Simpson</h1><p>La escala Saffir-Simpson se ha convertido ...</p>       <p>Fue nombrada así por los científicos que la desarrollaron</p></br>       <div class='centrar'>       <p>Categoría 1: de 119 a 153 km/h.</p>       <p>Categoría 2: de 154 a 177 km/h.</p>       <p>Categoría 3: de 178 a 209 km/h.</p>       <p>Categoría 4: de 210 a 249 km/h.</p>       <p>Categoría 5: 250 km/h o más</p>       </div>       <table>         <thead>           <tr>                <th>Velocidad</th>                <th>Categoría</th>                <th>Daños</th>                <th>Imagen</th>           </tr>             </thead>     <?  }

     $velocidad = mt_rand(119,400);  echo mensaje($velocidad);    switch (true) {      case ($velocidad >= 119) && ($velocidad <= 153): $categoria = 1; break;       case ($velocidad >= 154) && ($velocidad <= 177): $categoria = 2; break;      case ($velocidad >= 178) && ($velocidad <= 209): $categoria = 3; break;       case ($velocidad >= 210) && ($velocidad <= 249): $categoria = 4; break;      case ($velocidad >= 250): $categoria = 5; break;    }

    $imagen  = "<img src='huracan/damage".$categoria.".jpg' />";     $html    = "<tr><td align='center'> $velocidad </td>";    $html   .= "<td>".$categoria."</td>";     $efecto  =  damages($categoria);    $html   .= "<td><small>$efecto</small></td>";    $html   .= "<td>".$imagen."</td></tr></table>";    echo $fila;    ?>      <br />      <p class='centrado'>         <a href='0305Switch.php'><img alt='' src='../../images/icon-home.gif' >         <br />Regresar</a>      </p>       <??>

Page 59: Programacion Web

DescargarEjecutar

Estructuras de control repetitivas/interactivas 

A menudo es necesario ejecutar una instrucción o un bloque de instrucciones más de una vez

Ejemplo:

for

El bucle for resulta 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. El bucle for se puede romper mediante la sentencia break.

Ejemplo:

?123

<?php  for ($num = 1; $num <= 5; $num++){    echo $num."<br />";    if ($num == 3){

Page 60: Programacion Web

456789

        echo "Aquí nos salimos \n";        break;    }  }?>

Ejemplo: Calcular una tabla multiplicar. La selección de la tabla se hace mediante la generación de un número aleatorio.

?123456789101112

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

DescargarEjecutar

while

La sentencia while ejecuta un bloque de código mientras se cumpla una determinada condición. Podemos romper un bucle while utilizando la sentencia break.

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

Page 61: Programacion Web

La función number_format nos permite formatear los números con comas

para separar los miles (Línea 15)

?

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

                 <input id='n' maxlength='2' name='n' type='text' size='2'  />              </p>              <p class='centrado'>                 <input id='enviar' name='enviar' type='submit' value='Enviar' />              </p>         </fieldset>           </form>       <?   }?>

Page 62: Programacion Web

DescargarEjecutar

 El código factorial se puede optimizar y calcularlo para cualquier valor positivo mediante otros mecanismos.

do..while

Esta sentencia es similar a while, salvo que con esta sentencia primero ejecutamos el bloque de código y después se evalúa la condición, por lo que el bloque de código se ejecuta siempre al menos una vez.

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

Ads not by this site

?<?php    if( isset($_POST['enviar']) && $_SERVER['REQUEST_METHOD'] == 'POST') {         $n = $_POST['n'];      if($n == 0 and $n == 1) {          $factorial = 1;         } elseif( $n < 0 or $n >69) {         $factorial = 'indefenido';      } else {          $i = 2;          $factorial = 1;          do {              $factorial *= $i++;          } while ($i <= $n);      }      $html = "<p align='center'>El factorial de $n es ";      $html .= number_format($factorial, 0, '.',',').'</p><br />';      echo $html;      ?>        <p class='centrado'>          <a href='0305doWhile.php'>             <img alt='Calcular otro factorial' src='../../images/icon-home.gif'                  title='Calcular otro factorial' />          </a>

Page 63: Programacion Web

        </p>      <?    } else {        ?>         <form id='forma' name='forma' method='post' action='0305doWhile.php'>         <fieldset>           <legend>Factorial con do while en PHP</legend>              <p>                 <label for='n'>n</label>

                 <input id='n' maxlength='2' name='n' type='text' size='2'  />              </p>              <p class='centrado'>                 <input id='enviar' name='enviar' type='submit' value='Enviar' />              </p>         </fieldset>           </form>       <?    }  ?>

DescargarEjecutar

El usar while, do while o for es principalmente cuestión de preferencia personal.

foreach

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

Page 64: Programacion Web

Por ejemplo: La tabla general de la Jornada 17 del Torneo Bicentenario 2010 FEMEXFUT.

?1234567891011121314151617181920212223

<?php  echo "<h4 align = 'center'>Torneo Bicentenario 2010. ";  echo "Jornada 17</h4>";  $equipo['Chivas']  = 32;  $equipo['Monterrey']      = 36;  $equipo['Santos']  = 28;  $equipo['Pumas']          = 28;  $equipo['Morelia'] = 25;  $equipo['Cruz Azul']      = 25;  $equipo['América'] = 25;  $equipo['Gallos Blancos'] = 21;  $equipo['Toluca']  = 30;  $equipo['Pachuca']        = 25;  $equipo['Atlas']   = 24;  $equipo['Estudiantes']    = 19;  $equipo['Atlante'] = 16;  $equipo['Jaguares']       = 19;  $equipo['Puebla']  = 19;  $equipo['San Luis']       = 14;  $equipo['Tigres']  = 19;  $equipo['Indios']         = 15;  arsort($equipo);   echo "<table>";  echo "<thead><tr><th>Equipo</th><th>Puntos</th></tr></thead>";  $i = 1;  foreach( $equipo as $key =>$puntos) {    echo "<tr>";    echo "<td>".$key."</td><td>".$puntos."</td>";    echo "</tr>";  }  echo "</table>";?>

DescargarEjecutar

3.6. Arreglos

Una arreglo (array) es una estructura de datos que contienen una colección de datos del mismo tipo. Los array se utilizan como contenedores para almacenar datos relacionados ( en vez de declarar variables por separado para cada uno de los elementos del array).

Page 65: Programacion Web

Los elementos del array se acceden a través de la posición que ocupan dentro

del conjunto de elementos del arreglo. El primer elemento es la posición cero.

El tamaño del array se establece cuando creamos el arreglo, pero este puede

crecer posteriormente en forma ilimitada (- Hasta agotar la RAM -).

Los elementos del arreglo pueden tener diferentes tipos de datos.

Denominamos vector a los array unidimensionales y matrices a los array bidimensionales. Si bien es posible definir matrices de más de dos dimensiones después de casi tres decadas programando jamás necesite una. Los array se clasifican según su naturaleza en indexadas oasociativas.

Array indexados

Son aquellos en las que el índice es un valor numérico.

$estaciones = array ('primavera', 'verano', 'otoño', 'invierno');

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

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

Para acceder un elemento del arreglo usaremos la notación genérica:

$estaciones[$i];

$sentidos[$i];

$numeros[$i];

Como índice podemos usar un número, una variable o constante que represente el elemento referenciando. Iniciando desde la posición cero.

Page 66: Programacion Web

Ejemplo:Se declara un arreglo denominado $estacion. El cual se recorre mediante un ciclo for.

?123456

<?php  $estacion = array ('Primavera', 'Verano', 'Otoño', 'Invierno');  echo "Las estaciones del año son <br />";  for($i = 0; $i <=4; $i++)     echo $estacion[$i]."<br />";?>

DescargarEjecutar

Los arrays se ordenan usando las funciones asort(), arsort(), ksort(), rsort(), sort(), uasort() y uksort() según el tipo de ordenación.

Ejemplo: Generar un vector aleatorio de tamaño n y ordenarlo.

Usamos la función mt_rand para generar números aleatorios El método sort ordena los valores del vector de menor a mayor

?<?php

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

Page 67: Programacion Web

             <p><label for='n'>n</label>             <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>    <?  }?>

DescargarEjecutar

Otra función interesante es count que cuenta el número de elementos de un arreglo.

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

?1234567891011121314

<?php  $temperatura = array(23, 25,27, 23, 27,26, 26, 28,27, 22, 26, 21,                       23,24,21,18,18,19,26,28,27,27,26,18,23,26,24,27);  sort($temperatura);  $n = count($temperatura);  $promedio = 0;  for($i = 1; $i < $n; $i++)    $promedio += $temperatura[$i];   $promedio = $promedio/$n;  $maximo = $temperatura[$n - 1];  echo "Temperatura mínima = $temperatura[0] <br />";  echo "Temperatura media  = $promedio <br />";      echo "<span class="e2507h48" id="e2507h48_2">Temperatura máxima</span> = $maximo <br />";?>

DescargarEjecutar

Ejemplo: Obtener los archivos de un directorio ordenados alfabéticamente.

Page 68: Programacion Web

En la línea 3 se establece un apuntador al directorio indicado mediante la

función opendir La línea 4 realiza un ciclo, en el cual la función readdir lee uno a uno los

archivos del subdirectorio

La línea 5 asigna el archivo a una posición del vector

La función closedir en la línea 7 cierra el apuntador

La función sort() línea 8 ordenada el vector de menor a mayor

El sentencia de control foreach recorre el vector

?123456789101112

<?php  // llenar un array con todos los ítems de un directorio   $handle = opendir('zodiaco');   while (false !== ($archivo = readdir($handle))) {    $archivos[] = strtolower($archivo);   }   closedir($handle);   sort($archivos);   foreach($archivos as $i => $valor) {      echo $valor."<br />";   };?>

DescargarEjecutar

Ejemplo: Funciones básicas en arreglos

En la línea 2 se declara un array numérico.

Las líneas 3, 9, 14, 20 imprimen el contenido del arreglo mediante la

función print_r. La función count cuenta el número de elementos del array (Líneas 4, 6, 11, 16,

21).

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.

En la línea 18 se restablecen los índices mediante la función array_values.

Page 69: Programacion Web

?12345678910111213141516171819202122

<?php  $array = array(1, 2, 3, 4, 5,70,90); // Creamos un array simple.  print_r($array); // Imprimimos el array  echo "<br />Número de elementos en el array: ".count($array)."<br />";  // ahora borraremos los items pero el apuntador del array quedará intacto:   $n = count($array);  for($i = 0; $i <= $n; $i++) {    unset($array[$i]);  }  print_r($array);  echo "<br />Número de elementos en el array: ".count($array)."<br />";  // Ahora sumaremos un item (observe que el nuevo índice es 7, y no 0).  $array[] = 60;  print_r($array);  echo "<br />Número de elementos en el array: ".count($array)."<br />";   // Re-index:  $array = array_values($array);  $array[] = 57;  print_r($array);  echo "<br />Número de elementos en el array: ".count($array)."<br />";?>

DescargarEjecutar

Función range

Crea un vector que contiene una secuencia de elementos. Sintaxis

array range ( mixed $inicial , mixed $final [, number $incremento ] )

range() retorna vector de elementos desde inicial hasta final, ambos inclusive.

Si inicial > final, la secuencia será del mayor al menor.

Si recibe como parámetro incremento, éste será usado como el incremento

entre elementos en la secuencia.

incremento es un número positivo. Si no se especifica, incremento tendrá un

valor predeterminado de 1.

?12

<?php  echo "<h1>Uso de range</h1><br />";  echo "Vector simple<br />";

Page 70: Programacion Web

345678910111213141516171819

  foreach (range(0, 20) as $numero) {    echo $numero."<br />";  }   echo "Vector con incremento<br />";  foreach (range(0, 200, 20) as $numero) {    echo $numero."<br />";  }  echo "Vector de letras<br />";  foreach (range('a', 'z') as $letra) {    echo $letra."<br />";  }  echo "Vector de letras descendente<br />";  foreach (range('M', 'C') as $letra) {    echo $letra."<br />";  }?>

DescargarEjecutar

Arrays asociativos

Un array esta formado por conjuntos de parejas índice => valor, o como suele expresarse en inglés, key, value. Los cuales se expresan comunmente con índices o keys numéricos (también conocidos como arrays escalares). Además es posible usar strings como índices, es decir, cadenas de texto. Este tipo de array es el array asociativo:

Ejemplo: Imprimiremos la fecha actual mediante el uso de arreglos.

En la 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

?<?php  function imprimeFecha(){    $mesArray = array(        1 => 'Enero', 2 => 'Febrero', 3 => 'Marzo', 4 => 'Abril', 5 => 'Mayo', 6 => 'Junio',

Page 71: Programacion Web

        7 => 'Julio', 8 => 'Agosto', 9 => 'Septiembre', 10 => 'Octubre', 11 => 'Noviembre',         12 => 'Diciembre'    );

          $semanaArray = array(        'Mon' => 'Lunes', 'Tue' => 'Martes', 'Wed' => 'Miercoles', 'Thu' => 'Jueves',         'Fri' => 'Viernes', 'Sat' => 'Sábado', 'Sun' => 'Domingo',     );

         $mesReturn = $mesArray[date('n')];    $semanaReturn = $semanaArray[date('D')];         $dia = date('d');    $año = date ('Y');         return $semanaReturn.' '.$dia.' de '.$mesReturn.' de '.$año;  }  echo imprimeFecha();?>

DescargarEjecutar

Recorrer una tabla con índices numéricos mediante un bucle es sencillo, pero ¿cómo recorremos una tabla con índices asociados? Para ello, utilizaremos una serie de sentencias especificas para tal fin:

each() se usa normalmente de forma conjunta a list() para recorrer una matriz: por ejemplo:

?123456789

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

DescargarEjecutar

Page 72: Programacion Web

Matrices

Los arrays bidimensionales - matrices - similares a una tabla de doble entrada. Cada uno de los elementos se identifica unívocamente por un nombre ($nombre) seguido de dos ([]) que contienen los índices del array.

Los índices pueden ser de tipo escalar - 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.

Los elementos de un array bidimensional escalar pueden escribirse usando una de estas sintaxis:

$arreglo[][] = valor. En este caso los índices se autoincrementan

iniciando los índices en cero. El primer índice corresponde a renglones y el

segundo a las columnas. $arreglo[i][j] = valor. En este caso corresponde al programador

el control de los índices.

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

En las 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.

Ads not by this site

?<?php  if( isset($_POST['enviar']) && $_SERVER['REQUEST_METHOD'] == 'POST') {         $r = $_POST['renglones'] - 1;    $c = $_POST['columnas'] - 1;    $html = "<table class='simple'>";    for($i = 0; $i <= $r; $i++) {      $html .= "<tr>";      for($j = 0; $j <= $c; $j++) {        $matriz[$i][$j] = mt_rand(1, 100);        $html .= "<td>".$matriz[$i][$j]."</td>";      }

Page 73: Programacion Web

      $html .= "</tr>";    }    echo $html."</table>";    ?>      <p class='centrado'>         <a href='0306ImprimirMatriz.php'>         <img alt= '' src='../../images/icon-home.gif'><br />Home</a>      </p>   

         <?  } else {      ?>         <form action='0306ImprimirMatriz.php' id='forma' name='forma' method='post' >        <fieldset>           <legend>Imprimir Matriz</legend>              <p><label for='renglones'>Renglones</label>                 <input id='renglones' maxlength='1' name='renglones' size='1' type='text' />              </p>              <p><label for='columnas'>Columnas</label>                 <input id='columnas' maxlength='1' name='columnas' size='1' type='text' />              </p>              <p>                 <input id='enviar' name='enviar' type='submit' value='Enviar' />              </p>        </fieldset>        </form>   <?  }?>

DescargarEjecutar

Ejemplo: Suma o resta de matrices

Dadas las matrices m-por-n , A y B, su suma A + B es la matriz m-por-n calculada sumando los elementos correspondientes (i.e. (A + B)[i, j] = A[i, j] + B[i, j] ). Es decir, sumar cada uno de los elementos homólogos de las matrices a sumar. Por ejemplo:

Page 74: Programacion Web

Mediante la función mt_rand que genera números aleatorios llenamos la matriz

A y B La sentencia $operacion*$matriz2[$i][$j] determina si se realiza

una suma o resta de matrices. $operación toma los valores -1 y 1.

?

function imprimeMatriz($matriz, $r, $c, $mensaje) {$html =  '<table class="simple"';$html .= '<tr><td>'.$mensaje.'</td></tr>';for($i = 0; $i < $r; $i++) {

 $html .= '<tr>'; for($j = 0; $j < $c; $j++) {     $html .= '<td>'.$matriz[$i][$j].'</td>'; } $html.= '</tr>';

$html.= '</table><br />';echo $html;  

if( isset($_POST['calcular']) && $_SERVER["REQUEST_METHOD"] == "POST") {

$fila1     = $_POST['f1'];$col1      = $_POST['c1'];$fila2     = $_POST['f2'];$col2      = $_POST['c2'];$operacion = $_POST['operacion'];

if($fila1 == $fila2 && $col1 == $col2){ for($i = 0; $i < $fila1; $i++){  for($j = 0; $j < $col1; $j++){     $matriz[$i][$j]  = mt_rand(1,100);     $matriz2[$i][$j] = mt_rand(1,100);  } } imprimeMatriz($matriz, $fila1, $col1, 'Matriz A:'); imprimeMatriz($matriz2, $fila2, $col2, 'Matriz B:'); if($operacion == 1) {   $mensaje = 'A + B';    } else $mensaje = 'A - B'; $html = '<table class="simple">'; $html .= '<tr><td>'.$mensaje.':</td></tr>'; for($i = 0; $i < $fila2; $i++) {     $html .= '<tr>';     for($j = 0; $j < $col2; $j++) {        $html .= '<td>'.($matriz[$i][$j] + $operacion*$matriz2[$i][$j]).'</td>';     }     $html.= '</tr>'; } $html.= '</table><br>'; echo $html; ?>   <p class='centrado'>      <a href='0306SumaRestaMatrices.php'>

Page 75: Programacion Web

      <img src='../../images/icon-home.gif' alt=''><br>Home     </a>   </p> <?

} else { echo 'Las matrices no tienen las mismas dimensiones por lo que no se puede hacer la suma o resta';

} else {

<form action='0306SumaRestaMatrices.php' id='forma' method='post' name='forma' >  <fieldset>    <legend>Suma o Resta de Matrices</legend>      <p>        <label for='f1'>Filas A</label>

        <input id='f1' name='f1' type="text"  size='2' maxlength='1'               onKeypress='if (event.keyCode < 48 || event.keyCode > 57)                                event.returnValue=false;'/>      </p>      <p>         <label for='c1'>Columnas A</label>         <input id='c1' name='c1' type='text' size='2' maxlength='1'                onKeypress='if (event.keyCode < 48 || event.keyCode > 57)                                event.returnValue=false;' />      </p>

      <p>        <label for='f2'>Filas B</label>

        <input id='f2' name='f2' type="text"  size='2' maxlength='1'               onKeypress='if (event.keyCode < 48 || event.keyCode > 57)                                event.returnValue=false;'/>      </p>      <p>         <label for='c2'>Columnas B</label>         <input id='c2' name='c2' type='text' size='2' maxlength='1'                onKeypress='if (event.keyCode < 48 || event.keyCode > 57)                                event.returnValue=false;' />      </p>      <p><label for=0operacion'></label>         <select name='operacion' id='operacion'>            <option value='-1'>Resta</option>            <option value='1' selected='selected'>Suma</option>         </select>      </p>  <p class='centrado'>        <input id='calcular' name='calcular' type='submit' value='Calcular' />      </p>  </fieldset></form>

Page 76: Programacion Web

DescargarEjecutar

Ejemplo: Producto de matrices 

El producto de dos matrices se puede definir sólo si el número de columnas de la matriz izquierda es el mismo que el número de filas de la matriz derecha. Si A es una matriz m×n y B es una matriz n×p, entonces su producto matricial AB es la matriz m×p (m filas, p columnas) dada por:

para cada par i y j.

Aplicación:

?<?php   function imprimirMatriz($matriz, $r, $c, $mensaje) {        $html  = "<table align='center'>";     $html .= '<tr><td colspan='."'$c'".'>'.$mensaje.'</td></tr>';       for($i = 0; $i < $r; $i++) {        $html .= "<tr>";        for($j = 0; $j < $c; $j++) $html .= '<td>'.$matriz[$i][$j].'</td>';        $html .= "</tr>";     }       $html .= "</table>";     echo $html;   }

       function multiplicaMatriz($matriz, $matriz2, $fila1, $col1, $fila2, $col2){      $html  = '<table class="simple" >';      $html .= '<tr><td>Matriz Resultante:</td></tr>';      for($i = 0; $i < $fila1; $i++) {        $html .= '<tr>';

Page 77: Programacion Web

        for($j = 0; $j < $col2; $j++) {          $suma = 0;          for($k = 0; $k < $col1; $k++){            $suma += $matriz[$i][$k]*$matriz2[$k][$j];          }          $html .= '<td>'.($suma).'</td>';        }        $html .= '</tr>';    }    $html .= '</table><br><br>';    echo $html;   }

      if( isset($calcular) && $_SERVER["REQUEST_METHOD"] == "POST") {     $fila1 = $_POST['f1'];     $col1  = $_POST['c1'];     $fila2 = $_POST['f2'];     $col2  = $_POST['c2'];     $suma  = 0;     unset($enviar);     if($col1 == $fila2){        for($i=0; $i < $fila1; $i++)           for($j=0; $j < $col1; $j++) $matriz[$i][$j] = mt_rand(1,10);        imprimirMatriz($matriz, $fila1, $col1, 'Matriz A:');            for($i=0;$i < $fila2; $i++)          for($j=0; $j <$col2; $j++) $matriz2[$i][$j] = mt_rand(1,10);        imprimirMatriz($matriz2, $fila2, $col2, 'Matriz B:');           multiplicaMatriz($matriz, $matriz2, $fila1, $col1, $fila2, $col2);        ?>          <p class='centrado'>             <a href='0306MultiplicaMatrices.php'>                <img alt='' src='../../images/icon-home.gif' ><br>Home             </a>          </p>        <?       } else {        $html  = 'Las matrices no son conformables ';        $html .= 'Por lo tanto no se puede hacer la multiplicacion';        echo $html;        ?>          <p class='centrado'>             <a href='0306MultiplicaMatrices.php'>                <img alt='' src='../../images/icon-home.gif' ><br>Home             </a>          </p>        <?       }  } else {      ?>       <form action='0306MultiplicaMatrices.php' id='forma' method='post' name='forma' >       <fieldset>          <legend>Multiplicación de Matrices</legend>          <p>Dimensión para la Matriz A</p>          <p><label for='f1'>Filas</label>             <input id='f1' maxlength='1' name='f1' size='2' type='text' />          </p>          <p><label for='c1'>Columnas</label>             <input id='c1' maxlength='1' name='c1' size='2' type='text' />          </p>          <p>Dimensión para la Matriz B</p>

Page 78: Programacion Web

          <p><label for='f2'>Filas</label>             <input id='f2' maxlength='1' name='f2' size='2' type='text' />          </p>          <p><label for='c2'>Columnas</label>             <input id='c2' maxlength='1' name='c2' size='2' type='text' />          </p>          <p class='centrado'>             <input id='calcular' name='calcular' type='submit' value='Calcular' />          </p>       </fieldset>       </form>          <?   }?>

DescargarEjecutar

Ejemplo: Una rocola básica

En las líneas 2 al 10 se declara una matriz bidimensional asociativa

llamada Salseros Mediante la instrucción foreach recorremos dicha matriz que obtiene un vector

denominado cantante (Línea 22)

La extracción del vector cancion en la línea 25 nos permite tomar la musica en

nuestro caso la primera columna es el nombre del artista y el resto de las

posibles serán las canciones a reproducir

Si bien el programa no tiene errores de lógica, su uso no es óptimo y su

optimización será tema de otro apartado

Ads not by this site

Page 79: Programacion Web

?

<?php  $Salseros = array(               array('Adolescentes','Se acabo el amor', 'Sera o no sera'),               array('Alberto Barros','Cali Aji', 'La Palomita'),               array('Gilberto Santa Rosa','Vivir Sin Ti', 'Me Cambiaron Las Preguntas'),               array('Maelo Ruiz','Te va a doler','Regalame una noche'),               array('Mariano Civico','Ana Mile','La Mitad'),               array('Puerto Rico Power','Quiereme tal como soy','Tengo miedo'),                 array('Tito Nieves','Si yo fuera el','La leccion de Pedro K'),               array('Victor Manuelle', 'Noche De Loba','Nuestro amor se ha vuelto ayer')  );  ?>    <table>      <thead>        <th>Salsero</th>        <th>Canción 1</th>        <th>Canción 2</th>      </thead>      <tbody>   <?     $html= '';     foreach($Salseros as $cantante) {       $html .= '<tr>';       $i = 1;       foreach($cantante as $cancion) {         if ($i !== 1) {           $rola = 'mp3/'.$cancion.'.mp3';           $html .= "<td><embed class='flash_close' width='100' ";           $html .= "height='25' type='application/x-shockwave-flash' ";           $html .= "src='singlemp3player.swf' ";           $html .= "pluginspage='http://www.adobe.com/go/getflashplayer' ";           $html .= "flashvars='file=$rola'/><br />";           $html .= $cancion.'</td>';         } else {            $html .= '<td>'.$cancion.'</td>';         }         ++$i;       }       $html .= '</tr>';     }     echo $html;   ?>

DescargarEjecutar

Page 80: Programacion Web

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

Una función de usuario en PHP no es más que una porción de código que podemos llamar en cualquier momento. De un lado, al dividir nuestro código en funciones podemos aislar y perfeccionar cada una de sus funcionalidades; de otro lado, podemos reutilizar este código, ya que una función puede ser llamada cuantas veces la necesitemos.

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

Las declaraciones de funciones generalmente son especificadas por:

Nombre de la función con el que se identifica y se distingue de otras. No podrá

haber otra función, ni procedimiento con ese nombre (salvo sobrecarga o

polimorfismo en programación orientada a objetos).

Un tipo de dato de retorno. Tipo de dato del valor que la función devolverá al

terminar su ejecución.

Una lista de parámetros. Especificación del conjunto de argumentos (pueden

ser cero, uno o más) que la función debe recibir para realizar su tarea.

El código u órdenes de procesamiento. Conjunto de órdenes y sentencias que

debe ejecutar la función.

La sintaxis de una función es la siguiente:

?

123

<span class="style3">function</span> nombreFuncion(arg1, arg2,... argn) {   //cuerpo de la función}

Ejemplo: Conventir grados centígrados a grados Fahrenheit.

Page 81: Programacion Web

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

En la línea 11 se hace un llamado a la función cF pasandole como parámetro

una variable

?

= $_POST['centigrados']; if( isset($_POST['convertir']) && $_SERVER["REQUEST_METHOD"] == "POST" && !empty($g) ) {

function cF( $grados ){  return 1.8 * $grados + 32;}

 echo "<p class='centrado'>$g grados centigrados equivalen a ".cF($g)." grados Fahrenheit</p>";  unset($_POST['centigrados']);?>   <p class='centrado'>      <a href='0307Centigrados.php'><img src='../../images/calcular.gif' alt=''>Home</a>   </p><?

} else { ?>  <form id='forma' name='forma' method='POST' action='0307Centigrados.php'>     <fieldset>         <legend>Grados 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><?

DescargarEjecutar

PHP no distingue entre mayúsculas y minúsculas al nombrar las funciones, asi que cF sería lo mismo que CF, aunque es buena práctica ser consistente en la forma de escribir los nombres. Como curiosidad, podrás observar que en los

Page 82: Programacion Web

mensajes de error, PHP siempre designa tus funciones en minúscula.

Los paréntesis permiten pasar valores a las funciones (parámetros), son siempre necesarios, aunque no pases valor alguno

Una función puede retornar más de un valor, si lo regresamos como un arreglo y lo asignamos mediante la función de PHP list.

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

La línea 6 regresa un array de valores

Mediante la función list se recuperan los valores del array en variables

?<?php  function conversion( $grados ){    $f =  1.8 * $grados + 32;    $r = $f  + 459.67;    $k = $r/1.8;    return array($f, $r, $k);  }

   $convertir = $_POST['convertir'];  $formato = "<p class='centrado'>";  if( isset($convertir) && $_SERVER['REQUEST_METHOD'] == 'POST'){     $g = $_POST['grados'];        list($f, $r, $k) = conversion($g);     echo "$formato $g grados centígrados equivalen a:</p>";     echo "$formato $f grados Fahrenheit</p>";       echo "$formato $r grados Rankine</p>";       echo "$formato $k grados <span class="e2507h48" id="e2507h48_5">Kelvin</span> </p>";     ?>       <p class='centrado'><a href='0307Conversion.php'>          <img alt='' src='../../images/home.gif'><br />Home</a>       </p>        <?     } else {       ?>           <form id='forma' name='forma' method='POST' action='0307Conversion.php'>         <fieldset>           <legend>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>         

Page 83: Programacion Web

           <p class='centrado'>                       <input alt='' name='convertir' type='submit' value='Convertir' />           </p>         </fieldset>         </form>       <?   }?>

DescargarEjecutar

Paso de parámetros por referencia

Hasta el momento usamos parámetros por valor. Si queremos pasar nuestras variables por referencia - de tal manera que los cambios en los argumentos persistan - es necesario anteponer al argumento o parámetro el símbolo "&".

Ejemplo: Considere el cálculo del área y volumen de una esfera en función de su radio mediante las siguientes formulas;

En la línea 4 al 7 se declara una función con parámetros por referencia. Observe que los parámetros por referencia se denotan anteponiendo un & al $.

La línea 5 usa la función predifinida pi() que no necesita explicación

Observe que la función no regresa valores, pero aun así las variables área y

volumen tomaron valor. Esto es porque fueron declaradas como parámetros por

referencia.

Page 84: Programacion Web

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

Ads not by this site

?

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

function calculo( $radio, &$area, &$volumen ){ $area  = 4 * pi() * $radio * $radio; $volumen = $area * $radio /3;

$formato = "<p class='centrado'>";  $area    = 0;$volumen = 0;calculo($radio, $area, $volumen);echo "$formato Sea una esfera cuyo radio es $radio metros</p>";  echo "$formato tiene un área de ".number_format($area,2,'.',',')." metros<sup>2</sup></p>";  echo "$formato tiene un volumen de ".number_format($volumen,2,'.',',')." metros<sup>3</sup></p>";?>  <p class='centrado'>     <a href='0307Esfera.php'>        <img alt='' src='../../images/icon-home.gif'>      </a>  </p>       <?

} else { ?>   <form name='forma' method='POST' action='0307Esfera.php'>   <fieldset>     <legend>Área y volumen de una esfera</legend>     <p>       <label for='radio'>Radio</label>       <input alt='Radio de una esfera' maxlength='2' name='radio' size='2' type='text' />     </p>     <p>       <input name='calcular' type='submit' value='Calcular' />     </p>   </fieldset>     </form><?

DescargarEjecutar

Page 85: Programacion Web

Se puede proporcionar un valor por defecto para la función, que se aplicará salvo que específique otro al llamarla.

Ejemplo: Convertir de yardas a metros

En las líneas 2 al 4 declara la función yardas_metros cuyo parámetro por

defecto es 1

$y = yardas_metros() hace una llamada a la función sin parámetros

$m = yardas_metros($yardas) hace una llamada a la función con parámetros

?<?php  $yardas = $_POST['yardas'];  if( isset($_POST['convertir']) && $_SERVER["REQUEST_METHOD"] =='POST' && $yardas > 0) {      function yardas_metros( $yarda = 1 ){         return 0.9144 * $yarda;      }      $forma = "<p class='centrado'>";      $y = yardas_metros();      $m =  yardas_metros($yardas);      echo "$forma Una yarda equivale a $y metros</p>";        echo "$forma $yardas yardas equivalen a $m metros</p>";      ?>        <p class='centrado'>           <a href='0307Yardas.html'>              <img alt='' |src='../../images/icon-home.gif'><br />Home           </a>        </p>      <?      } else {        ?>          <form method='POST' action='0307Yardas.php'>          <fieldset>            <legend>Convertir yardas a metros</legend>            <p>                 <label for='yardas'>Yardas</label>               <input maxlength='4' name='yardas' size='4' type='text' />            </p>            <p>               <input name='convertir' type='submit' value='Convetir' />            </p>          </fieldset>             </form>        <?    }?>

Page 86: Programacion Web

DescargarEjecutar

Cuando la función necesite varios valores y sea necesario fijar un valor por defecto, debe ser el último de los parámetros enviados. Esto implica un cuidadoso diseño, ya que al pasar los valores a una función debes hacerlo por el mismo orden fijado al definirla.

Funciones recursivas

Se denominan funciones recursivas a aquellas que se llaman a sí mismas.

Ejemplo: Para todo número natural n, se llama n factorial o factorial de n al producto de todos los naturales desde 1 hasta n. Es decir:

Se define 0! = 1, para que la relación n! = n × (n - 1)! sea también válida para n = 1. Esta relación permite definir los factoriales por recursividad. La notación n! fue popularizada por el matemático francés Christian Kramp.

?<?php   $n = $_POST['n'];   $forma = "<p class='centrado'>";

Page 87: Programacion Web

   if( isset($_POST['calcular'])        and $_SERVER["REQUEST_METHOD"] == 'POST'       and !empty($n) && ($n >= 0 and $n <= 69)) {      function factorial($n = 1) {         if($n <= 1)   {            return 1;         } else { //llamada así misma            return $n * factorial($n - 1);         }      } //Fin: Factorial      echo "$forma El factorial de $n = ".factorial($n)."</p>";      ?>        <p class='centrado'>           <a alt='' href='0307Factorial.php'>              <img src='../../images/icon-home.gif' ><br />Home</a>        </p>      <?   } else {     ?>       <form id='forma' name='forma' method='POST' action='0307Factorial.php'>       <fieldset>         <legend>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>     <?   }?>

DescargarEjecutar

Ejemplo: Determinar si un número es primo, par o impar.

Cero y uno es un número primo y par

Dos es primo y par

abs calcula el valor absoluto de un número

sqrt obtiene la raíz cuadrada de un número

floor es el número entero inferior a n. floor(6.7) = 6

Page 88: Programacion Web

$multiplo = floor(sqrt($n)) = Máximo entero que puede dividir exactamente a un

número

Ads not by this site

?

<?php    function tipo($m) {      $n = abs($m);      $forma = "<p class='centrado'>";      if($n == 0) return "$forma 0 es par</p>";      if($n == 1) return "$forma 1 es un primo impar</p>";      if($n == 2) return "$forma 2 es el unico primo par<p />";      if($n % 2 == 0) return "$forma".number_format($m, 0, ".", ",")." es par</p>";      $multiplo = floor(sqrt($n));      $i = 3;      while ( ($n % $i !== 0) && ( $i <= $multiplo )) $i += 2;      if( $i > $multiplo ) {          return "$forma $m es primo</p>";      } else {          return "$forma $m es impar</p>";      }    }

       if( isset($_POST['calcular']) && $_SERVER["REQUEST_METHOD"] == 'POST'       && !empty($_POST['n']) ) {      echo tipo($_POST['n']);      ?>        <p class='centrado'><a href='0307Primos.php'>           <img alt='' src='../../images/icon-home.gif' /><br />Home</a>        </p>        <?      } else {      ?>       <form id='forma' name='forma' method='POST' action='0307Primos.php'>       <fieldset>          <legend>Cálculo de un número primo</legend>          <p>             <label for='n'>n</label>             <input name='n' type='text' id ='n' size='6' maxlength='6' />          </p>          <p>            <input  name='calcular' type='submit' value='Calcular' />          </p>       </fieldset>         </form>          <?   }?>

Page 89: Programacion Web

DescargarEjecutar

Ejemplo: Máximo común divisor.

 

En matemáticas el máximo común divisor (abreviado mcd) de dos números enteros es el mayor número que los divide sin dejar resto. El método que se codifica es el algoritmo de Euclides, el cual se describe formalmente como:

?<?php  function mcd($a, $b) {    $a = abs($a);    $b = abs($b);    if ($b == 0) $resultado = $a; else $resultado = mcd($b, $a%$b);    return $resultado;  } //mcd  $a = $_POST['a'];  $b = $_POST['b'];  $forma = "<p class='centrado'>";  if( isset($_POST['calcular']) && $_SERVER['REQUEST_METHOD'] == 'POST' &&      !empty($a) && !empty($b)) {      $mcd = mcd($a,$b);      echo "$forma mcd( $a, $b) = $mcd</p>";      echo "$forma $a".'/'.$b. ' = '.$a/$mcd.'/'.$b/$mcd."</p>";      ?>        <p class='centrado'>          <a href='0307mcd.php'>            <img src='../../images/icon-home.gif' ><br />Home          </a>        </p>      <?  } else {     ?>      <form id='forma' name='forma' method='post' action='0307mcd.php'>      <fieldset>         <legend>Máximo común divisor</legend>         <p>           <label for='a'>Numerador</label>           <input maxlength='2' name='a' size='2' type='text' />         </p>         <p>           <label for='b'>Denominador</label>           <input maxlength='2' name='b' size='2' type='text' />

Page 90: Programacion Web

         </p>         <p>           <input maxlength='2' name='calcular' size='2' type='submit' value='Calcular' />         </p>      </fieldset>      </form>    <?  }?>

DescargarEjecutar

Ejemplo: Mínimo común múltiplo

El mínimo común múltiplo (m.c.m.) de dos números naturales es el menor número natural que es múltiplo de todos ellos. Sólo se aplica con números naturales, es decir, no se usan decimales ni números negativos.

Conociendo el máximo común divisor de dos números, se puede calcular el mínimo común múltiplo de ellos, que será el producto de ambos dividido entre su máximo común divisor.

?1234567

<?php   function mcd($a, $b) {      if ($b == 0) $resultado = $a;       else $resultado = mcd($b, $a%$b);     return $resultado;   } //mcd

      function mcm($a, $b) {

Page 91: Programacion Web

89101112131415161718192021222324252627282930313233343536373839404142434445464748

     $a = abs($a);     $b = abs($b);     return ($a * $b)/mcd($a, $b);    }

    $a = $_POST['a'];   $b = $_POST['b'];   $forma = "<p class='centrado'>";   if( isset($_POST['calcular']) && $_SERVER['REQUEST_METHOD'] == 'POST' &&       !empty($a) && !empty($b) ) {      $mcm = mcm($a,$b);      echo "$forma mcm( $a, $b) = $mcm</p>";      ?>        <p class='centrado'>           <a href='0307mcm.php'>              <img src='../../images/icon-home.gif'><br />Home           </a>        </p>      <?   } else {    ?>      <form id='forma' name='forma' method='post' action='0307mcm.php'>      <fieldset>         <legend>Mínimo común múltiplo</legend>         <p>           <label for='a'>Numerador</label>           <input maxlength='2' name='a' size='2' type='text' />         </p>         <p>           <label for='b'>Denominador</label>           <input maxlength='2' name='b' size='2' type='text' />         </p>         <p>           <input name='calcular' type='submit' value='Calcular' />         </p>      </fieldset>      </form>    <?   }?>

DescargarEjecutar

Ejemplo de aplicación: Suma, resta, multiplicación y división de quebrados

Suma o Resta

Page 92: Programacion Web

 

Multiplicación

 

División

 

Reducir

 

Fracciones

function sumaResta($n1, $d1, $n2, $d2, $signo) { $dr = mcm($d1, $d2); $nr = ($n1 * ($dr / $d1) + $signo * $n2 * ( $dr / $d2)); $cadena = $n1.'/'.$d1.' '; $cadena .= ($signo == 1?'+':'-').' '.$n2.'/'.$d2; if($nr == 0) { $mensaje = $cadena.' = 0'; } else { if( $nr == $dr) { $mensaje = $cadena.' = 1'; } else { $mensaje = reducir($nr, $dr, $cadena); } } return $mensaje; }

DescargarEjecutar

Ejemplo: La constante matemática e

Es uno de los más importantes números reales. El logaritmo en base e se llama logaritmo natural o neperiano. El número e, conocido a veces como número de Euler o constante de Napier fue reconocido y utilizado por primera vez por el matemático escocés John Napier, quien introdujo el concepto de logaritmo en el cálculo matemático.

El número e, al igual que el número π, es un número trascendente, es decir, que no puede ser obtenido directamente mediante la resolución de una ecuación algebraica. Por lo tanto, es un irracional y su valor exacto no puede ser expresado como un número finito de cifras decimales o con decimales periódicos. Su valor aproximado (truncado) es dado por la función

Page 93: Programacion Web

El código PHP para calcular el número de Euler esta dado por:

?1234567891011121314151617

<?php  function numeroEuler() {      $error = 0.000000000001;      $e  = 2;      $anterior = 0;      $i = 2;      $f = 2;      while ( abs($e - $anterior) >= $error) {          $anterior = $e;          $e += 1/$f;          $f = $f * ++$i;      }      return $e;  }  $e = numeroEuler();  echo 'Número de Euler o constante de Napier = '.$e?>

DescargarEjecutar

Ejemplo: Mediante una serie de Taylor podemos calcular muchas funciones importantes. Como por ejemplo la función exponencial dada por:

Un código depurado se presenta a continuación. El cual es más eficiente al no tener que calcular cada factorial.

Ads not by this site

?

Page 94: Programacion Web

<?php  function exponencial($x = 0) {    //máximo error permitido    $error = 0.000000000001;    if ($x != 0) { $e = 1;} else return 0;    $anterior = 0;    $i = 0;    $f = 1;    //Aproximación    while ( abs($e - $anterior) >= $error) {      $anterior = $e;      $f *= ++$i;      $e += pow($x, $i)/$f;    }    return $e;  }  $x = $_POST['e'];  $forma = "<p class='centrado'>";   if( isset( $_POST['calcular'] )       and $_SERVER['REQUEST_METHOD'] == 'POST'      and !empty($x)) {      echo "$forma Exponente($x) = ".exponencial($x)."</p><br />";       ?>        <p class='centrado'>           <a href='0307ExponencialSerie.php'>             <img alt='' src='../../images/icon-home.gif' ><br />Home           </a>        </p>        <?  } else {    ?>        <form name='forma' method='POST' action='0307ExponencialSerie.php'>      <fieldset>        <legend>exp(x)</legend>        <p>           <label for='e'>x</label>           <input alt='Ingrese un número' maxlength='2' name='e' size='2' type='text' />        </p>        <p>           <input  name='calcular' type='submit' value='Calcular' />        </p>      </fieldset>      </form>    <?}?>

DescargarEjecutar

Page 95: Programacion Web

3.8 Formularios

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

action

Identifica el archivo PHP que manipula el formulario que se envia. Los formularios son manipulados por PHP del lado servidor.

El atributo "method" define 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.php?pnombre=jorge&papellido=perez

post: Los datos del formulario son agregados al cuerpo del formulario.

target

Page 96: Programacion Web

Este parámetro indica dónde debe mostrarse esa información. Puede tomar los valores:

_self : en este mismo marco o ventana.

_blank: en una ventana nueva. _top: en el marco de que depende toda la ventana que estamos visualizando (si

no utilizamos marcos en nuestra página (FRAMESET) equivaldrá a_self).

_parent: el marco padre de la ventana que estamos visualizando (si

utilizamos FRAMESET con sólo un nivel de anidación, equivaldrá a _top).

 

id

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

 

name

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

Ejemplo: El índice de masa corporal (IMC) es una medida de asociación entre el peso y la talla de un individuo. Ideado por el estadístico belga L. A. J. Quetelet, también se conoce como índice de Quetelet. Se calcula según la expresión matemática:

El valor obtenido varía con la edad y el sexo. También depende de otros factores, como las proporciones de tejidos muscular y adiposo. En el caso de los adultos se ha utilizado como uno de los recursos para evaluar su estado nutricional, de acuerdo con los valores propuestos por la Organización Mundial de la Salud.

Page 97: Programacion Web

?

<?php

  function valoracion($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;

  }

  

  function imc($peso, $altura) { return $peso/($altura * $altura); }

  function resultado ($peso, $altura, $imc){

    $html = "<h3><p class='centrado'>IMC</p></h3>";

    $html .=  "<<span class="e2507h48" id="e2507h48_2">table class</span>='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>";

Page 98: Programacion Web

    $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> 

Page 99: Programacion Web

            <input type='submit' name='calcular' value='Calcular' id='calcular' />

         </p>

       </fieldset>

       </form>

     <?

  }

?>

Descargar

Ejecutar

Ejemplo: Consideremos la ecuación cuadrática general ax2 + bx + c = 0.

Se puede resolver la ecuación mediante la expresión:

.

Analizando la raíz cuadrada, se llega a las siguientes conclusiones:

Al término b2 − 4ac se le llama discriminante.

Si b2 es menor que − 4ac los resultados de X serán dos valores con parte real

y parte imaginaria. Es decir, el resultado será un número complejo.

Si b2 es mayor que − 4ac obtendremos dos valores distintos de X reales.

Y si b2 es igual que − 4ac obtendremos dos valores de X reales e iguales.

Page 100: Programacion Web

La solución en código PHP se presenta a continuación tanto para números reales como complejos.

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<?php

  $calcular = $_POST['calcular'];

  if( isset($calcular) && $_SERVER['REQUEST_METHOD'] == 'POST' ) {

     unset($calcular);

     $a = $_POST['a'];

     $b = $_POST['b'];

     $c = $_POST['c'];

     if( !(empty($a) or empty($b) or empty($c) )) {

       if($a != 0) {

          $descriminante = ($b * $b) - 4 * $a * $c;

          if($descriminante >= 0) {

             $raiz = sqrt($descriminante);

             $x1 = (-$b + $raiz)/(2*$a);

             $x2 = (-$b - $raiz)/(2*$a);

          } else {

            $raiz = sqrt(-$descriminante)/(2*$a);

            $real = -$b/(2*$a); 

            $x1 = $real.' + '.$raiz.'i';

Page 101: Programacion Web

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

            $x2 = $real.' - '.$raiz.'i';

          }

          echo "<p class='centrado'>x1 = ".$x1."</p>"; 

          echo "<p class='centrado'>x2 = ".$x2."</p>";

       } else echo "<p class='centrado'>No es una cuadrática</p>";    

     } else echo "<br /><p class='centrado'>Faltan datos</p>";

  } else {

    ?>

      <form name='forma' method='post' action='0308fGeneral.php'>

      <fieldset>

        <legend>Formula general</legend>

        <p>

           <label for='a'>a</label>

           <input name='a' type='text' size='2' maxlength='2' />

        </p>

        <p>

           <label for='b'>b</label>

           <input name='b' type='text' size='2' maxlength='2' />

        </p>

        <p>

           <label for='c'>c</label>

           <input name='c' type='text' size='2' maxlength='2' />

        </p>

        <p class='centrado'>

           <input type='submit' name='calcular' value='Calcular' />

        </p>

      </fieldset>

      </form>

    <?

  }

?>

Page 102: Programacion Web

48

49

Descargar

Ejecutar

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.

?

<?php

  $calcular = $_POST['calcular'];

  if( isset($calcular) && $_SERVER["REQUEST_METHOD"] == "POST" ) {

      $a = $_POST['a'];

      $operador = $_POST['operador'];

      $b = $_POST['b'];

      if( !empty($a) and !empty($b) ) {

         switch ($operador) {

           case '+': $resultado = $a + $b; break;

           case '-': $resultado = $a - $b; break;

           case '*': $resultado = $a * $b; break;

           case '/': $resultado = $a / $b; break;

           case '%': $resultado = $a % $b; break;

         }            

Page 103: Programacion Web

         echo "<p class='centrado'>$a $operador $b = ". $resultado."</p>";

      } else {

          echo "<p class='centrado'>Por favor no jugar</p>";

      }

  } else {

    ?>

      <form name='forma' method='post' action='0308Calculadora.php'>

      <fieldset>

        <legend>Calculadora básica</legend>

        <p>

          <label for='a'>a</label>

          <input name='a' type='text' />

        </p>

        <p>

          <label for='operador'>Operador</label>

          <select name='operador'>

            <option value='+'>+</option>

            <option value='-'>-</option>

            <option value='*'>*</option>

            <option value='/'>/</option>

            <option value='%'>%</option>

          </select>

        </p>

        <p>

          <label for='b'>a</label>

          <input name='b' type='text' />

        </p>

        <p class='centrado'>

          <input name='calcular' type='submit' value='Calcular' />

        </p>

      </fieldset>

    <?

  }

?>

Page 104: Programacion Web

Descargar

Ejecutar

3.9. Ejemplos PHP

Redireccionamiento de los visitantes a las páginas específicas en su idioma.

Conocer los idiomas seleccionados en el navegador de nuestros visitantes puede ser un dato muy importante que puede utilizar para redirigir al usuario a una página específica en el idioma correspondiente, 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, 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).

?1234567

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

Page 105: Programacion Web

Imprimir fecha y hora del sistema

?1234567

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

Ejecutar

Procesando Formularios

 

Para conocer mediante que método recibimos el formulario en PHP usamos la variable de servidor $_SERVER['REQUEST_METHOD']. El siguiente código muestra su uso.

?1234567

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

Eliminar espacios

La funcióm trim elimina los espacios en blanco de la cadena. Observe que está

función solo elimina los espacios en blanco de los extremos izquierdo y derecho

de la cadena, ignorando los espacios en blanco internos (Línea 10)..

La función strlower convierte la cadena en minúsculas (Línea 3).

ereg_replace busca cualquier ocurrencia del patrón en la cadena y la

reemplaza por otra. En nuestro caso, cambia todo espacio en blanco por vacio

(Línea 4).

Page 106: Programacion Web

?1234567891011121314151617181920212223242526272829303132333435

<?php  function eliminarEspacios($cadena) {    $cadena = strtolower($cadena);     $cadena = ereg_replace( ' ', '', $cadena);    return "<p class='centrado'>".$cadena."</p><br />";   }

   if( isset($_POST['enviar']) && $_SERVER['REQUEST_METHOD'] == 'POST' ) {    $cadena = trim($_POST['cadena']);    if( empty($cadena)) {        echo "<p class='centrado'>Enviaste una cadena vacía</p>";    } else echo eliminarEspacios($cadena);      ?>     <p class='centrado'>           <a href='0309espacios.php'>            <img alt='' src='../../images/icon-home.gif' /><br />Home        </a>     </p>   <?  } else {      ?>       <form name='forma' method='post' action='0309espacios.php'>       <fieldset>          <legend>Eliminar Espacios</legend>          <p>             <label for='cadena'>Cadena</label>             <input name='cadena' type='text' />          </p>         <p class='centrado'>            <input name='enviar' value='Enviar' type='submit' />         </p>       </form>     <?  }?>

DescargarEjecutar

Cálculo de áreas y perímetros

El programa principal realiza una interfase básica para manejar multiples formularios en un mismos archivo. El procesamiento con PHP permite capturar las diferentes características de las figuras geométricas.

Page 107: Programacion Web

 

El componente hidden permite manejar el tipo de figura para el cálculo de área y perímetro.

?<?php  $calcular = $_POST['calcular'];  if(isset( $calcular ) && $_SERVER['REQUEST_METHOD'] == 'POST' ) {    $cuerpo = $_POST['cuerpo'];    if($cuerpo == 'cuadrado') {      ?>       <form name='cuadrado' method='post' action='0309FigurasAreaPerimetro.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>      <?    } else if($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>  <?  }?>

Page 108: Programacion Web

Por último se presenta el código que procesa los datos de entrada

?

<?php$figura= $_POST['figura'];if($figura == 'Cuadrado') {    $lado      = $_POST['lado'];    $area      = number_format($lado * $lado, 2, '.', ',');    $perimetro = number_format(4 * $lado, 2, '.', ',');    $resultado = "El área de un Cuadro de lado = $lado es de $area unidades cuadradas ";} else if($figura == 'Rectangulo') {    $altura    = $_POST['altura'];    $base      = $_POST['base'];     $area      = number_format($altura * $base, 2, '.', ',');    $perimetro = number_format(2 * ($altura +  $base), 2, '.', ',');    $resultado = "El área de un Rectángulo de base = $base y altura = $altura es ";    $resultado .= "de $area unidades cuadradas ";} else {   $radio     = $_POST['radio'];   $area      = number_format(pi() * $radio * $radio, 2, '.', ',');   $perimetro = number_format(2 * $radio* pi(), 2, '.', ',');   $resultado = "El área de un Circulo de radio = $radio es de $area unidades cuadradas ";     }echo "<p class='centrado'>$resultado</p>";echo "<p class='centrado'>con un perímetro de $perimetro unidades</p><br />";

DescargarEjecutar

Envio de correos

Enviar correos mediante PHP es sumamente sencillo si usamos la función mail

La función mail es: mail($destino, $asunto, $mensaje, $encabezado);

donde

Page 109: Programacion Web

$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, si el

mensaje va ir con copia para, si el mensaje ira con copia oculta para, si tendrá

formato html, etc.

or die manda un mesaje si ocurre un error y detiene el proceso

Ads not by this site

?<?php  $enviar = $_POST['enviar'];  if ( isset($enviar) && $_SERVER["REQUEST_METHOD"] == "POST") {      $destino = trim($_POST['destino']);      $asunto  = trim($_POST['asunto']);      $mensaje = trim($_POST['mensaje']);       if( !( empty($destino) or empty($asunto)  or empty($mensaje))) {        if( filter_var($destino, FILTER_VALIDATE_EMAIL)) {          mail($destino, $asunto, $mensaje) or die ("Su mensaje no se envio a $destino.");          $cadena = "Mensaje enviado con éxito a $destino";        } else $cadena =  "Correo no valido";      } else $cadena = "Faltan datos";     ?>        <p class='centrado'>           <a href='0309email.php'><img src='../../images/icon-home.gif' /><br />Home</a>        </p>      <?

   } else {    ?>      <form name='forma' method='post' action='0309email.php'>      <fieldset>      <legend>Envio de email con PHP</legend>        <p>           <label for='destino'>Destino</label>           <input name='destino' type='text' />        </p>        <p>          <label for='asunto'>Asunto</label>

          <input name='asunto' type='text'  />        </p>        <p>           <label for='mensaje'>Mensaje</label>           <textarea cols='40' name='mensaje' rows='5'></textarea>        </p>        <p class='centrado'>           <input name='enviar' type='submit' value='Enviar' />        </p>      </fieldset>        </form>    <?  }?>

Page 110: Programacion Web

DescargarEjecutar

Convertir números arábigos a romanos.

Los números romanos se escriben usando una serie de caracteres alfanúmericos. Los números romanos validos tienen un rango entre 1 y 3,999. Se presenta a continuación la interfase y la solución PHP.

La función principal es escribeRomanos la cual recibe como parámetro un

número arábigo. El código proporcionado incluye una función

denominadaentero que verifica que la cadena a traducir sea un entero valido

entre 1 y 3,999.

En las líneas 2, 8, 13 y 20 se crean los vectores necesarios para representar

números romanos (unidades, decenas, centenas y miles).

La función substr extrae subcadenas y se usa para ir traduciendo el número

arábigo a romano.

La función int convierte una cadena a número si lo es.

?<?phpfunction entero( $cadena, $n ) {  if( is_numeric($cadena) ) {     if( $n == $cadena ) {       if( $n >= 1 && $n <= 3999 ) { return TRUE; }         else { echo "<p class='centrado'>"."El número $n está fuera de rango"."</p><br />";}     } else { echo "<p class='centrado'>".'Número no valido = '.$cadena."</p><br />";}         } else { echo "<p class='centrado'>".'Cadena no valida '.$cadena."</p><br />"; }  return FALSE;}

 function unidades($n) {  $unidad= array('I', 'II','III','IV','V','VI','VII','VIII','IX');    $n = (int)$n;  if( $n >= 1 )  { return $unidad[$n -1];  } else { return "";}}

 

Page 111: Programacion Web

function decenas($n) {  $n = (int)$n;  $decena = array('X', 'XX','XXX','XL','L','LX','LXX','LXXX','LX');    if( $n >= 10 ) { return $decena[substr($n, 0, 1) - 1].unidades(substr($n,1,1));  } else { return unidades($n); }}

 function centenas($n) {  $n = (int)$n;    $centena = array ('C','CC','CCC','CD','D','DC','DCC','DCC','CM');  if( $n >= 100 ) { return $centena[substr($n, 0, 1) - 1].decenas(substr($n, 1, 2));  } else { return decenas($n); }}

function miles($n){  if( strlen($n) == 4 ) {       $mil = array('M','MM','MMM');      $romano = $mil[substr($n, 0, 1) - 1];      $romano .= centenas( substr($n,1,3) );  } else {$romano = centenas($n);}  return $n.' = '.$romano;}

$enviar = $_POST['enviar'];if( isset($enviar) && $_SERVER["REQUEST_METHOD"] == "POST") {  $n = (int)$_POST['numero'];  if( entero($_POST['numero'], $n) ) {     echo "<p class='centrado'>".miles($n)."</p>";  } else "<p class='centrado'>"."Cadena no valida ".$_POST['numero']."<br />";  ?>    <p class='centrado'>       <a href='0309Romanos.php'>         <img src='../../images/icon-home.gif' ";/><br />Home       </a>    </p>  <?} else {  ?>    <form name='forma' method='post' action='0309Romanos.php'>    <fieldset>       <legend>Convertir números Arábigos a Romanos PHP</legend>       <p>          <label for='numero'>Número</label>

          <input maxlength='4' name='numero' size='4' type='text'  />       </p>       <p class='centrado'>          <input name='enviar' type='submit' value='Aceptar' />       </p>    </fieldset>     </form>  <?}

Page 112: Programacion Web

DescargarEjecutar

Convertir números a letras

La función que se presenta a continuación convierte números a letras. El número a convertir debe ser un entero positivo menor a 999,999, 999,999.

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

característica se debe a que dichos números no siguen un patrón para su

escritura.

La línea 11 declara un arreglo asociativo que contiene la conversión de los

números 30, 40 ... y 90.

La línea 14 obtiene el módulo 10 de n.

Si el módulo 10 de n es cero se regresa la posición asociada a n en el vector

decenas(línea 11)

Si el módulo 10 de n es diferente de cero. Se regresa la posición asociada a n

en el vector decenas y se hace un llamado a la función básico.

La línea 21 declara un arreglo asociativo para la representación alfabética de

los números 100,200, ... y 900.

La línea 30 hace uso de un operador ternario para poder manejar la escritura de

los números comprendidos entre 101 y 199.

En la línea 39 se obtiene la longitud de n. En el caso de los miles está longitud

varía entre 4 y 6.

substr($cadena, -3) obtiene los últimos 3 caracteres de la cadena, línea 41.

?

function basico($numero) {$valor   = array ('uno','dos','tres','cuatro','cinco','seis','siete','ocho','nueve','diez',              'once','doce','trece','catorce','quince','dieciséis','diecisiete',

Page 113: Programacion Web

              'dieciocho','diecinueve','veinte','veintiuno','veintidos','ventitres',              'veinticuatro','veinticinco','veintiséis','veintisiete','veintiocho','veintinueve');return $valor[$numero - 1];

function decenas($n) {$decenas  = array (30=>'treinta',40=>'cuarenta',50=>'cincuenta',60=>'sesenta',               70=>'setenta',80=>'ochenta',90=>'noventa');

if( $n <= 29) return basico($n);= $n % 10;if ( $x == 0 ) {   return $decenas[$n]; } else return  $decenas[$n - $x].' y '. basico($x);

function  centenas($n) {$cientos = array (100 =>'cien',200 =>'doscientos',300=>'trecientos',400=>'cuatrocientos',               500=>'quinientos',600=>'seiscientos',700=>'setecientos',800=>'ochocientos',               900 =>'novecientos');if( $n >= 100) {   if ( $n % 100 == 0 ) {      return $cientos[$n];      } else {        $u = (int) substr($n,0,1);        $d = (int) substr($n,1,2);        return (($u == 1)?'ciento':$cientos[$u*100]).' '.decenas($d);    }}  else return decenas($n);

function miles($n) { if($n > 999) {   if( $n == 1000) {return 'mil';}    else {       $l = strlen($n);       $c = (int)substr($n,0,$l-3);       $x = (int)substr($n,-3);       if($c == 1) {$cadena = 'mil '.centenas($x);}         else if($x != 0) {$cadena = centenas($c).' mil '.centenas($x);}                 else $cadena = centenas($c). ' mil';       return $cadena;    } } else return centenas($n);

function millones($n) {if($n == 1000000) {return 'un millón';}  else {       $l = strlen($n);       $c = (int)substr($n,0,$l-6);       $x = (int)substr($n,-6);       if($c == 1) {           $cadena = ' millón ';       } else {           $cadena = ' millones ';       }       return miles($c).$cadena.(($x > 0)?miles($x):'');  }

Page 114: Programacion Web

function convertir($n) { switch (true) {     case ( $n >= 1 && $n <= 29)    : return basico($n); break;     case ( $n >= 30 && $n < 100)  : return decenas($n); break;     case ( $n >= 100 && $n < 1000) : return centenas($n); break;     case ($n >= 1000 && $n <= 999999): return miles($n); break;     case ($n >= 1000000): return millones($n); }

$convertir = $_POST['convertir']; ='';

if( isset($convertir) && $_SERVER['REQUEST_METHOD'] == 'POST'                 && !empty($_POST['numero']) ) {    

$html   = "<p class='centrado'>".$_POST['numero'].' se escribe ';$html .= "<strong>".ucfirst(convertir($_POST['numero']))."</strong></p><br />";echo $html;

DescargarEjecutar

Gráficos

La gráfica es una de las herramientas más útiles en el estudio de la mayoría de las disciplinas, ya que permite una visión de conjunto del fenómeno sometido a investigación, más rápidamente perceptible que la observación directa de los datos numéricos y alfanuméricos. Sus aplicaciones son múltiples y variadas en casi todo el quehacer humano.

Existen diversas librerías escritas para PHP gratuitas y de paga, su selección depende del objetivo y el precio. En este punto abordaremos el uso

Page 115: Programacion Web

de JpGraph librería de uso libre completamente escrita en PHP y funcional para scripts PHP. JpGraph es una librería orientada a objetos para PHP >= 5.1

Gráfica X - Y

A continuación se presentan las temperaturas (mínimo, media y máxima) promedio en la ciudad y puerto de Veracruz, Ver. México

En la línea 2 y 3 se carga la librería JpGraph.

Las líneas 4, 5 y 6 se encargan de definir los datos mediante arreglos para cada

serie

En las líneas 7 al 13 se definen las características de las gráficas. Donde

Graph( Ancho, Alto), crea un objeto de tipo gráfica

En las líneas 15 al 17, se definen el eje X en este caso meses en español.

Las líneas 32 al 34, definen las series en la gráfica

La línea 24 agrega físicamente las series a las gráficas y la línea 35 imprime la

gráfica.

Ads not by this site

?<?php  include_once('jpgraph/jpgraph.php');  include_once('jpgraph/jpgraph_line.php');

  $minimo   = array(19, 20, 22, 24, 25, 25, 25, 25, 24, 24, 21, 20);  $maximo   = array(26, 27, 29, 31, 32, 32, 32, 32, 32, 31, 29, 27);  $promedio = array(22.5, 23.5, 25.5, 27.5, 28.5, 28.5, 28.5, 28.5, 28.0, 27.5, 25.0, 23.5);    $graph = new Graph(650, 450);  $graph->SetScale('textlin',18, 38);   // Escala linear en x  $graph->SetMargin(50,60,40,45);  $graph->SetMarginColor('white');  $graph->title->Set('Temperatura en Veracruz, Ver. México');  $graph->xaxis->title->Set('Mes');

    $gDateLocale->Set('spanish'); //Obtiene los meses del año  $mes = $gDateLocale->GetShortMonth();   $graph->xaxis->SetTickLabels($mes);  //$graph->xaxis->SetFont(FF_ARIAL,FS_BOLD,8);  $graph->yaxis->title->Set('Grados centígrados');  //$graph->yaxis->SetFont(FF_ARIAL,FS_BOLD,8);

   $tminimo = new LinePlot($minimo);  $tminimo->SetLegend('Mínimo');  $tminimo->SetColor('blue');

Page 116: Programacion Web

  $tpromedio = new LinePlot($promedio);  $tpromedio->SetLegend('Promedio');  $tpromedio->SetColor('green');  $tmaximo = new LinePlot($maximo);  $tmaximo->SetColor('red');  $tmaximo->SetLegend('Máximo');

     $graph->Add($tminimo);  $graph->Add($tpromedio);  $graph->Add($tmaximo);  $graph->Stroke();?>

DescargarEjecutar

Gáfica de barras

El ejemplo describe los resultados oficiales del examen de admisión 2010 del Instituto Técnologico de Veracruz.

La línea 11 se encarga de posicionar las leyendas de cada serie en nuestro caso ingresos a primer semestre e ingresos al semestre cero.

La línea 15 y 20 definen el formato de presentación de los datos, en este caso %0.0f indica que los valores se presentaran como enteros.

La propiedad SetFillGradient (líneas 16 y 21) configuran el degradado de los colores en las barras

El método Stroke nos permite mostrar la gráfica (línea 28)

?<?php   require_once ('jpgraph/jpgraph.php');  require_once ('jpgraph/jpgraph_bar.php');  $psemestre = array(74, 75, 75, 75, 100, 75, 75, 75, 100);  $cero = array(90, 36, 72, 90,  90, 90, 61, 61,  90);

Page 117: Programacion Web

  $carreras = array('Admin', 'Bioquímica','Electrónica', 'Electríca','Industrial',                    'Mecánica','Mecatrónica','Química','Sistemas');    $grafica = new Graph(650, 450);   // Crea la gráfica     $grafica->SetScale('textlin', 0, 120);  //$grafica->SetShadow();  $grafica->SetMarginColor('white:1.1');  $grafica->legend->SetPos(0.5,0.97,'center','bottom');  $serie1 = new BarPlot($psemestre); // Crea las barras  $serie1->SetLegend('1er. Semestre');  $serie1->value->Show();  $serie1->value->SetFormat('%0.0f');  $serie1->SetWidth(0.6);  $serie1->SetFillGradient('navy:0.9','navy:1.85',GRAD_LEFT_REFLECTION);  $serie2 = new BarPlot($cero);  $serie2->SetLegend('Sem. Cero');  $serie2->value->Show();  $serie2->value->SetFormat('%0.0f');  $serie2->SetWidth(0.6);  $serie2->SetFillGradient('red:0.95','red:1.85',GRAD_RIGHT_REFLECTION);  // Create the grouped bar plot  $gbplot = new GroupBarPlot(array($serie1,$serie2));    $grafica->Add($gbplot); // Suma la serie a la gráfica  $grafica->title->Set('Resultado oficial examen admisión I.T.V 2010');  $grafica->xaxis->title->Set('Carrera');  $grafica->xaxis->SetTickLabels($carreras);  $grafica->yaxis->title->Set('Número de aceptados');  $grafica->Stroke(); // Despliega la gráfica?>

DescargarEjecutar

Gráficas de pastel

Las gráficas de pastel sirven para expresar porcentajes o conteos de variables cualitativas (ordinales o nominales).

PiePlot crea una instancia de una gráfica de pastel (línea 5)

Las etiquetas se crean en la línea 20 se definen las etiquetas de los datos y su

representación (.1f) expresa un decimal.

Page 118: Programacion Web

?

<?php   require_once ('jpgraph/jpgraph.php');  require_once ('jpgraph/jpgraph_pie.php');    $datos = array(16, 30); // Datos     $grafica = new PieGraph(600,400,'auto'); // Crear Gráfico  $grafica->SetFrame(true); // Despliega el borde  $grafica->SetShadow();  $grafica->title->Set('Alumnos por genero Seguridad en Redes. Verano 2010. I.T.V');  $grafica->title->SetMargin(8); // Add a little bit more margin from the top

    // Crea la gráfica  $genero = new PiePlotC($datos);  $genero->SetSize(0.35);  $genero->value->SetColor('white');  $genero->value->Show();  $genero->midtitle->Set('Genero');  $genero->SetMidColor('yellow');  $genero->SetLabelType(PIE_VALUE_PER);

     $lbl = array('Mujeres\n%.1f%%','Hombres\n%.1f%%');   $genero->SetLabels($lbl);   $genero->SetShadow();

       $genero->ExplodeAll(15); // Explode all slices 15 pixels   $grafica->Add($genero);  // Add plot to pie graph   $grafica->Stroke(); //Despliega la gráfica?>

DescargarEjecutar

3.10 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. La solución computacional es almacenar dichos datos en una fuente de almacenamiento secundario como por ejemplo undisco duro o pendrive

Page 119: Programacion Web

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, el procesamiento de archivos es una herramienta invaluable de programación. Existen diversos tipos de archivos y su descripción escapa del alcance de este curso.

Sin embargo, mis caros y estimados lectores simplemente cualquier cosa almacena en su disco duro o en su pendrive es un archivo.

Los archivos que PHP pueden ser secuenciales y binarios. Los archivos secuenciales son archivos de texto y los binarios pueden almacenargráficos y diversos formatos de información. Básicamente responden a las siguientes operaciones básicas:

abrir

borrar

cerrar

copiar

escribir

leer

renombrar

Desde las operaciones básicas como copiar, mover y eliminar, hasta operaciones que exigen una cierta complejidad son requeridas para la configuración de páginas Web.

Función Descripción Sintaxis

copy Copia un archivocopy($origen, $destino)

renameCambia el nombre del archivo de $antes a $despues

rename($antes, $despues)

unlink Borra el archivo unlink($archivo)

Manejo de imagenes

Page 120: Programacion Web

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

Ejemplo:

La función PHP opendir() se encarga de habilitar una ruta a un subdirectorio.

La función readdir() se encarga de leer un archivo o subdirectorio.

strlower() convierte el contenido de una cadena a minúscula.

substr() extrae una subcadena de una cadena, en este caso por ser el parámetro negativo extrae los últimos cuatro carácteres (línea 10). El objetivo

es extraer la extensión del archivo.

closedir() cierra la ruta al subdirectorio.

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

Page 121: Programacion Web

echo "</td>"; } } } echo "</tr>"; echo "</table>"; closedir($gestor); //Cierra el gestor }?>

DescargarEjecutar

Ejemplo:

La función glob() realiza una búsqueda por todos los nombres de ruta que

coincidan con cierto patrón. En este caso con los gráficos validos para html.

sort() ordena los nombres de los archivos encontrados.

el ciclo foreach recorre el arreglo de archivos.

<?php echo "<table border=1 align='center'>"; echo "<tr>"; $i = 0; //carga las imagenes de la carperta //La función glob() realiza una búsqueda por todos los nombres //de ruta que coincidan con patrón $ruta = "../imagenes/"; $imagenes = glob($ruta . "{*.jpg, *.gif, *.png}", GLOB_BRACE); sort($imagenes); //Recorre el vector foreach($imagenes as $foto){ if ($i==4) { $i=0; echo "</tr>"; echo "<tr>"; } $i++; echo "<td><a href='".$foto."'><img src='".$foto."/></a></td>"; } echo "</tr>"; echo "</table>"; ?>

Page 122: Programacion Web

DescargarEjecutar

Para el siguiente ejemplo usaremos 4 funciones básicas de manipulación de archivos

Función Descripción Sintaxis

filesize Obtiene el tamaño del archivo filesize($archivo);

fopenAbre un archivo y le asigna un identificador id.

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

fpassthru

Lee completamente el archivo y lo muestra. El cierre del archivo es automático al terminar el volcado del archivo.

fpassthru($id);

header

Permite modificar las cabeceras que envía el servidor al navegador. Estas cabeceras, que siguen el protocolo HTTP, es la primera información que recibe el navegador en cada petición que realiza, antes que el contenido del archivo.

header("mensaje");

Ejemplo: Mostrar una imagen

fopen además de abrir un archivo, obtiene un apuntador a su contenido. fopen solo debe usarse para abrir un archivo cuyo contenido vamos a manipular. Si unicamente queremos recuperar su contenido (y por ejemplo mostrarlo en pantalla), hay otras funciones mas adecuadas.

Los modos en los que se puede abrir un archivo son:

r Sólo lectura. El puntero al comienzo del archivo

r+ Lectura y escritura; apuntador al inicio del archivo

w Sólo escritura, si no existe el archivo lo crea, si existe lo convierte en archivo

de longitud cero y el apuntador se coloca en el inicio (sobreescribe el contenido,

vamos)

Page 123: Programacion Web

w+ Lectura y escritura, si existe lo trunca a tamaño cero, y se situa al inicio, si

no existe lo crea

a Modo append, sólo escritura, si no existe lo crea. Si existe, el apuntador se

coloca al final del archivo (listo para escribir a continuacion del contenido)

a+ Modo append, lectura y escritura, si no existe lo crea; apuntador al final del

archivo

b es un flag adicional a cualquiera de los anteriores que indica que vamos a

operar sobre un archivo binario (en contraposicion a archivo de texto) como una

imagen o un sonido. En algunos sistemas operativos como linux no existe esta

diferencia asi que el indicador b será ignorado.

Las líneas 7 y 8 envían cabeceras HTTP para indicar el tamaño y formato del archivo.

fpassthru (línea 11) hace un volcado del archivo previamente definido en la línea 4.

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

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

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

Ejecutar

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.

<? header( 'Content-type: image/png');

Page 124: Programacion Web

$archivo = '../imagenes/Shakira02.png'; $imagen = file_get_contents($archivo); echo $imagen; ?>

Ejecutar

Leer un archivo de texto

 

En la línea 2 se genera un apuntador al archivo alumnos.txt La función feof (línea 4) comprueba si se encuentra el fin del archivo

La función fgets lee el contenido de un archivo hasta encontrar el fin de línea

(línea 4)

fclose (línea 5) cierra el apuntador

<?php $archivo = fopen('0310alumnos.txt', 'r'); //Imprime una linea hasta que el //final del archivo es encontrado while(!feof($archivo)) { echo fgets($archivo)."<br />"; } fclose($archivo);?>

Ejecutar

Otra forma de hacerlo es mediante la función fread (línea 6) la cual lee el contenido de un archivo.

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

Ejecutar

Page 125: Programacion Web

Contador de visitas

 

file_exists comprueba si un archivo existe (línea 2)

La línea 9 y 12 crean un puntero al archivo

La línea 13 recupera el número de visitantes

La línea 14 incrementa en uno el número de visitantes o reinicia la cuenta si el

archivo no tiene el dato.

fputs guarda la información en el archivo

Las líneas 21 al 21 imprimen el número de visitantes mediante imagenes de los

dígitos

fclose (línea 25) cierra el apuntador ysalva el contenido del archivo.

<?php /******************************************************** * Contador de visitas programado en PHP *************** * Modificado Jose Evaristo Pacheco Velasco ******* * Mas utilidaddes para webmsters en www.desenredate.com ********************************************************/ $destino = '0310visitante.dat'; if (!file_exists($destino)) { // si el archivo no existe lo crea $abrir = fopen($destino, 'w'); $cuenta = ''; } else { $abrir = fopen($destino,'r'); $cuenta = trim(fread($abrir,filesize($destino))); } if ($cuenta != '') $cuenta++; else $cuenta = 1; fclose($abrir); $abrir = fopen($destino,'w'); fputs($abrir, $cuenta); echo "<p align='center'>Eres el visitante:</p>"; // Imprime contador for($i = 0; $i < strlen($cuenta); $i++) { $imagen = substr($cuenta, $i, 1); $contador .= "<img alt='$imagen ' src='$imagen.gif'>"; } fclose($abrir); echo "<p align='center'> $contador </p>";?>

DescargarEjecutar

Page 126: Programacion Web

3.11 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).

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

1. Establecer contacto con la base de datos

2. Realizar las operaciones necesarias

3. Cerrar los recursos empleados

 

Conectar con una base de datos MySQL - PHP

Para conectarse con una base de datos es necesario crear una conexión con el servidor. Esto se logra en PHP mediante el uso de la funciónmysql_connect() . Sintaxis

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

Parámetro Descripción

$rutaOpcional. Específica el servidor al cual se conecta. El

valor por defecto es " localhost:3306".

$usuarioOpcional. Identifica el usuario. El valor por defecto es el nombre de usuario propietario del proceso.

$password Opcional. El valor por defecto es "". No recomendado

Page 127: Programacion Web

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, 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).

?1234567891011

<?php

  $ruta      = "localhost";  $login     = "mi_login";  $password  = "mi_password";  $db        = "miBaseDatos";  $conexion  = mysql_connect( $ruta, $login, $password)               or die(mysql_error());  mysql_select_db( $db, $conexion ) or die(mysql_error());  echo "conectado bravo!!!!!!";  mysql_close($conexion);  ?>

DescargarEjecutar

Crear una base de datos en MySQL - PHP

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

CREATE DATABASE nombre

Para generar esta sentencia desde PHP usaremos las siguiente funciones:

Page 128: Programacion Web

La función mysql_connect() nos conecta al servidor mysql con los parámetros

ruta, login y password. $ruta indica el sitio donde estaran nuestros datos. La

ruta localhost funciona regularmente cuando nos conectamos a un servidor instalados en nuestra pc o aun servidor de paga.

La funcion mysql_query ejecuta una sentencia SQL.

La función mysql_close() nos lleva los datos de la memoria principal a un

almacenamiento secundario.

die muestra el mensaje de error indicado por pantalla y finaliza el script actual

en el punto en el que se encuentre. No devuelve valor alguno.

Ejemplo de 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.

mysql_close (línea 13) cierra la conexión a la base de datos

?1234567891011121314

<?php   include('ruta.php');   $conexion = mysql_connect($ruta,$usuario, $password);   if(!$conexion) {      die('Imposible conexión al servidor: '. mysql_error());   }   $sentencia = 'CREATE DATABASE IF NOT EXISTS prograwe_miBD';   if (mysql_query($sentencia, $conexion)) {       echo 'Base de datos creada';   } else {       echo 'Error al crear la base de datos: '.mysql_error();  }  mysql_close($conexion); ?>

Descargar

Crear una tabla en MySQL - PHP

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

Page 129: Programacion Web

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. El primer Campeonato Mundial de Pilotos fue otorgado en la temporada 1950 a Giuseppe Farina. Considere la siguiente tabla de datos correspondientes a los campeones de Formula 1 (2000 - 2011) y sus escuderias.

Año Campeón Escudería

2011 Sebastian Vettel Red Bull Racing

2010 Sebastian Vettel Red Bull Racing

2009 Jenson Button Brawn GP

2008 Lewis Hamilton McLaren

2007 Kimi Raikkonen Ferrari

2006 Fernando Alonso Renault

2005 Fernando Alonso Renault

2004 Michael Schumacher Ferrari

2003 Michael Schumacher Ferrari

2002 Michael Schumacher Ferrari

2001 Michael Schumacher Ferrari

2000 Michael Schumacher Ferrari

A continuación se presenta el código MySQL necesario para crear una tabla

CREATE TABLE f1 ( year INT, campeon CHAR( 35 ) NOT NULL, escuderia CHAR( 35 ) NOT NULL, PRIMARY KEY ( year )) ENGINE = InnoDB;

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

Page 130: Programacion Web

La función mysql_select_db nos permite seleccionar la base de datos (línea

10)

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.

?

<?php   $query = "CREATE TABLE IF NOT EXISTS f1 (";   $query .= "year INT NOT NULL , ";   $query .= "campeon CHAR( 35 ) NOT NULL,";   $query .= " escuderia CHAR( 35 ) NOT NULL , ";   $query .= "PRIMARY KEY ( year ) ) ";   $query .= "ENGINE = InnoDB;";   include('ruta.php');   $conexion = mysql_connect($ruta,$login,$password) or die(mysql_error());   mysql_select_db( $db, $conexion ) or die(mysql_error());      if (mysql_query($query, $conexion)){      echo "Tabla creada con éxito <br />";   } else die(mysql_error());   mysql_close($conexion);?>

Descargar

Ejemplo: Los XVI Juegos Panamericanos se llevaron a cabo del 14 al 30 de octubre de 2011, en la ciudad de Guadalajara, México. É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. En esta actividad crearemos una tabla que contendrá el medallero de esta competencia.

Ads not by this site

?

<?php  include('ruta.php');  $query = 'CREATE TABLE IF NOT EXISTS panamericanos (';  $query .= 'pais      CHAR(35)NOT NULL,';  $query .= ' oro  INT DEFAULT 0,';  $query .= ' plata INT DEFAULT 0,';  $query .= ' bronce INT DEFAULT 0,';  $query .= ' total INT DEFAULT 0,';  $query .= ' PRIMARY KEY ( PAIS ) ) ENGINE = InnoDB;';  $conexion = mysql_connect( $ruta, $login, $password) or die(>mysql_error());  mysql_select_db( $db, $conexion ) or die(>mysql_error());  mysql_query($query, $conexion) or die(>mysql_error());  mysql_close($conexion);?>

Descargar

Page 131: Programacion Web

Insertar registros en una tabla.

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

La sentencia tiene dos sintaxis genericas validas

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

componen la tabla

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

La segunda se usa cuando solo ingresaremos datos en algunas columnas

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

Ejemplo: Inserción de registros en MySQL con PHP usaremos el caso de Formula 1

?<?php   include("ruta.php");   $conexion = mysql_connect( $ruta, $login, $password)                or die(mysql_error());   mysql_select_db( $db, $conexion ) or die(mysql_error());   mysql_query("INSERT INTO f1 VALUES (2011,'Sebastian Vettel','Red Bull Racing')",                 $conexion) or die(mysql_error());   mysql_query("INSERT INTO f1 VALUES (2010,'Sebastian Vettel','Red Bull Racing')",                 $conexion) or die(mysql_error());   mysql_query("INSERT INTO f1 VALUES (2009,'Jenson Button Brawn','GP')",

Page 132: Programacion Web

                 $conexion) or die(mysql_error());   mysql_query("INSERT INTO f1 VALUES (2008,'Lewis Hamilton','McLaren')",                $conexion) or die(mysql_error());   echo "Operación exitosa";    mysql_close($conexion);?>

Descargar

Ejemplo: Medallero juegos Panamericanos Guadalajara 2011.

?

<?PHP  include('ruta.php');  $conexion = mysql_connect( $ruta, $login, $password) or die(mysql_error());   mysql_select_db( $db, $conexion ) or die(mysql_error());   $query = 'DELETE FROM panamericanos';  mysql_query($query, $conexion) or die(mysql_error());   $query = 'INSERT INTO panamericanos VALUES';  $query .= "('Estados Unidos','usa.png',92,79,65,236),";  $query .= "('Cuba','cuba.png',58,35,43,136),";  $query .= "('Brasil','brasil.png',48,35,58,141),";  $query .= "('México','mexico.png',42,41,50,133),";  $query .= "('Canadá','canada.png',30,40,49,119),";  ...  $query .= "('Guyana','guyana.png',0,0,1,1),";  $query .= "('Panamá','panama.png',0,0,1,1)";  mysql_query($query, $conexion) or die(mysql_error());   mysql_close($conexion);   echo 'Operación exitosa'; ?>

Descargar

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

Ads not by this site

Page 133: Programacion Web

?

<?php  if ( isset($_POST['aceptar']) && $_SERVER['REQUEST_METHOD'] == 'POST') {    $year      = $_POST['year'];    $campeon   = $_POST['campeon'];    $escuderia = $_POST['escuderia'];    if(!(isset($year) && !empty($year)          && isset($campeon) && !empty($campeon)          && isset($escuderia) && !empty($escuderia)        )      ) {      echo "Todos los campos son necesarios";    } else {      $n = date('Y'); // Obtiene el año actual      if ($year >= 1950 and $year <= $n) { //F1 inicio en 1950         include('ruta.php');       

         $conexion  = mysql_connect( $ruta, $login, $password) or die(mysql_error());         mysql_select_db( $db, $conexion ) or die(mysql_error());         $query = "SELECT * FROM f1 WHERE year = $year";         $registros = mysql_query($query, $conexion) or die(mysql_error());         $n         = mysql_num_rows($registros);         if($n == 0) {//Checamos que no exista información para ese año           $query = "INSERT INTO f1 VALUES ($year, ";           $query .= "'$campeon','$escuderia')";           $resultado = mysql_query($query, $conexion);           if(!$resultado) {               echo 'Ocurrio un error al insertar'. mysql_error();           } else echo 'Operación realizada con éxito';        } else echo 'Ya existe información para ese año'; //Un solo campeón por año        mysql_close($conexion);     } else echo 'Año fuera de rango';     }  }?>

DescargarEjecutar

Page 134: Programacion Web

Mostrar el contenido de una tabla

La sentencia SELECT nos permite recuperar los registros de una tabla. 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. Para el

caso de un SELECT regresa 0 o más registros.

mysql_num_rows() regresa el número de registros otorgados

por mysql_query(). mysql_fetch_assoc regresa un conjunto de registros obtenidos

por mysql_query().

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

?123456789101112131415161718192021

<?php include("ruta.php");$conexion = mysql_connect( $ruta, $login, $password)            or die(mysql_error());mysql_select_db( $db, $conexion ) or die(mysql_error());$query = "SELECT * FROM f1 ORDER BY year DESC";$registros = mysql_query($query, $conexion) or die(mysql_error());$n = mysql_num_rows($registros);mysql_close($conexion);if ($n > 0) { // si hay registros   $html = '<center><h2>Campeones de Formula 1</h2></center>';  $html.= '<table>';  $html.= '<thead><tr><th>Año</th><th>Campeón</th>';  $html.= '<th>Escudería</th></tr></thead>';  while ($registro = mysql_fetch_assoc($registros)) {    $html.= '<tr>';    $html.= '<td>'. $registro['year'].'</td>';    $html.= '<td>'. $registro['campeon'].'</td>';    $html.= '<td>'. $registro['escuderia'].'</td></tr>';  } $html.= '</table>';  echo $html; } ?>

Page 135: Programacion Web

22DescargarEjecutar

Ejemplo: Estados de la República Mexicana

?

<?php  include('postal.php');   $conexion = mysql_connect( $ruta, $login, $password) or die(mysql_error()); mysql_select_db( $db, $conexion ) or die(mysql_error());      $query     = 'SELECT estado, ruta FROM estados ORDER BY estado';    $registros = mysql_query($query, $conexion) or die(mysql_error());   $n         = mysql_num_rows($registros); mysql_close($conexion); if ($n > 0) { // si hay registros    $html = '<center><h2>Estados de México</h2></center>';    $html.= '<table><thead>';         $html.= '<tr><th>Estado</th><th>Escudo</th></tr>';    while ($registro = mysql_fetch_assoc($registros)) {      $html.= '<tr><td>';             $html.= $registro['estado'];      $html.= "</td><td><img src='";             $html.= $registro['ruta'];      $html.= "' height='50' width='50'  /></td></tr>";        }    echo $html.'</table>';   } ?>

DescargarEjecutar

Ejemplo: Mostrar los campeones de la NBA

?<?php  include(0ruta.php');

  $conexion  = mysql_connect( $ruta, $login, $password) or die(mysql_error());  mysql_select_db( $db, $conexion ) or die(mysql_error());  $query     = 'SELECT * FROM campeonesNBA ORDER BY temporada DESC';  $registros = mysql_query($query, $conexion) or die(mysql_error());  $n         = mysql_num_rows($registros);  mysql_close($conexion);  if ($n > 0) { // si hay registros     $html = '<center><h2>Campeones NBA</h2></center>';     $html.= '<table>';

Page 136: Programacion Web

     $html.= '<thead><tr><th>Temporada</th><th>Campeón</th>';     $html.= '<th>Marcador</th>';     $html.= '<th>Marcador</th><th>SubCampeón</th></tr></thead>';     while ($registro = mysql_fetch_assoc($registros)) {       $html.= '<tr>';       $html.= '<td>'. $registro['temporada'].'</td>';       $html.= '<td>'. $registro['campeon'].'</td>';       $html.= '<td>'. $registro['ganador'].'</td>';       $html.= '<td>'. $registro['perdedor'].'</td>';       $html.= '<td>'. $registro['subcampeon'].'</td></tr>';    }    $html.= '</table>';    echo $html;  }?>

DescargarEjecutar

Ejemplo: Muestra los paises por continente con su capital, superficie, población, densidad (población/superficie) y su bandera. Así mismo presenta la suma de superficie, población y densidad promedio.

El programa genera una página html como resultado.

Ads not by this site

?<?php  if( isset($_POST['enviar']) && $_SERVER['REQUEST_METHOD'] == 'POST') {       include('0311paises.inc');     function consultas( $continente ) {       switch ($continente) {          case 1: $continent = "África"; break;          case 2: $continent = "América";  break;          case 3: $continent = "Asia";  break;          case 4: $continent = "Europa";  break;          case 5: $continent = "Oceanía";  break;          case 6: $continent = "Los países del Mundo";  break;       }       $queryT = 'SELECT COUNT(*) paises, SUM(superficie) superficie,';       $queryT.= 'SUM(poblacion) poblacion, poblacion/superficie densidad FROM pais';       if($continente == 6) {          $query = 'SELECT * FROM pais ORDER BY densidad DESC, nombre';       } else {         $query  = "SELECT * FROM pais WHERE idContinente = $continente ";         $query .= 'ORDER BY densidad DESC, nombre';         $queryT.= " WHERE idContinente = $continente";       }       return array($query, $queryT, $continent);    

Page 137: Programacion Web

     }// Consultas        $continente = $_REQUEST['continente'];     list($query, $queryT, $continent) = consultas( $continente );      $conexion  = mysql_connect($ruta, $login, $password);     mysql_select_db( $db, $conexion );     $registros  = mysql_query($query, $conexion) or die(mysql_error());     $registrosT = mysql_query($queryT, $conexion) or die(mysql_error());     $n          = mysql_num_rows($registros);     mysql_close($conexion);     if ($n > 0) { // si hay registros       $html = "<p class='centrado'><h1>$continent</h1><br />";       $html.= '<table class="stripeMe">';       $html.= '<thead><tr>';       $html.= '<th>Nombre</th>';       $html.= '<th>Capital</th>';       $html.= '<th>Superficie<br />Km<sup>2</sup></th>';       $html.= '<th>Población<br />Habitantes</th>';       $html.= '<th>Densidad<br />Hab/Km<sup>2</sup></th>';       $html.= '<th>Bandera</th>';       $html.= '</tr></thead>';       while ($registro = mysql_fetch_assoc($registros)) {         $html.=  '<tr>';         $html.= '<td>'. $registro['nombre'].'</td>';         $html.= '<td>'. $registro['capital'].'</td>';         $html.= '<td class="derecha">'.number_format($registro['superficie']).'</td>';         $html.= '<td class="derecha">'.number_format($registro['poblacion']).'</td>';         $html.= '<td >'.number_format($registro['densidad'],2,'.',',').'</td>';         $html.= "<td class='center'><p class='centrado'><img src='banderas/";         $html.= $registro['nombre'].".jpg' /></p></td></tr>";       }       $html.= '</table><br />';       $html.= '<table class="stripeMe">';       $html.= '<thead><tr>';       $html.= '<th>Continente</th>';       $html.= '<th>Países</th>';       $html.= '<th>Superficie<br />Km<sup>2</sup></th>';       $html.= '<th>Población<br />Habitantes</th>';       $html.= '<th>Densidad<br />Hab/Km<sup>2</sup></th>';       $html.= '</tr></thead>';       $html .= '<tbody';       while ( $registro = mysql_fetch_assoc($registrosT) ) {         $html .= '<tr><td>'. $continent.'</td>';         $html .= '<td class="derecha">'. $registro['paises'].'</td>';         $html .= '<td class="derecha">'. number_format($registro['superficie']).' </td>';         $html .= '<td class="derecha">'. number_format($registro['poblacion']).'</td>';         $html .= '<td >'. number_format($registro['densidad'],2,'.',',').'</td></tr>';       }       $html .= '</tbody></table><br />';       $html .= '<div><a href="0311paises.php"><br />REGRESAR</a></div>';       echo $html;     }  } else {     ?>      <form id='forma' name='forma' method='post' action='0311paises.php'>    <p class='centrado'><strong>Selecciona el continente</strong></p>    <p class='centrado'>       <select name='continente' id='continente'>          <option value='1' selected='selected'>África</option>          <option value='2'>América</option>          <option value='3'>Asia</option>

Page 138: Programacion Web

          <option value='4'>Europa</option>          <option value='5'>Oceanía</option>          <option value='6'>Todos los países</option>        </select>    </p>    <div>        <input type='submit' name='enviar' id='enviar' value='Enviar' />    </div>

     </form>   <?   }?>

DescargarEjecutar

Paginación

Consiste en dividir resultados de consultas extensas a una base de datos, en grupos al estilo de Google. La solución esta basada en la libreria de Marco A. Madueño Mejía y modificada para los ejemplos presentados.

Ejemplo: Campeones NBA

?<body> <h2><p class="centrado">Campeones NBA</p></h2> <table class="zebra">  <thead>    <th>Temporada</th>    <th>Campeón</th>

Page 139: Programacion Web

   <th>Ganador</th>    <th>Perdedor</th>    <th>Subcampeón</th>  </thead> <?php    //Autor libreria: Marco A. Madueño Mejía   require_once('lib/PHPPaging.lib.php');    // Apertura de la conexión a la base de datos e Inclusión del script     include('ruta.php');   $conexion = mysql_connect($ruta, $login, $password);    mysql_select_db($db, $conexion);

    // Instanciamos el objeto    $paging = new PHPPaging( $conexion );              // Indicamos la consulta al objeto   $query = 'SELECT * FROM campeonesNBA ORDER BY temporada DESC';     $paging->agregarConsulta($query);    $paging->porPagina(15); 

             // Ejecutamos la paginación    $paging->ejecutar();  

             // Imprimimos los resultados, para esto creamos un ciclo while    // Similar a while($registro = mysql_fetch_array($sql))   $html= '';    while($registro = $paging->fetchResultado()) {       $html.= '<tr>';     $html.= '<td>'. $registro['temporada'].'</td>';     $html.= '<td>'. $registro['campeon'].'</td>';     $html.= '<td>'. $registro['ganador'].'</td>';     $html.= '<td>'. $registro['perdedor'].'</td>';     $html.= '<td>'. $registro['subcampeon'].'</td></tr>';   }    $html.= '</table>';   $html.= "<div class='navigation'><b>Navegación</b>: ";   $html.= $paging->fetchNavegacion().'</div>';   echo $html; ?> </body>

DescargarEjecutar

Ejemplo: Precio del dólar con respecto al peso Mexicano desde 1995 a la fecha

Page 140: Programacion Web

?

<?php     //Autor libreria: Marco A. Madueño Mejía    require_once('lib/PHPPaging.lib.php');     include('ruta.php');    $conexion = mysql_connect($ruta, $login, $password);     mysql_select_db($db, $conexion);

      $paging = new PHPPaging( $conexion );  // Instanciamos el objeto                $query = 'SELECT * FROM dolar ORDER BY fecha DESC';    $paging->agregarConsulta($query); // Indicamos la consulta al objeto    $paging->porPagina(15); 

              // Ejecutamos la paginación     $paging->ejecutar();  

              // Imprimimos los resultados, para esto creamos un ciclo while     // Similar a while($registro = mysql_fetch_array($sql))     $html = '';    while($registro = $paging->fetchResultado()) {       $html.= '<tr>';     $html.= '<td>'. $registro['fecha'].'</td>';     $html.= '<td>'. $registro['precio'].'</td>';   }    $html.= '</table>';   $html.= "<div class='pagination'><b>Navegación</b>: ".$paging->fetchNavegacion()."</div>";   echo $html; ?>

DescargarEjecutar

Ejemplo: Medallero Panamericano Guadalajara 2011

Ads not by this site

?<body> <h3 align='center'>Medallero Panamericano</h3> <h3 align='center'>Guadalajara, México 2011</h3> <table  class='stripeMe'>  <thead>    <th>Pos</th>    <th>País</th>    <th><img src="panamericanos/oro.png" alt='Oro' title='Oro' /></th>    <th><img src="panamericanos/plata.png" alt='Plata' title='Plata' /></th>    <th><img src="panamericanos/bronce.png" alt='Bronce' title='Bronce' /></th>    <th>Total</th>  </thead><?php

Page 141: Programacion Web

    //Autor libreria: Marco A. Madueño Mejía    require_once('lib/PHPPaging.lib.php');

     // Apertura de la conexión a la base de datos e Inclusión del script

              include('ruta.php');    $conexion = mysql_connect($ruta, $login, $password);     mysql_select_db($db, $conexion);

     // Instanciamos el objeto     $paging = new PHPPaging( $conexion );               // Indicamos la consulta al objeto      $paging->agregarConsulta('SELECT * FROM panamericanos ORDER BY id');     $paging->porPagina(10); 

              // Ejecutamos la paginación     $paging->ejecutar();  

              // Imprimimos los resultados, para esto creamos un ciclo while     // Similar a while($registro = mysql_fetch_array($sql))    $html='';     while($registro = $paging->fetchResultado()) {        $html.= '<tr>';      $html.= '<td>'. $registro['id'].'</td>';      $html.= '<td>'. "<img src='panamericanos/".$registro['bandera']."' "." alt='' />";      $html.= $registro['pais'].'</td>';      $html.= '<td class="derecha">'. $registro['oro'].'</td>';      $html.= '<td class="derecha">'. $registro['plata'].'</td>';      $html.= '<td class="derecha">'. $registro['bronce'].'</td>';      $html.= '<td class="derecha">'. $registro['total'].'</td>';      $html.= '</tr>';   }    $html.=  '</table>';   echo $html;   echo "<div class='pagination'><b>Navegación</b>: ".$paging->fetchNavegacion()."</div>"; ?>

DescargarEjecutar

Modificar datos desde un formulario

La sentencia UPDATE permite modificar uno o más registros de una tabla. La sintaxis es:

Page 142: Programacion Web

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

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

La variable $checaRadio contiene la 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, $password, $db, $year, $campeon, $escuderia) { $conexion = mysql_connect( $ruta, $login, $password) or die(mysql_error()); mysql_select_db( $db, $conexion ) or die(mysql_error()); $query = "UPDATE f1 SET year = $year, campeon = '$campeon', "; $query .= "escuderia = '$escuderia' WHERE year = $year"; $registros = mysql_query($query, $conexion) or die(mysql_error()); mysql_close($conexion); } // END update_registro

include("ruta.inc"); if(!isset($modificar) && !isset($aceptar)) { imprime_tabla($ruta, $login, $password, $db); } else if (isset($modificar)) { unset($modificar); $year = $_POST['rg']; $conexion = mysql_connect( $ruta, $login, $password) or die(mysql_error()); mysql_select_db( $db, $conexion ) or die(mysql_error()); $query = "SELECT * FROM f1 WHERE year =$year"; $registros = mysql_query($query, $conexion) or die(mysql_error());

Page 143: Programacion Web

imprime_forma($registros, $conexion); } else if ($aceptar) { unset($aceptar); $year = $_POST['year']; $campeon = $_POST['campeon']; $escuderia = $_POST['escuderia']; update_registro($ruta, $login, $password, $db, $year, $campeon, $escuderia); imprime_tabla($ruta, $login, $password, $db); } else if ($cancelar) { header ("Location: http://www.prograweb.com.mx/pweb/ejecutables/codigo50.php"); }?>

DescargarEjecutar

Eliminar datos desde una forma

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

Sintaxis

DELETE FROM nombre_tablaWHERE alguna_columna = algun_valor;

La clausula WHERE específica que registros serán eliminados. Si se omite la clausula WHERE, todos los registros de la tablas serán ¡eliminados!

Para aprender más sobre SQL, visite la página de base de datos de este sitio.

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

Page 144: Programacion Web

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

$borrar[] es un vector de tipo checkbox.

implode une los elementos de un vector en una cadena. Para el ejemplo une

los identidicadores de los registros a eliminar mediante una coma. La línea $consulta = mysql_query($query, $conexion) or

die(mysql_error()); esta comentada por razones obvias. Borrar registros

 

Imprime Tabla

<?php include("ruta.inc"); if( isset($_POST['eliminar']) && $_SERVER["REQUEST_METHOD"] == "POST") { unset($_POST['eliminar']); // Obtener las llaves de registros a borrar $borrar = $_POST['borrar']; $n = count($borrar); if($n == 0) { print ("<p>No elegiste registros para eliminar</p>"); print ("<p>[ <a href='0311borrarF1.php'>Eliminar más Registros</a> ]</p>"); } else { $registros = implode(',', $borrar); $query = "DELETE FROM f1 WHERE year IN (".$registros.")"; unset($borrar); // Conectar con el servidor y la basede datos $conexion = mysql_connect( $ruta, $login, $password) or die(mysql_error()); mysql_select_db( $db, $conexion ) or die(mysql_error()); mysql_query($query, $conexion) or die(mysql_error()); mysql_close($conexion); //Cerrar conexión imprime_tabla(); } } else { if(!isset($nuevo)) { iniciar(); $nuevo = 1; } imprime_tabla(); }?>

DescargarEjecutar

Page 145: Programacion Web

3.12. Sesiones

Una sesión es la secuencia de páginas que un usuario visita en un sitio web. Desde que entra en nuestro sitio, hasta que lo abandona.

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

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

Para que una página use sesiones debemos inicializarla con la funcion session_start(), la cual crea una nueva sesión o retoma una creada en otra página(del sitio).

Las sessiones propagan su SID(SESSION ID) de dos posibles maneras,

según php.ini, por cookies o por url, es decir agregando a todos losposibles link el SID de la sesion.

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.

Funciones de gestión de sesiones

función Significado

session_start(); Si es la primera solicitud genera un

Page 146: Programacion Web

función Significado

identificador de sesión aleatorio cuyo nombre serásess_IDsesión; si es otra solicitud continua la sesión iniciada anteriormente.

session_destroy();Elimina todos los datos asociados con una sesión, borra el archivo en el servidor pero no borra la cookie.

session_unset(); Borra una variable de sesión.

session_id([nombre]);

Si no le proporcionamos ningún parámetro nos da el identificador de sesión; si le proporcionamos el parámetro nombre cambia el valor del identificador por el parámetro nombre.

session_name([nombre]);

Si se invoca sin parámetro devuelve el nombre de la variable interna que tiene el id de sesiones; si se pasa parámetro cambia el nombre de la sesión.

session_get_cookie_params();Obtiene los parámetros de la cookie de la sesión

session_cache_limiter([cache_limiter]);

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

session_regenerate_id()Actualiza el id de sesión activa con uno más reciente

session_encode();Codifica los datos de la sesión actual en una cadena

session_decode(cadena);

Descodifica la cadena que recibe como parámetro y que contiene la información de sesión, después de usar esta función se actualiza la información de sesión.

session_save_path([path]); Devuelve la ruta al directorio donde se guardan los archivos asociados a la

Page 147: Programacion Web

función Significado

sesión. El efecto solo dura en el script actual.

session_module_name([modulo]);

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.

session_set_save_handler(open,close,read,write,destroy,gc);

Permite definir su propio manejador para almacenar la información asociada con una sesión.De esta forma los datos pueden ser metidos en una base de datos en vez de en un archivo. Tenemos que pasarle como parámetro toda la información necesaria para crear y destruir sesiones.

Iniciando con sesiones:

En la línea 2 se inicia la sesión - session_star() -

Declaramos una variable llamada usuario (línea 3) de tipo session

Header nos envia a la página específicada (línea 4)

?

1

2

3

4

5

<?php

  @session_start();

  $_SESSION['usuario'] = 'ProgramacionWEB';

  header('location:0312InicioSesiona.php');

?>

Ejecutar

Evitando accesos indeseados

Page 148: Programacion Web

En la línea 3 del segundo programa checamos que se recibió la variables

esperada, para evitar accesos indeseados (línea 6)

Se elimina la variable de sesión (línea 5).

?

1

2

3

4

5

6

7

<?php

  @session_start();

  if($_SESSION['usuario'] == 'ProgramacionWEB') {

    echo 'Usuario: '.$_SESSION['usuario'];

    unset($_SESSION['usuario']);

  } else echo 'Te equivocaste';

?>

Descargar

Contador de visitas con sesiones

Mediante el siguiente ejemplo se implementa un contador de visitas

La línea 2 captura el id de la sesión

Si la sesión no fue iniciada la genera (Línea 3)

Si la variable de sesión "visitas" existe la incrementa, caso contrario la crea y la

inicia en 1 (línea 4)

?

1

2

3

4

5

<?php

  $nombre_anterior = session_id();  

  if ($nombre_anterior == '') session_start();

  ($_SESSION['visitas'])

     ? >$_SESSION['visitas']++: $_SESSION['visitas'] = 1;

Page 149: Programacion Web

6 ?>

Descargar

Ejecutar

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

Crear una tabla mysql llamada usuarios e insertar un registro.

?

1

2

3

4

5

6

CREATE TABLE IF NOT EXISTS usuarios (

  usuario CHAR(25) NOT NULL,

  password CHAR(255) NOT NULL

) ENGINE = InnoDB DEFAULT CHARSET = latin1;

INSERT INTO usuarios VALUES ('root','bingo');

0312Sesion.php

Page 150: Programacion Web

La línea 2 inicia la sesión

La línea 3 checa si esta logeado el usuario. De ser así lo envia a la

página 0312PaginaSegura.php, en caso contrario al enviar el login y el

password será enviado a la página 0312Login.php

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<?php

  session_start(); // Iniciar sesión

  // Checa, si el usuario esta logeado

  if (isset($_SESSION['usuario'])) {

     header('Location: 0312SesionPaginaSegura.php');

  }  

?>

<table border='0'>

<form id='forma' name='forma' method='POST'

      action='0312SesionLogin.php'>

   <tr><td>Usuario</td><td>:</td><td><input name='usuario'

          type='text' size='25' maxlength='25'></td></tr>

   <tr><td>Password</td><td>:</td><td><input name='password'

          type='password' size='25' maxlength='25'></td></tr>

   <tr><td></td><td></td><td><input name='login'

          type='submit' id='login' value='Accesar'></td></tr>

</form>

</table>

Descargar

Ejecutar

0312SesionLogin.php

Page 151: Programacion Web

En la línea 4 y 5 se realiza la configuración de la conexión a la base de datos

mysql_real_escape_string — Escapa caracteres especiales en una cadena

para ser usado en una sentencia SQL para evitar la inyección de código SQL

La variable de sesión usuario se define si la consulta regresa un único registro.

Si somos usuarios registrados nos envia a la

pagína 0312SesionPaginaSegura.php

De no ser un usuario registrado la línea 20 nos envia a la página

de 0312Sesion.

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<?php

  @session_start(); // Iniciar sessión

  // Incluir la configuración para la conexión a la base de datos

  include('ruta.php');

  $conexion = mysql_connect( $ruta, $login, $password)

               or die(mysql_error());

  mysql_select_db( $db, $conexion ) or die(mysql_error());

  $sql = "SELECT * FROM usuarios WHERE (usuario = '";

  $sql .= mysql_real_escape_string($_POST['usuario']);

  $sql .= "') and (password = '"

  $sql .= mysql_real_escape_string(md5($_POST['password']))."')";

  $resultado = mysql_query($sql, $conexion);

  // Checa el usuario y el password

  $nr = mysql_num_rows($resultado);

  mysql_close($conexion);

  if ($nr == 1) {

        // Establece la variable de sesión usuario

        $_SESSION['usuario'] = $_POST['usuario'];

        // nos envia a la página segura

        header('Location: 0312SesionPaginaSegura.php');

  } else {

      // nos envia a la página inicial

      header('Location: 0312Sesion.php');

  } 

Page 152: Programacion Web

23

24

25

?>

0312SesionPaginaSegura.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 -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

8

9

10

11

12

13

14

15

16

17

18

<?php

  session_start(); // Inicia sesión

  // Si la sesión de usuario no se establece,

  // esta página saltará a página de acceso

  if (!isset($_SESSION['usuario'])) {

     header('Location: 0312Sesion.php');

  } else session_unset('usuario');

   //Borra la variable de sesión

?>

<html>

  <head>

    <title>Página segura</title>

  </head>

  <body>

    <p>Esta es una página segura con sesiones: <b>

    <?php echo $_SESSION['usuario']; ?></b>

    <br>Usted puede poner su información restringida aquí.</p>

Page 153: Programacion Web

19

20

21

22

     <p><a href='0312SesionLogout.php'>Desconectarse</a></p>

  </body>

</html>

0312SesionLogout.php

Esta página destruye las variables de sesión, la misma sesión y nos reenvia automáticamente a la página 0312Sesion.php.

?

1

2

3

4

5

6

<?php

     session_start();

  session_unset();

  session_destroy();

  header('Location: 0312Sesion.php');

  ?>

3.13. Seguridad

La seguridad y funcionamiento sin duda uno de los temas más importantes al desarrollar un portal web. La validación de datos, es por tanto fundamental.

El no cuidarnos de esto, puede traernos problemas de inyección SQL, CrossScripting, Cookie Poisoning, amenazas de seguridad en la nube (Cloud Computing) y un largo etc, etc, que compromete la estabilidad del sitio y el recurso más valioso de nuestro sitio "la información".

Page 154: Programacion Web

El filtrado de datos es una de las piedras angulares en cualquier aplicación en el tema de seguridad, independientemente del lenguaje con el cual se desarrolle.

Filtrado de datos

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

Se han desarrollado diversas  clases de validación, algunas mejores que otros, con igual o mayor número de métodos para hacer la misma tarea estas no estan estandarizadas. PHP versión 5 proporciona la extensión Filter cuyo objetivo es realizar esta tarea en forma sencilla, robusta y laestandarización de la entrada de datos del usuario. Las funciones base se presentan a continuación.

Función Descripción

filter_has_var

Verifica si la variable del tipo especificado existe

filter_list Devuelve una lista de  todos los  filtros soportados

filter_varFiltra una variable con un filtro específico. Devuelve los datos filtrados, o FALSE si el filtro falla.

filter_inputObtiene una variable desde afuera de PHP y opcionalmente la filtra

Ejemplo de filter_has_var

La sintaxis es:

filter_has_var(tipo, variable)

Parámetro Descripción

tipo Requerido. específica el tipo que deseamos checar. Los

Page 155: Programacion Web

Parámetro Descripción

posibles tipos son: INPUT_GET

INPUT_POST

INPUT_COOKIE

INPUT_SERVER

INPUT_ENV

variable Requerida. Específica la variable que deseamos checar

El objetivo del ejemplo es tratar de frenar invasiones a la seguridad asegurandonos que no introduzcan datos mediante la URL. Este 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'); } else die('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>'; echo filter_id($filter).'</td></tr>'."\n"; } ?>

Page 156: Programacion Web

</table></body>

DescargarEjecutar

Ejemplo de filter_var y filter_input

La validación de datos es una parte integral del trabajo con formularios. Datos válidos los datos presentados pueden dar lugar a problemas de seguridad

A partir del formulario

 

 

Futuro colega*

Estatura*  metros

Peso*  (40 a 150 kg)

url*

Por ejemplo: http://www.itver.edu.mx

email*

ip*

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

$options = array('options'=>

Reiniciar

Page 157: Programacion Web

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 />"; ?>

DescargarEjecutar

4.1 Lenguaje Script del cliente.

JavaScript es un lenguaje de programación usado principalmente para crear páginas web dinámicas. Una página web dinámica es aquella que incorpora efectos como texto que aparece y desaparece, animaciones, acciones activadas al pulsar botones y ventanas con mensajes de aviso al usuario.

Técnicamente, JavaScript es un lenguaje de programación interpretado, y no es necesario compilar los programas para ejecutarlos. En otras palabras, los programas escritos con JavaScript se pueden probar directamente en cualquier navegador sin necesidad de procesos intermedios.

Page 158: Programacion Web

A pesar de su nombre, JavaScript no guarda ninguna relación directa con el lenguaje de programación Java. Legalmente, JavaScript es una marca registrada de la empresa Sun Microsystems. Su nombre es exclusivamente por marketing, ya que Java era la palabra de moda en el mundo informático y de Internet de la época de desarrollo.

Cómo incluir JavaScript en documentos XHTML

La integración de JavaScript y XHTML es muy flexible, 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.

Incluir JavaScript en el mismo documento XHTML

El código JavaScript se encierra entre etiquetas <script></script> y se incluye en cualquier parte del documento. Aunque es correcto incluir cualquier bloque de código en cualquier zona de la página, se recomienda definir el código JavaScript dentro de la cabecera del documento (dentro de la etiquetas <head></head>):

Para que la página XHTML resultante sea válida, es necesario añadir el atributo type a la etiqueta <script>. Los valores que se incluyen en el atributo type están estandarizados y para el caso de JavaScript, el valor correcto es text/javascript.

Este método se emplea cuando se define un bloque pequeño de código o cuando se quieren incluir instrucciones específicas en un determinado documento HTML que completen las instrucciones y funciones que se incluyen por defecto en todos los documentos del sitio web.

El principal inconveniente es que si se quiere hacer una modificación en el bloque de código, es necesario modificar todas las páginas que incluyen ese mismo bloque de código JavaScript.

En este documento presentan diversos ejemplos, probados en Google Chrome 12, Firefoxn 4, Internet Explorer 9, Opera 11.11 y Safari 5.0.5.

Ejemplo

Page 159: Programacion Web

Colocar el código después de body document.write imprime en la pantalla actual una cadena de texto

<script type="text/javascript"> document.write("Este es mi primer JavaScript!");</script>

DescargarEjecutar

Definir JavaScript en un archivo externo.

Las instrucciones JavaScript se pueden incluir en un archivo externo de tipo JavaScript que los documentos XHTML enlazan mediante las etiquetas<script></script> . Colocadas entre las etiquetas <head></head>.

Se pueden crear todos los archivos JavaScript (*.js) que sean necesarios y cada documento XHTML puede enlazar tantos archivos JavaScript como necesite.

Además del atributo type, este método requiere definir el atributo src, que es el que indica la URL correspondiente al archivo JavaScript que se quiere enlazar.

Ejemplo

Cada etiqueta <script> solamente puede enlazar un único archivo en este

ejemplo el archivo js01.js, pero en una misma página se pueden incluir tantas

etiquetas <script></script> como sean necesarias (línea 5).

El código hace uso de este archivo en la línea 9 <body onload="inicio()">, el

manejo de funciones en JavaScript se explicara posteriormente.

<head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Ejemplo de c&oacute;digo JavaScript en documento externo</title> <script type="text/javascript" src="0401js02.js"></script>

Page 160: Programacion Web

</head><body onload='inicio()'></body>

DescargarEjecutar

Los archivos de tipo JavaScript son simples documentos de texto con la extensión js que se pueden crear con cualquier editor de texto como Notepad, Wordpad, UltraEdit, Vi, etc.

La principal ventaja de enlazar un archivo JavaScript externo es que se simplifica el código XHTML de la página, además de la capacidad de reutilizar el mismo código JavaScript en páginas del sitio web y que cualquier modificación realizada en el archivo JavaScript se refleja inmediatamente en todas las páginas XHTML que lo enlazan.

Variables

Las variables o identificadores se utilizan para almacenar valores en un programa; cada variable tiene un nombre que permite referenciarla, nombre que se da en base a unas reglas. En JavaScript un nombre o identificador debe comenzar siempre con una letra o un subrayado; los siguientes caracteres pueden ser dígitos o letras; y nunca se puede usar una palabra reservada como identificador (por ejemplo: true, false, null yundefined).

Una variable se puede declarar en JavaScript, de dos formas:

Forma explícita: var nombre_Variable;

Forma implícita: var nombre_Variable = valor;

En el último caso no es imprescindible escribir var, pero es necesario por razones de compatibilidad entre navegadores.

Ejemplos validos de declaración de variables son:

var mi_variable1 = 3;var mi_variable2 = 5;var resultado = mi_variable1 + mi_variable2

Page 161: Programacion Web

JavaScript tiene la peculiaridad de ser un lenguaje tipificado débilmente, esto es, se puede declarar una variable que ahora sea un entero y más adelante una cadena.  Por lo cual es responsabilidad del programador cuidar su contenido.

Tipos de variables

Aunque todas las variables de JavaScript se crean de la misma forma (mediante la palabra reservada var), la forma en la que se les asigna un valor depende del tipo de valor que se quiere almacenar (números, textos, etc.).

Variables numéricas

Almacenan valores numéricos enteros (integer en inglés) o decimales (float en inglés). En este caso, el valor se asigna indicando directamente el número entero o decimal. Los números decimales usan el carácter ( . punto) en vez de  ( , coma) para separar la parte entera y la parte decimal:

var iva = 10;var total = 234.65;var distancia = 4.5E06;

JavaScript define 3 valores especiales muy útiles cuando se trabaja con números. En primer lugar se definen los valores ±Infinity para representar números demasiado grandes (positivos y negativos) y con los que JavaScript no puede trabajar.

var variable1 = 3,var variable2 = 0;alert(variable1/variable2); // muestra "Infinity"

El otro valor especial definido por JavaScript es NaN, cuyo nombre viene de “Not a Number”. De esta forma, si se realizan funciones matemáticas con variables no numéricas, el resultado será de tipo NaN.

Para manejar los valores NaN, se utiliza la función relacionada isNaN(), que devuelve true si el parámetro que se le pasa no es un número:

Page 162: Programacion Web

var variable1 = 3;var variable2 = 'hola';isNaN(variable1); // falseisNaN(variable2); // trueisNaN(variable1 + variable2); // true

Cadenas de texto

Almacenan caracteres, palabras y/o frases de texto. Para asignar el valor a la variable, se encierra el valor entre comillas dobles o simples, para delimitar su comienzo y su final:

var instituto = 'Instituto Tecnológico de Veracruz';var carrera = 'Ingeniería en Sistemas Computacionales';var semestre = 'Cuarto';

Algunos caracteres especiales son difíciles de incluir en una variable de texto (tabulador, ENTER, etc.) Por otra parte, como las comillas se utilizan para definir el contenido de la variable, no es posible incluir comillas dentro de la propia cadena de texto.

Para resolver estos problemas, JavaScript define un mecanismo para incluir de forma sencilla caracteres especiales y problemáticos.

Mecanismo para incluir caracteres especiales

Si se incluye... En realidad se está incluyendo...

\n Una nueva línea

\t Un tabulador

\’ Una comilla simple

\” Una comilla doble

\\ Una barra inclinada

Variables de tipo boolean

Son un tipo de variables que solo pueden tomar uno entre dos valores especiales que representan el valor “verdadero” y el valor “falso”.

Page 163: Programacion Web

var variable1 = true;var variable2 = false;

JavaScript convierte automáticamente el resto de variables a sus valores boolean si es necesario. En el caso de los números, el 0 se convierte en false y cualquier otro número distinto de 0 se convierte en true.

Conversión entre tipos de variables

JavaScript incluye un método llamado toString() que permite convertir variables de cualquier tipo a variables de cadena de texto.

var variable1 = true;// devuelve 'true' como cadena de textovariable1.toString();var variable2 = 5;// devuelve '5' como cadena de textovariable2.toString();

JavaScript también incluye métodos para convertir los valores de las variables en valores numéricos. Los métodos definidos son parseInt() yparseFloat(). Cada uno de ellos convierte la variable que se le indica en un número entero o un número decimal. La conversión numérica de una cadena se realiza carácter a carácter empezando por el de la primera posición. Si ese carácter no es un número, la función devuelve el valor NaN.

Si el primer carácter es un número, se continúa con los siguientes caracteres mientras estos sean números.

var variable1 = 'hola';parseInt(variable1); // devuelve NaNvar variable2 = '34';parseInt(variable2); // devuelve 34var variable3 = '34hola23';parseInt(variable3); // devuelve 34var variable4 = '34.23';parseInt(variable4); // devuelve 34

En el caso de parseFloat(), el comportamiento es el mismo salvo que también se consideran válidos los caracteres que indican la parte decimal del número:

Page 164: Programacion Web

var variable1 = 'hola';parseFloat(variable1); // devuelve NaNvar variable2 = '34';parseFloat(variable2); // devuelve 34.0var variable3 = '34hola23';parseFloat(variable3); // devuelve 34.0var variable4 = '34.23';parseFloat(variable4); // devuelve 34.23

Palabras reservadas

Son palabras especiales que se utilizan para aumentar la legibilidad y separar las entidades sintácticas. Estas palabras no pueden usarse como identificadores.

La siguiente tabla muestra todas las palabras reservadas existentes en JavaScript 1.7, estas palabras tienen o tendrán un significado especial dentro del lenguaje:

Palabras reservadas en JavaScript 1.7

break delete function return typeof

case do if switch var

catch else in this void

continue finally instanceof throw while

default for new try with

Palabras reservadas para desarrollos futuros por la especificación  ECMAScript 262

abstract double implements private throws

boolean enum import protected transient

byte export int public volatile

char extends interface short  

class final long static  

Page 165: Programacion Web

Palabras reservadas en JavaScript 1.7

const float native super  

debugger goto package synchronized  

Constantes

Se definen con la palabra clave const. La sintaxis de un identificador de constante es la misma que la de un identificador de variable: debe empezar con una letra o un guión bajo "_" [underscore] y puede contener caracteres alfanuméricos y/o guiones bajos.

const x = 48;

Una constante es asignada en el momento de la declaración y no puede cambiar el valor mediante una asignación o ser re-declarada mientras el script está en ejecución.

Las reglas de ámbito [scope] para constantes son las mismas que para las variables, excepto que la palabra clave const es siempre requerida, incluso para constantes globales. Si la palabra clave es omitida, se asume que el identificador representa a una variable.

No se puede declarar una constante con el mismo nombre de una función o de una variable en el mismo ámbito [scope].

Existen tres constantes predefinidas: true, false y undefined.

Expresiones

Page 166: Programacion Web

Una expresión es cualquier conjunto válido de literales, variables, operadores y expresiones que se evalúan como un único valor; el valor puede ser un número, una cadena o un valor lógico (booleano).

Conceptualmente, hay dos tipos de expresiones: las que asignan un valor a una variable y las que simplemente tienen un valor.

Por ejemplo, la expresión x = 7 es una expresión que asigna a x el valor 7. Esta expresión se evalúa como siete. Dicha expresión usa un operador de asignación.

Por otra parte, la expresión 3 + 4 simplemente se evalúa como siete; no se realiza ninguna asignación. Los operadores usados en dichas expresiones se les llaman simplemente operadores.

JavaScript tiene los siguientes tipos de expresiones:

Aritméticas: se evalúan como un número, por ejemplo 3.14159.

(Generalmente usan operadores aritméticos.)

De cadena: se evalúan como una cadena de caracteres, por ejemplo, "Sofía" o

"234". (Generalmente usan operadores de cadena de caracteres (string).)

Lógicas: se evalúan como verdadero o falso. (A menudo emplean operadores

lógicos.)

De objeto: se evalúan como un objeto.

Operadores

Símbolo matemático que denota un conjunto de operaciones que han de realizarse. En JavaScript los operadores permiten manipular el valor de las variables, realizar operaciones matemáticas o de manejo de texto con sus valores y comparar diferentes variables. De esta forma, los operadores permiten a los programas realizar cálculos complejos y tomar decisiones lógicas en función de comparaciones y otros tipos de condiciones.

Operador de asignación.

Page 167: Programacion Web

Un operador de asignación asigna un valor a su operando izquierdo basándose en el valor de su operando derecho. El operador básico de asignación es el igual (=), el cual asigna el valor de su operador derecho a su operador izquierdo. Esto es, x = y asigna el valor de y a x.

El resto de los operadores de asignación son abreviaturas de operaciones estándar

Operadores de asignación

Operador abreviado Significado

x += y x = x + y

x -= y x = x - y

x *= y x = x * y

x /= y x = x / y

x %= y x = x % y

Operadores de comparación

Un operador de comparación compara sus operandos y devuelve un valor lógico en función de si la comparación es verdadera.

Los operandos pueden ser valores numéricos, de cadena de caracteres, lógicos u objetos. Las cadenas se comparan basándose en el orden lexicográfico estándar, usando los valores Unicode.

Si dos operandos no son del mismo tipo, JavaScript intentará convertir los operandos a un tipo apropiado para la comparación, excepto para los operandos === y !==. Esto acostumbra a resultar en una comparación numérica. La tabla a continuación describe los operadores de comparación.

Page 168: Programacion Web

Operadores de comparación.

Operador DescripciónEjemplos que

devuelven verdadero1

Igual (==)

true si los operandos son iguales.3 == var1"3" == var13 == '3'

Distinto (!=)

true si los operandos no son iguales.

var1 != 4var2 != "3"

Igual estricto (===)

true si los operandos son iguales y del mismo tipo.

3 === var1

Distinto estricto(!==)

true si los operandos no son iguales y/o no son del mismo tipo.

var1 !== "3"3 !== '3'

Mayor que(>)

true si el operando izquierdo es mayor que el derecho.

var2 > var1"12" > 2

Mayor o igual que (>=)

true si el operando izquierdo es mayor o igual que el derecho.

var2 >= var1var1 >= 3

Menor que (<)

true si el operando izquierdo es menor que el derecho.

var1 < var2"12" < "2"

Menor o igual que (<=)

true si el operando izquierdo es menor o igual que el derecho.

var1 <= var2var2 <= 5

1Estos ejemplos asumen que var1 = 3 y var2 = 4.

Operadores aritméticos 

Los operadores aritméticos toman valores numéricos (tanto literales como variables) como operandos y devuelven un único valor numérico. Los operadores aritméticos estándar son el de suma (+), el de resta (-), el de multiplicación (*) y el de división (/). Estos operadores trabajan igual que en la mayoría de lenguajes de programación, excepto el operador / que devuelve la división real (de coma flotante), no la división entera como sucede en C o en Java.

Operador Significado

+ Suma

- Resta

Page 169: Programacion Web

Operador Significado

* Multiplicación

/ División

% Módulo

++ Incremento en uno

-- Decremento en uno

- Negación

Por ejemplo:

1/2 //devuelve 0.5 en avaScript1/2 //devuelve 0 en Java

Operadores lógicos

Los operadores lógicos son generalmente empleados con valores lógicos (booleanos); estos operadores devuelven un valor booleano. Sin embargo, los operadores && y || realmente devuelven el valor de uno de sus operandos, por esto si se emplean con valores no booleanos, podrían devolver un valor no booleano. Los operadores lógicos se describen en la siguiente tabla.

Operadores lógicos. Dado x = 6 y y = 7

Operador Uso Descripción Ejemplo

&& expr1 && expr2 and (x < 10 && y > 1) es true

|| expr1 || expr2 or (x==5 || y==5) es false

! !expr1 not !(x==y) es true

Operadores de cadena de caracteres (String)

Además de los operadores de comparación, los cuales pueden ser empleados con los valores de cadena, el operador de concatenación (+) gnera otra cadena que es la unión de los dos operandos de tipo cadena. Por ejemplo, "mi " + "cadena" retorna la cadena "mi cadena".

Page 170: Programacion Web

El operador abreviado de asignación += también puede usarse para concatenar cadenas. Por ejemplo, si la variable micadena tiene el valor "Vera", la expresión micadena += "cruz" se evalúa como "Veracruz" y asigna este valor a micadena.

Sentencias condicionales

En JavaScript, como en muchos lenguajes, la sentencia para verificar si una condición se cumple y realizar una acción u otra es if. Su sintaxis es la siguiente:

if(condición) {   instrucciones si se cumple  } else { instrucciones si no se cumple }

Ejemplo: El código proporciona una aplicación de la sentencia if.

 

onclick es un evento que ejecuta la función evaluar

parseInt regresa el valor entero de una cadena

document innerHTL nos permite modificar un elemento de la forma

function evaluar() { var edad = parseInt(document.getElementById('year').value); var mensaje = ''; if (edad <= -1) { mensaje = "Edad no valida";} else if (edad == 0) { mensaje = 'Bebe'; } else if (edad >=1 && edad <= 6) { mensaje = 'Infante'; }

else if (edad >= 7 && edad < 12) { mensaje = 'Niñez';} else if (edad >= 12 && edad <= 14) { mensaje =

'PreAdolescente';} else if (edad > 14 && edad < 18 ) { mensaje =

'Adolescente';} else if (edad >= 18 && edad <= 25) { mensaje = 'Joven';} else if (edad > 25 && edad <= 60 ) { mensaje = 'Adulto';} else if (edad > 60 && edad <= 99 ) { mensaje =

'Anciano';} else mensaje = 'Matuzalen';

mensaje = 'Con dicha edad eres un: ' + mensaje; document.getElementById('parrafo').innerHTML = mensaje;}

DescargarEjecutar

 

Page 171: Programacion Web

switch

Esta expresión se utiliza cuando tenemos múltiples posibilidades como resultado de la evaluación de una sentencia. La sintaxis se presenta a continuación:

switch( expresión ){ case valor1 : sentencias; break; case valor2 : sentencias; break; case valorn: sentencias; break; default : sentencias; break; }

Ejemplo: Aproximación a la predicción de los signos del zodiaco

El índice de la opción seleccionada se captura en la línea 2.

El arreglo de los signos zodiacales se declara en la línea 3.

La línea 6 usa la sentencia switch El objeto document permite acceder a los componentes

function horoscopos(){ var opcion = document.forma.horoscopo.selectedIndex; var signo = new Array('Acuario','Aries', . . .,'Virgo'); var fecha = ''; var caracter = ''; switch (opcion) { case 0: fecha = '21 de Enero a 19 de Febrero';

caracter = 'Signo de Aire, humanitario, . . . ';break;

case 11: fecha = '24 de Agosto a 23 de Septiembre'; caracter = 'Signo de Tierra, . . .';

break; }

Page 172: Programacion Web

fecha = signo[opcion] + ' del ' + fecha; document.getElementById("fecha").innerHTML = fecha; document.getElementById("caracter").innerHTML = caracter; var imagen = 'zodiaco/' + signo[opcion] + '.gif' document.getElementById("fSigno").src = imagen;}

<head><meta http-equiv='Content-Type' content='text/html; charset=charset=iso-8859-1' /><title>Horoscopos</title><link href='0104js04.css' rel='stylesheet' type='text/css' /><script type='text/javascript' src='0104js04.js'></script></head><body><form id='forma' name='forma' method='post' action=''> <div> <select name='horoscopo' id='horoscopo' onchange='horoscopos()'> . . . <option value='12'>Virgo</option> </select> <img id='fSigno' src='zodiaco/blanco.gif' /> <p class='parrafo' id='fecha'> <p class='parrafo' id='caracter'> </div></form></body>

DescargarEjecutar

 

Ciclos

Los ciclos son sentencias esenciales en cualquier lenguaje de programación. JavaScript cuenta con tres: while, do while y for. Hay cuatro partes en todos los bucles. Inicialización, cuerpo, iteración y condición.

while: Ejecuta repetidamente el mismo bloque de código hasta que se cumpla una condición de terminación.

[inicialización;]while(condicion[es]) { cuerpo;

Page 173: Programacion Web

[iteración;]}

do..while: Como mínimo siempre se ejecutará el cuerpo del bucle una vez, en el bucle while es posible que no se ejecute ni una sola vez el contenido de este.

[inicialización;]do{   cuerpo;   [iteración;]}while(condición);

for: Es el ciclo más común, en el una variable se fija a un valor inicial, que se actualiza con cada ciclo, y cuando el valor cumple una determinada condición, el ciclo se termina. La sintaxis del ciclo es:

for ([inicialización]; [condición]; [expresión] ){ Instrucción o bloque de instrucciones;}

Hay dos formatos más de ciclos  for, aunque no todas se aplican en todos los navegadores y se expondrán en incisos posteriores.

break: La sentencia break se puede colocar dentro de un ciclo o ciclos anidados. Cuando se ejecuta la sentencia break se abandona el ciclo más interno. A todos los efectos la sentencia break actúa como un salto a la instrucción siguiente al ciclo en el que se ejecuta.

continue: La sentencia continue, no abandona el ciclo si no hace que se ejecute la siguiente iteración. En el ciclo while la ejecución del continuehace que el flujo del programa salte a la condición. En el bucle for la ejecución del continue ejecuta la expresión de incremento (decremento), para después continuar normalmente con la condición. Es decir, la ejecución del continue evita que se ejecute durante una interacción el resto del cuerpo del ciclo.

Funciones

Una función es un bloque de código con un nombre. Cada vez que se usa el nombre, se llama a la función y el código de la función es ejecutado. Las funciones pueden llamarse con valores, conocidos como parámetros, que se usan como variables.

Page 174: Programacion Web

Las funciones tienen dos objetivos: organización del programa (archivo o documento) y ejecución del código de la función.

El nombre de una función se escribe inmediatamente después del comando function. Todos los nombres de funciones deben ser únicos y diferentes de los nombres de los comandos que usa JavaScript. No puede haber dos funciones con el mismo nombre.

La lista de parámetros (argumentos) de una función se separa por comas. La función usa esos parámetros en las sentencias de su cuerpo que la configuran.

Los argumentos que se le pasan a una función no pueden ser cambiados en su interior pues se pasan por valor.

Hay tres enfoques principales para la creación de funciones en JavaScript: declarativo/estático, dinámico/anónima, y literal.

Muchas tareas de programación que se puede lograr con el enfoque declarativo. Sin embargo es importante comprender el impacto de cada tipo de declaración antes de usarlas.

La sintaxis de las funciones declarativas es la siguiente:

function nombreFunción(){ sentencia1; sentencia2; ...; ...; [return]}

Los parámetros de una función se pasan por valor, los arrays se pasan por referencia.

Page 175: Programacion Web

Nota: Las funciones pueden regresar más de un valor en la versión 1.7. Sin embargo Internet Explorer no acepta completamente esta especificación.

Javascript tiene por característica no tipificar sus variables y cuando de operaciones matemáticas  en particular en la suma dicha característica podría producirnos errores inesperados.

Ejemplo: Calcular las funciones trigonometricas seno y coseno mediante las siguientes series de Taylor. Recuerde que x es un valor en radianes

Solución:

Se presentan las funciones factorial, radianes y decimal

Math.abs(x) calcula el valor absoluto de x.

Math.PI regresa el valor del número pi. Math(x, n) eleva x a la potencia n.

Math.round(x) redondea x.

function factorial(n) { if (n > 0) { return n * factorial(n - 1); } else return 1;}

function radianes( grados) { return Math.PI * grados/180;}

Page 176: Programacion Web

function decimal(numero,cantDecimales){ if (cantDecimales > 0){ var i = 0; var aux = Math.pow(10, cantDecimales); numero = Math.round(numero * aux) /aux; } return numero;}

Serie de Taylor

error es la aproximación usada para el cálculo de las funciones trigonométricas.

Entre menor sea la aproximación, la precisión será mayor, a costa de aumentar

la cantidad de ciclos.

Los ángulos toman valor entre 0 y 360 grados. Lo cual logramos calculando el

módulo de 360. Así 370 grados es igual a 10 grados.

Cálculo del seno mediante la aproximación de Taylor

function seno( angulo ) { var error = 0.00000001; var x = radianes( angulo % 360); var anterior = 1; var nuevo = 0; var n = 0; var m = 0; while (Math.abs(anterior - nuevo) >= error) { n = 2 * m +1;

anterior = nuevo; nuevo += Math.pow(-1,m)/factorial(n)

* Math.pow(x, n); ++m; } return nuevo; }

Cálculo del coseno mediante la aproximación de Taylor

function coseno( angulo ) { var error = 0.00000001; var x = radianes( angulo % 360);

Page 177: Programacion Web

var anterior = 1; var nuevo = 0; var n = 0; var m = 0; while (Math.abs(anterior - nuevo) >= error) { n = 2 * m;

anterior = nuevo; nuevo += Math.pow(-1,m)/factorial(n)

* Math.pow(x, n); ++m; } return nuevo;}

Impresión de resultados

document es parte de DOM (Document Object Model) que será abordado más

adelante. En este ejemplo sirve para regresar los resultados a la forma sin

recargar

Ads not by this site

function calcular() {var x = document.getElementById('grados').value;var dec = 5;

var senox = decimal(seno( x ), dec); var cosenox = decimal(coseno( x ), dec);

document.getElementById('senox').innerHTML = senox;document.getElementById('cosenox').innerHTML =

cosenox;}

Aplicación del código javaScript desde HTML

<head><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /><title>Serie de Taylor</title><script type='text/javascript' src='0401js05.js'></script><link href='0401js05.css' rel='stylesheet' type='text/css' /></head><body><form id='forma' name='forma' action='' method='post' ><fieldset>

Page 178: Programacion Web

<ul> <li> <label for='grados'>Grados</label> <input name='grados' type='text' id='grados' value=''/> </li> <li> <label for='senox'>Seno x: </label> <p id='senox'></p> </li> <li> <label for='cosenox'>Coseno x: </label> <p id='cosenox'></p> </li> <li> <p><input type='button' name='enviar' id='enviar' value='Enviar' onclick='calcular()' /></p> </li></ul> </fieldset></form></body>

DescargarEjecutar

4.2. Modelo de objetos con lenguaje Script.

El Modelo de Objetos de Documento (DOM - Document Object Model -) describe cómo todos los elementos en una página HTML, tales como campos de entrada, imágenes, etc, se relacionan con la estructura más alta: el propio documento. Llamando al elemento por su nombre correcto DOM, podemos influir en él mediante un lenguaje de programación, e,g. Javascript, Java, etc.

La gran difusión de Ajax y Javascript es notable en muchos proyectos en Internet. Sin embargonavegadores tienen deshabilitado Javascript por defecto. Lo cual hace necesario que se habilite en cada máquina cliente.

Para que estos códigos funcionen en Mozilla Firefox es necesario

1. Selecciona “2. Selecciona “3. Selecciona “4. Selecciona la casillla de ‘Habilitar JavaScript’ y darle clic en OK

Page 179: Programacion Web

write

Permite escribir texto html desde Javascript. El texto se escribe directamente el body del html.

Es la forma más fácil de escribir HTML desde Javascript, lo cual no quiere decir que es la mejor manera de escribir código HTML desde Javascript o incluso que va a trabajar en todas las situaciones. De hecho, el método document.write es muy limitado en lo que puedes hacer con él.

El lector debe considerar que document.write sólo funciona con las página que el navegador procesa como HTML.

html

 

JavaScript

DescargarEjecutar

Ejemplo: Imprimir un mensaje y abrir una nueva ventana mediante DOM

Las cadenas en Javascript son objetos y por lo tanto tienen métodos y atributos.

En las líneas 4 y 5 se presenta ejemplos de ellos que facilmente pueden deducir

su finalidad.

La línea 6 imprime la cadena en el body.

La línea 8 abre una página nueva, la función open tiene como parámetros la

página que abrira, y el lugar donde lo hará en este caso _self sustituye la

página actual

<body><script language='JavaScript'> var mensaje = '¡Hola mis estimados y finos alumnos!. Buen dia'; mensaje = mensaje.toUpperCase().bold().italics(); mensaje = mensaje.fontsize(6).fontcolor('red'); document.write(mensaje); if ( confirm('Abrir HomePage del curso?') )

Page 180: Programacion Web

window.open('http://www.prograweb.com.mx/pweb/index.html', '_self');</script></body>

DescargarEjecutar

Ejemplo: Imprimir un saludo en la pantalla dependiente de la hora de la máquina cliente

En la línea 4 hacemos una instancia de la clase Date.

getHours extrae la hora del lado cliente (Línea 6)

Escribimos en el documento el mensaje: document.write( saludo() )

<head><script language='javascript'>function saludo() { var horario = new Date() var hora = horario.getHours(); if( hora < 12 ) { var mensaje = 'Buenos dias!';} else if (hora >= 12 and hora <= 19) { var mensaje = 'Buenas tardes!'; } else { var mensaje = 'Buenas noches!'; } mensaje = '¡Hola Mundo. ' + mensaje; return mensaje;}</script></head><body><script language='javascript'> document.write( saludo() );</script></body>

DescargarEjecutar

ejemplo: form

Page 181: Programacion Web

Modifica el valor del elemento indicado que esta contenido en una forma.

HTML

 

JavaScript

<head><link href='0402almaMater.css' rel='stylesheet' type='text/css' /><script language='javascript' type='text/javascript' src='0402almaMater.js'></script></head><body><form><table class='tablaSinBorde'><tr><td><a href='#' onclick='mostrar(1)' onmouseout='mostrar(0)'> <img src='../../images/colpos.gif' /></a></td><td><a href='#' onclick='mostrar(2)' onmouseout='mostrar(0)'> <img src='../../images/escudoITV.png' /></a></td> <td><a href='#' onclick='mostrar(3)' onmouseout='mostrar(0)'> <img src='../../images/UV2.jpg' /></a></td> </tr></table><form id='forma' name='forma' method='post' action='#'><p id='contenedor' class="centrado"></p></form></body>

DescargarEjecutar

getElementById

Permite obtener la referencia a un elemento de la página mediante el id de dicho elemento.

Una vez obtenida la referencia al elemento, podemos acceder a todas sus propiedades

<head>

Page 182: Programacion Web

<title>getElementById</title><script type='text/javascript'> function cambiarColor( color ) { var elemento = document.getElementById('parrafo');

elemento.style.font = 'bold italic 16 pt Verdana'; elemento.style.color = color; }</script> </head> <body> <p id='parrafo'>Mis colores favoritos. ¿Adivina por qué?</p> <button onclick = 'cambiarColor('blue');'>Azul</button> <button onclick = 'cambiarColor('red');'>Rojo</button> </body>

DescargarEjecutar

innerHTML

Sirve para obtener o modificar el HTML del documento HTML. Se utiliza la propiedad InnerHtml para modificar mediante programación el contenido interno entre las etiquetas de apertura y cierre de un control de servidor HTML.

La propiedad InnerHtml no codifica automáticamente los caracteres especiales en entidades HTML, es el programador el responsable de hacerlo.

Ejemplo: Crear una lista con viñetas no ordena en forma dinámica

En la línea 4 creamos un vector de días de la semana.

En la línea 11 modificamos el contenido del elemento llamado contenedor.

<body><div id='contenedor' name='contenedor'></div> <script language='javascript' type='text/javascript'> dias = new Array('Lunes','Martes','Miércoles','Jueves', 'Viernes', 'Sábado', 'Domingo'); HTML = '<ul>'; for(i = 0; i < dias.length; i++) { HTML += '<li>' + dias[i] + '</li>';

Page 183: Programacion Web

} HTML += '</ul>'; document.getElementById('contenedor').innerHTML = HTML; </script></body>

DescargarEjecutar

Ejemplo: En matemáticas, la sucesión de Fibonacci es la siguiente sucesión infinita de números naturales:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, . . .

 

La sucesión inicia con 0 y 1, y a partir de ahí cada elemento es la suma de los dos anteriores.

Se presenta la función formato la cual incorpora el separador de miles, su

autoria es de Roberto Herrero & Daniel ()

La línea 2 recupera mediante getElementbyId en número de elementos de la

serie.

El mínimo de elementos es 2 (Líneas 3 a 6).

Mediante innerHTML pasamos el resultado a un contenedor

HTML

 

JavaScriptAds not by this site

<head><script type='text/jscript' src='0402fibonacci.js'></script><link href='0402fibonacci.css' rel='stylesheet' type='text/css' /></head><body><form id='forma' name='forma' method='post' action='#'> <table class='tablaSinBorde'> <tr> <td colspan='2'><p align='center'> <strong>Serie de Fibonacci</strong></p></td> </tr> <tr>

Page 184: Programacion Web

<td><strong>Elementos de la serie</strong></td> <td><input name='n' type='text' id='n' size='2' maxlength='2' /></td> </tr> <tr> <td colspan='2'><p align='center'> <input type='button' name='calcular' id='calcular' value='Enviar' onclick='fibonacci()' /> </p></td> </tr> </table> <div id='centrado'></div></form></body>

DescargarEjecutar

Crear y accesar elementos

Para crear etiquetas "tag" html debemos usar el método createElement(). Cuya sintaxis es la siguiente:

createElement( tag )

Donde tag es una etiqueta valida en html.

Si necesitamos agregar un nodo es necesario usar el método appendChild(). El cual agrega un nodo al final del arbol. La sintaxis es

appendChild( tag )

 

El método insertBefore tiene un comportamiento similar al de appendChield, solo que el nodo agregado es puesto antes del padre. La sintaxis es

Page 185: Programacion Web

insertBefore( nuevo tag, referencia )

Ejemplo: Agregar elementos a un documento

HTML

Los elementos son agregados mediante el evento onclick (Línea 7)

La línea 8 declara un elemento div vacio cuya función es servir de contenedor

Javascript

En la línea 5 se crea un objeto de tipo div El objeto nuevoElemento hereda todas las características de div, por

ejemplo innerHTML, color, fontSize.

Se crea una instancia del contenedor Para agregar los elementos al contenedor usamos appenChild

HTML

 

JavaScript

<head><script type='text/javascript' src='0402createElement.js'></script></head><body><button onclick='sumarHijo();'>Sumar un nuevo elemento</button><div id='contenedor'></div></body>

DescargarEjecutar

Ejemplo: Cargar la ruta a un archivo

Se asignan las características de un fieldset en fi (Línea 4)

Creamos un contenedor de tipo div (Línea 5)

Las líneas 9 y 15 crean dos objetos de tipo input

Page 186: Programacion Web

Mediante insertBefore insertamos el contenedor antes del botón crear (Línea

7)

Asignamos al evento onclick del botón la función borrar y el pasamos como

par'ametro el nombre del propio botón

Usamos removeChild para eliminar el div y su contenido (Línea 25)

HTML

 

JavaScript

 

Descargar

Ejecutar

Ejemplo: Mostrar los objetos interconstruidos de Javascript 

Se presentan los siguientes objetos: document, even, history, location,

navigator, screen y windows

La función eval evalúa una cadena de código JavaScript sin referencia a ningún

objeto en particular (Línea 2). El objetivo de Object es este caso es crear un

arreglo atributos, métodos y parámetros del objeto interconstruido.

La línea 9 desarrolla un array asociativo con los nombres de los métodos del

objeto interconstruido.

En la línea 19 asignamos al atributo innerHTML el contenido.

HTML

 

JavaScript

<head><title>Propiedad de los Objetos</title><link href='0402ObjectPropiedades.css' rel='stylesheet' type='text/css' /><meta http-equiv='content-type' content='text/html; charset=iso-8859-1' /><script type='text/javascript' src='0402ObjectPropiedades.js'></script></head><body><form name='forma' method='post' action='#'> <div align='center'>

Page 187: Programacion Web

Objeto: <select name='objetos' id='objetos'

onChange='propiedades(window.document.forms[0][0].value)'>

<option value='document'>document</option> <option value='event'>event</option> <option value='history'>history</option> <option value='location'>location</option> <option value='navigator'>navigator</option> <option value='screen'>screen</option> <option value='window'>window</option>

</select> </div> </form> <div id='contenedor' class='centrado'></div>

DescargarEjecutar

Ejemplo: Efecto Row Rollover Table

HTML

 

JavaScript

 

CSSAds not by this site

<head><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' /> <title>Row Rollover table</title><script type='text/javascript' src='0402tableruler.js'></script><script type='text/javascript'> window.onload = function(){tableruler();} </script><link href='0402tableruler.css' rel='stylesheet' type='text/css' /></head><body><table class='ruler' summary='Campeones FIFA'><caption>Campeones FIFA (1930 - 2022)</caption><thead> <tr> <th>Año</th> <th>Lugar</th> <th>Campeón</th>

Page 188: Programacion Web

<th>Marcador</th> <th>Subcampeón</th> </tr></thead><tfoot><tr><td colspan='5'>Última actualización: 2010-9-9</td></tr></tfoot><tbody> <tr> <th>1930</th> <td>Uruguay</td> <td>Uruguay</td> <th>4-2</th> <td>Argentina</td> </tr></tbody></table></body>

DescargarEjecutar

4.3. Eventos en JavaScript

JavaScript nos proporciona la capacidad de crear páginas dinámicas, la interacción con el usuario se consigue mediante la captura de los eventos que éste produce.

Un evento es una acción del usuario ante la cual puede realizarse algún proceso (por ejemplo, el cambio del valor de un formulario, o la pulsación de un enlace).

Los sucesos o eventos se definen en las etiquetas HTML. Los eventos se capturan mediante los manejadores de eventos y se realizan mediante funciones JavaScript llamadas por los manejadores de eventos.

 

Page 189: Programacion Web

Un controlador de eventos ejecuta un segmento de código basado en eventos que ocurren dentro de la aplicación, como por ejemplo el evento on Change. Elcontrolador de eventos onChangeejecuta código JavaScript cuando pierde el foco de entradadel campo después de que el usuario modifique su texto.

La siguiente tabla muestra los controladores de eventos que pueden utilizarse en JavaScript y su significado.

Manejadores de eventos JavaScript

Manejador Se produce cuando...Objetos para los que

está definido

onAbortEl usuario interrumpe la carga de una imagen

Image

onBlurUn elemento de formulario, una ventana o un marco pierden el foco

Button, Checkbox, FileUpload, Layer, Password, Radio, Reset, Select, Submit, Text, Textarea, window

onChangeEl valor de un campo de formulario cambia

FileUpload, Select, Text, Textarea

onClickSe hace click en un objeto o formulario

Button, document, Checkbox, Link, Radio, Reset, Submit

onDblClickSe hace click doble en un objeto o formulario

document, Link

onDragDropEl usuario arrastra y suelta un objeto en la ventana

window

onErrorLa carga de un documento o imagen produce un error

Image, window

onFocusUna ventana, marco o elemento de formulario recibe el foco

Button, Checkbox, FileUpload, Layer, Password, Radio, Reset, Select, Submit, Text, Textarea, window

onKeyDown El usuario pulsa una tecladocument, Image, Link, Textarea

onKeyPressEl usuario mantiene pulsada una tecla

document, Image, Link, Textarea

onKeyUpEl usuario libera una tecla

document, Image, Link, Textarea

Page 190: Programacion Web

Manejadores de eventos JavaScript

Manejador Se produce cuando...Objetos para los que

está definido

onLoadEl navegador termina la carga de una ventana

Image, Layer, window

onMouseDown

El usuario pulsa un botón del ratón

Button, document, Link

onMouseMoveEl usuario mueve el puntero

Ninguno (debe asociarse a uno)

onMouseOutEl puntero abando una área o enlace

Layer, Link, img

onMouseOverEl puntero entra en una área o imagen

Layer, Link, img,

onMouseUpEl usuario libera un botón del ratón

Button, document, Link

onMoveSe mueve una ventana o un marco

window

onResetEl usuario limpia un formulario

Form

onResizeSe cambia el tamaño de una ventana o marco

window

onSelectSe selecciona el texto del campo texto o área de texto de un formulario

Text, Textarea

onSubmitEl usuario envía un formulario

Form

onUnload El usuario abandona window

Ejemplo: Evento onChange

<head><script language='javascript'>function valida(dato) { alert('Cambio el valor de 30 a ' + dato);}</script></head><body><fieldset>

Page 191: Programacion Web

<legend>Controlador de eventos onChange</legend>Cambie cualquier valor mayor que 30:<br /><form name='forma' method='post'> <input type='text' value='30' onChange='valida(this.value)'></form></fieldset></body>

DescargarEjecutar

Ejemplo: Mostrar la fecha y la hora del cliente al colocar el cursor de mouse sobre una imagen (Evento onMouseOver)

<head><title>Evento onMouseOver/onMouseOut</title><link href='basico.css' rel='stylesheet' type='text/css' /><script type='text/javascript'>function borrar() { document.getElementById('contenedor').style.visibility = 'hidden';}

function muestraFecha() { var fecha = new Date(); texto = 'Hoy es: '+ fecha.toLocaleDateString()+'<br />'; texto += 'La hora es: '+ fecha.toLocaleTimeString(); document.getElementById('contenedor').style.visibility = 'visible'; document.getElementById('descripcion').innerHTML=texto;}</script></head><body><p class='centrado'><img alt='' src='../img/0403Calendario.png' onmouseover='muestraFecha()' onmouseout='borrar()' /></p><div id="contenedor" class='codigoCorto'><p id='descripcion'></p></div></body>

DescargarEjecutar

Ejemplo: Uso de area shape y onMouseOver

<head>

Page 192: Programacion Web

<meta http-equiv='content-type' content='text/html; charset=iso-8859-1' /> <script type='text/javascript'> function escribe(texto) { document.getElementById('descripcion').innerHTML=texto; } </script></head><body><div align='center'> <img src ='../img/Mujer.jpg' alt='Mujer' usemap='#mapa' /><map name='mapa'><area shape='rect' coords='135,6,164,28' onmouseover='escribe("Cabello")' /></map> </div><div class='codigoCorto'><p id='descripcion></p></div></body>

DescargarEjecutar

Ejemplo: Uso del evento onclick y document

<form id='forma' name='forma' method='post'> <tr> <td><input type='button' name='title' id='title' value='Enviar' onclick='alert(document.title)' /></td> <td>onclick='alert(document.title)'</td> </tr> </form>

DescargarEjecutar

Ejemplo: Uso de los eventos onmouseover y onmouseout

0403onMouseOver.js

En la línea 2 se crea un objeto de tipo arreglo.

Las líneas 3 y 7 crean un objeto de tipo imagen.

Page 193: Programacion Web

Las líneas 4, 5, y 6, así como las líneas 8, 9 y 10 proporcionan las

características de dichas imagenes.

La función mostrar nos regresara una imagen si el elemento html que la llama

es una imagen (línea 14).

if(document.images) { contenedor = new Array(); contenedor[0] = new Image(); contenedor[0].src = '../img/Saltillo/carro01.gif'; contenedor[0].alt = 'Pulsame'; contenedor[0].title = 'Pulsame'; contenedor[1] = new Image(); contenedor[1].src = '../img/Saltillo/carro02.gif'; contenedor[1].alt = 'Saltillo, Coahuila. México 2010'; contenedor[1].title = 'Saltillo, Coahuila. México 2010';}

function mostrar(i) { if(document.images) {

document.foto.src = contenedor[i].src; document.foto.alt = contenedor[i].alt; document.foto.title = contenedor[i].title;

} }

0403onMouseOver.html

<head> <script language='javascript' src='0403onmousemove.js' type='text/javascript'></script> <link href='0403onmousemove.css' rel='stylesheet' type='text/css' /></head><body> <a href='http://www.prograweb.com.mx' onmousemove='mostrar(1)' onmouseout='mostrar(0)'> <img alt='' name='foto' src='../img/Saltillo/carro01.gif' /></a></body>

DescargarEjecutar

Ejemplo: Formulario con eventos onfocus y onblur

Page 194: Programacion Web

Observe que ambas funciones modifican el atributo del bordo y el tipo de

letra 0403onfocus.js

function conFoco( elemento ) {elemento.style.border = '1px solid #CC3300';elemento.style.font = 'italic bold 18px arial,serif';

}

function sinFoco( elemento ){ elemento.style.border = '2px solid #336699'; elemento.style.font = '14px Courier New';}

class="datos" indica las características base de la caja de edición.

En las líneas 9, 12 y 14 se implementan los eventos onFocus y onBlur. A los

cuales se les pasa como parámetro el componente input mediante this.

<head><title>Eventos onfocus y onbur</title><link href='0403onfocus.css' rel='stylesheet' type='text/css' /><script type='text/javascript' src='0403onfocus.js'></script></head><body><form id='forma' name='forma' method='post'><strong>Login</strong><input type='text' name='login' id='login' class='datos' onblur='sinFoco(this)' onfocus='conFoco(this)' /><strong>Password</strong><input type='text' name='password' id='password' class='datos' onblur='sinFoco(this)' onfocus='conFoco(this)' /><strong>email</strong><input type='text' name='email' id='email' class='datos' onblur='sinFoco(this)' onfocus='conFoco(this)' /></form></body>

DescargarEjecutar

5.1 Visión general de servicios Web XML.

Page 195: Programacion Web

 

Básicamente, un servicio web (webservice) es un sistema de entrada/salida, al que se le puede pasar una serie de parámetros con el fin de obtener un resultado en concreto y recuperarlo para ser mostrado en una aplicación. La tecnología de los servicios web es relativamente reciente, y está basada en el protocolo SOAP (Simple Object Access Protocol), consistente en un simple documento XML que habilita el intercambio de información vía HTTP entre diversas aplicaciones.

 

La ventaja de este protocolo radica en una comunicación efectiva independiente del lenguaje de programación que defina a la aplicación. WSDL (Web Services Description Language) es el nombre del lenguaje utilizado para describir un servicio web. El mismo utiliza el formato wsdl como extensión para sus archivos. Estos últimos son referenciados desde una URL, e incluyen una serie de métodos y operaciones que serán llamados desde la aplicación central del lado del cliente.

De ahí la necesidad de Servicios Web en un mundo Internet. De la misma manera que el software de conectividad de componentes permite hacer uso de la funcionalidad contenida dentro de otra pieza de software en otro computador, los Servicios Web usan los protocolos de Internet para proveer una infraestructura de componentes para el desarrollo de componentes distribuidos que funcionen sobre la red pública. En pocas palabras, los Servicios Web son aplicaciones modulares que pueden ser descritas, localizadas, e invocadas sobre una red a través de un intercambio estandarizado de mensajes XML.

 

Definidos por nuevos estándares – como SOAP (Simpla Object Access Protocol), WSDL (Web Services Description Language), y UDDI (Universal Discovery Description and Integration) – los Servicios Web ofrecen un nuevo modelo para la creación de aplicaciones e-Business a partir de módulos reutilizables de software a los que se tiene acceso a través de la Web.

Beneficios de los Servicios Web

Desde un punto de vista técnico, los Servicios Web ofrecen una manera más fácil de desarrollar aplicaciones a las que se requiera tener acceso a través de la Web. Es importante anotar que los servicios Web no resuelven todos los requerimientos de integración –  sólo la habilidad de comunicarse con otros módulos de software a través de la red pública. Se requieren tecnologías adicionales de integración para manejar la integración de datos, aplicaciones y procesos del negocio. También se requieren características de clase empresarial para complementar los Servicios Web, permitiéndoles ser seguros y escalables.

Page 196: Programacion Web

Desde el punto de vista del negocio, los Servicios Web le permiten a una compañía concentrar los esfuerzos de desarrollo en los recursos computacionales que le representan ganancia. Los modelos y relaciones empresariales son desarrollados en la medida en que es necesario, los costos de integración son reducidos, las interacciones con otros mercados son establecidas más efectivamente, y las funciones del negocio son entregadas a un conjunto más amplio de clientes y asociados.

Más aún, la tecnología de Servicios Web permite la contratación de servicios que no brindan un beneficio al negocio. Dado que los Servicios Web separan aplicaciones de infraestructura, una compañía puede rápidamente componer y desplegar soluciones basadas en componentes reutilizables provenientes del proveedor que ofrezca un menor costo, sea éste interno o externo. Estas soluciones pueden cambiar el enfoque e incluso la naturaleza de las interacciones, en respuesta a condiciones cambiantes del negocio. En consecuencia, los e-Business pueden explotar modelos de negocio flexibles y dinámicos – maximizando su alcance a clientes, asociados, proveedores y mercados, al mismo tiempo que minimizan sus costos y tiempo de mercadeo.

5.2.1. SOAP (Simple Object Access Protocol)

SOAP es un protocolo que proporciona un mecanismo estándar de empaquetar mensajes. Este protocolo está pensado para el intercambio de información en entornos descentralizados y distribuidos. Usa las tecnologías relacionadas con XML a fin de definir un marco de trabajo extensible para los mensajes.

Provee una estructura de mensajes capaz de ser intercambiada sobre una gran cantidad de protocolos de soporte. Este marco ha sido diseñado con el fin de que fuera independiente del cualquier modelo de programación y otras implementaciones de semánticas.

Los dos objetivos de diseño principales de SOAP son la simplicidad y la extensibilidad. Para alcanzar estos objetivos, SOAP simplemente elimina de su arquitectura aquellos aspectos que con más frecuencia se encuentra en los sistemas distribuidos. Podemos agregar las características que nosotros queramos simplemente extendiendo la especificación.

Page 197: Programacion Web

Ventajas

No esta asociado con ningún lenguaje: los desarrolladores involucrados en

nuevos proyectos pueden elegir desarrollar con el último y mejor lenguaje de

programación que exista pero los desarrolladores responsables de mantener

antiguas aflicciones heredadas podrían no poder hacer esta elección sobre el

lenguaje de programación que utilizan.

No se encuentra fuertemente asociado a ningún protocolo de transporte: La especificación de SOAP no describe como se deberían asociar los mensajes de SOAP con HTTP. Un mensaje de SOAP no es más que un

documento XML, por lo que puede transportarse utilizando cualquier protocolo capaz de transmitir texto.

No está atado a ninguna infraestructura de objeto distribuido. La

mayoría de los sistemas de objetos distribuidos se pueden extender, y ya lo

están alguno de ellos para que admitan SOAP.

Aprovecha los estándares existentes en la industria: Los principales

contribuyentes a la especificación SOAP evitaron, intencionadamente, reinventar las cosas. Optaron por extender los estándares existentes para que

coincidieran con sus necesidades. Por ejemplo, SOAP aprovecha XML para la

codificación de los mensajes, en lugar de utilizar su propio sistema de tipo que

ya están definidas en la 2 especificación esquema de XML. Y como ya se ha

mencionado SOAP no define un medio de trasporte de los mensajes; los mensajes de SOAP se pueden asociar a los protocolos de transporteexistentes

como HTTP y SMTP.

Permite la interoperabilidad entre múltiples entornos: SOAP se desarrollo

sobre los estándares existentes de la industria, por lo que las aplicaciones que se ejecuten en plataformas con dicho estándares pueden comunicarse

mediante mensaje SOAP con aplicaciones que se ejecuten en otras

plataformas. Estructura de un mensaje SOAP SOAP proporciona un mecanismo

estándar de empaquetar un mensaje. Un mensaje SOAP se compone de un

sobre que contiene el cuerpo del mensaje y cualquier información de cabecera

que se utiliza para describir le mensaje.

5.2.2. WSDL (Web Service Description Language)

Un archivo WSDL es un archivo en formato XML en donde se declaran los objetos que se van a compartir via SOAP, es decir, las operaciones, sus

Page 198: Programacion Web

argumentos y sus tipos de datos, y se debe de aclarar que todo via XML, entonces hay un asunto de codificación de caracteres que debemos de tomar en cuenta en nuestro archivo XML, ya sea UTF-8, Latin, Occidental , lo que sea, como se transporta la información vía XML, pues se tienen que tomar los cuidados necesarios.

Una gramática basada en XML que permite describir las capacidades de un servicio Web.

http://www.prograweb.com.mx/pweb/index.html