Está en la página 1de 199

2.1.

Arquitectura de las aplicaciones Web

La arquitectura tradicional de cliente/servidor tambin es conocida como


arquitectura de dos capas. Requiere una interfaz de usuario que se instala y se
ejecuta en una PC o estacin de trabajo y enva solicitudes a un servidor para
ejecutar operaciones complejas.

Por ejemplo, una estacin de trabajo utilizada como cliente puede ejecutar una
aplicacin de interfaz de usuario que interroga a un servidor central de bases
de datos.

Ventajas del Sistema de Dos Capas:

El desarrollo de aplicaciones en un ambiente de dos capas funciona


adecuadamente, pero no es necesariamente lo ms eficiente. Las herramientas
para el desarrollo con dos capas son robustas y ampliamente evaluadas.

Las tcnicas de ingeniera de software de prototipo se emplean fcilmente. Las


soluciones de dos capas trabajan bien en ambientes no dinmicos estables,
pero no se ejecutan bien en organizaciones rpidamente cambiantes.

Desventajas del sistema de dos capas:

Los ambientes de dos capas requieren control excesivo de las versiones y


demandan esfuerzo de distribucin de la aplicacin cuando se les hacen
cambios. Esto se debe al hecho de que la mayora de la aplicacin lgica existe
en la estacin de trabajo del cliente.

La seguridad del sistema en un diseo de dos capas es compleja y a menudo


requiere administracin de las bases de datos; esto es debido al nmero de
dispositivos con acceso directo al ambiente de esas bases de datos.
Las herramientas del cliente y de la base de datos, utilizadas en diseos de dos
capas, constantemente estn cambiando. La dependencia a largo plazo de
cualquier herramienta, puede complicar el escalamiento futuro o las
implementaciones.

Arquitectura de tres capas

La arquitectura de tres capas es un diseo reciente que introduce una capa


intermedia en el proceso. Cada capa es un proceso separado y bien definido
corriendo en plataformas separadas. En la arquitectura tradicional de tres
capas se instala una interfaz de usuario en la computadora del usuario final (el
cliente). La arquitectura basada en Web transforma la interfaz de bsqueda
existente (el explorador de Web), en la interfaz del usuario final.
La arquitectura de las aplicaciones Web suelen presentar un esquema de
tres niveles.

El primer nivel consiste en la capa de presentacin que incluye no slo el


navegador, sino tambin el servidor web que es el responsable de presentar los
datos un formato adecuado.

El segundo nivel est referido habitualmente a algn tipo de programa o


script.

Finalmente, el tercer nivel proporciona al segundo los datos necesarios


para su ejecucin. Una aplicacin Web tpica recoger datos del usuario (primer

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


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

Las diferentes capas suelen ser:

Capa 1: Cliente de aplicacin: Navegador Web


Capa 2 : Servidor de Aplicaciones: Apache, Servidor Tomcat con servlets

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 estacin de trabajo, al servidor de
capa intermedia, son ms flexibles que en el diseo de dos capas, ya que la
estacin solo necesita transferir parmetros a la capa intermedia.

Con la arquitectura de tres capas, la interfaz del cliente no es requerida para


comprender o comunicarse con el receptor de los datos. Por lo tanto, esa
estructura de los datos puede ser modificada sin cambiar la interfaz del usuario
en la PC.

El cdigo de la capa intermedia puede ser reutilizado por mltiples aplicaciones


si est diseado en formato modular. La separacin de roles en tres capas,
hace ms fcil reemplazar o modificar una capa sin afectar a los mdulos
restantes.
Desventajas de las Arquitecturas de Tres Capas y basadas en Web.

Los ambientes de tres capas pueden incrementar el trfico en la red y requiere


ms balance de carga u tolerancia a las fallas.

Los exploradores actuales no son todos iguales.

La estandarizacin entre diferentes proveedores ha sido lenta en desarrollarse.


Muchas organizaciones son forzadas a escoger uno en lugar de otro, mientras
que cada uno ofrece sus propias y distintas ventajas.

2.2. Lenguajes de programacin del lado del cliente


Un lenguaje del lado cliente es totalmente independiente del servidor, lo cual
permite que la pgina pueda ser albergada en cualquier sitio. Pero nuestra
pgina no se ver bien si la computadora cliente no tiene instalados los plugin adecuados. El cdigo, tanto del hipertexto como de losscripts, es accesible
a cualquiera y ello puede afectar a la seguridad.

Javascript.
Javascript es un lenguaje de programacin que realiza acciones dentro del
mbito de una pgina web. Su compatibilidad con la mayora de los
navegadores modernos, lo posiciona como el lenguaje de programacin del
lado del cliente ms utilizado. Con Javascript podemos crear efectos especiales
en las pginas y definir interaccin con el usuario. El navegador (browser) del

cliente es el encargado de interpretar las instrucciones Javascript y ejecutarlas


para realizar estos efectos e interactividades, de modo que el mayor recurso, y
tal vez el nico, con que cuenta este lenguaje es el propio navegador.
Entre las acciones tpicas que se pueden realizar en Javascript tenemos dos
vertientes. Por un lado los efectos especiales sobre pginas web, para crear
contenidos dinmicos y elementos de la pgina que tengan movimiento,
cambien de color o cualquier otro dinamismo.

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

Javascript es un lenguaje con muchas posibilidades, es orientado a objetos,


con funciones, estructuras de datos complejas, etc.

Adems, Javascript pone a disposicin del programador todos los elementos


que forman la pgina web, para que ste pueda acceder a ellos y modificarlos
dinmicamente.

JavaScript no permite dos de las caractersticas clsicas de los lenguajes


orientados a objetos (herencia y polimorfismo), pero permite la creacin y
manipulacin de objetos sencillos, y la definicin de mtodos y propiedades
para dichos objetos.

JavaScript soporta el Modelo de Objetos de Documento (DOM, Document


Object Model). El DOM es el conjunto de objetos predefinidos que nos permite
acceder a todos los elementos de una pgina y a ciertas caractersticas
especficas del navegador.
<html>
Ejecutar
<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>
</body>
</html>

Visual Basic Script


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

Applets de Java

Son programas hechos en Java, que se transfieren con las pginas web y que
el navegador ejecuta en el espacio de la pgina. Los applets son ms difciles
de programar que los scripts en Javascript y requerirn conocimientos medios
del lenguaje Java. La principal ventaja de utilizar applets consiste en que son
independientes del navegador, del sistema operativo y multiplataformas.

Cada sistema operativo dispone de una mquina Virtual de Java que puede
interpretar los Byte Codes y transformarlos a sentencias ejecutables en el
sistema en cuestin.

Arquitectura de appletviewer

El appletviewer representa la interfaz mnima de navegacin. En la figura se


muestran los pasos que seguira appletviewer para presentarnos el resultado
de la ejecucin del cdigo de nuestra clase.

Esta es una visin simplificada del appletviewer. La funcin principal de esta


aplicacin es proporcionar al usuario un objeto de tipo Graphics sobre el que
dibujar, y varias funciones para facilitar el uso del objeto Graphics.

Ciclo de vida de un Applet


Cuando un applet se carga en el appletviewer, comienza su ciclo de vida, que
pasara por las siguientes fases:

Se crea una instancia de la clase que controla el applet. En el ejemplo de


la figura anterior, sera la clase HolaMundo.
El applet se incializa.

El applet comienza a ejecutarse.

El

applet

empieza

recibir

llamadas.

Primero

recibe

una

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


Estas llamadas pueden ser recibidas asncronamente.

Flash

Es un programa multimedia de Adobe que se utiliza para crear presentaciones


animadas. Se trata de una aplicacin del lado del cliente que es leda por los
principales navegadores. Las animaciones se realizan a partir de vectores y de

imgenes en base a pxeles (llamadas raster graphics) y pueden incluir audio


y video. Este programa es uno de los ms utilizados para animar sitios Web y
permitir la interactividad.

Crtica de Steve Jobs

Flash una tecnologa 100% propietaria, argumenta que los estndares web
deben de ser completamente abiertos.

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

tienen acceso a toda la web, porque ms del 75% del vdeo en Internet est
basado en Flash". Pero lo que no dicen, es que casi todo ese contenido,
tambin est disponible en formatos ms modernos como el H.264.
Flash ofrece poca seguridad a sus usuarios. Dice que es uno de los

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

2.3. Lenguajes de programacin del lado Servidor

Existe una multitud de lenguajes concebidos o no para Internet. Cada uno de


ellos explota ms a fondo ciertas caractersticas que lo hacen ms o menos
tiles para desarrollar distintas aplicaciones.

Un lenguaje del lado del servidor es aquel que se ejecuta en el servidor web,
justo antes de que se enve la pgina a travs de Internet al cliente. Las
pginas que se ejecutan en el servidor pueden realizar accesos a bases de
datos, conexiones en red, y otras tareas para crear la pgina final que ver el
cliente.

Los lenguajes de lado servidor ms ampliamente utilizados para el desarrollo


de pginas dinmicas son el ASP, JSP, PERL y PHP.

ASP.NET (Active Server Pages).

Lenguaje comercializado por Microsoft, y usado por programadores para


desarrollar entre otras funciones, sitios web. ASP.NET es el sucesor de la
tecnologa ASP, fue lanzada al mercado mediante una estrategia de mercado
denominada .NET.

Se desarrollado para resolver las limitantes que brindaba tu antecesor ASP.


Para el desarrollo de ASP.NET se puede utilizar C#, VB.NET o J#. Los archivos
cuentan con la extensin (aspx). Para su funcionamiento de las pginas se
necesita tener instalado IIS con el Framework .Net. Microsft Windows 2003
incluye este framework, solo se necesitar instalarlo en versiones anteriores.

El lenguaje ASP consiste en una serie de clases .NET utilizadas para


crear aplicaciones Web, tanto del lado cliente (Web Form) como del lado
servidor (Web Service). La integracin de nativa .NET Framework con el
sistema operativo Windows Server 2003 hace que su ejecucin sea ms
estable y rpida que otros lenguajes de programacin.
Las pginas creadas con la tecnologa ASP.NET funcionan en todo tipo de
navegadores incluyendo Netscape, Safari y Internet Explorer.

Actualizaciones Dinmicas Soporte de servicios web XML Conexiones del tipo


DSN, o sin utilizacin de DSN, para acceder a fuentes de datos ODBC.

Ventajas:

Completamente orientado a objetos.

Controles de usuario y personalizados.

Divisin entre la capa de aplicacin o diseo y el cdigo.

Facilita el mantenimiento de grandes aplicaciones.

Incremento de velocidad de respuesta del servidor.

Mayor velocidad.

Mayor seguridad.

Desventajas:

Mayor consumo de recursos.

Tecnologa propietaria.

Hospedaje de sitios web costosos.

JSP

Es un lenguaje para la creacin de sitios web dinmicos, acrnimo de Java


Server Pages. Est orientado a desarrollar pginas web en Java. JSP es un
lenguaje multiplataforma.

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

Caractersticas:

Cdigo separado de la lgica del programa.

Las pginas son compiladas en la primera peticin.

Permite separar la parte dinmica de la esttica en las pginas web.

Los archivos se encuentran con la extensin (jsp).

El cdigo JSP puede ser incrustado en cdigo HTML.

Los elementos que pueden ser insertados en las pginas JSP son los
siguientes:

Cdigo: se puede incrustar cdigo Java.

Directivas: permite controlar parmetros del servlet.

Acciones: permite alterar el flujo normal de ejecucin de una pgina.

Ventajas:

Ejecucin rpida del servlets.

Crear pginas del lado del servidor.

Multiplataforma.

Cdigo bien estructurado.

Integridad con los mdulos de Java.

La parte dinmica est escrita en Java.

Desventajas:

Complejidad de aprendizaje.

PERL
Perl (Practical Extraction and Report Language) es un lenguaje de
programacin desarrollado por Larry Wall (lwall at netlabs.com) inspirado en
otras herramientas de UNIX como son: sed, grep, awk, c-shell, para la
administracin de tareas propias de sistemas UNIX. No establece ninguna
filosofa de programacin concreta. No se puede decir que sea orientado a
objetos, modular o estructurado aunque soporta directamente todos estos
paradigmas; su punto fuerte son las labores de procesamiento de textos y
archivos. Lenguaje de programacin basado en scripts portable a casi cualquier
plataforma. Es muy utilizado para escribir CGIs. Uno de sus elementos ms

potentes son las expresiones regulares, que a partir de su versin en Perl han
sido adoptadas por otros lenguajes y plataformas como .NET o Javascript.

Ventajas

Es un buen lenguaje pegamento. Se pueden juntar varios programas de


una forma sencilla para alcanzar una meta determinada. Los usuarios de
Windows agradecern esta propiedad ya que normalmente adolecen de un
buen lenguaje tipo script.

Es relativamente rpido para un lenguaje tipo script.

Est disponible en mltiples plataformas y sistemas operativos (UNIX,


Linux y Windows). Un programa que se escriba teniendo en cuenta la
compatibilidad puede ser escrito en una plataforma y ejecutado en otra.

El desarrollo de aplicaciones es muy rpido.

Hay una coleccin enorme de mdulos que pueden ser incorporados a


cualquier script de Perl. Estn disponibles en el CPAN (Comprehensive Perl
Archive Network). En particular existe una extensin para clculo numrico
denominada PDL.

Perl es gratuito. Mucho ms que eso, es Software Libre. Esto quiere decir
que el cdigo fuente est disponible para que cualquiera lo pueda ver o
modificar, y lo que es ms importante, siempre lo estar. Aunque nunca
pretendas cambiar el cdigo, es importante disponer de la posibilidad de
hacerlo, ya que siempre se podr contratar a una tercera persona para que lo
modifique en el caso de que haya un error, y debera ser posible solucionarlo.

Le otorga al programador mucha libertad para que haga el programa como


quiera. Tal como dice el eslogan de Perl Hay ms de una forma de hacerlo.

Desventajas

Es lento para algunas aplicaciones, como programacin a bajo nivel,


escribiendo un driver para una aplicacin o corriendo modelos numricos de
clculo intensivo. Si bien se pueden insertar subrutinas FORTRAN o C en Perl,
teniendo lo mejor de los dos mundos, pero con algo ms de complejidad.

La libertad que se le otorga al programador puede significar que el


resultado sea un programa ilegible. Si no se escribe con cuidado puede llegar a
ser difcil de leer. De hecho hay un concurso de Perl ofuscado.

Perl es un lenguaje interpretado. Este tema no es tan crtico como suena,


los programas Perl no corrern mucho ms rpidos cuando se compilen, la
nica ventaja est en la desaparicin de la fase inicial de compilacin al correr
la aplicacin.

Utiliza muchos recursos de comput. Esto significa que no es tan ligero


como un programa en C, pero en la prctica es ligero comparado con la
potencia de procesamiento de las computadoras actuales.

PHP
PHP es el acrnimo de Hipertext Preprocesor. Es un lenguaje de programacin
del lado del servidor gratuito e independiente de plataforma, rpido, con una
gran librera de funciones y mucha documentacin. Fue creado originalmente
en 1994 por Rasmus Lerdorf, pero como PHP est desarrollado en poltica de
cdigo abierto, a lo largo de su historia ha tenido muchas contribuciones de
otros desarrolladores.

El cliente solamente recibe una pgina con el cdigo HTML resultante de la


ejecucin de la PHP. Como la pgina resultante contiene nicamente cdigo
HTML, es compatible con todos los navegadores.

Ventajas:

Muy fcil de aprender.

Se caracteriza por ser un lenguaje muy rpido.

Soporta en cierta medida la orientacin a objeto. Clases y herencia.

Es un lenguaje multiplataforma: Linux, Windows, entre otros.

Capacidad de conexin con la mayora de los manejadores de base de


datos: MysSQL, PostgreSQL, Oracle, MS SQL Server, entre otras.

Capacidad de expandir su potencial utilizando mdulos.

Posee documentacin en su pgina oficial la cual incluye descripcin y


ejemplos de cada una de sus funciones.

Es libre, por lo que se presenta como una alternativa de fcil acceso para
todos.

Incluye gran cantidad de funciones.

No requiere definicin de tipos de variables ni manejo detallado del bajo


nivel.

Desventajas:

Todo el trabajo lo realiza el servidor y no delega al cliente. Por tanto puede


ser ms ineficiente a medida que las solicitudes aumenten de nmero.

La legibilidad del cdigo puede verse afectada al mezclar sentencias HTML


y PHP.

La programacin orientada a objetos es an muy deficiente para


aplicaciones grandes.

Dificulta la modularizacin.

Dificulta la organizacin por capas de la aplicacin.

Seguridad:
PHP es un poderoso lenguaje e intrprete, ya sea incluido como parte de un
servidor web en forma de mdulo o ejecutado como un binario CGI separado,
es capaz de acceder a archivos, ejecutar comandos y abrir conexiones de red
en el servidor. Estas propiedades hacen que cualquier cosa que sea ejecutada
en un servidor web sea insegura por naturaleza.

PHP est diseado especficamente para ser un lenguaje ms seguro para


escribir programas CGI que Perl o C, y con la seleccin correcta de opciones
de configuracin en tiempos de compilacin y ejecucin, y siguiendo algunas
prcticas correctas de programacin.

2.4. Ambientes para el desarrollo de aplicaciones Web


Un entorno
de
desarrollo integrado
(IDE- Integrated Development
Environment -) tambin conocido como entorno de diseo integrado o el medio
ambiente integrado de depuracin es una aplicacin de software que ofrece
servicios integrales a los programadores de computadoras para el desarrollo de
software. Un IDE normalmente se compone de:

Un editor de texto.

Un compilador.

Un intrprete.

Herramientas de automatizacin.

Un depurador.

Posibilidad de ofrecer un sistema de control de versiones.

Factibilidad para ayudar en la construccin de interfaces grficas de


usuario.

IDE para Php

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

Dreamweaver de Adobe
Es en una potente y flexible herramienta de desarrollo que inclute numerosas
herramientas para facilitarnos el desarrollo de aplicaciones web.
Dreamweaver permite trabajar con los siguientes modelos de servidor:

ASP JavaScript

ASP VBScript

ASP.NET C#

ASP.NET VB

COLDFUSION

JSP

PHP MySQL

El concepto de sitios en Dreamweaver es bastante til ya que nos permite


mantener un orden lgico/fsico de la estructura de nuestro sitio, enlaces y
recursos que este utiliza, tiene el potencial para encargarse completamente de
los enlaces relativos (recomendado).
Como se menciono Dreamweaver proporciona soporte para variados modelos
de Servidor entregando capacidades de creacin de cdigo estndar para una

serie de funciones como son la insercin, edicin, eliminacin y consulta de


datos, manejo de ciclos y condiciones, incluso acceso por restringido por
password, todo esto de una forma muy bsica, pero sin duda es un primer
acercamiento para novatos, lo importante de esto es que podemos extender
esta capacidad mediante nuestros conocimientos y usar este entorno de
desarrollo para facilitarnos la dura tarea de desarrollar para la Web.

Jomla!
Joomla! es un Sistema de Gestin de Contenidos (CMS) premiado
mundialmente, que le ayuda a construir sitios web y otras aplicaciones online
potentes. Lo mejor de todo, es que Joomla es una solucin de cdigo abierto y
est disponible libremente para cualquiera que desee utilizarlo.
Joomla! se utiliza en todo el mundo para generar desde una simple pgina
web personal hasta complejas aplicaciones web corporativas. Entre los
diferentes usos que la gente da a Joomla! estn:

Webs corporativas o portales

Comercio electrnico

Pequeos sitios de negocios

Webs de organizaciones o ONGs

Aplicaciones gubernamentales

Intranets y extranets corporativas

Webs de escuelas o agrupaciones

Pginas personales o familiares

Portales de comunidades

Revistas y peridicos

Joomla se puede usar para gestionar fcilmente cualquiera de los aspectos de


un sitio web, desde la introduccin de contenidos e imgenes hasta la
actualizacin de un catlogo de productos o la realizacin de reservaciones
online.

WordPress

WordPress es un sistema de gestin de contenido enfocado a la creacin de


blogs (sitios web peridicamente actualizados). Desarrollado en PHP y MySQL,
bajo licencia GPL y cdigo modificable, tiene como fundador a Matt Mullenweg.

WordPress fue creado a partir del desaparecido b2/cafelog y se ha convertido


junto a Movable Type en el CMS ms popular de la blogosfera.

Las causas de su enorme crecimiento son, entre otras, su licencia, su facilidad


de uso y sus caractersticas como gestor de contenidos.

2.5 Metodologas para el desarrollo de aplicaciones Web.


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

Algunas aplicaciones son: los webmails, wikis, weblogs, tiendas en lnea,


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

El Proceso de Ingeniera Web


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

La formulacin identifica objetivos y establece el alcance de la primera


entrega.

La planificacin genera la estimacin del costo general del proyecto, la


evaluacin de riesgos y el calendario del desarrollo y fechas de entrega.

El anlisis especifica los requerimientos e identifica el contenido.

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


consiste en el diseo y produccin del contenido que forma parte de la
aplicacin. La otra, en el diseo de la arquitectura, navegacin e interfaz de
usuario. Es importante destacar la importancia del diseo de la interfaz.
Independientemente del valor del contenido y servicios prestados, una buena
interfaz mejora la percepcin que el usuario tiene de stos.

En la generacin

de pginas se integra contenido, arquitectura,


navegacin e interfaz para crear esttica o dinmicamente el aspecto ms
visible de las aplicacin, las pginas.
El Test busca

errores

todos

lo

niveles:

contenido,

funcional,

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


red, y que interoperen en plataformas muy distintas, hace que el proceso de test
sea especialmente difcil.

Finalmente, el resultado es sometido a la evaluacin del cliente.

Control y Garanta de la Calidad

Una de las tareas colaterales que forman parte del proceso es el Control y
Garanta de la Calidad (CGC). Todas las actividades CGC de la ingeniera
software tradicional como son: establecimiento y supervisin de estndares,
revisiones tcnicas formales, anlisis, seguimiento y registro de informes, etc,
son igualmente aplicables a la Ingeniera Web. Sin embargo, en la Web toman
especial relevancia para valorar la calidad aspectos como:

Usabilidad

Funcionabilidad

Fiabilidad

Seguridad

Eficiencia

Mantenibilidad

Control de la Configuracin
Establecer mecanismos adecuados de control de la configuracin para la
Ingeniera Web es uno de los mayores desafos a los que esta nueva disciplina
se enfrenta. La Web tiene caractersticas nicas que demandan estrategias y

herramientas nuevas. Hay cuatro aspectos importantes a tener en cuenta en el


desarrollo de tcticas de control de configuracin para la Web.

Contenido: Considerando la dinamicidad con la que el contenido se


genera, es tarea compleja organizar racionalmente los objetos que forman la
configuracin y establecer mecanismos de control.

Personal: Cualquiera realiza cambios. Hay mucho personal no


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

Escalabilidad: Es comn encontrar aplicaciones que de un da para otro


crecen considerablemente. Sin embargo, las tcnicas de control no escalan de
forma adecuada.

Poltica: Quin posee la informacin? Quin asume la responsabilidad y


coste de mantenerla?
La Gestin del Proceso

En un proceso tan rpido como es el proceso de Ingeniera 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 gestin? La respuesta es que
dada su complejidad es imprescindible. Entre los aspectos que aaden
dificultad a la gestin destacamos:

Alto porcentaje de contratacin a terceros

El desarrollo incluye una gran variedad de personal tcnico y no tcnico


trabajando en paralelo

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


basado en componentes, redes, diseo de arquitectura y navegacin, diseo
grfico y de interfaces, lenguajes y estndares en Internet, test de aplicaciones
Web, etc, lo que hace que el proceso de bsqueda y contratacin de personal
sea arduo.

Qu marca la diferencia?
A modo de breve resumen enumeramos las siguientes diferencias:

Confluencia de disciplinas: Sistemas de informacin, ingeniera software y


diseo grfico que requiere equipos multidisciplinares y polivalentes. Ciclos de
vida y tiempo de desarrollo muy cortos

Cambio continuo:

Necesidad de soluciones que permitan flexibilidad y adaptacin conforme


el proyecto cambia.

Requisitos fuertes de seguridad, rendimiento y usabilidad.

Por qu es necesaria?

La Web evoluciona y crece sin diseo alguno. Prcticas tan pobres de calidad
pueden introducir defectos que dejen al efecto 2000 como un juego de nios.
Es deber de todos proporcionar cimientos firmes a una tecnologa que
mgicamente nos permite acceder a cualquier hora a cualquier punto del
planeta para obtener bienes tan valiosos como son los servicios y
la informacin.

Conclusiones
La aplicacin de principios de ingeniera 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 da las aplicaciones web son uno de los servicios ms utilizados ya sea
accediendo a un servidor web a travs de internet o de una intranet.

Los lenguaje de programacin web son verstiles, sencillos de usar y permiten


crear soluciones de gran envergadura.
Las aplicaciones escritas en estos lenguajes estn expuestas a diversas
amenazas si no se toman las medidas adecuadas para evitarlo, por este motivo
se resalta la importancia de la formacin en seguridad que deberan de recibir
todos los programadores.
Si no se procede de forma correcta, las aplicaciones web desarrolladas en
estos lenguajes pueden servir como puerta de entrada de un intruso a la red de
la empresa, por lo que la seguridad de este tipo de aplicaciones tiene que ser
tomada como prioritaria para no exponer la seguridad de su negocio.
Esta formacin est orientada a que los equipos de programadores conozcan y
utilicen las buenas prcticas en el diseo y desarrollo de aplicaciones para
evitar vulnerabilidades de seguridad.

El objetivo del mismo es conocer como proteger la aplicacin contra los fallos
ms comunes (SQL Injection, XSS, Command Execution, File Inclusion ).

Las fallas de seguridad ms comunes son:

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

abarcaban cualquier ataque que permitiera ejecutar cdigo de "scripting", como


VBScript o JavaScript, en el contexto de otro sitio web (y recientemente esto se
podra clasificar ms correctamente como "distintos orgenes").
Injection Flaws

Insecure Remote File Include


Insecure Direct Object Reference

Cross Site Request Forgery (CSRF)

Information Leakage and Improper Error Handling


Broken Authentication and Session Management
Insecure Cryptographic Storage

Insecure Communications

Failure to Restrict URL access

3.1. Procesamiento del lado del servidor.

La Programacin del lado del servidor es una tecnologa que consiste en el


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

La utilizacin de las diferentes aplicaciones o servicios de Internet se lleva a


cabo respondiendo al llamado modelo cliente-servidor.

Cuando se utiliza un servicio en Internet, como consultar una base de datos,


transferir un archivo o participar en un foro de discusin, se establece un
proceso en el que entran en juego dos partes. Por un lado, el usuario, quien
ejecuta una aplicacin en procesador local: el denominado 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 trminos 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 comunicacin con el computador servidor, de solicitar
un servicio concreto y de recibir los datos enviados por ste; y por otra, es la
herramienta que presenta al usuario los datos en pantalla y que le ofrece los
comandos necesarios para utilizar las prestaciones que ofrece el servidor.

Cuando nosotros seleccionamos un enlace hipertexto, en realidad lo que


pasa es que establecemos una peticin de un archivo HTML residente en el
servidor (una computadora que se encuentra continuamente conectado a la
red) el cual es enviado e interpretado por nuestro navegador (el cliente).

As pues, podemos hablar de lenguajes de lado servidor que son aquellos


lenguajes que son reconocidos, ejecutados e interpretados por el propio
servidor y que se envan al cliente en un formato comprensible para l, por
ejemplo: ASP, PHP, JSP.
Por otro lado, los lenguajes de lado cliente (entre los cuales no slo se
encuentra el HTML sino tambin el Java y el JavaScript los cuales son
simplemente incluidos en el cdigo HTML) son aquellos que pueden ser
directamente "digeridos" por el navegador y no necesitan un pretratamiento.

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

Inversamente, un lenguaje de lado servidor es independiente del cliente por lo


que es mucho menos rgido respecto al cambio de un navegador a otro o
respecto a las versiones del mismo.

3.2. Conceptos bsicos de la herramienta de desarrollo

Una herramienta es un objeto elaborado a fin de facilitar la realizacin de una


tarea mecnica que requiere de una aplicacin correcta de energa. El trmino
herramienta, en sentido estricto, se emplea para referirse a utensilios
resistentes, tiles para realizar trabajos mecnicos que requieren la aplicacin
de una cierta fuerza fsica.

Cada herramienta tiene un fin especfico y debera ser usado solo con un fin
determinado, Sin embargo esto no se cumple en la mayora de las tareas del
quehacer humano y mucho menos en las aplicaciones web. Cuando pensemos
en las mejores herramientas para el desarrollo web es necesario pensar en
donde estar alojado nuestro sitio (hosting).
El hosting o alojamiento web es un sistema esencial para el funcionamiento de
los sitios en Internet y es el lugar donde fsicamente reside nuestra informacin.
Si tenemos recursos ilimitados para tener nuestro propio sitio entonces
tendriamos que hacer una gran investigacin para seleccionar las herramientas
ms sofisticadas. Sin embargo para la mayora de las aplicaciones debemos
pagar porque nuestra informacin sea colocada en cierto servidor.

El lugar donde fsicamente se almacenara nuestra informacin determina los


lenguajes soportados (cliente, servidor), el gestor de la base de datos y las
prestaciones que podremos ofrecer a 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 ms sofisticadas pero no servirn de nada.
Las fases de un desarrollo web, as como los lenguajes de programacin
usados, son muy extensas y variadas, y por ello necesitamos herramientas
especficas para cada una de ellas. Conoceremos a continuacin las
principales herramientas existentes para poder desarrollar fcilmente
unproyecto web.
En el desarrollo web tenemos unas herramientas para el diseo, otras para la
maquetacin, otras para la programacin, y para la depuracin. Todas

las herramientas que usemos son muy importantes, desde el sistema operativo
hasta el comando ms insignificante, y por ello debemos elegir la ms
adecuada a nuestras necesidades y capacidades.

Sistema Operativo

Para desarrollar una web, lo primero que necesitamos es un Sistema


Operativo, como es lgico, y su eleccin no es tan trivial. Hay que tener en
cuenta las aplicaciones de las que dispone el Sistema Operativo y sus costos.
Si pensamos desarrollar en .NET este solo es soportado por windows y los
costos de hospedaje son 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.

Diseo: consiste en crear esbozos de la web final mediante una


herramienta grfica, como Photoshop

Maquetacin HTML/CSS: consiste en convertir los esbozos creados en la


fase anterior en plantillas HTML, su respectiva hoja de estilos, y las imgenes
usadas. Es posible saltarse la fase anterior para comenzar directamente con
esta fase, dependiendo de si dominamos herramientas como Photoshop o no.

Programacin cliente: consiste bsicamente en Javascript. Existen


muchas librerias de distribucin libre como JQUERY que nos aportan
verdaderas joyas para el desarrollo.

Programacin servidor: en esta fase, que se desarrolla junto con la


anterior, crearemos la aplicacin web en un lenguaje de servidor, como puede
ser PHP, ASP .NET, Python, Perl, Java, etc.

Depuracin: esta fase enlaza la anterior con la siguiente, y es donde


haremos las pruebas unitarias, aserciones, trazas, etc.

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


posibles. Por ejemplo usando wampServer

Subir archivos al hosting: Dependiendo del hosting, podremos usar


FTP, SSH, aconsejo usar 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
configuracin que el servidor del hosting. Recuerde probar que sus cdigos
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 edicin un servidor FTP, adems de validar
nuestros cdigos javascript y css. Con el inconveniente de ser una herramienta
muy cara.

En contra parte, va versin Joomla! edition de kademar Linux es la


adaptacin de la versin de Escritorio DVD (Leo) 4.9.1 con la inclusin de los
programas necesarios para trabajar con el gestor de contenidos Joomla!.

En esta edicin 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
servidor de hosting para crear pginas web. Est funcionando en local y no se
tiene que pelear con la instalacin 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 cdigo para probar nuestro primer programa. El cual, muestra el
himno del Tecnolgico de Veracruz.
Los programas en PHP inician con "<?php" y terminan con el tag "?>". En el
cdigo la instruccin echo imprime en pantalla la cadena encerrada entre pares
de '"'. Note que entre las lneas encontramos el tag html "<br />" lo cual regresa
un retorno de lnea.
Adems observe que cada lnea termina con un ";".
?
1
2
3
4
5
6
7
8
9

<?php
echo "Himno del Instituto Tecnolgico de Veracruz";
echo"Letra: Francisco Rivera vila. ";
echo"Msica: Agustn Lara y Aguirre";
echo "Con ilusin, 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.";
?>

Descargar
Ejecutar

Variables.
Las variables en PHP no necesitan, a diferencia de otros lenguajes de
programacin ser declaradas especficamente dado que cuando a una variable
se le asigna un valor esta se inicializa en forma automtica determinando la
cantidad de memoria necesaria para dicha variable.
Los nombres de las variables van precedidas del signo "$". Los nombres de las
variables son sensibles al uso de las maysculas y minsculas. De tal forma
que la sintaxis correcta es:
$nombreVariable = valor;

Por ejemplo, las siguientes asignaciones seran perfectamente validas

?
1
2
3
4

$miNovia = "Gabriela Vergara <br />";


$nacio = "Caracas, Venezuela<br />";
$cumple = "29 de Mayo <br />";
$signo = "Gminis <br />"

El nombre de una variable tambin se conoce como identificador y debe


cumplir las siguientes normas:

Slo puede estar formada por letras y nmeros y los smbolos ($ dlar

y _ guin bajo).
El primer carcter del nombre del identificador o varible debe ser
estrictamente el signo de dlar.

Ahora observe el siguiente cdigo, despus de ejecutarlo, use la opcin ver


cdigo fuente de su navegador y encontraras solo cdigo html.

?
1
2
3
4
5
6
7
8
9
10
11
12

<?php
$foto = "<img src='../img/artistas/gabrielaVergara.jpg' />";
$miNovia = 'Gabriela Vergara';
$nacio = 'Caracas, Venezuela';
$cumple = '29 de Mayo';
$signo = 'Gminis';
echo $foto;
echo 'Mi novia: '.$miNovia."<br />";
echo 'Nacio: '.$nacio."<br />";
echo 'Cumpleaos: '.$cumple."<br />";
echo 'Signo: '.$signo."<br />";
?>

Descargar
Ejecutar

Tipos de datos

PHP soporta los siguientes tipos y son definidos en tiempo de ejecucin

integer. Son datos de tipo numrico entero


double. Datos numricos en coma flotante ( manejo de decimales)
string. Cadenas alfanumricas.
boolean. Valores de tipo Verdadero o Falso como resultado de evaluar
una condicin, 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 an no se le asigna valor alguno.
Para forzar una variable a un tipo concreto use la funcin settype()
Dado que las variables no se declaran, el tipo se adquiere en tiempo de
ejecucin al tipo que usted quiera. Dependiendo de la informacin que
contenga, una variable puede ser considerada de uno u otro tipo:

Tipo

Usos de las variables


Asignacin
Resultado

Entero

$edad = 45;

Nmeros sin decimales

Real

$pi
3.1415;

Nmeros en punto flotante.

Octal

$a = 0123

Nmero octal (equivalente al 83 decimal).

Hexadecimal

$b = 0x12

Nmero hexadecimal
decimal).

Alfanumricas $c = "a"

Variable alfanumrica

Alfanumricas $c = 'a'

Variable alfanumrica

(equivalente

al

Ejemplos:
Expresin

Resultado

$algo = 1 + 5;

$algo = 1 + "5";

$algo = 3 + "4 es basura";

7!!!

$algo = "4 es basura" + 7;

11!!!

18

Expresin

Resultado

$algo = "4.2 es basura" + 7.2

11.4!!!!!
Descargar
Ejecutar

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 lnea

\r

Retorno de carro

\t

Tabulacin horizontal

\\

Barra invertida

\$

Signo de dlar

\"

Comillas dobles

\[0-7]{1,3}

La secuencia de caracteres que coincide con la expresin regular es


un carcter en notacin octal

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

La secuencia de caracteres que coincide con la expresin regular es


un carcter en notacin hexadecimal

Nuevamente, si intenta escapar cualquier otro carcter, la barra invertida ser


impresa tambin! Antes de PHP 5.1.1, la barra invertida en \{$var} no vena
imprimindose.
A diferencia de otros lenguajes, PHP posee una gran flexibilidad a la hora de
operar con variables. En efecto, cuando definimos una variable asignndole 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 operacin matemtica


con esta variable, no obtendremos un mensaje de error sino que la variable
cadena se tomara como numrica:

?
1
2
3
4
5
6
7
8

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

Descargar
Ejecutar
Este script dar como resultado "40". La variable cadena ha sido asimilada en
entero (aunque su tipo sigue siendo cadena) para poder realizar la operacin
matemtica. Del mismo modo, podemos operar entre variables tipo entero y
real.
PHP se encarga durante la ejecucin de interpretar el tipo de variable
necesario para el buen funcionamiento del programa. Esto podra parecer una
ventaja
pero
en
la
prctica
es
un
dolor
de
cabeza.
Sin embargo, en contraste, hay que tener cuidado en no cambiar maysculas
por minsculas ya que, en este sentido, PHP es sensible. Conviene por lo tanto
trabajar ya sea siempre en maysculas o siempre en minsculas para evitar
este conflicto regularmente difcil de identificar.
Variables predefinidas
PHP dispone de una gran cantidad de variables que ya estn definidas, y que
tenemos a disposicin para usarlas dentro de nuestros script. Para ver todas
las variables que tenemos disponibles en nuestro servidor y versin de PHP, es
necesario hacer un llamado a la funcin predefinida phpinfo(). Por ejemplo:
?
1
2
3

<?php
echo phpinfo();
?>

Ejecutar

A continuacin se presentan algunas de las variables predefinidas. El resto de


las variables las puede obtener de la pgina resultado del programa anterior.
Variable
$DOCUMENT_ROOT

Descripcin
Nombre del subdirectorio donde se ejecuta
el script

$HTTP_ACCEPT_LANGUAGE Idioma utilizado


$HTTP_CONNECTION

Indica los contenidos de la cabecera


Conecction.

$HTTP_REFERER

http://localhost/

$HTTP_USER_AGENT

Indica el navegador del cliente

$PHP_SELF

Nombre del archivo


ejecutando el script

$QUERY_STRING

Devuelve la QueryString. Variables y sus


valores

$REMOTE_ADDR

IP del cliente

$REQUEST_METHOD

Mtodo de peticin con el cual se accedio a


la pgina

$SERVER_FILENAME

Ruta y nombre del script que se esta


ejecutando

$SERVER_PORT

Puerto desde donde se ejecuta el scipt

$SERVER_PROTOCOL

Versin del protocolo HTTP

$SERVER_SOFTWARE

Nombre del servidor


corriendo el script

$_SERVER

Versin del servidor web y la versin de


PHP

donde

Web

se

que

est

est

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

?
1
2
3
4
5
6
7
8
9

<?php
echo
echo
echo
echo
echo
echo
echo
?>

"Idioma:
".$HTTP_ACCEPT_LANGUAGE;
"Navegador:
".$HTTP_USER_AGENT";
"Cabecera:
".$HTTP_CONNECTION;
"IP cliente:
".$REMOTE_ADDR.";
"Nombre del archivo:".$PHP_SELF;
"Versin Apache:
".$SERVER_SOFTWARE;
"Puerto:
".$SERVER_PORT;

Descargar
Ejecutar

Ejemplo: Direccin IP del cliente

getIPReal es una funcin que nos regresa la IP del cliente


empty es una funcin PHP que nos dice si una variable est vacia o es
nula.
?
1
2
3
4
5
6
7
8
9
10
11

<?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();
?>

Descargar
Ejecutar

Expansin 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 lnea 5.

La variable capital se expande en la lnea 11.

?
1
2
3
4
5
6
7
8
9
10
11
12

<?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 histricos ';
echo 'que marcaron un hito en la vida poltica, econmica y ';
echo 'social ';
echo "de nuestro pas. Su capital es $capital.";
?>

Descargar
Ejecutar

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 lneas 4, 7 y 10 hacen uso de la propiedad de referenciar variables.
?
1
2
3
4
5
6
7
8
9
10
11

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

Descargar
Ejecutar

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

Las lneas del 2 al 9 declaran variables con el nombre de los estados de la


Republica Mexicana

Mediante la expresin ${"estado".$i} se aplica la variable de variables


(lneas 12 y 14)

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

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

Descargar
Ejecutar

Constantes

Una constante es un dato cuyo valor no puede variar durante la ejecucin


del programa.

El nombre de las constantes es sensible a maysculas.

Por convencin, los identificadores (nombres) de las constantes suelen


declararse en maysculas.

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 vlido empieza con una letra o


el carcter de subrayado, seguido por una serie letras, nmeros, o
subrayados. Los nombres de constantes en PHP no admiten espacios en
blanco, signos de puntuacin (acentos, !, ?, etc), ni caracteres
especiales(%, , etc).

Sintaxis

Se puede definir una constante usando la funcin 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 $.
Tambin se puede utilizar la funcin constant() para obtener el valor de una
constante.

Diferencias entre constantes y variables:

No son precedidas por un smbolo de dlar ($).

Son declaradas usando la funcin() define , nunca por asignacin simple.

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

No pueden ser redefinidas o eliminadas despus de establecerse.

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


float y string ).

Ejemplo: Definicin de constantes


?
1
2
3
4
5
6
7

<?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";

8
9
10

echo $cadena;

?>

Descargar
Ejecutar

Constantes predifinicas

En PHP exiten algunas constantes predefinidas que no requieren la


instruccin: define("Nombre","Valor"). A continuacin se presenta un ejemplo
del uso de estas variables.
?
1
2
3
4
5
6
7
8

<?
$cadena = 'Ruta: '.__FILE__.'<br />';
$cadena .= 'Esta es la lnea: ';
$cadena .= __LINE__.' del archivo<br />';
$cadena .= 'Versin PHP: '.PHP_VERSION;
$cadena .= 'Sistema operativo: '.PHP_OS;
echo $cadena;
?>

Descargar
Ejecutar

Funciones de manejo de variables

PHP proporciona funciones para manipular las variables que se usaran


intensivamente en secciones posteriores. Como por ejemplo:
Funcin

Descripcin

Sintaxis

isset

Determina si una variable tiene valor. Su


isset($var)
argumento es un nombre de variable

unset

Elimina el contenido de una variable. El


unset($var)
resultado es un NULL

empty

Regresa un true si la variable todava no


empty($var)
ha recibido valor

gettype

Permite conocer el tipo de datos de la gettype($var)

Funcin

Descripcin

Sintaxis

variable
settype

Permite modificar el tipo de dato de una settype($var,


variable
"tipo")

lowercase

Convierte el contenido de una variable


lowercase($var)
alfanumrica en minscula

uppercase

Convierte el contenido de una variable


uppercase($var)
alfanumrica en mayscula

is_int

Esta funcin regresa true si la variable


pasada como argumento es entera; en caso is_int($var)
contrario devuelvefalse.

is_float

Regresa true si la variable pasada como


argumento es de tipo float; en caso is_float($var)
contrario regresa false.

Regresa true si la variable pasada como


argumentp es un nmero o una cadena
is_number
is_number($var)
numrica;
en
caso
contrario,
devuelve false.

3.4. Operadores

Los operadores constituyen elementos esenciales de cualquier lenguaje de


programacin. Con ellos podemos asignar, unir, cambiar o comparar valores de
datos, cambiar el flujo del programa, etc.

Los operadores son smbolos que representan operaciones sobre un valor.


Vamos a ver a continuacin los operadores admitidos por PHP agrupados
segn su utilidad.

Operador de asignacin

El smbolo = permite asignar valores a variables:

?
1

<?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';

?
<?php
$numeros = 'uno, dos, tres';
$numeros .= ', <span class="e2507h48" id="e2507h48_2">cuatro</span>, cinco, seis';
echo $numeros;
?>

Descargar
Ejecutar

Operador de concatenacin

Usando el smbolo . concatenamos cadenas

?
1

<?php

$nombre = 'Jorge';

$apellido = 'Perez';

//Concatena nombre y apellido m'as un espacio

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


?>

Descargar
Ejecutar

Operadores aritmticos

Los operadores aritmticos de PHP son similares a los de C, Java y


Javascript. Los smbolos +, -, /, * realizan operaciones de aritmtica bsica, el
smbolo % obtiene el resto de una divisin (mdulo).

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

Operador

Ejemplo

Resultado

Negacin

-$var1

-10

Suma

$var1 + $var2

15

Operador

Ejemplo

Resultado

Resta

$var1 - $var2

Multiplicacin

$var1 * $var2

50

Divisin

$var1 / $var2

Mdulo

$var1 % $var2

Ejemplo: Uso de los operadores aritmticos

?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 Aritmticos</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>';

echo $tabla';
} else { echo "<p class='centrado'>Divisin por cero</p>";}
} else { echo "<p

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

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

>

Descargar
Ejecutar

Operadores abreviados o combinados

Una forma habitual de modificar el contenido de las variables es mediante los


operadores combinados. La siguiente tabla resume los operadores de
asignacin combinados
Operador

Ejemplo

Descripcin

+=

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

Ejemplo: Tabla multiplicar usando +=

cadenas

$variable

ST['enviar'];

T['tabla'];

iar) && $_SERVER["REQUEST_METHOD"] == "POST" ) {

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

Operadores Abreviados o Combinados";

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

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

ulo;
0;

>";

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

<td>".$i."</td><td>*</td><td>".$tabla."</td>";
+= $tabla;

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

e>";

['enviar']);

['tabla']);

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

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

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

Descargar
Ejecutar

Operadores de incremento - decremento

PHP ofrece soporte de operadores de pre- y post- (incremento o decremento),


estilo del lenguaje C y Java. Los smbolos ++ y -- aplicados a una variable,
permiten incrementar o decrementar su valor. Su efecto es distinto segn se
empleen precediendo o siguiendo el nombre de la variable.

Operador

Ejemplo

Efecto

Pre-incremento

++$a

Incrementa $a en uno y despus devuelve a.

Post-incremento

$a++

Devuelve $a y despus incrementa $a en uno.

Pre-decremento

--$a

Decrece el valor de $a en uno y despus devuelve $a.

Post-decremento

$a--

Devuelve $a y despus decrece su valor en uno.

Ejemplo: Operadores de Post y Pre incremento -- decremento

Los operadores de incremento/decremento no afectan a los valores


booleanos.

Decrementar valores NULL tampoco tiene efecto, aunque al incrementarlos


su resultado es 1.
Pruebe introducir una letra que sucede

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>";
$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 informacin asi no puedes ejecutar</p>";}
echo "<p class='centrado'><a href='0304Operadores06.html'>";
echo "<img src='../../images/icon-home.gif' /><br />Regresar</a></p>";

>

Descargar
Ejecutar

Operadores de Comparacin.

Los operadores de comparacin, como su nombre indica, permiten comparar


dos valores.

Operador
Igualdad

Ejemplo
$a == $b

Cierto si:
$a es igual a $b.

Operador
Identidad

Ejemplo

Cierto si:

$a === $b

$a es igual a $b y adems son del mismo tipo

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

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.

Desigualdad

Ejemplo: Operadores de comparacin

?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 Comparacin</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>";
$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 informacin as no puedes ejecutar</p>";}
echo "<a href='0304Operadores07.html'><img src='../../images/icon-home.gif' ";
echo " /><br />Regresar</a></div>";

>

Descargar
Ejecutar

Otro operador condicional es el operador "?:" (o ternario), que funciona como


en C, Java y otros muchos lenguajes:

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

La expresin toma el valor expr2 si expr1 se


expr3 si expr1 se evala a falso.

Operadores Lgicos

evala

cierto,

Los operadores lgicos o booleanos se utilizan conjuntamente con expresiones


que devuelven valores lgicos. Con ellos es posible combinar condiciones y
evaluarlas en una sola expresin. La sintaxis de estos operadores es la
siguiente:

Operador
&&

Ejemplo

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: Clasificacin de huracanes segn 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>";

$fila

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

$efecto =

//construyendo la ltima fila

damages($categoria);

$fila

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

$fila

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

echo $fila;
} else {
echo "<p align='center'>Falta informacin as no puedes ejecutar</p>";
}

>

Descargar
Ejecutar

Operador de ejecucin

PHP soporta un operador de ejecucin: el apstrofe invertido (``). PHP intentar


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

Ejemplo: Operador de ejecucin

La lnea 2 carga la configuracin del servidor web

La lnea 4 asigna a la variable entorno el contenido del subdirectorio

Es equivalente a la funcin shell_exec y por defecto est inhabilitado su uso si


php esta configurado para ejecutarse en safe_mode.

?
1

<?php

$entorno = `set`;

echo "$entorno";

$entorno = `ls -l`;

echo "$entorno";

?>

Precedencia de operadores

Cuando una expresin est formada por ms de un operador del mismo tipo,
PHP la evala de izquierda a derecha, pero cuando creamos expresiones que
utilizan ms de un operador diferente, no siempre evala estas expresiones de
la misma forma.

La precedencia de operadores especfica cmo se agrupan las expresiones


para ser evaluadas. La precedencia relativa de los operadores se puede
modificar mediante parntesis en las expresiones que se desea evaluar a
criterio del programador.

A continuacin se presenta en la tabla la precedencia de los operadores de


menor a mayor.

Asociatividad

Operadores

izquierda

izquierda

or

izquierda

xor

izquierda

and

derecha

print

izquierda

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

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 cdigos dependiendo de


condiciones. La evaluacin de dichas condiciones retorna uno de dos
valores verdadero o falso. Para PHP el 0 es equivalente a falso y cualquier
otro nmero es verdadero.

if...else
La sentencia if...else permite ejecutar un bloque de instrucciones si la
condicin es verdadera y otro bloque de instrucciones si sta es falsa. Es
importante tener en cuenta que la condicin que evaluemos ha de estar
encerrada entre parntesis (esto es aplicable a todas la sentencias de control).
?
1
2
3
4
5

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

Ejemplo: Determinar si n es par o impar

El vector $_POST recupera los datos del formulario (Lneas 2 y 3).

La funcion isset determinan si la variable tomo valor (Lneas 4 y 5)

Note que en la lnea 6 se usa el operador == para comparar.


?

'];

_SERVER['REQUEST_METHOD'] == 'POST' ){

) {
s par";
n es impar";
enter'>".$cadena."</div><br />";

'>
nciasControl01.html'>
ages/icon-<span class="e2507h48" id="e2507h48_6">home</span>.gif' /><br />Regresar</a></p>

="e2507h48" id="e2507h48_4">id</span>='forma' name='forma' method='post' action='0305SentenciasControl

impar</legend>
'n'>n</label>
ext" name="n" id="n" /></p>
e="submit" name="enviar" id="enviar" value="Enviar" /></p>

Descargar
Ejecutar

Ejemplo: Construir un programa que capture un deporte y despliegue dos


implementos deportivos apropiados.

isset es una funcin PHP que regresa verdadero si una variable tomo
valor

$_SERVER['REQUEST_METHOD'] mtodo de peticin se us para


acceder a la pgina
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'>Bisbol</option>
<option value='futbol'>Ftbol</option>
</select></p>
<p><input type='submit' name='enviar' id='enviar' value='Enviar' /></p>
</fieldset>
</form>
}

<?

>

Descargar
Ejecutar

Existe una forma sencilla de usar la sentencia if cuando no tenemos que usar
el else y solo tenenemos que ejecutar una lnea de cdigo.
?
1
2

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

Ejemplo: Clculo del rea y permetro de un tringulo dados sus lados,


mediante la formula de Hern. Note que si el radical de rea es negativo, los
lados proporcionados no forman un tringulo

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 tringulo'."<br />";
} else {
$resultado = "<strong>rea = </strong>".sqrt($radical)."<br />";
$resultado .= "<strong>Permetro </strong>= ".$perimetro."<br />";
echo "<p class='centrado'>".$resultado."</p>";
}
?>
<p class='centrado'>
<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 permetro de un tringulo</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>
<?
}

>

Descargar
Ejecutar

switch...case...default
Una alternativa a if...elseif...else, es la sentencia switch, la cual evala y
compara cada expresin de la sentencia case con la expresin que evaluamos,
si llegamos al final de la lista de case y no encontramos condicin verdadera,
ejecuta el cdigo de bloque que haya en la sentenciadefault.

Si encontramos una condicin verdadera debemos ejecutar un break para que


la sentencia switch no siga buscando en la lista de case.
Ejemplo: El siguiente cdigo imprime el da de la semana actual.

Las lneas 3 al 13 describen un vector asociativo para representar el


nombre largo en espaol del da.

La funcin DATE maneja diversos parmetros como se obtienen el da de


la semana abreviado en ingls (Lnea 12).

Observe que la sentencia break evita que la ejecucin del cdigo continue
evaluando

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

<?php
function diaSemana(){
$semanaArray = array(
'Mon' => 'Lunes',
'Tue' => 'Martes',
'Wed' => 'Miercoles',
'Thu' => 'Jueves',
'Fri' => 'Viernes',
'Sat' => 'Sbado',
'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 'Sbado': echo 'Hoy es Sbado'; break;
case 'Domingo': echo 'Hoy es Domingo'; break;
default: echo 'Esa cadena no corresponde a ningn da de la semana';
}

?>

Descargar
Ejecutar

A continuacin se presenta un cdigo donde no se evalua una variable, lo que


se efectua es una evaluacin de expresiones. Usaremos nuevamente el
ejemplo de los huracanes.

La funcin mt_rand(119,400) genera valores aleatorios entre 119 y 400

(Linea 32)
switch (true) permitir que siempre se evalue la expresin a cierto o falso
segn sea el caso (Lnea 34)

?php
function damages($i) {
$damage = array();
$damage[1] = 'No dao efectivo a edificios <br/> Daos 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 cientficos que la desarrollaron</p></br>
<div class='centrar'>
<p>Categora 1: de 119 a 153 km/h.</p>
<p>Categora 2: de 154 a 177 km/h.</p>
<p>Categora 3: de 178 a 209 km/h.</p>
<p>Categora 4: de 210 a 249 km/h.</p>
<p>Categora 5: 250 km/h o ms</p>
</div>
<table>
<thead>
<tr>
<th>Velocidad</th>
<th>Categora</th>
<th>Daos</th>
<th>Imagen</th>
</tr>
</thead>
<?
}
$velocidad = mt_rand(119,400);
echo mensaje($velocidad);
switch (true) {
case ($velocidad >= 119) && ($velocidad <= 153): $categoria
case ($velocidad >= 154) && ($velocidad <= 177): $categoria
case ($velocidad >= 178) && ($velocidad <= 209): $categoria
case ($velocidad >= 210) && ($velocidad <= 249): $categoria
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);

=
=
=
=

1;
2;
3;
4;

break;
break;
break;
break;

>

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

Descargar
Ejecutar

Estructuras de control repetitivas/interactivas


A menudo es necesario ejecutar una instruccin o un bloque de instrucciones
ms de una vez

Ejemplo:

for

El bucle for resulta muy til cuando debemos ejecutar un bloque de


cdigo a condicin de que una variable se encuentre entre un valor mnimo y
otro mximo. El bucle for se puede romper mediante la sentencia break.

Ejemplo:
?
1
2
3
4
5
6
7
8
9

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

Ejemplo: Calcular una tabla multiplicar. La seleccin de la tabla se hace


mediante la generacin de un nmero aleatorio.
?
1
2
3
4
5
6
7
8
9
10
11
12

<?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>';
?>

Descargar
Ejecutar

while

La sentencia while ejecuta un bloque de cdigo mientras se cumpla una


determinada condicin. Podemos romper un bucle while utilizando la
sentencia break.

El siguiente cdigo dado por la formula abajo mencionada, calcula el factorial


de n. El valor de n debe ser menor o igual a 69 por el tipo de variables que
maneja PHP.

La funcin number_format nos permite formatear los nmeros con


comas para separar los miles (Lnea 15)

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

<?

>

Descargar
Ejecutar

El cdigo 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 cdigo y despus se evala la condicin, por lo que el
bloque de cdigo se ejecuta siempre al menos una vez.
Ejemplo: Calcularemos el factorial de n con la sentencia do while
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>
</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>
<?
}

?>

Descargar
Ejecutar

El usar while, do while o for es principalmente cuestin 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:
Por ejemplo: La tabla general de la Jornada 17 del Torneo Bicentenario 2010
FEMEXFUT.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

<?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['Amrica'] = 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>";
?>

Descargar
Ejecutar

3.6. Arreglos

Una arreglo (array) es una estructura de datos que contienen una coleccin 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).

Los elementos del array se acceden a travs de la posicin que ocupan


dentro del conjunto de elementos del arreglo. El primer elemento es la posicin
cero.

El tamao del array se establece cuando creamos el arreglo, pero este


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

Los elementos del arreglo pueden tener diferentes tipos de datos.

Denominamos vector a los array unidimensionales y matrices a los array


bidimensionales. Si bien es posible definir matrices de ms de dos dimensiones
despus de casi tres decadas programando jams necesite una. Los array se
clasifican segn su naturaleza en indexadas oasociativas.

Array indexados

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


$estaciones = array ('primavera', 'verano', 'otoo', 'invierno');
$sentidos = array ('gusto', 'oido', 'olfato', 'tacto', 'vista');
$numeros = array(1,2,30, 50, 60, 70);

Para acceder un elemento del arreglo usaremos la notacin genrica:

$estaciones[$i];
$sentidos[$i];
$numeros[$i];

Como ndice podemos usar un nmero, una variable o constante que


represente el elemento referenciando. Iniciando desde la posicin cero.
Ejemplo:Se declara un arreglo denominado $estacion. El cual se recorre
mediante un ciclo for.
?
1
2
3
4
5
6

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

Descargar
Ejecutar
Los
arrays
se
ordenan
usando
las
funciones asort(), arsort(), ksort(), rsort(), sort(), uasort() y uksort() segn el
tipo de ordenacin.
Ejemplo: Generar un vector aleatorio de tamao n y ordenarlo.

Usamos la funcin mt_rand para generar nmeros aleatorios


El mtodo sort ordena los valores del vector de menor a mayor

?php
$n
= $_POST['n'];
if( isset($_POST['enviar']) && $_SERVER['REQUEST_METHOD'] == 'POST' &&
($n > 0 && $n < 200000)) {
for($i = 0; $i <= $n; $i++) { // Genera un vector de tamao n
$vector[$i] = mt_rand(1, 1000); //mt_rand genera nmeros aleatorios

}
sort($vector); // Ordena el vector
//Imprime el Vector ordenado
for($i = 0; $i <= $n; $i++) {
echo $vector[$i].' ';
}
?>
<p class='centrado'>
<a href='0306Vector.php'>
<img src='../../images/icon-home.gif' /><br />Home
</a>
</p>
<?
} else {
?>
<form id='forma' name='forma' method='post' action='0306Vector.php'>
<fieldset>
<legend>Ordenar un vector</legend>
<p><label for='n'>n</label>
<input alt='Nmero de elementos del vector' id='n' name='n'
title='Nmero de elementos del vector' type='text' />
</p>
<p><input id='enviar' name='enviar' type='submit' value='Enviar' /></p>
</fieldset>
</form>
<?
}

>

Descargar
Ejecutar

Otra funcin interesante es count que cuenta el nmero de elementos de un


arreglo.

Ejemplo. Considere las temperaturas mximas registradas en la ciudad de


Veracruz durante el mes de febrero del 2010.
?
1
2
3
4
5
6

<?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];

7
8
9
10
11
12
13
14

$promedio = $promedio/$n;
$maximo = $temperatura[$n - 1];
echo "Temperatura mnima = $temperatura[0] <br />";
echo "Temperatura media = $promedio <br />";
echo "<span class="e2507h48" id="e2507h48_2">Temperatura mxima</span> = $maxi

?>

Descargar
Ejecutar

Ejemplo: Obtener los archivos de un directorio ordenados alfabticamente.

En la lnea 3 se establece un apuntador al directorio indicado mediante la

funcin opendir
La lnea 4 realiza un ciclo, en el cual la funcin readdir lee uno a uno los

archivos del subdirectorio


La lnea 5 asigna el archivo a una posicin del vector

La funcin closedir en la lnea 7 cierra el apuntador


La funcin sort() lnea 8 ordenada el vector de menor a mayor
El sentencia de control foreach recorre el vector

?
1
2
3
4
5
6
7
8
9
10
11
12

<?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 />";
};
?>

Descargar
Ejecutar

Ejemplo: Funciones bsicas en arreglos

En la lnea 2 se declara un array numrico.

Las lneas 3, 9, 14, 20 imprimen el contenido del arreglo mediante la

funcin print_r.
La funcin count cuenta el nmero de elementos del array (Lneas 4, 6,

11, 16, 21).


En la lnea 8 se borra uno a uno el contenido del array ( unset)
En las lneas 14 y 19 se agregan valores en la siguiente posicin del vector.

En

la

lnea

18

se

restablecen

los

ndices

mediante

la

funcin array_values.

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

<?php
$array = array(1, 2, 3, 4, 5,70,90); // Creamos un array simple.
print_r($array); // Imprimimos el array
echo "<br />Nmero de elementos en el array: ".count($array)."<br />";
// ahora borraremos los items pero el apuntador del array quedar intacto:
$n = count($array);
for($i = 0; $i <= $n; $i++) {
unset($array[$i]);
}
print_r($array);
echo "<br />Nmero 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 />Nmero de elementos en el array: ".count($array)."<br />";
// Re-index:
$array = array_values($array);
$array[] = 57;
print_r($array);
echo "<br />Nmero de elementos en el array: ".count($array)."<br />";

?>

Descargar
Ejecutar

Funcin range
Crea un vector que contiene una secuencia de elementos. Sintaxis

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

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


inclusive. Si inicial > final, la secuencia ser del mayor al menor.
Si recibe como parmetro incremento, ste ser usado como el
incremento entre elementos en la secuencia.
incremento es
un
nmero
positivo.
Si
no
se
especifica, incremento tendr un valor predeterminado de 1.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

<?php
echo "<h1>Uso de range</h1><br />";
echo "Vector simple<br />";
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 />";
}
?>

Descargar
Ejecutar

Arrays asociativos

Un array esta formado por conjuntos de parejas ndice => valor, o como suele
expresarse en ingls, key, value. Los cuales se expresan comunmente con
ndices o keys numricos (tambin conocidos como arrays escalares). Adems
es posible usar strings como ndices, es decir, cadenas de texto. Este tipo de
array es el array asociativo:

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

En la lnea 4 se declara un arreglo asociativo que contiene los nombres del


mes en espaol

En la lnea 11 se declara un arreglo asociativo que contiene los nombres


del da de la semana en espaol

En la lnea 18 se obtiene el nmero del da del mes

El ao se obtiene en la lnea 19

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

>

Descargar
Ejecutar

Recorrer una tabla con ndices numricos mediante un bucle es sencillo, pero
cmo recorremos una tabla con ndices asociados? Para ello, utilizaremos
una serie de sentencias especificas para tal fin:

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

?
1
2
3
4
5
6
7
8
9

<?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 />";
}
?>

Descargar
Ejecutar

Matrices

Los arrays bidimensionales - matrices - similares a una tabla de doble entrada.


Cada uno de los elementos se identifica unvocamente por un nombre
($nombre) seguido de dos ([]) que contienen los ndices del array.
Los ndices pueden ser de tipo escalar - equivalen al nmero de fila y columna
que la celda ocupa en la tabla o puede ser asociativos lo que equivaldra en
alguna medida a usar como ndices los nombres de la fila y de la columna.
Los elementos de un 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 lneas 6 y 11 se controla el ndice rengln

En las lneas 7 y 12 se controla el ndice columna

mt_rand es una funcin PHP que genera nmeros aleatorios en este caso
entre 1 y 100.

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>";
}
$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>
<?
}

>

Descargar
Ejecutar

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 homlogos de las matrices
a sumar. Por ejemplo:

Mediante la funcin mt_rand que genera nmeros aleatorios llenamos la

matriz A y B
La sentencia $operacion*$matriz2[$i][$j] determina si se
realiza una suma o resta de matrices. $operacin toma los valores -1 y 1.

on imprimeMatriz($matriz, $r, $c, $mensaje) {


l = '<table class="simple"';
l .= '<tr><td>'.$mensaje.'</td></tr>';
$i = 0; $i < $r; $i++) {
$html .= '<tr>';
for($j = 0; $j < $c; $j++) {
$html .= '<td>'.$matriz[$i][$j].'</td>';
}
$html.= '</tr>';

l.= '</table><br />';


$html;

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


a1
= $_POST['f1'];
1
= $_POST['c1'];
a2
= $_POST['f2'];
2
= $_POST['c2'];
racion = $_POST['operacion'];

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'>
<img src='../../images/icon-home.gif' alt=''><br>Home
</a>
</p>
<?
se {
ho 'Las matrices no tienen las mismas dimensiones por lo que no se puede hacer la suma o resta';
{

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>

Descargar
Ejecutar
Ejemplo: Producto de matrices
El producto de dos matrices se puede definir slo si el nmero de columnas de
la matriz izquierda es el mismo que el nmero de filas de la matriz derecha.
Si A es una matriz mn y B es una matriz np, entonces su producto
matricial AB es la matriz mp (m filas, p columnas) dada por:

para cada par i y j.


Aplicacin:

?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>';
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>Multiplicacin de Matrices</legend>
<p>Dimensin 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>Dimensin para la Matriz B</p>
<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>
<?
}

>

Descargar
Ejecutar

Ejemplo: Una rocola bsica

En las lneas 2 al 10 se declara una matriz bidimensional asociativa

llamada Salseros
Mediante la instruccin foreach recorremos dicha matriz que obtiene un

vector denominado cantante (Lnea 22)


La extraccin del vector cancion en la lnea 25 nos permite tomar la musica
en nuestro caso la primera columna es el nombre del artista y el resto de las
posibles sern las canciones a reproducir

Si bien el programa no tiene errores de lgica, su uso no es ptimo y su


optimizacin ser tema de otro apartado
Ads not by this site

?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>Cancin 1</th>
<th>Cancin 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;

?>

Descargar
Ejecutar

3.7. Funciones
Una funcin es el trmino para describir una secuencia de rdenes que hacen
una tarea especfica de una aplicacin ms grande.
Una funcin de usuario en PHP no es ms que una porcin de cdigo que
podemos llamar en cualquier momento. De un lado, al dividir nuestro cdigo en
funciones podemos aislar y perfeccionar cada una de sus funcionalidades; de
otro lado, podemos reutilizar este cdigo, ya que una funcin puede
ser llamada cuantas veces la necesitemos.
Para definir una funcin debemos usar la palabra reservada function. Para
llamar la funcin basta con invocar su nombre.

Las declaraciones de funciones generalmente son especificadas por:

Nombre de la funcin con el que se identifica y se distingue de otras. No


podr haber otra funcin, ni procedimiento con ese nombre (salvo sobrecarga o
polimorfismo en programacin orientada a objetos).

Un tipo de dato de retorno. Tipo de dato del valor que la funcin devolver

al terminar su ejecucin.
Una lista de parmetros. Especificacin del conjunto de argumentos
(pueden ser cero, uno o ms) que la funcin debe recibir para realizar su tarea.

El cdigo u rdenes de procesamiento. Conjunto de rdenes y sentencias


que debe ejecutar la funcin.

La sintaxis de una funcin es la siguiente:


?
1
2
3

<span class="style3">function</span> nombreFuncion(arg1, arg2,... argn) {


//cuerpo de la funcin
}

Ejemplo: Conventir grados centgrados a grados Fahrenheit.

En las lneas 2 al 4 se hace la declaracin de la funcin

La palabra reservada return regresa el valor de la funcin lnea 3

En la lnea 11 se hace un llamado a la funcin cF pasandole como


parmetro una variable

$_POST['centigrados'];
isset($_POST['convertir']) && $_SERVER["REQUEST_METHOD"] == "POST" && !empty($g) ) {
unction cF( $grados ){
return 1.8 * $grados + 32;

cho "<p class='centrado'>$g grados centigrados equivalen a ".cF($g)." grados Fahrenheit</p>";


nset($_POST['centigrados']);
>
<p class='centrado'>
<a href='0307Centigrados.php'><img src='../../images/calcular.gif' alt=''>Home</a>
</p>

se {
>
<form id='forma' name='forma' method='POST' action='0307Centigrados.php'>
<fieldset>
<legend>Grados centgrados a grados Fahrenheit</legend>
<p>
<label for='centigrados'>Centgrados</label>
<input alt='Grados centgrados' name='centigrados' maxlength='3'
title='Grados centgrados' size='3' type='text' />
</p>
<p class='centrado'>
<input name='convertir' type='submit' value='Convertir' />
</p>
</fieldset>

</form>

Descargar
Ejecutar

PHP no distingue entre maysculas y minsculas al nombrar las funciones, asi


que cF sera lo mismo que CF, aunque es buena prctica ser consistente en la
forma de escribir los nombres. Como curiosidad, podrs observar que en los
mensajes de error, PHP siempre designa tus funciones en minscula.

Los parntesis permiten pasar valores a las funciones (parmetros),


son siempre necesarios, aunque no pases valor alguno

Una funcin puede retornar ms de un valor, si lo regresamos como un arreglo


y lo asignamos mediante la funcin de PHP list.

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


Rankine.

La lnea 6 regresa un array de valores


Mediante la funcin list se recuperan los valores del array en variables

?php
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 centgrados 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>Conversin de temperaturas</legend>
<p>
<label for='grados'>Grados</label>
<input alt='Grados' maxlength='3' name='grados' size='3' type='text'
title='Grados' />
</p>
<p class='centrado'>
<input alt='' name='convertir' type='submit' value='Convertir' />
</p>
</fieldset>
</form>
<?
}

>

Descargar
Ejecutar

Paso de parmetros por referencia


Hasta el momento usamos parmetros por valor. Si queremos pasar nuestras
variables por referencia - de tal manera que los cambios en
los argumentos persistan - es necesario anteponer al argumento
o parmetro el smbolo "&".
Ejemplo: Considere el clculo del rea y volumen de una esfera en funcin de
su radio mediante las siguientes formulas;

En la lnea 4 al 7 se declara una funcin con parmetros por referencia.


Observe que los parmetros por referencia se denotan anteponiendo un & al $.
La lnea 5 usa la funcin predifinida pi() que no necesita explicacin
Observe que la funcin no regresa valores, pero aun as las variables rea
y volumen tomaron valor. Esto es porque fueron declaradas como parmetros
por referencia.

La funcin PHP number_format (Lneas 14 y 15) da formato a un


parmetro numrico con separador de miles y decimales
Ads not by this site

dio = $_POST['radio'];
isset($_POST['calcular']) && $_SERVER['REQUEST_METHOD'] == 'POST' && $radio >0) {
unction calculo( $radio, &$area, &$volumen ){
$area = 4 * pi() * $radio * $radio;
$volumen = $area * $radio /3;

formato = "<p class='centrado'>";


area = 0;
volumen = 0;
alculo($radio, $area, $volumen);
cho "$formato Sea una esfera cuyo radio es $radio metros</p>";
cho "$formato tiene un rea de ".number_format($area,2,'.',',')." metros<sup>2</sup></p>";
cho "$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>
?
lse {
?>
<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>

<?

Descargar
Ejecutar

Se puede proporcionar un valor por defecto para la funcin, que se aplicar


salvo que especfique otro al llamarla.

Ejemplo: Convertir de yardas a metros

En las lneas 2 al 4 declara la funcin yardas_metros cuyo parmetro


por defecto es 1
$y = yardas_metros() hace una llamada a la funcin sin parmetros
$m = yardas_metros($yardas) hace una llamada a la funcin con
parmetros

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

Descargar
Ejecutar

Cuando la funcin necesite varios valores y sea necesario fijar un valor


por defecto, debe ser el ltimo de los parmetros enviados. Esto implica un
cuidadoso diseo, ya que al pasar los valores a una funcin 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 nmero natural n, se llama n factorial o factorial de n al


producto de todos los naturales desde 1 hasta n. Es decir:

Se define 0! = 1, para que la relacin n! = n (n - 1)! sea tambin vlida para n


= 1. Esta relacin permite definir los factoriales por recursividad. La notacin n!
fue popularizada por el matemtico francs Christian Kramp.

?php
$n = $_POST['n'];
$forma = "<p class='centrado'>";
if( isset($_POST['calcular'])
and $_SERVER["REQUEST_METHOD"] == 'POST'
and !empty($n) && ($n >= 0 and $n <= 69)) {
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>Clculo del factorial de n</legend>
<p>
<label for='n'>n</label>
<input alt='Ingrese un nmero' maxlength='2' name='n' size='2' type='text' />
</p>
<p>
<input name='calcular' type='submit' value='Calcular' />
</p>
</fieldset>
</form>
<?
}
>

Descargar
Ejecutar

Ejemplo: Determinar si un nmero es primo, par o impar.

Cero y uno es un nmero primo y par

Dos es primo y par

abs calcula el valor absoluto de un nmero

sqrt obtiene la raz cuadrada de un nmero

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

$multiplo = floor(sqrt($n)) = Mximo entero que puede dividir exactamente


a un nmero
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>Clculo de un nmero primo</legend>
<p>
<label for='n'>n</label>
<input name='n' type='text' id ='n' size='6' maxlength='6' />
</p>

<p>
<input
</p>
</fieldset>
</form>
}

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

<?

>

Descargar
Ejecutar

Ejemplo: Mximo comn divisor.


En matemticas el mximo comn divisor (abreviado mcd) de dos nmeros
enteros es el mayor nmero que los divide sin dejar resto. El mtodo 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>Mximo comn 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' />
</p>
<p>
<input maxlength='2' name='calcular' size='2' type='submit' value='Calcular' />
</p>
</fieldset>
</form>
<?
}

>

Descargar
Ejecutar

Ejemplo: Mnimo comn mltiplo

El mnimo comn mltiplo (m.c.m.) de dos nmeros naturales es el menor


nmero natural que es mltiplo de todos ellos. Slo se aplica con nmeros
naturales, es decir, no se usan decimales ni nmeros negativos.

Conociendo el mximo comn divisor de dos nmeros, se puede calcular el


mnimo comn mltiplo de ellos, que ser el producto de ambos dividido entre
su mximo comn divisor.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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

<?php
function mcd($a, $b) {
if ($b == 0) $resultado = $a;
else $resultado = mcd($b, $a%$b);
return $resultado;
} //mcd
function mcm($a, $b) {
$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>Mnimo comn mltiplo</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>
<?
}
?>

42
43
44
45
46
47
48
Descargar
Ejecutar
Ejemplo de aplicacin: Suma, resta, multiplicacin y divisin de quebrados

Suma o Resta

Multiplicacin

Divisin

Reducir

Fracciones

function sumaResta($n1, $d1, $n2, $d2, $signo) {


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

Ejemplo: La constante matemtica e

Es uno de los ms importantes nmeros reales. El logaritmo en base e se llama


logaritmo natural o neperiano. El nmero e, conocido a veces como nmero de
Euler o constante de Napier fue reconocido y utilizado por primera vez por el
matemtico escocs John Napier, quien introdujo el concepto de logaritmo en
el clculo matemtico.
El nmero e, al igual que el nmero , es un nmero trascendente, es decir,
que no puede ser obtenido directamente mediante la resolucin de una
ecuacin algebraica. Por lo tanto, es un irracional y su valor exacto no puede
ser expresado como un nmero finito de cifras decimales o con decimales
peridicos. Su valor aproximado (truncado) es dado por la funcin

El cdigo PHP para calcular el nmero de Euler esta dado por:

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

<?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 'Nmero de Euler o constante de Napier = '.$e
?>

Descargar
Ejecutar

Ejemplo: Mediante una serie de Taylor podemos calcular muchas funciones


importantes. Como por ejemplo la funcin exponencial dada por:

Un cdigo depurado se presenta a continuacin. El cual es ms eficiente al no


tener que calcular cada factorial.

Ads not by this site

?php
function exponencial($x = 0) {
//mximo error permitido
$error = 0.000000000001;
if ($x != 0) { $e = 1;} else return 0;
$anterior = 0;
$i = 0;
$f = 1;
//Aproximacin
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 nmero' maxlength='2' name='e' size='2' type='text' />
</p>
<p>
<input name='calcular' type='submit' value='Calcular' />

<?

</p>
</fieldset>
</form>

>

Descargar
Ejecutar

3.8 Formularios

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

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

El atributo "method" define cmo la informacin de un formulario es enviada al


navegador. Existen dos valores posibles para este atributo (insensibles a
maysculas/minsculas):

get: Los datos del formulario son agregados a la URL definida en el


atributo "action" (por ejemplo, pagina.php?pnombre=jorge&papellido=perez
post: Los datos del formulario son agregados al cuerpo del formulario.

target

Este parmetro indica dnde debe mostrarse esa informacin. Puede tomar los
valores:

_self : en este mismo marco o ventana.


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

visualizando (si no utilizamos marcos en nuestra pgina (FRAMESET)


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

id

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

name

Este atributo da nombre al elemento de modo que se pueda hacer referencia a


l desde hojas de estilo o scripts. Sirve para referenciar elementos del mismo
tipo. Por ejemplo la raza de un perro que identifica animales con caractersticas
iguales.

Ejemplo: El ndice de masa corporal (IMC) es una medida de asociacin entre


el peso y la talla de un individuo. Ideado por el estadstico belga
L. A. J. Quetelet, tambin se conoce como ndice de Quetelet. Se calcula
segn la expresin matemtica:

El valor obtenido vara con la edad y el sexo. Tambin depende de otros


factores, como las proporciones de tejidos muscular y adiposo. En el caso de
los adultos se ha utilizado como uno de los recursos para evaluar su estado
nutricional, de acuerdo con los valores propuestos por la Organizacin Mundial
de la Salud.

?php
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>";
$html .= "<tr><td><strong>Valoracin</strong></td><td>".valoracion($imc);
$html .= "</td><td></td></tr></table>";
return $html."<br />";
}

$calcular = $_POST['calcular'];
if( isset($calcular) and $_SERVER['REQUEST_METHOD'] == 'POST' ) {
$peso

= $_POST['peso'];

$altura =

$_POST['altura'];

if(!empty($peso) and !empty($altura)) { //checamos si $peso y $estatura tomaron valor


$html = resultado($peso, $altura, imc($peso, $altura));

} else {
$html =

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

}
echo "<p class='centrado'>".$html."</p>";
?>
<p class='centrado'>
<a href='0308IMC.php'><img src='../../images/icon-home.gif' /><br />Home</a>
</p>
<?
} else {
?>
<form name='forma' method='post' action='0308IMC.php'>
<fieldset>
<legend>ndice de masa corporal</legend>
<p>
<label for='peso'>Peso</label>
<input name='peso' type='text' alt='Peso en kilogramos' /> Kg
</p>
<p>
<label for='altura'>Altura</label>
<input name='altura' type='text' alt='Altura en metros' /> mts
</p>
<p>
<input type='submit' name='calcular' value='Calcular' id='calcular' />
</p>
</fieldset>
</form>
<?

>

Descargar
Ejecutar

Ejemplo: Consideremos la ecuacin cuadrtica general ax 2 + bx + c = 0.

Se puede resolver la ecuacin mediante la expresin:

Analizando la raz cuadrada, se llega a las siguientes conclusiones:

Al trmino b2 4ac se le llama discriminante.

Si b2 es menor que 4ac los resultados de X sern dos valores con parte

real y parte imaginaria. Es decir, el resultado ser un nmero 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.

La solucin en cdigo PHP se presenta a continuacin tanto para nmeros


reales como complejos.

?
1

<?php

$calcular = $_POST['calcular'];

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

4
5
6
7
8
9
10

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

11

$raiz = sqrt($descriminante);

12

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

13

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

14

} else {

15

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

16

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

17

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

18

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

19
20
21
22
23

}
echo "<p class='centrado'>x1 = ".$x1."</p>";
echo "<p class='centrado'>x2 = ".$x2."</p>";
} else echo "<p class='centrado'>No es una cuadrtica</p>";
} else echo "<br /><p class='centrado'>Faltan datos</p>";

24
25

} else {

26

?>

27

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

28

<fieldset>

29

<legend>Formula general</legend>

30

<p>

31

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

32

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


</p>

33

<p>

34

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

35

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

36

</p>

37

<p>

38

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

39

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

40

</p>

41

<p class='centrado'>

42

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

43

</p>

44

</fieldset>

45

</form>
<?

46
}

47
48

?>

49
Descargar
Ejecutar

Ejemplo: A continuacin se desarrolla una calculadora bsica en PHP. Se


recupera la informacin del archivo html mediante $_POST (lneas 5, 6 y 7) el
valor recuperado se logra al invocar como parmetro el id del componente.

?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;
}
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 bsica</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>
<?
}

>

Descargar
Ejecutar

3.9. Ejemplos PHP

Redireccionamiento de los visitantes a las pginas especficas en su


idioma.

Conocer los idiomas seleccionados en el navegador de nuestros


visitantes puede ser un dato muy importante que puede utilizar para redirigir al
usuario a una pgina especfica en el idioma correspondiente, o bien para
mostrar informacin especfica dirigida al usuario (como por ejemplo el anuncio
ms adecuado)
Si deseamos que nuestro sitio sea bilinge en ingls y espaol, bajo el
supuesto que el espaol y el ingls son los dos idiomas ms utilizado por
nuestros visitantes (nuestro idioma por defecto ser espaol).
?
1
2
3
4
5
6
7

<?

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

?>

Imprimir fecha y hora del sistema


?
1
2
3
4
5
6
7

<html>
<body>
La fecha del da 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 mtodo recibimos el formulario en PHP usamos la
variable de servidor $_SERVER['REQUEST_METHOD']. El siguiente cdigo
muestra su uso.
?
1
2
3
4
5
6
7

<?php
if ($_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 funcim trim elimina los espacios en blanco de la cadena. Observe que

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

?
1
2
3
4
5
6
7
8
9
10

<?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 vaca</p>";

11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

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

Descargar
Ejecutar

Clculo de reas y permetros

El
programa
principal
realiza
una
interfase
bsica
para
manejar multiples formularios en un mismos archivo. El procesamiento con
PHP permite capturar las diferentes caractersticas de las figuras geomtricas.

El componente hidden permite manejar el tipo de figura para el clculo de


rea y permetro.
?

?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>Clculo del rea y permetro de un cuadrado</legend>
<p>
<label for='lado'>Lado</label>
<input name='lado' type='text' />
</p>
<p class='centrado'>
<input type='submit' name='calcular' id='calcular' value='Calcular' />
</p>
<input name='figura' type='hidden' value='Cuadrado' />
</fieldset>
</form>
<?
} else if($cuerpo == "circulo") {
?>
<?
} else {
?>
<?
}
} else {
?>
<form name='forma' method='post' action='0309Figuras.php'>
<fieldset>
<legend>Clculo rea y permetro figuras geomtricas</legend>
<p>
<label for='cuerpo'>Figura</label>
<select name='cuerpo'>
<option value='circulo'>Circulo</option>
<option value='cuadrado'>Cuadrado</option>
<option value='rectangulo'>Rectngulo</option>
</select>
</p>
<p>
<input name='calcular' type='submit' value='Calcular' />
</p>
</fieldset>
</form>
<?
}

>

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

p
figura= $_POST['figura'];
f($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 Rectngulo de base = $base y altura = $altura es ";
$resultado .= "de $area unidades cuadradas ";
else {
$radio
= $_POST['radio'];
$area
= number_format(pi() * $radio * $radio, 2, '.', ',');
$perimetro = number_format(2 * $radio* pi(), 2, '.', ',');
$resultado = "El rea de un Circulo de radio = $radio es de $area unidades cuadradas ";

cho "<p class='centrado'>$resultado</p>";


cho "<p class='centrado'>con un permetro de $perimetro unidades</p><br />";

Descargar
Ejecutar

Envio de correos

Enviar correos mediante PHP es sumamente sencillo si usamos la funcin mail


La funcin mail es: mail($destino, $asunto, $mensaje, $encabezado);

donde

$destino: es la direccin a donde se enviar el mensaje


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

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

>

Descargar
Ejecutar

Convertir nmeros arbigos a romanos.

Los nmeros romanos se escriben usando una serie de caracteres


alfanmericos. Los nmeros romanos validos tienen un rango entre 1 y 3,999.
Se presenta a continuacin la interfase y la solucin PHP.

La funcin principal es escribeRomanos la cual recibe como parmetro

un nmero arbigo. El cdigo proporcionado incluye una funcin


denominadaentero que verifica que la cadena a traducir sea un entero valido
entre 1 y 3,999.
En las lneas 2, 8, 13 y 20 se crean los vectores necesarios para
representar nmeros romanos (unidades, decenas, centenas y miles).

La funcin substr extrae subcadenas y se usa para ir traduciendo el


nmero arbigo a romano.
La funcin int convierte una cadena a nmero si lo es.

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

unction 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 "";}

unction 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); }

unction 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); }

unction 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'];
f( 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 nmeros Arbigos a Romanos PHP</legend>
<p>
<label for='numero'>Nmero</label>
<input maxlength='4' name='numero' size='4' type='text' />
</p>
<p class='centrado'>
<input name='enviar' type='submit' value='Aceptar' />
</p>
</fieldset>
</form>
<?

Descargar
Ejecutar

Convertir nmeros a letras

La funcin que se presenta a continuacin convierte nmeros a letras. El


nmero a convertir debe ser un entero positivo menor a 999,999, 999,999.

La lnea 3 (Editada para fines de presentacin) declara un array con la


representacin alfabtica de los nmeros comprendidos entre 1 y 29. Esta
caracterstica se debe a que dichos nmeros no siguen un patrn para su
escritura.

La lnea 11 declara un arreglo asociativo que contiene la conversin de los


nmeros 30, 40 ... y 90.

La lnea 14 obtiene el mdulo 10 de n.

Si el mdulo 10 de n es cero se regresa la posicin asociada a n en el


vector decenas(lnea 11)

Si el mdulo 10 de n es diferente de cero. Se regresa la posicin asociada


a n en el vector decenas y se hace un llamado a la funcin bsico.

La lnea 21 declara un arreglo asociativo para la representacin alfabtica


de los nmeros 100,200, ... y 900.

La lnea 30 hace uso de un operador ternario para poder manejar la


escritura de los nmeros comprendidos entre 101 y 199.

En la lnea 39 se obtiene la longitud de n. En el caso de los miles est


longitud vara entre 4 y 6.

substr($cadena, -3) obtiene los ltimos 3 caracteres de la cadena, lnea


41.

n basico($numero) {
alor = array ('uno','dos','tres','cuatro','cinco','seis','siete','ocho','nueve','diez',
'once','doce','trece','catorce','quince','diecisis','diecisiete',
'dieciocho','diecinueve','veinte','veintiuno','veintidos','ventitres',
'veinticuatro','veinticinco','veintisis','veintisiete','veintiocho','veintinueve');
turn $valor[$numero - 1];

tion decenas($n) {
ecenas = array (30=>'treinta',40=>'cuarenta',50=>'cincuenta',60=>'sesenta',
70=>'setenta',80=>'ochenta',90=>'noventa');
n <= 29) return basico($n);

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

ction centenas($n) {
cientos = array (100 =>'cien',200 =>'doscientos',300=>'trecientos',400=>'cuatrocientos',
500=>'quinientos',600=>'seiscientos',700=>'setecientos',800=>'ochocientos',
900 =>'novecientos');
f( $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);

ction 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);

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

ction 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);
}

rtir = $_POST['convertir'];
='';
set($convertir) && $_SERVER['REQUEST_METHOD'] == 'POST'
&& !empty($_POST['numero']) ) {
l = "<p class='centrado'>".$_POST['numero'].' se escribe ';
html .= "<strong>".ucfirst(convertir($_POST['numero']))."</strong></p><br />";
cho $html;

Descargar
Ejecutar

Grficos

La grfica es una de las herramientas ms tiles en el estudio de la mayora de


las disciplinas, ya que permite una visin de conjunto del fenmeno sometido a
investigacin, ms rpidamente perceptible que la observacin directa de los
datos numricos y alfanumricos. Sus aplicaciones son mltiples y variadas en
casi todo el quehacer humano.

Existen diversas libreras escritas para PHP gratuitas y de paga, su seleccin


depende del objetivo y el precio. En este punto abordaremos el uso
de JpGraph librera de uso libre completamente escrita en PHP y funcional para
scripts PHP. JpGraph es una librera orientada a objetos para PHP >= 5.1

Grfica X - Y

A continuacin se presentan las temperaturas (mnimo, media y mxima)


promedio en la ciudad y puerto de Veracruz, Ver. Mxico

En la lnea 2 y 3 se carga la librera JpGraph.

Las lneas 4, 5 y 6 se encargan de definir los datos mediante arreglos para


cada serie

En las lneas 7 al 13 se definen las caractersticas de las grficas. Donde


Graph( Ancho, Alto), crea un objeto de tipo grfica
En las lneas 15 al 17, se definen el eje X en este caso meses en espaol.

Las lneas 32 al 34, definen las series en la grfica

La lnea 24 agrega fsicamente las series a las grficas y la lnea 35


imprime la grfica.

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. Mxico');
$graph->xaxis->title->Set('Mes');
$gDateLocale->Set('spanish'); //Obtiene los meses del ao
$mes = $gDateLocale->GetShortMonth();
$graph->xaxis->SetTickLabels($mes);
//$graph->xaxis->SetFont(FF_ARIAL,FS_BOLD,8);
$graph->yaxis->title->Set('Grados centgrados');
//$graph->yaxis->SetFont(FF_ARIAL,FS_BOLD,8);
$tminimo = new LinePlot($minimo);
$tminimo->SetLegend('Mnimo');
$tminimo->SetColor('blue');
$tpromedio = new LinePlot($promedio);
$tpromedio->SetLegend('Promedio');
$tpromedio->SetColor('green');
$tmaximo = new LinePlot($maximo);
$tmaximo->SetColor('red');
$tmaximo->SetLegend('Mximo');
$graph->Add($tminimo);
$graph->Add($tpromedio);
$graph->Add($tmaximo);
$graph->Stroke();

>

Descargar
Ejecutar

Gfica de barras

El ejemplo describe los resultados oficiales del examen de admisin 2010 del
Instituto Tcnologico de Veracruz.

La lnea 11 se encarga de posicionar las leyendas de cada serie en nuestro


caso ingresos a primer semestre e ingresos al semestre cero.

La lnea 15 y 20 definen el formato de presentacin de los datos, en este


caso %0.0f indica que los valores se presentaran como enteros.
La propiedad SetFillGradient (lneas 16 y 21) configuran el degradado de los
colores en las barras
El mtodo Stroke nos permite mostrar la grfica (lnea 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);
$carreras = array('Admin', 'Bioqumica','Electrnica', 'Electrca','Industrial',
'Mecnica','Mecatrnica','Qumica','Sistemas');
$grafica = new Graph(650, 450);
// Crea la grfica
$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 grfica
$grafica->title->Set('Resultado oficial examen admisin I.T.V 2010');
$grafica->xaxis->title->Set('Carrera');
$grafica->xaxis->SetTickLabels($carreras);
$grafica->yaxis->title->Set('Nmero de aceptados');
$grafica->Stroke(); // Despliega la grfica

>

Descargar
Ejecutar

Grficas de pastel

Las grficas de pastel sirven para expresar porcentajes o conteos de variables


cualitativas (ordinales o nominales).

PiePlot crea una instancia de una grfica de pastel (lnea 5)

Las etiquetas se crean en la lnea 20 se definen las etiquetas de los datos y


su representacin (.1f) expresa un decimal.

?php
require_once ('jpgraph/jpgraph.php');
require_once ('jpgraph/jpgraph_pie.php');
$datos = array(16, 30); // Datos
$grafica = new PieGraph(600,400,'auto'); // Crear Grfico
$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 grfica
$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 grfica

Descargar
Ejecutar

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 ejecucin del
programa. La solucin computacional es almacenar dichos datos en una fuente
de almacenamiento secundario como por ejemplo un disco duro o pendrive
entre otros medios a fin de que persistan aun despus de la ejecucin del
programa que los crea y puedan ser usados inclusive por otros programas.
Para lograr esto los datos se almacenan en un recipiente llamado archivo, el
procesamiento de archivos es una herramienta invaluable de programacin.
Existen diversos tipos de archivos y su descripcin escapa del alcance de
este curso.

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 almacenar grficos y
diversos formatos de informacin. Bsicamente responden a las siguientes
operaciones bsicas:

abrir

borrar

cerrar

copiar

escribir

leer

renombrar

Desde las operaciones bsicas como copiar, mover y eliminar, hasta


operaciones que exigen una cierta complejidad son requeridas para la
configuracin de pginas Web.
Funcin

Descripcin

copy

Copia un archivo

rename

Cambia
el
nombre
de $antes a $despues

unlink

Borra el archivo

Sintaxis
copy($origen,
$destino)

del

archivo rename($antes,
$despues)
unlink($archivo)

Manejo de imagenes

A continuacin se presentan dos ejemplos, para mostrar la totalidad de las


imagenes de una carpeta.

Ejemplo:

La funcin PHP opendir() se encarga de habilitar una ruta a un


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

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

Descargar
Ejecutar

Ejemplo:

La funcin glob() realiza una bsqueda por todos los nombres de ruta que
coincidan con cierto patrn. En este caso con los grficos validos para html.
sort() ordena los nombres de los archivos encontrados.
el ciclo foreach recorre el arreglo de archivos.

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

Para el siguiente ejemplo usaremos 4 funciones bsicas de manipulacin de


archivos

Funcin

Descripcin

filesize

Obtiene el tamao del archivo

fopen

Abre un archivo
identificador id.

le

Sintaxis
filesize($archivo);
asigna

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

Lee completamente el archivo y lo


muestra. El cierre del archivo es
fpassthru
fpassthru($id);
automtico al terminar el volcado del
archivo.

header

Permite modificar las cabeceras que enva


el servidor al navegador. Estas cabeceras,
que siguen el protocolo HTTP, es la
header("mensaje");
primera informacin que recibe el
navegador en cada peticin que realiza,
antes que el contenido del archivo.

Ejemplo: Mostrar una imagen


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

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

r Slo lectura. El puntero al comienzo del archivo


r+ Lectura y escritura; apuntador al inicio del archivo
w Slo escritura, si no existe el archivo lo crea, si existe lo convierte en
archivo de longitud cero y el apuntador se coloca en el inicio (sobreescribe el
contenido, vamos)
w+ Lectura y escritura, si existe lo trunca a tamao cero, y se situa al inicio,
si no existe lo crea
a Modo append, slo escritura, si no existe lo crea. Si existe, el apuntador
se coloca al final del archivo (listo para escribir a continuacion del contenido)
a+ Modo append, lectura y escritura, si no existe lo crea; apuntador al final
del archivo
b es un flag adicional a cualquiera de los anteriores que indica que vamos
a operar sobre un archivo binario (en contraposicion a archivo de texto) como

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


esta diferencia asi que el indicador b ser ignorado.

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

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


lnea 4.
<?php
// Abree el archivo en modo binario
$imagen = '../imagenes/Shakira02.png';
$id = fopen($imagen, 'rb');
// Envia las cabeceras
header('Content-Type: image/png');
header('Content-Length: ' . filesize($imagen));
// imprime el archivo y detiene el script
fpassthru($id);
exit;
?>
Ejecutar

Una versin reducida de este cdigo lo podemos encontrar en:

La funcin file_get_contents (lnea 4) permite leer el contenido de un archivo


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

Leer un archivo de texto

En la lnea 2 se genera un apuntador al archivo alumnos.txt


La funcin feof (lnea 4) comprueba si se encuentra el fin del archivo
La funcin fgets lee el contenido de un archivo hasta encontrar el fin de
lnea (lnea 4)
fclose (lnea 5) cierra el apuntador

<?php
$archivo = fopen('0310alumnos.txt', 'r');
//Imprime una linea hasta que el
//final del archivo es encontrado
while(!feof($archivo)) {
echo fgets($archivo)."<br />";
}
fclose($archivo);
?>
Ejecutar
Otra forma de hacerlo es mediante la funcin fread (lnea 6) la cual lee el
contenido de un archivo.
<?php
// obtiene el contenido de un archivo en
//una cadena
$archivo = '0310alumnos.txt';
$id = fopen($archivo, 'r');
$contenido = fread($id, filesize($archivo));
echo $contenido;
fclose($id);
?>
Ejecutar

Contador de visitas

file_exists comprueba si un archivo existe (lnea 2)


La lnea 9 y 12 crean un puntero al archivo

La lnea 13 recupera el nmero de visitantes

La lnea 14 incrementa en uno el nmero de visitantes o reinicia la cuenta


si el archivo no tiene el dato.

fputs guarda la informacin en el archivo


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

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 intrprete que dependen del gestor de base de
datos usadas o a trves del estndar ODBC (Open Data Base Connectivity).

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

1.

Establecercontactoconlabasededatos

2.

Realizarlasoperacionesnecesarias

3.

Cerrarlosrecursosempleados

Conectar con una base de datos MySQL - PHP

Para conectarse con una base de datos es necesario crear una conexin con el
servidor. Esto se logra en PHP mediante el uso de la funcinmysql_connect() .
Sintaxis
mysql_connect($ruta, $usuario, $password);
Parmetro

Descripcin

$ruta

Opcional.

$usuario

Opcional.

$password

Opcional. El valor por defecto es "". No recomendado

Especfica el servidor al cual se conecta. El


valor por defecto es "localhost:3306".
Identifica el usuario. El valor por defecto es el
nombre de usuario propietario del proceso.

ruta invariablemente en un servidor de paga o remoto sera LOCALHOS

Ejemplo de conexin de una base de datos MySQL desde PHP

Lnea 6 mediante la funcin mysql_connect nos conectamos


al gestor MySQL
La funcin mysql_error, devuelve el texto del mensaje de error de la

ltima operacin MySQL


Mediante la funcin mysql_select_db seleccionamos la base datos

(Lnea 8)
mysql_close cierra la conexin a la base de datos (Lnea 10).

?
1
2
3
4
5
6
7
8
9
10
11

<?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);
?>

Descargar
Ejecutar

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:

La funcin mysql_connect() nos conecta al servidor mysql con los

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

die muestra el mensaje de error indicado por pantalla y finaliza el script


actual en el punto en el que se encuentre. No devuelve valor alguno.
Ejemplo de creacin de una base de datos MySQL desde PHP

mysql_connect (lnea 3) hace una conexin a la base de datos


mysql_query (lnea 8) hace una consulta en este caso crea la base de
datos.
mysql_close (lnea 13) cierra la conexin a la base de datos

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14

<?php
include('ruta.php');
$conexion = mysql_connect($ruta,$usuario, $password);
if(!$conexion) {
die('Imposible conexin al servidor: '. mysql_error());
}
$sentencia = 'CREATE DATABASE IF NOT EXISTS prograwe_miBD';
if (mysql_query($sentencia, $conexion)) {
echo 'Base de datos creada';
} 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.

Ejemplo: El Campeonato Mundial de Pilotos es otorgado por la Federacin


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

Ao

Campen

Escudera

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 continuacin se presenta el cdigo 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 continuacin se presenta el correspondiente cdigo PHP

En la lnea 9 se crea una conexin a la base datos mediante la

funcin mysql_connect
La funcin mysql_select_db nos permite seleccionar la base de datos

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

?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, Mxico. sta es la tercera vez
que nuestro pas organiza unos juegos panamericanos y la primera vez que se
organizan fuera de la Ciudad de Mxico. En esta actividad crearemos una tabla
que contendr el medallero de esta competencia.
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

Insertar registros en una tabla.

La sentencia INSERT INTO es usada para agregar registros en una tabla de


base de datos.

La sentencia tiene dos sintaxis genericas validas

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


componen la tabla

INSERT INTO nombre_tabla


VALUES (valor1, valor2, valor3,...)

La segunda se usa cuando solo ingresaremos datos en algunas columnas

INSERT INTO nombre_tabla (columna1, columna2, columna3,...)


VALUES (valor1, valor2, valor3,...)

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


Formula 1
?

?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')",
$conexion) or die(mysql_error());
mysql_query("INSERT INTO f1 VALUES (2008,'Lewis Hamilton','McLaren')",
$conexion) or die(mysql_error());
echo "Operacin 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 .= "('Mxico','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 'Operacin exitosa';
>

Descargar

Insertar registros en una tabla desde una forma

La funcin isset checa si una variable fue declarada


$_SERVER['REQUEST_METHOD'] permite determinar de donde proviene
la llamada

Ads not by this site

?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 ao 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 informacin para ese ao
$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 'Operacin realizada con xito';
} else echo 'Ya existe informacin para ese ao'; //Un solo campen por ao
mysql_close($conexion);
} else echo 'Ao fuera de rango';
}

>

Descargar
Ejecutar

Mostrar el contenido de una tabla

La sentencia SELECT nos permite recuperar los registros de una tabla. La


sintaxis bsica es:
SELECT * FROM nombre_tabla WHERE condicin

Si requiere conocer ms sobre esta sentencia visite nuestro sitio

En caso de una consulta usaremos bsicamente las siguientes funciones

mysql_query() ejecuta una sentencia valida sobre la base de datos. Para


el caso de un SELECT regresa 0 o ms registros.
mysql_num_rows() regresa el nmero de registros otorgados
por mysql_query().
mysql_fetch_assoc regresa un conjunto de registros obtenidos
por mysql_query().

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


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

<?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>Ao</th><th>Campen</th>';
$html.= '<th>Escudera</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;
} ?>

Descargar
Ejecutar

Ejemplo: Estados de la Repblica 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 Mxico</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>';
}
?>

Descargar
Ejecutar

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>';
$html.= '<thead><tr><th>Temporada</th><th>Campen</th>';
$html.= '<th>Marcador</th>';
$html.= '<th>Marcador</th><th>SubCampen</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;

>

Descargar
Ejecutar

Ejemplo: Muestra los paises por continente con su capital, superficie,


poblacin, densidad (poblacin/superficie) y su bandera. As mismo presenta la
suma de superficie, poblacin y densidad promedio.

El programa genera una pgina 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 = "Amrica"; break;
case 3: $continent = "Asia"; break;
case 4: $continent = "Europa"; break;
case 5: $continent = "Oceana"; break;
case 6: $continent = "Los pases 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);
}// 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>Poblacin<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>Pases</th>';
$html.= '<th>Superficie<br />Km<sup>2</sup></th>';
$html.= '<th>Poblacin<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'>Amrica</option>
<option value='3'>Asia</option>
<option value='4'>Europa</option>
<option value='5'>Oceana</option>
<option value='6'>Todos los pases</option>
</select>
</p>
<div>
<input type='submit' name='enviar' id='enviar' value='Enviar' />
</div>

</form>
<?

>

Descargar
Ejecutar

Paginacin

Consiste en dividir resultados de consultas extensas a una base de datos, en


grupos al estilo de Google. La solucin esta basada en la libreria de Marco A.
Madueo Meja 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>Campen</th>
<th>Ganador</th>
<th>Perdedor</th>
<th>Subcampen</th>
</thead>
?php
//Autor libreria: Marco A. Madueo Meja
require_once('lib/PHPPaging.lib.php');
// Apertura de la conexin a la base de datos e Inclusin 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 paginacin
$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>Navegacin</b>: ";
$html.= $paging->fetchNavegacion().'</div>';
echo $html;

>
/body>

Descargar
Ejecutar
Ejemplo: Precio del dlar con respecto al peso Mexicano desde 1995 a la
fecha
?

?php
//Autor libreria: Marco A. Madueo Meja
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 paginacin
$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>Navegacin</b>: ".$paging->fetchNavegacion()."</div>";
echo $html;

Descargar
Ejecutar

Ejemplo: Medallero Panamericano Guadalajara 2011


Ads not by this site

body>
<h3 align='center'>Medallero Panamericano</h3>
<h3 align='center'>Guadalajara, Mxico 2011</h3>
<table class='stripeMe'>
<thead>
<th>Pos</th>
<th>Pas</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
//Autor libreria: Marco A. Madueo Meja
require_once('lib/PHPPaging.lib.php');
// Apertura de la conexin a la base de datos e Inclusin 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 paginacin
$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>Navegacin</b>: ".$paging->fetchNavegacion()."</div>";

Descargar
Ejecutar

Modificar datos desde un formulario

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


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

Con las funciones PHP ya conocidas anteriormente es relativamente sencillo


modificar registros desde una forma.

La variable $checaRadio contiene la definicin de un Radio Group dinmico y


guardara la llave con la cual reconoceremos el registro a modificar

Ejemplo para modificar registros MySQL mediante formularios con PHP

Modificar Formulario

Imprime Tabla

Imprime Formulario

<?php
function update_registro($ruta, $login, $password, $db, $year,
$campeon, $escuderia) {
$conexion = mysql_connect( $ruta, $login, $password) 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());
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");
}
?>
Descargar
Ejecutar

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_tabla


WHERE alguna_columna = algun_valor;

La clausula WHERE especfica que registros sern eliminados. Si se omite la


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

Para ejecutar esta sentencia usaremos la funcin mysql_query(). Esta funcin


es usada para enviar una consulta o comando MySQL al servidor de base de
datos.

El siguiente ejemplo permite borrar registros de una tabla mediante un


formulario.

$borrar[] es un vector de tipo checkbox.

implode une los elementos de un vector en una cadena. Para el ejemplo


une los identidicadores de los registros a eliminar mediante una coma.
La lnea $consulta = mysql_query($query, $conexion)
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 ms
Registros</a> ]</p>");
} else {
$registros = implode(',', $borrar);
$query = "DELETE FROM f1 WHERE year IN (".$registros.")";
unset($borrar);
// Conectar con el servidor y la basede datos
$conexion = mysql_connect( $ruta, $login, $password) 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 conexin
imprime_tabla();
}
} else {
if(!isset($nuevo)) {
iniciar();
$nuevo = 1;
}
imprime_tabla();
}
?>
Descargar
Ejecutar

3.12. Sesiones

Una sesin es la secuencia de pginas que un usuario visita en un sitio web.


Desde que entra en nuestro sitio, hasta que lo abandona.

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

Este archivo posee el mismo nombre que su "id". El archivo se mantendra


mientras tenga activo su navegador y se destruye al cerrar el navegador.

Para que una pgina use sesiones debemos inicializarla con la


funcion session_start(), la cual crea una nueva sesin o retoma una creada en
otra pgina(del sitio).

Las sessiones propagan su SID(SESSION ID ) de dos posibles maneras,


segn php.ini, por cookies o por url, es decir agregando a todos losposibles
link el SID de la sesion.

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

Funciones de gestin de sesiones

funcin

Significado

session_start();

Si es la primera solicitud genera un


identificador de sesin aleatorio cuyo
nombre sersess_IDsesin; si es otra
solicitud continua la sesin iniciada
anteriormente.

session_destroy();

Elimina todos los datos asociados con


una sesin, borra el archivo en el
servidor pero no borra la cookie.

session_unset();

Borra una variable de sesin.

session_id([nombre]);

Si no le proporcionamos ningn
parmetro nos da el identificador de
sesin; si le proporcionamos el
parmetro nombre cambia el valor del
identificador por el parmetro nombre.

session_name([nombre]);

Si se invoca sin parmetro devuelve el


nombre de la variable interna que tiene
el id de sesiones; si se pasa parmetro
cambia el nombre de la sesin.

session_get_cookie_params();

Obtiene los parmetros de la cookie de


la sesin

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
uno ms reciente

session_encode();

Codifica los datos de la sesin actual


en una cadena

session_decode(cadena);

Descodifica la cadena que recibe como


parmetro
y
que
contiene
la
informacin de sesin, despus de
usar esta funcin se actualiza la
informacin de sesin.

session_save_path([path]);

sesin activa con

Devuelve la ruta al directorio donde se


guardan los archivos asociados a la

funcin

Significado
sesin. El efecto solo dura en el script
actual.
Devuelve el nombre del mdulo que se
usa para realizar la gestin de
sesiones. Cuando se invoca un
parmetro se usa como nuevo gestor
de sesiones.

session_module_name([modulo]);

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

Iniciando con sesiones:

En la lnea 2 se inicia la sesin - session_star() Declaramos una variable llamada usuario (lnea 3) de tipo session
Header nos envia a la pgina especficada (lnea 4)

?
1

<?php

@session_start();

$_SESSION['usuario'] = 'ProgramacionWEB';

header('location:0312InicioSesiona.php');

?>

Ejecutar

Evitando accesos indeseados

En la lnea 3 del segundo programa checamos que se recibi la variables


esperada, para evitar accesos indeseados (lnea 6)

Se elimina la variable de sesin (lnea 5).

?
1

<?php

@session_start();

if($_SESSION['usuario'] == 'ProgramacionWEB') {

echo 'Usuario: '.$_SESSION['usuario'];

unset($_SESSION['usuario']);
} else echo 'Te equivocaste';

6
7

?>

Descargar

Contador de visitas con sesiones

Mediante el siguiente ejemplo se implementa un contador de visitas

La lnea 2 captura el id de la sesin


Si la sesin no fue iniciada la genera (Lnea 3)

Si la variable de sesin "visitas" existe la incrementa, caso contrario la crea


y la inicia en 1 (lnea 4)
?
1

<?php

$nombre_anterior = session_id();

if ($nombre_anterior == '') session_start();

($_SESSION['visitas'])

? >$_SESSION['visitas']++: $_SESSION['visitas'] = 1;

?>

Descargar
Ejecutar

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

Control de sesiones y autentificacin

En esta seccin crearemos una forma de autentificacin que puede ser usada
en mltiples situaciones

Crear una tabla mysql llamada usuarios e insertar un registro.

?
1

CREATE TABLE IF NOT EXISTS usuarios (

usuario CHAR(25) NOT NULL,

password CHAR(255) NOT NULL

) ENGINE = InnoDB DEFAULT CHARSET = latin1;

5
6

INSERT INTO usuarios VALUES ('root','bingo');

0312Sesion.php

La lnea 2 inicia la sesin

La lnea 3 checa si esta logeado el usuario. De ser as lo envia a la


pgina 0312PaginaSegura.php, en caso contrario al enviar el login y el
password ser enviado a la pgina 0312Login.php
?
1
2

<?php
session_start(); // Iniciar sesin

// Checa, si el usuario esta logeado

if (isset($_SESSION['usuario'])) {

header('Location: 0312SesionPaginaSegura.php');

?>

<table border='0'>

<form id='forma' name='forma' method='POST'

10
11

action='0312SesionLogin.php'>
<tr><td>Usuario</td><td>:</td><td><input name='usuario'
type='text' size='25' maxlength='25'></td></tr>

12
13

<tr><td>Password</td><td>:</td><td><input name='password'
type='password' size='25' maxlength='25'></td></tr>

14
15
16
17

<tr><td></td><td></td><td><input name='login'
type='submit' id='login' value='Accesar'></td></tr>
</form>
</table>

18

Descargar
Ejecutar

0312SesionLogin.php

En la lnea 4 y 5 se realiza la configuracin de la conexin 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 inyeccin de cdigo
SQL
La variable de sesin usuario se define si la consulta regresa un nico

registro.
Si

pagna 0312SesionPaginaSegura.php
De no ser un usuario registrado la lnea 20 nos envia a la pgina

somos

usuarios

registrados

nos

envia

la

de 0312Sesion.

?
1

<?php

@session_start(); // Iniciar sessin

// Incluir la configuracin para la conexin a la base de datos

include('ruta.php');

$conexion = mysql_connect( $ruta, $login, $password)

6
7
8
9
10
11
12

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

13

$nr = mysql_num_rows($resultado);

14

mysql_close($conexion);

15

if ($nr == 1) {

16

// Establece la variable de sesin usuario

17

$_SESSION['usuario'] = $_POST['usuario'];

18

// nos envia a la pgina segura

19
header('Location: 0312SesionPaginaSegura.php');

20

} else {

21

// nos envia a la pgina inicial

22

header('Location: 0312Sesion.php');

23
24

}
?>

25

0312SesionPaginaSegura.php

La lnea 2 inicia la sesin

La lnea 5 checa que la variable de sesin usuario no exista de ser as lo

envia a la pgina 0312Sesion.php -intento indebido de acceso a la pgina-.


De existir borra la variable de sesin para evitar accesos posteriores y
maneja el cdigo html
?
1

<?php

session_start(); // Inicia sesin

// Si la sesin de usuario no se establece,

// esta pgina saltar a pgina de acceso


if (!isset($_SESSION['usuario'])) {

header('Location: 0312Sesion.php');

} else session_unset('usuario');

7
8

//Borra la variable de sesin


?>

9
10
11
12
13
14

<html>
<head>
<title>Pgina segura</title>
</head>

15
<body>

16

<p>Esta es una pgina segura con sesiones: <b>

17

<?php echo $_SESSION['usuario']; ?></b>

18

<br>Usted puede poner su informacin restringida aqu.</p>

19

<p><a href='0312SesionLogout.php'>Desconectarse</a></p>

20
21

</body>
</html>

22

0312SesionLogout.php

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

?
1

<?php

session_start();

session_unset();

session_destroy();

header('Location: 0312Sesion.php');

?>

3.13. Seguridad

La seguridad y funcionamiento sin duda uno de los temas ms importantes al


desarrollar un portal web. La validacin de datos, es por tanto fundamental.

El no cuidarnos de esto, puede traernos problemas de inyeccin


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

Filtrado de datos

Una de las mayores fortalezas de PHP es su facilidad de


uso. Lamentablemente, este mismo beneficio se usa en contra de PHP,
programadores con poca experiencia olvidan usar medidas de seguridad o
carecen de los conocimientos para generar una clase que valide los datos
introducidos por los usuarios finales.
Se han desarrollado diversas clases de validacin, algunas mejores que otros,
con igual o mayor nmero de mtodos para hacer la misma tarea estas no
estan estandarizadas. PHP versin 5 proporciona la extensin Filter cuyo
objetivo es realizar esta tarea en forma sencilla, robusta y laestandarizacin de
la entrada de datos del usuario. Las funciones base se presentan a
continuacin.

Funcin

Descripcin

filter_has_var Verifica si la variable del tipo especificado existe


filter_list

Devuelve una lista de todos los filtros soportados

filter_var

Filtra una variable con un filtro especfico. Devuelve los


datos filtrados, o FALSE si el filtro falla.

filter_input

Obtiene una variable desde afuera de PHP y opcionalmente


la filtra

Ejemplo de filter_has_var

La sintaxis es:

filter_has_var(tipo, variable)
Parmetro

Descripcin
Requerido. especfica el tipo que deseamos checar. Los posibles
tipos son:

INPUT_GET

tipo

variable

INPUT_POST

INPUT_COOKIE

INPUT_SERVER

INPUT_ENV

Requerida. Especfica la variable que deseamos checar

El objetivo del ejemplo es tratar de frenar invasiones a la seguridad


asegurandonos que no introduzcan datos mediante la URL. Este mtodo no es
infalible contra la inyeccin de cdigo SQL, pero es una aproximacin..
<?php
if(!filter_has_var(INPUT_POST, 'login') or
!filter_has_var(INPUT_POST, 'key')) {
echo('Sin Peligro');
} else die('Por aqu no entras');
?>

Mediante la funcin filter_list es posible recuperar la lista de filtros soportados


por nuestro servidor y con filter_id recuperados el inditificador del filtro.
Ejemplo del uso de filter_list y filter_id.

La lnea 5 recorre el vector filter_list

La lnea 6 imprime el nombre del filtro extraido en la lnea 5

la lnea 7 imprime el id del filtro

<body>
<table>
<tr><td>Nombre del Filtro</td><td>ID</td></tr>
<?php
foreach( filter_list() as $id =>$filter) {

echo "<tr><td>".$filter.'</td><td>';
echo filter_id($filter).'</td></tr>'."\n";
}
?>
</table>
</body>
Descargar
Ejecutar

Ejemplo de filter_var y filter_input

La validacin de datos es una parte integral del trabajo con formularios. Datos
vlidos los datos presentados pueden dar lugar a problemas de seguridad

A partir del formulario

Futuro colega*
Estatura*
Peso*

metros
(40 a 150 kg)

url*
Por ejemplo: http://www.itver.edu.mx
email*
ip*
Reiniciar

<?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'=>
array('min_range'=>40, 'max_range'=>150));
$peso = filter_input(INPUT_POST, 'peso',
FILTER_VALIDATE_INT, $options);
if ($peso === false) {
echo "Escriba un peso vlido entre 40 y 150 kg.<br />";
} else { echo "$peso kg es un peso vlido.<br/>";}
$estatura = $_POST['estatura'];
if (!filter_var($estatura, FILTER_VALIDATE_FLOAT)) {
echo "$estatura no es una variable flotante <br />";
} else echo "$estatura es una dato flotante vlido<br />";
$url = $_POST['url'];
if (filter_var($url, FILTER_VALIDATE_URL)) {
echo "La url $url es vlida <br />";
} else echo "La url $url no es vlida! <br />";
$email = filter_input(INPUT_POST, 'email',
FILTER_VALIDATE_EMAIL);
if ($email === false) {
echo "El email es un campo requerido! <br />";
} else echo "$email es una direccin de correo vlida<br />";
$ip = filter_input(INPUT_POST, 'ip', FILTER_VALIDATE_IP);
if($ip === false) {
echo "No es una IP vlida <br />";
} else echo "$ip es una IP vlida <br />";
} else echo "Por aqui no puedes entrar <br />";
?>
Descargar
Ejecutar

4.1 Lenguaje Script del cliente.


JavaScript es un lenguaje de programacin usado principalmente para crear
pginas web dinmicas. Una pgina web dinmica es aquella que incorpora
efectos como texto que aparece y desaparece, animaciones, acciones
activadas al pulsar botones y ventanas con mensajes de aviso al usuario.

Tcnicamente, JavaScript es un lenguaje de programacin interpretado, y no


es necesario compilar los programas para ejecutarlos. En otras palabras, los
programas escritos con JavaScript se pueden probar directamente en cualquier
navegador sin necesidad de procesos intermedios.
A pesar de su nombre, JavaScript no guarda ninguna relacin directa con el
lenguaje de programacin Java. Legalmente, JavaScript es una marca
registrada de la empresa Sun Microsystems. Su nombre es exclusivamente por
marketing, ya que Java era la palabra de moda en el mundo informtico y de
Internet de la poca de desarrollo.
Cmo incluir JavaScript en documentos XHTML
La integracin de JavaScript y XHTML es muy flexible, ya que existen al menos
tres formas para incluir cdigo JavaScript en las pginas web en esta seccin
solo se presentaran dos de ellas.
Incluir JavaScript en el mismo documento XHTML
El cdigo JavaScript se encierra entre etiquetas <script></script> y se
en cualquier parte del documento. Aunque es correcto incluir cualquier
de cdigo en cualquier zona de la pgina, se recomienda definir el
JavaScript dentro de la cabecera del documento (dentro
etiquetas <head></head>):

incluye
bloque
cdigo
de la

Para que la pgina XHTML resultante sea vlida, es necesario aadir el


atributo type a la etiqueta <script>. Los valores que se incluyen en el
atributo type estn estandarizados y para el caso de JavaScript, el valor
correcto es text/javascript.
Este mtodo se emplea cuando se define un bloque pequeo de cdigo o
cuando se quieren incluir instrucciones especficas 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 modificacin en el
bloque de cdigo, es necesario modificar todas las pginas que incluyen ese
mismo bloque de cdigo 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

Colocar el cdigo despus 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>
Descargar
Ejecutar

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.

Adems del atributo type, este mtodo requiere definir el atributo src, que es el
que indica la URL correspondiente al archivo JavaScript que se quiere enlazar.

Ejemplo

Cada etiqueta <script> solamente puede enlazar un nico archivo en este

ejemplo el archivo js01.js, pero en una misma pgina se pueden incluir tantas
etiquetas <script></script> como sean necesarias (lnea 5).
El cdigo hace uso de este archivo en la lnea 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>
</head>
<body onload='inicio()'>
</body>
Descargar
Ejecutar
Los archivos de tipo JavaScript son simples documentos de texto con la
extensin 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 cdigo XHTML de la pgina, adems de la capacidad de reutilizar
el mismo cdigo JavaScript en pginas del sitio web y que cualquier
modificacin realizada en el archivo JavaScript se refleja inmediatamente en
todas las pginas 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 dgitos 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 explcita: var nombre_Variable;


Forma implcita: 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 declaracin de variables son:


var mi_variable1 = 3;
var mi_variable2 = 5;
var resultado = mi_variable1 + mi_variable2

JavaScript tiene la peculiaridad de ser un lenguaje tipificado dbilmente, esto es, s


un entero y ms adelante una cadena. Por lo cual es responsabilidad del programa

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 (nmeros, textos, etc.).

Variables numricas

Almacenan valores numricos enteros (integer en ingls) o decimales (float en


ingls). En este caso, el valor se asigna indicando directamente el nmero
entero o decimal. Los nmeros decimales usan el carcter ( . 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
nmeros. En primer lugar se definen los valores Infinity para representar
nmeros 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 matemticas con
variables no numricas, el resultado ser de tipo NaN.

Para manejar los valores NaN, se utiliza la funcin relacionada isNaN(), que
devuelve true si el parmetro que se le pasa no es un nmero:
var variable1 = 3;
var variable2 = 'hola';
isNaN(variable1); // false
isNaN(variable2); // true
isNaN(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 Tecnolgico de Veracruz';
var carrera = 'Ingeniera en Sistemas Computacionales';
var semestre = 'Cuarto';
Algunos caracteres especiales son difciles 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 problemticos.
Mecanismo para incluir caracteres especiales
Si se incluye...
En realidad se est incluyendo...
\n

Una nueva lnea

\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.
var variable1 = true;
var variable2 = false;

JavaScript convierte automticamente el resto de variables a sus valores


boolean si es necesario. En el caso de los nmeros, el 0 se convierte en false y
cualquier otro nmero distinto de 0 se convierte en true.

Conversin entre tipos de variables

JavaScript incluye un mtodo llamado toString() que permite convertir


variables de cualquier tipo a variables de cadena de texto.
var variable1 = true;
// devuelve 'true' como cadena de texto
variable1.toString();
var variable2 = 5;
// devuelve '5' como cadena de texto
variable2.toString();
JavaScript tambin incluye mtodos para convertir los valores de las variables
en valores numricos. Los mtodos definidos son parseInt() yparseFloat().
Cada uno de ellos convierte la variable que se le indica en un nmero entero o
un nmero decimal. La conversin numrica de una cadena se realiza carcter
a carcter empezando por el de la primera posicin. Si ese carcter no es un
nmero, la funcin devuelve el valor NaN.

Si el primer carcter es un nmero, se contina con los siguientes caracteres


mientras estos sean nmeros.
var variable1 = 'hola';
parseInt(variable1); // devuelve
var variable2 = '34';
parseInt(variable2); // devuelve
var variable3 = '34hola23';
parseInt(variable3); // devuelve
var variable4 = '34.23';
parseInt(variable4); // devuelve

NaN
34
34
34

En el caso de parseFloat(), el comportamiento es el mismo salvo que tambin


se consideran vlidos los caracteres que indican la parte decimal del nmero:
var variable1 = 'hola';
parseFloat(variable1); // devuelve
var variable2 = '34';
parseFloat(variable2); // devuelve
var variable3 = '34hola23';
parseFloat(variable3); // devuelve
var variable4 = '34.23';
parseFloat(variable4); // devuelve

NaN
34.0
34.0
34.23

Palabras reservadas

Son palabras especiales que se utilizan para aumentar la legibilidad y separar


las entidades sintcticas. Estas palabras no pueden usarse como
identificadores.

La siguiente tabla muestra todas las palabras reservadas existentes en


JavaScript 1.7, estas palabras tienen o tendrn 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 especificacin


ECMAScript 262
abstract

double

implements

private

throws

boolean

enum

import

protected

transient

byte

export

int

public

volatile

Palabras reservadas en JavaScript 1.7


char

extends

interface

short

class

final

long

static

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 guin bajo "_" [underscore] y puede contener caracteres
alfanumricos y/o guiones bajos.

const x = 48;

Una constante es asignada en el momento de la declaracin y no puede


cambiar el valor mediante una asignacin o ser re-declarada mientras el script
est en ejecucin.

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 funcin o de


una variable en el mismo mbito [scope].

Existen tres constantes predefinidas: true, false y undefined.

Expresiones

Una expresin es cualquier conjunto vlido de literales, variables, operadores y


expresiones que se evalan como un nico valor; el valor puede ser un
nmero, una cadena o un valor lgico (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 expresin x = 7 es una expresin que asigna a x el valor 7.


Esta expresin se evala como siete. Dicha expresin usa un operador de
asignacin.

Por otra parte, la expresin 3 + 4 simplemente se evala como siete; no se


realiza ninguna asignacin. Los operadores usados en dichas expresiones se
les llaman simplemente operadores.

JavaScript tiene los siguientes tipos de expresiones:

Aritmticas: se evalan como un nmero, por ejemplo 3.14159.


(Generalmente usan operadores aritmticos.)
De cadena: se evalan como una cadena de caracteres, por ejemplo,
"Sofa" o "234". (Generalmente usan operadores de cadena de caracteres
(string).)
Lgicas: se evalan como verdadero o falso. (A menudo emplean
operadores lgicos.)
De objeto: se evalan como un objeto.

Operadores

Smbolo matemtico que denota un conjunto de operaciones que han de


realizarse. En JavaScript los operadores permiten manipular el valor de las
variables, realizar operaciones matemticas o de manejo de texto con sus
valores y comparar diferentes variables. De esta forma, los operadores
permiten a los programas realizar clculos complejos y tomar decisiones
lgicas en funcin de comparaciones y otros tipos de condiciones.

Operador de asignacin.
Un operador de asignacin asigna un valor a su operando izquierdo basndose
en el valor de su operando derecho. El operador bsico de asignacin 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 asignacin son abreviaturas de operaciones


estndar
Operadores de asignacin
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 comparacin

Un operador de comparacin compara sus operandos y devuelve un valor


lgico en funcin de si la comparacin es verdadera.

Los operandos pueden ser valores numricos, de cadena de caracteres,


lgicos u objetos. Las cadenas se comparan basndose en el orden
lexicogrfico estndar, usando los valores Unicode.

Si dos operandos no son del mismo tipo, JavaScript intentar convertir los
operandos a un tipo apropiado para la comparacin, excepto para los
operandos === y !==. Esto acostumbra a resultar en una comparacin
numrica. La tabla a continuacin describe los operadores de comparacin.

Operadores de comparacin.
Operador

Ejemplos que
devuelven verdadero1

Descripcin

3
"3"
3 == '3'

==
==

Igual
(==)

true si los operandos son iguales.

Distinto
(!=)

true si los operandos no son var1


iguales.
var2 != "3"

var1
var1
!=

!==

"3"

Igual estricto true si los operandos son iguales y


3 === var1
(===)
del mismo tipo.
Distinto
estricto
(!==)
Mayor
(>)

true si los operandos no son var1


iguales y/o no son del mismo tipo. 3 !== '3'
que true si el operando izquierdo es var2
mayor que el derecho.
"12" > 2

>

Mayor o igual
true si el operando izquierdo es var2
>=
que
mayor o igual que el derecho.
var1 >= 3
(>=)
true si el operando izquierdo es var1
menor que el derecho.
"12" < "2"

var1

var1

Menor
(<)

que

<

var2

Menor
igual
(<=)

o
true si el operando izquierdo es var1
<=
que
menor o igual que el derecho.
var2 <= 5

var2

Estos ejemplos asumen que var1 = 3 y var2 = 4.

Operadores aritmticos
Los operadores aritmticos toman valores numricos (tanto literales como
variables) como operandos y devuelven un nico valor numrico. Los
operadores aritmticos estndar son el de suma (+), el de resta (-), el de
multiplicacin (*) y el de divisin (/). Estos operadores trabajan igual que en la
mayora de lenguajes de programacin, excepto el operador / que devuelve la
divisin real (de coma flotante), no la divisin entera como sucede en C o en
Java.

Operador

Significado

Suma

Resta

Operador

Significado

Multiplicacin

Divisin

Mdulo

++

Incremento en uno

--

Decremento en uno

Negacin

Por ejemplo:
1/2 //devuelve 0.5 en avaScript
1/2 //devuelve 0 en Java

Operadores lgicos
Los operadores lgicos son generalmente empleados con valores lgicos
(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, podran devolver un valor no
booleano. Los operadores lgicos se describen en la siguiente tabla.
Operadores lgicos. Dado x = 6 y y = 7
Operador

Uso

Descripcin

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)

Adems de los operadores de comparacin, los cuales pueden ser empleados


con los valores de cadena, el operador de concatenacin (+) gnera otra cadena
que es la unin de los dos operandos de tipo cadena. Por ejemplo, "mi " +
"cadena" retorna la cadena "mi cadena".

El operador abreviado de asignacin += tambin puede usarse para concatenar


cadenas. Por ejemplo, si la variable micadena tiene el valor "Vera", la expresin
micadena += "cruz" se evala como "Veracruz" y asigna este valor a micadena.

Sentencias condicionales

En JavaScript, como en muchos lenguajes, la sentencia para verificar si una


condicin se cumple y realizar una accin u otra es if. Su sintaxis es la
siguiente:
if(condicin) { instrucciones si se cumple }
else { instrucciones si no se cumple }
Ejemplo: El cdigo proporciona una aplicacin de la sentencia if.

onclick es un evento que ejecuta la funcin 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 = 'Niez';}
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;
}
Descargar
Ejecutar

switch

Esta expresin se utiliza cuando tenemos mltiples posibilidades como


resultado de la evaluacin de una sentencia. La sintaxis se presenta a
continuacin:
switch( expresin ){
case valor1 : sentencias;
break;
case valor2 : sentencias;
break;
case valorn: sentencias;
break;
default : sentencias;
break;
}

Ejemplo: Aproximacin a la prediccin de los signos del zodiaco

El ndice de la opcin seleccionada se captura en la lnea 2.

El arreglo de los signos zodiacales se declara en la lnea 3.

La lnea 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;
}
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>
Descargar
Ejecutar

Ciclos

Los ciclos son sentencias esenciales en cualquier lenguaje de programacin.


JavaScript cuenta con tres: while, do while y for. Hay cuatro partes en todos
los bucles. Inicializacin, cuerpo, iteracin y condicin.
while: Ejecuta repetidamente el mismo bloque de cdigo hasta que se cumpla
una condicin de terminacin.
[inicializacin;]
while(condicion[es]) {
cuerpo;
[iteracin;]
}

do..while: Como mnimo 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.
[inicializacin;]
do{
cuerpo;
[iteracin;]
}while(condicin);
for: Es el ciclo ms comn, en el una variable se fija a un valor inicial, que se
actualiza con cada ciclo, y cuando el valor cumple una determinada condicin,
el ciclo se termina. La sintaxis del ciclo es:
for ([inicializacin]; [condicin]; [expresin] ){
Instruccin o bloque de instrucciones;
}
Hay dos formatos ms de ciclos for, aunque no todas se aplican en todos los
navegadores y se expondrn 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 ms
interno. A todos los efectos la sentencia break acta como un salto a la
instruccin siguiente al ciclo en el que se ejecuta.
continue: La sentencia continue, no abandona el ciclo si no hace que se
ejecute la siguiente iteracin. En el ciclo while la ejecucin del continuehace
que el flujo del programa salte a la condicin. En el bucle for la ejecucin
del continue ejecuta la expresin de incremento (decremento), para despus
continuar normalmente con la condicin. Es decir, la ejecucin
del continue evita que se ejecute durante una interaccin el resto del cuerpo
del ciclo.

Funciones

Una funcin es un bloque de cdigo con un nombre. Cada vez que se usa el
nombre, se llama a la funcin y el cdigo de la funcin es ejecutado. Las
funciones pueden llamarse con valores, conocidos como parmetros, que se
usan como variables.

Las funciones tienen dos objetivos: organizacin del programa (archivo o


documento) y ejecucin del cdigo de la funcin.

El nombre de una funcin se escribe inmediatamente despus 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 parmetros (argumentos) de una funcin se separa por comas. La


funcin usa esos parmetros en las sentencias de su cuerpo que la configuran.

Los argumentos que se le pasan a una funcin no pueden ser cambiados en su


interior pues se pasan por valor.

Hay tres enfoques principales para la creacin de funciones en JavaScript:


declarativo/esttico, dinmico/annima, y literal.

Muchas tareas de programacin que se puede lograr con el enfoque


declarativo. Sin embargo es importante comprender el impacto de cada tipo de
declaracin antes de usarlas.

La sintaxis de las funciones declarativas es la siguiente:


function nombreFuncin(){
sentencia1;
sentencia2;
...;
...;
[return]
}

Los parmetros de una funcin se pasan por valor, los arrays se pasan por
referencia.

Nota: Las funciones pueden regresar ms de un valor en la versin 1.7. Sin


embargo Internet Explorer no acepta completamente esta especificacin.

Javascript tiene por caracterstica no tipificar sus variables y cuando de


operaciones matemticas en particular en la suma dicha caracterstica podra
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

Solucin:

Se presentan las funciones factorial, radianes y decimal

Math.abs(x) calcula el valor absoluto de x.


Math.PI regresa el valor del nmero 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;
}
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 aproximacin usada para el clculo de las funciones


trigonomtricas. Entre menor sea la aproximacin, la precisin ser mayor, a
costa de aumentar la cantidad de ciclos.

Los ngulos toman valor entre 0 y 360 grados. Lo cual logramos calculando
el mdulo de 360. As 370 grados es igual a 10 grados.

Clculo del seno mediante la aproximacin 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;
}

Clculo del coseno mediante la aproximacin de Taylor


function coseno( 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;
anterior = nuevo;
nuevo += Math.pow(-1,m)/factorial(n)
* Math.pow(x, n);
++m;
}
return nuevo;
}

Impresin de resultados

document es parte de DOM (Document Object Model) que ser abordado


ms 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;
}

Aplicacin del cdigo javaScript desde HTML

<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf8' />
<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>
<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>
Descargar
Ejecutar

4.2. Modelo de objetos con lenguaje Script.


El Modelo de Objetos de Documento (DOM - Document Object Model -)
describe cmo todos los elementos en una pgina HTML, tales como campos
de entrada, imgenes, etc, se relacionan con la estructura ms alta: el propio
documento. Llamando al elemento por su nombre correcto DOM, podemos
influir en l mediante un lenguaje de programacin, e,g. Javascript, Java, etc.

La gran difusin de Ajax y Javascript es notable en muchos proyectos en Internet.


navegadores tienen deshabilitado Javascript por defecto. Lo cual hace necesario qu
Para que estos cdigos funcionen en Mozilla Firefox es necesario
1.
Selecciona
2.
Selecciona
3.
Selecciona
4. Selecciona la casillla de Habilitar JavaScript y darle clic en OK

write

Permite escribir texto html desde Javascript. El texto se escribe directamente el


body del html.

Es la forma ms fcil de escribir HTML desde Javascript, lo cual no quiere decir


que es la mejor manera de escribir cdigo HTML desde Javascript o incluso
que va a trabajar en todas las situaciones. De hecho, el mtodo document.write
es muy limitado en lo que puedes hacer con l.
El lector debe considerar que document.write slo funciona con las pgina que
el navegador procesa como HTML.

html

JavaScript

Descargar
Ejecutar

Ejemplo: Imprimir un mensaje y abrir una nueva ventana mediante DOM

Las cadenas en Javascript son objetos y por lo tanto tienen mtodos y


atributos. En las lneas 4 y 5 se presenta ejemplos de ellos que facilmente
pueden deducir su finalidad.

La lnea 6 imprime la cadena en el body.


La lnea 8 abre una pgina nueva, la funcin open tiene como parmetros
la pgina que abrira, y el lugar donde lo har en este caso _self sustituye la
pgina 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?') )
window.open('http://www.prograweb.com.mx/pweb/index.html',
'_self');
</script>
</body>

Descargar
Ejecutar

Ejemplo: Imprimir un saludo en la pantalla dependiente de la hora de la


mquina cliente

En la lnea 4 hacemos una instancia de la clase Date.


getHours extrae la hora del lado cliente (Lnea 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>
Descargar
Ejecutar

ejemplo: form

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

getElementById

Permite obtener la referencia a un elemento de la pgina mediante el id de


dicho elemento.

Una vez obtenida la referencia al elemento, podemos acceder a todas sus


propiedades
<head>
<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>
Descargar
Ejecutar

innerHTML

Sirve para obtener o modificar el HTML del documento HTML. Se utiliza la


propiedad InnerHtml para modificar mediante programacin el contenido
interno entre las etiquetas de apertura y cierre de un control de servidor HTML.

La propiedad InnerHtml no codifica automticamente los caracteres especiales


en entidades HTML, es el programador el responsable de hacerlo.

Ejemplo: Crear una lista con vietas no ordena en forma dinmica

En la lnea 4 creamos un vector de das de la semana.

En la lnea 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','Mircoles','Jueves',
'Viernes', 'Sbado', 'Domingo');
HTML = '<ul>';
for(i = 0; i < dias.length; i++) {
HTML += '<li>' + dias[i] + '</li>';
}
HTML += '</ul>';
document.getElementById('contenedor').innerHTML = HTML;
</script>
</body>

Descargar
Ejecutar
Ejemplo: En matemticas, la sucesin de Fibonacci es la siguiente sucesin
infinita de nmeros naturales:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, .


. .
La sucesin inicia con 0 y 1, y a partir de ah cada elemento es la suma de los
dos anteriores.

Se presenta la funcin formato la cual incorpora el separador de miles, su


autoria es de Roberto Herrero & Daniel ()

La lnea 2 recupera mediante getElementbyId en nmero de elementos de


la serie.

El mnimo de elementos es 2 (Lneas 3 a 6).

Mediante innerHTML pasamos el resultado a un contenedor

HTML

JavaScript
Ads 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>
<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>
Descargar
Ejecutar

Crear y accesar elementos

Para crear etiquetas "tag" html debemos usar el mtodo 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 mtodo appendChild().


El cual agrega un nodo al final del arbol. La sintaxis es

appendChild( tag )
El mtodo insertBefore tiene un comportamiento similar al de appendChield,
solo que el nodo agregado es puesto antes del padre. La sintaxis es

insertBefore( nuevo tag, referencia )

Ejemplo: Agregar elementos a un documento

HTML

Los elementos son agregados mediante el evento onclick (Lnea 7)


La lnea 8 declara un elemento div vacio cuya funcin es servir de
contenedor

Javascript

En la lnea 5 se crea un objeto de tipo div


El objeto nuevoElemento hereda todas las caractersticas 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>
Descargar
Ejecutar

Ejemplo: Cargar la ruta a un archivo

Se asignan las caractersticas de un fieldset en fi (Lnea 4)


Creamos un contenedor de tipo div (Lnea 5)
Las lneas 9 y 15 crean dos objetos de tipo input
Mediante insertBefore insertamos el contenedor antes del botn crear

(Lnea 7)
Asignamos al evento onclick del botn la funcin borrar y el pasamos como
par'ametro el nombre del propio botn

Usamos removeChild para eliminar el div y su contenido (Lnea 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 funcin eval evala una cadena de cdigo JavaScript sin referencia a

ningn objeto en particular (Lnea 2). El objetivo de Object es este caso es


crear un arreglo atributos, mtodos y parmetros del objeto interconstruido.
La lnea 9 desarrolla un array asociativo con los nombres de los mtodos
del objeto interconstruido.

En la lnea 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=iso8859-1' />
<script type='text/javascript'
src='0402ObjectPropiedades.js'></script>
</head>
<body>
<form name='forma' method='post' action='#'>
<div align='center'>
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>
Descargar
Ejecutar

Ejemplo: Efecto Row Rollover Table

HTML

JavaScript

CSS
Ads not by this site

<head>
<meta http-equiv='Content-Type' content='text/html; charset=iso8859-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>Ao</th>
<th>Lugar</th>
<th>Campen</th>
<th>Marcador</th>
<th>Subcampen</th>
</tr>
</thead>
<tfoot>
<tr>

<td colspan='5'>ltima actualizacin: 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>
Descargar
Ejecutar

4.3. Eventos en JavaScript


JavaScript nos proporciona la capacidad de crear pginas dinmicas, la
interaccin con el usuario se consigue mediante la captura de los eventos que
ste produce.
Un evento es una accin del usuario ante la cual puede realizarse algn
proceso (por ejemplo, el cambio del valor de un formulario, o la pulsacin 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.
Un controlador de eventos ejecuta un segmento de cdigo basado en eventos
que ocurren dentro de la aplicacin, como por ejemplo el evento on Change.
Elcontrolador de eventos onChangeejecuta cdigo JavaScript cuando pierde el
foco de entradadel campo despus de que el usuario modifique su texto.

La siguiente tabla muestra los controladores de eventos que pueden utilizarse


en JavaScript y su significado.

Manejador

Manejadores de eventos JavaScript


Objetos para los que
Se produce cuando...
est definido

onAbort

El usuario interrumpe la
Image
carga de una imagen

onBlur

Button, Checkbox, FileUpload,


Un
elemento
de
Layer, Password, Radio, Reset,
formulario, una ventana o
Select, Submit, Text, Textarea,
un marco pierden el foco
window

onChange

El valor de un campo de FileUpload,


formulario cambia
Textarea

onClick

Se hace click en un Button, document, Checkbox,


objeto o formulario
Link, Radio, Reset, Submit

onDblClick

Se hace click doble en un


document, Link
objeto o formulario

onDragDrop

El usuario arrastra y
suelta un objeto en la window
ventana

onError

La
carga
de
un
documento o imagen Image, window
produce un error

onFocus

Button, Checkbox, FileUpload,


Una ventana, marco o
Layer, Password, Radio, Reset,
elemento de formulario
Select, Submit, Text, Textarea,
recibe el foco
window

onKeyDown

El usuario pulsa una tecla

document,
Textarea

Image,

Link,

onKeyPress

El
usuario
mantiene document,
pulsada una tecla
Textarea

Image,

Link,

onKeyUp

El usuario
tecla

Image,

Link,

onLoad

El navegador termina la
Image, Layer, window
carga de una ventana

onMouseDown

El usuario pulsa un botn


Button, document, Link
del ratn

libera

una document,
Textarea

Select,

Text,

Manejador

Manejadores de eventos JavaScript


Objetos para los que
Se produce cuando...
est definido

onMouseMove

El usuario
puntero

mueve

onMouseOut

El puntero abando una


Layer, Link, img
rea o enlace

onMouseOver

El puntero entra en una


Layer, Link, img,
rea o imagen

onMouseUp

El usuario libera un botn


Button, document, Link
del ratn

onMove

Se mueve una ventana o


window
un marco

onReset

El usuario
formulario

onResize

Se cambia el tamao de
window
una ventana o marco

onSelect

Se selecciona el texto del


campo texto o rea de Text, Textarea
texto de un formulario

onSubmit

El usuario
formulario

onUnload

El usuario abandona

limpia

enva

el Ninguno
uno)

un

un

(debe

asociarse

Form

Form
window

Ejemplo: Evento onChange


<head>
<script language='javascript'>
function valida(dato) {
alert('Cambio el valor de 30 a ' + dato);
}
</script>
</head>
<body>
<fieldset>
<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>
Descargar
Ejecutar

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>
Descargar
Ejecutar
Ejemplo: Uso de area shape y onMouseOver
<head>
<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>
Descargar
Ejecutar

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

Ejemplo: Uso de los eventos onmouseover y onmouseout


0403onMouseOver.js

En la lnea 2 se crea un objeto de tipo arreglo.

Las lneas 3 y 7 crean un objeto de tipo imagen.

Las lneas 4, 5, y 6, as como las lneas 8, 9 y 10 proporcionan las


caractersticas de dichas imagenes.

La funcin mostrar nos regresara una imagen si el elemento html que la


llama es una imagen (lnea 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. Mxico 2010';
contenedor[1].title = 'Saltillo, Coahuila. Mxico 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>
Descargar
Ejecutar

Ejemplo: Formulario con eventos onfocus y onblur

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 caractersticas base de la caja de edicin.


En las lneas 9, 12 y 14 se implementan los eventos onFocus y onBlur. A
los cuales se les pasa como parmetro 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>
Descargar
Ejecutar

5.1 Visin general de servicios Web XML.

Bsicamente, un servicio web (webservice) es un sistema de entrada/salida, al


que se le puede pasar una serie de parmetros con el fin de obtener un
resultado en concreto y recuperarlo para ser mostrado en una aplicacin. La
tecnologa 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 informacin va HTTP entre
diversas aplicaciones.

La ventaja de este protocolo radica en una comunicacin efectiva


independiente del lenguaje de programacin que defina a la aplicacin. WSDL
(Web Services Description Language) es el nombre del lenguaje utilizado para
describir un servicio web. El mismo utiliza el formato wsdl como extensin para
sus archivos. Estos ltimos son referenciados desde una URL, e incluyen una
serie de mtodos y operaciones que sern llamados desde la aplicacin 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 pblica. En pocas palabras, los Servicios Web son
aplicaciones modulares que pueden ser descritas, localizadas, e invocadas
sobre una red a travs de un intercambio estandarizado de mensajes XML.

Definidos por nuevos estndares 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 creacin de aplicaciones e-Business a partir de mdulos
reutilizables de software a los que se tiene acceso a travs de la Web.
Beneficios de los Servicios Web

Desde un punto de vista tcnico, los Servicios Web ofrecen una manera ms
fcil de desarrollar aplicaciones a las que se requiera tener acceso a travs de
la Web. Es importante anotar que los servicios Web no resuelven todos
los requerimientos de integracin slo la habilidad de comunicarse con otros
mdulos de software a travs de la red pblica. Se requieren tecnologas
adicionales de integracin para manejar la integracin de datos, aplicaciones y
procesos del negocio. Tambin se requieren caractersticas de clase
empresarial para complementar los Servicios Web, permitindoles ser seguros
y escalables.

Desde el punto de vista del negocio, los Servicios Web le permiten a una
compaa 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 integracin son reducidos, las interacciones con otros mercados son
establecidas ms efectivamente, y las funciones del negocio son entregadas a
un conjunto ms amplio de clientes y asociados.

Ms an, la tecnologa de Servicios Web permite la contratacin de servicios


que no brindan un beneficio al negocio. Dado que los Servicios Web separan
aplicaciones de infraestructura, una compaa puede rpidamente 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
dinmicos 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 estndar de empaquetar
mensajes. Este protocolo est pensado para el intercambio de informacin en
entornos descentralizados y distribuidos. Usa las tecnologas 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 diseado con el fin de
que fuera independiente del cualquier modelo de programacin y otras
implementaciones de semnticas.

Los dos objetivos de diseo principales de SOAP son la simplicidad y la


extensibilidad. Para alcanzar estos objetivos, SOAP simplemente elimina de su
arquitectura aquellos aspectos que con ms frecuencia se encuentra en
los sistemas distribuidos. Podemos agregar las caractersticas que nosotros
queramos simplemente extendiendo la especificacin.

Ventajas

No esta asociado con ningn lenguaje : los desarrolladores


involucrados en nuevos proyectos pueden elegir desarrollar con el ltimo y
mejor lenguaje de programacin que exista pero los desarrolladores
responsables de mantener antiguas aflicciones heredadas podran no poder
hacer esta eleccin sobre el lenguaje de programacin que utilizan.

No se encuentra fuertemente asociado a ningn protocolo de


transporte: La especificacin de SOAP no describe como se deberan asociar
los mensajes de SOAP con HTTP. Un mensaje de SOAP no es ms 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
mayora de los sistemas de objetos distribuidos se pueden extender, y ya lo
estn alguno de ellos para que admitan SOAP.

Aprovecha los estndares existentes en la industria : Los principales


contribuyentes a la especificacin SOAP evitaron, intencionadamente,
reinventar las cosas. Optaron por extender los estndares existentes para que
coincidieran con sus necesidades. Por ejemplo, SOAP aprovecha XML para la
codificacin de los mensajes, en lugar de utilizar su propio sistema de tipo que
ya estn definidas en la 2 especificacin 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 mltiples entornos : SOAP se
desarrollo sobre los estndares existentes de la industria, por lo que las
aplicaciones que se ejecuten en plataformas con dicho estndares pueden
comunicarse mediante mensaje SOAP con aplicaciones que se ejecuten en
otras plataformas. Estructura de un mensaje SOAP SOAP proporciona un
mecanismo estndar de empaquetar un mensaje. Un mensaje SOAP se
compone de un sobre que contiene el cuerpo del mensaje y cualquier
informacin 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
argumentos y sus tipos de datos, y se debe de aclarar que todo via XML,
entonces hay un asunto de codificacin 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 informacin va XML, pues se tienen que tomar los
cuidados necesarios.
Una gramtica basada en XML que permite describir las capacidades de
un servicio Web.

http://www.prograweb.com.mx/pweb/index.html