Date post: | 10-Dec-2015 |
Category: |
Documents |
Upload: | raudel-arteaga |
View: | 9 times |
Download: | 0 times |
2.1. Arquitectura de las aplicaciones Web
La arquitectura tradicional de cliente/servidor también es conocida como arquitectura de dos capas. Requiere una interfaz de usuario que se instala y se ejecuta en una PC o estación de trabajo y envía solicitudes a un servidor para ejecutar operaciones complejas.
Por ejemplo, una estación de trabajo utilizada como cliente puede ejecutar una aplicación de interfaz de usuario que interroga a un servidor central de bases de datos.
Ventajas del Sistema de Dos Capas:
El desarrollo de aplicaciones en un ambiente de dos capas funciona adecuadamente, pero no es necesariamente lo más eficiente. Las herramientas para el desarrollo con dos capas son robustas y ampliamente evaluadas.
Las técnicas de ingeniería de software de prototipo se emplean fácilmente. Las soluciones de dos capas trabajan bien en ambientes no dinámicos estables, pero no se ejecutan bien en organizaciones rápidamente cambiantes.
Desventajas del sistema de dos capas:
Los ambientes de dos capas requieren control excesivo de las versiones y demandan esfuerzo de distribución de la aplicación cuando se les hacen cambios. Esto se debe al hecho de que la mayoría de la aplicación lógica existe en la estación de trabajo del cliente.
La seguridad del sistema en un diseño de dos capas es compleja y a menudo requiere administración de las bases de datos; esto es debido al número de dispositivos con acceso directo al ambiente de esas bases de datos.
Las herramientas del cliente y de la base de datos, utilizadas en diseños de dos capas, constantemente están cambiando. La dependencia a largo plazo de cualquier herramienta, puede complicar el escalamiento futuro o las implementaciones.
Arquitectura de tres capas
La arquitectura de tres capas es un diseño reciente que introduce una capa intermedia en el proceso. Cada capa es un proceso separado y bien definido corriendo en plataformas separadas. En la arquitectura tradicional de tres capas se instala una interfaz de usuario en la computadora del usuario final (el cliente). La arquitectura basada en Web transforma la interfaz de búsqueda existente (el explorador de Web), en la interfaz del usuario final.
La arquitectura de las aplicaciones Web suelen presentar un esquema de tres niveles.
El primer nivel consiste en la capa de presentación que incluye no sólo el
navegador, sino también el servidor web que es el responsable de presentar los
datos un formato adecuado.
El segundo nivel está referido habitualmente a algún tipo de programa o script.
Finalmente, el tercer nivel proporciona al segundo los datos necesarios para su
ejecución. Una aplicación Web típica recogerá datos del usuario (primer nivel),
los enviará al servidor, que ejecutará un programa (segundo y tercer nivel) y
cuyo resultado será formateado y presentado al usuario en el navegador (primer nivel otra vez).
Las diferentes capas suelen ser:
Capa 1: Cliente de aplicación: Navegador Web
Capa 2 : Servidor de Aplicaciones: Apache, Servidor Tomcat con servlet’s
Capa 3 : Servidor de Datos: Base de datos, servidor SMTP…
Ventajas de la arquitectura de tres capas:
Las llamas de la interfaz del usuario en la estación de trabajo, al servidor de capa intermedia, son más flexibles que en el diseño de dos capas, ya que la estación solo necesita transferir parámetros a la capa intermedia.
Con la arquitectura de tres capas, la interfaz del cliente no es requerida para comprender o comunicarse con el receptor de los datos. Por lo tanto, esa
estructura de los datos puede ser modificada sin cambiar la interfaz del usuario en la PC.
El código de la capa intermedia puede ser reutilizado por múltiples aplicaciones si está diseíado en formato modular. La separación de roles en tres capas, hace más fácil reemplazar o modificar una capa sin afectar a los módulos restantes.
Desventajas de las Arquitecturas de Tres Capas y basadas en Web.
Los ambientes de tres capas pueden incrementar el tráfico en la red y requiere más balance de carga u tolerancia a las fallas.
Los exploradores actuales no son todos iguales.
La estandarización entre diferentes proveedores ha sido lenta en desarrollarse. Muchas organizaciones son forzadas a escoger uno en lugar de otro, mientras que cada uno ofrece sus propias y distintas ventajas.
2.2. Lenguajes de programación del lado del cliente
Un lenguaje del lado cliente es totalmente independiente del servidor, lo cual permite que la página pueda ser albergada en cualquier sitio. Pero nuestra página no se verá bien si la computadora cliente no tiene instalados los plug-in adecuados. El código, tanto del hipertexto como de losscripts, es accesible a cualquiera y ello puede afectar a la seguridad.
Javascript.
Javascript es un lenguaje de programación que realiza acciones dentro del ámbito de una página web. Su compatibilidad con la mayoría de los navegadores modernos, lo posiciona como el lenguaje de programación del lado del cliente más utilizado. Con Javascript podemos crear efectos especiales en las páginas y definir interacción con el usuario. El navegador (browser) del cliente es el encargado de interpretar las instrucciones Javascript y ejecutarlas
para realizar estos efectos e interactividades, de modo que el mayor recurso, y tal vez el único, con que cuenta este lenguaje es el propio navegador.
Entre las acciones típicas que se pueden realizar en Javascript tenemos dos vertientes. Por un lado los efectos especiales sobre páginas web, para crear contenidos dinámicos y elementos de la página que tengan movimiento, cambien de color o cualquier otro dinamismo.
Por el otro, javascript nos permite ejecutar instrucciones como respuesta a las acciones del usuario (eventos), con lo que podemos crear páginas interactivas con programas como calculadoras, agendas, o tablas de cálculo.
Javascript es un lenguaje con muchas posibilidades, es orientado a objetos, con funciones, estructuras de datos complejas, etc.
Además, Javascript pone a disposición del programador todos los elementos que forman la página web, para que éste pueda acceder a ellos y modificarlos dinámicamente.
JavaScript no permite dos de las características clásicas de los lenguajes orientados a objetos (herencia y polimorfismo), pero permite la creación y manipulación de objetos sencillos, y la definición de métodos y propiedades para dichos objetos.
JavaScript soporta el Modelo de Objetos de Documento (DOM, Document Object Model). El DOM es el conjunto de objetos predefinidos que nos permite acceder a todos los elementos de una página y a ciertas características específicas del navegador.
<html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Ejemplo JavaScript</title></head><body><script> var respuesta = confirm("Aceptame o rechazame") alert ("Has pulsado: " + respuesta) </script>
Ejecutar
</body></html>
Visual Basic Script
Es un lenguaje de programación de scripts del lado del cliente, sólo compatible con Internet Explorer. Es por ello se usa poco. Está basado en Visual Basic de Microsoft. Tanto su sintaxis y modo de operación es una versión reducida del primero. El modo de funcionamiento de Visual Basic Script para construir efectos especiales en páginas web es muy similar al utilizado en Javascript y los recursos a los que se puede acceder también son los mismos: el navegador.
Applets de Java
Son programas hechos en Java, que se transfieren con las páginas web y que el navegador ejecuta en el espacio de la página. Los applets son más difíciles de programar que los scripts en Javascript y requerirán conocimientos medios del lenguaje Java. La principal ventaja de utilizar applets consiste en que son independientes del navegador, del sistema operativo y multiplataformas.
Cada sistema operativo dispone de una máquina Virtual de Java que puede interpretar los Byte Codes y transformarlos a sentencias ejecutables en el sistema en cuestión.
Arquitectura de appletviewer
El appletviewer representa la interfaz mínima de navegación. En la figura se muestran los pasos que seguiría appletviewer para presentarnos el resultado de la ejecución del código de nuestra clase.
Esta es una visión simplificada del appletviewer. La función principal de esta aplicación es proporcionar al usuario un objeto de tipo Graphics sobre el que dibujar, y varias funciones para facilitar el uso del objeto Graphics.
Ciclo de vida de un Applet
Cuando un applet se carga en el appletviewer, comienza su ciclo de vida, que pasaría por las siguientes fases:
Se crea una instancia de la clase que controla el applet. En el ejemplo de la
figura anterior, sería la clase HolaMundo.
El applet se incializa.
El applet comienza a ejecutarse.
El applet empieza a recibir llamadas. Primero recibe una
llamada init (inicializar), seguida de un mensaje start (empezar) y paint (pintar).
Estas llamadas pueden ser recibidas asíncronamente.
Flash
Es un programa multimedia de Adobe que se utiliza para crear presentaciones animadas. Se trata de una aplicación “del lado del cliente” que es leída por los principales navegadores. Las animaciones se realizan a partir de vectores y de
imágenes en base a píxeles (llamadas “raster graphics”) y pueden incluir audio y video. Este programa es uno de los más utilizados para animar sitios Web y permitir la interactividad.
Crítica de Steve Jobs
Flash una tecnología 100% propietaria, argumenta que los estándares web
deben de ser completamente abiertos.
Adobe asevera que los dispositivos que no tienen soporte para Flash, no tienen
acceso a toda la web, “porque más del 75% del vídeo en Internet está basado
en Flash". Pero lo que no dicen, es que casi todo ese contenido, también está
disponible en formatos más modernos como el H.264“.
Flash ofrece poca seguridad a sus usuarios. Dice que es uno de los principales
culpables que las computadoras Mac fallen. Afirma que han tratado de trabajar
conjuntamente con Adobe para corregir los problemas, pero que estos persisten
después de varios años. “No queremos reducir la confiabilidad y la seguridad
del iPhone, del iPod, o del iPad añadiendo la tecnología Flash“.
Flash se desempeña pobremente en los dispositivos portátiles, dado que
consume mucha energía, además de que también, consume demasiados
recursos aunque el hardware sea capaz de reproducir dicho contenido.
2.3. Lenguajes de programación del lado Servidor
Existe una multitud de lenguajes concebidos o no para Internet. Cada uno de ellos explota más a fondo ciertas características que lo hacen más o menos útiles para desarrollar distintas aplicaciones.
Un lenguaje del lado del servidor es aquel que se ejecuta en el servidor web, justo antes de que se envíe la página a través de Internet al cliente. Las páginas que se ejecutan en el servidor pueden realizar accesos a bases de datos, conexiones en red, y otras tareas para crear la página final que verá el cliente.
Los lenguajes de lado servidor más ampliamente utilizados para el desarrollo de páginas dinámicas son el ASP, JSP, PERL y PHP.
ASP.NET (Active Server Pages).
Lenguaje comercializado por Microsoft, y usado por programadores para desarrollar entre otras funciones, sitios web. ASP.NET es el sucesor de la tecnología ASP, fue lanzada al mercado mediante una estrategia de mercado denominada .NET.
Se desarrollado para resolver las limitantes que brindaba tu antecesor ASP. Para el desarrollo de ASP.NET se puede utilizar C#, VB.NET o J#. Los archivos cuentan con la extensión (aspx). Para su funcionamiento de las páginas se necesita tener instalado IIS con el Framework .Net. Microsft Windows 2003 incluye este framework, solo se necesitará instalarlo en versiones anteriores.
El lenguaje ASP consiste en una serie de clases .NET utilizadas para crear aplicaciones Web, tanto del lado cliente (Web Form) como del lado servidor (Web Service). La integración de nativa .NET Framework con el sistema operativo Windows Server 2003 hace que su ejecución sea más estable y rápida que otros lenguajes de programación.
Las páginas creadas con la tecnología ASP.NET funcionan en todo tipo de navegadores – incluyendo Netscape, Safari y Internet Explorer.
Actualizaciones Dinámicas Soporte de servicios web XML Conexiones del tipo DSN, o sin utilización de DSN, para acceder a fuentes de datos ODBC.
Ventajas:
Completamente orientado a objetos.
Controles de usuario y personalizados.
División entre la capa de aplicación o diseño y el código.
Facilita el mantenimiento de grandes aplicaciones.
Incremento de velocidad de respuesta del servidor.
Mayor velocidad.
Mayor seguridad.
Desventajas:
Mayor consumo de recursos.
Tecnología propietaria.
Hospedaje de sitios web costosos.
JSP
Es un lenguaje para la creación de sitios web dinámicos, acrónimo de Java Server Pages. Está orientado a desarrollar páginas web en Java. JSP es un lenguaje multiplataforma.
JSP fue desarrollado por Sun Microsystems. Comparte ventajas similares a las de ASP.NET, desarrollado para la creación de aplicaciones web potentes. Posee un motor de páginas basado en los servlets de Java. Para su funcionamiento se necesita tener instalado un servidor Tomcat.
Características:
Código separado de la lógica del programa.
Las páginas son compiladas en la primera petición.
Permite separar la parte dinámica de la estática en las páginas web.
Los archivos se encuentran con la extensión (jsp).
El código JSP puede ser incrustado en código HTML.
Los elementos que pueden ser insertados en las páginas JSP son los siguientes:
Código: se puede incrustar código “Java”.
Directivas: permite controlar parámetros del servlet.
Acciones: permite alterar el flujo normal de ejecución de una página.
Ventajas:
Ejecución rápida del servlets.
Crear páginas del lado del servidor.
Multiplataforma.
Código bien estructurado.
Integridad con los módulos de Java.
La parte dinámica está escrita en Java.
Desventajas:
Complejidad de aprendizaje.
PERL
Perl (Practical Extraction and Report Language) es un lenguaje de programación desarrollado por Larry Wall (lwall at netlabs.com) inspirado en otras herramientas de UNIX como son: sed, grep, awk, c-shell, para la administración de tareas propias de sistemas UNIX. No establece ninguna filosofía de programación concreta. No se puede decir que sea orientado a objetos, modular o estructurado aunque soporta directamente todos estos paradigmas; su punto fuerte son las labores de procesamiento de textos y
archivos. Lenguaje de programación basado en scripts portable a casi cualquier plataforma. Es muy utilizado para escribir CGIs. Uno de sus elementos más potentes son las expresiones regulares, que a partir de su versión en Perl han sido adoptadas por otros lenguajes y plataformas como .NET o Javascript.
Ventajas
Es un buen lenguaje “pegamento”. Se pueden juntar varios programas de una
forma sencilla para alcanzar una meta determinada. Los usuarios de Windows
agradecerán esta propiedad ya que normalmente adolecen de un buen lenguaje
tipo “script”.
Es relativamente rápido para un lenguaje tipo “script”.
Está disponible en múltiples plataformas y sistemas operativos (UNIX, Linux y
Windows). Un programa que se escriba teniendo en cuenta la compatibilidad
puede ser escrito en una plataforma y ejecutado en otra.
El desarrollo de aplicaciones es muy rápido.
Hay una colección enorme de módulos que pueden ser incorporados a
cualquier “script” de Perl. Están disponibles en el CPAN (“Comprehensive Perl
Archive Network”). En particular existe una extensión para cálculo numérico
denominada PDL.
Perl es gratuito. Mucho más que eso, es “Software Libre”. Esto quiere decir que
el código fuente está disponible para que cualquiera lo pueda ver o modificar, y
lo que es más importante, siempre lo estará. Aunque nunca pretendas cambiar
el código, es importante disponer de la posibilidad de hacerlo, ya que siempre
se podrá contratar a una tercera persona para que lo modifique en el caso de
que haya un error, y debería ser posible solucionarlo.
Le otorga al programador mucha libertad para que haga el programa como
quiera. Tal como dice el eslogan de Perl “Hay más de una forma de hacerlo”.
Desventajas
Es lento para algunas aplicaciones, como programación a bajo nivel,
escribiendo un “driver” para una aplicación o corriendo modelos numéricos de
cálculo intensivo. Si bien se pueden insertar subrutinas FORTRAN o C en Perl,
teniendo lo mejor de los dos mundos, pero con algo más de complejidad.
La libertad que se le otorga al programador puede significar que el resultado
sea un programa ilegible. Si no se escribe con cuidado puede llegar a ser difícil
de leer. De hecho hay un concurso de Perl ofuscado.
Perl es un lenguaje interpretado. Este tema no es tan crítico como suena, los
programas Perl no correrán mucho más rápidos cuando se compilen, la única
ventaja está en la desaparición de la fase inicial de compilación al correr la
aplicación.
Utiliza muchos recursos de computó. Esto significa que no es tan ligero como
un programa en C, pero en la práctica es ligero comparado con la potencia de
procesamiento de las computadoras actuales.
PHP
PHP es el acrónimo de Hipertext Preprocesor. Es un lenguaje de programación del lado del servidor gratuito e independiente de plataforma, rápido, con una gran librería de funciones y mucha documentación. Fue creado originalmente en 1994 por Rasmus Lerdorf, pero como PHP está desarrollado en política de código abierto, a lo largo de su historia ha tenido muchas contribuciones de otros desarrolladores.
El cliente solamente recibe una página con el código HTML resultante de la ejecución de la PHP. Como la página resultante contiene únicamente código HTML, es compatible con todos los navegadores.
Ventajas: Muy fácil de aprender.
Se caracteriza por ser un lenguaje muy rápido.
Soporta en cierta medida la orientación a objeto. Clases y herencia.
Es un lenguaje multiplataforma: Linux, Windows, entre otros.
Capacidad de conexión con la mayoría de los manejadores de base de datos:
MysSQL, PostgreSQL, Oracle, MS SQL Server, entre otras.
Capacidad de expandir su potencial utilizando módulos.
Posee documentación en su página oficial la cual incluye descripción y
ejemplos de cada una de sus funciones.
Es libre, por lo que se presenta como una alternativa de fácil acceso para todos.
Incluye gran cantidad de funciones.
No requiere definición de tipos de variables ni manejo detallado del bajo nivel.
Desventajas:
Todo el trabajo lo realiza el servidor y no delega al cliente. Por tanto puede ser
más ineficiente a medida que las solicitudes aumenten de número.
La legibilidad del código puede verse afectada al mezclar sentencias HTML y
PHP.
La programación orientada a objetos es aún muy deficiente para aplicaciones
grandes.
Dificulta la modularización.
Dificulta la organización por capas de la aplicación.
Seguridad:
PHP es un poderoso lenguaje e intérprete, ya sea incluido como parte de un servidor web en forma de módulo o ejecutado como un binario CGI separado, es capaz de acceder a archivos, ejecutar comandos y abrir conexiones de red en el servidor. Estas propiedades hacen que cualquier cosa que sea ejecutada en un servidor web sea insegura por naturaleza.
PHP está diseñado específicamente para ser un lenguaje más seguro para escribir programas CGI que Perl o C, y con la selección correcta de opciones de configuración en tiempos de compilación y ejecución, y siguiendo algunas prácticas correctas de programación.
2.4. Ambientes para el desarrollo de aplicaciones Web
Un entorno de desarrollo integrado (IDE- Integrated Development Environment -) también conocido como entorno de diseño integrado o el medio ambiente integrado de depuración es una aplicación de software que ofrece servicios integrales a los programadores de computadoras para el desarrollo de software. Un IDE normalmente se compone de:
Un editor de texto.
Un compilador.
Un intérprete.
Herramientas de automatización.
Un depurador.
Posibilidad de ofrecer un sistema de control de versiones.
Factibilidad para ayudar en la construcción de interfaces gráficas de usuario.
IDE para Php
Existen muchos entornos de desarrollo para PHP en software libre tales como: Zend Studio, Open Komodo Project, Eclipse + phpEclipse, entre otros.
Dreamweaver de Adobe
Es en una potente y flexible herramienta de desarrollo que inclute numerosas herramientas para facilitarnos el desarrollo de aplicaciones web.
Dreamweaver permite trabajar con los siguientes modelos de servidor:
ASP JavaScript
ASP VBScript
ASP.NET C#
ASP.NET VB
COLDFUSION
JSP
PHP MySQL
El concepto de sitios en Dreamweaver es bastante útil ya que nos permite mantener un orden lógico/físico de la estructura de nuestro sitio, enlaces y recursos que este utiliza, tiene el potencial para encargarse completamente de los enlaces relativos (recomendado).
Como se menciono Dreamweaver proporciona soporte para variados modelos de Servidor entregando capacidades de creación de código estándar para una
serie de funciones como son la inserción, edición, eliminación y consulta de datos, manejo de ciclos y condiciones, incluso acceso por restringido por password, todo esto de una forma muy básica, pero sin duda es un primer acercamiento para novatos, lo importante de esto es que podemos extender esta capacidad mediante nuestros conocimientos y usar este entorno de desarrollo para facilitarnos la dura tarea de desarrollar para la Web.
Jomla!
Joomla! es un Sistema de Gestión de Contenidos (CMS) premiado mundialmente, que le ayuda a construir sitios web y otras aplicaciones online potentes. Lo mejor de todo, es que Joomla es una solución de código abierto y está disponible libremente para cualquiera que desee utilizarlo.
Joomla! se utiliza en todo el mundo para generar desde una simple página web personal hasta complejas aplicaciones web corporativas. Entre los diferentes usos que la gente da a Joomla! están:
Webs corporativas o portales
Comercio electrónico
Pequeños sitios de negocios
Webs de organizaciones o ONGs
Aplicaciones gubernamentales
Intranets y extranets corporativas
Webs de escuelas o agrupaciones
Páginas personales o familiares
Portales de comunidades
Revistas y periódicos
Joomla se puede usar para gestionar fácilmente cualquiera de los aspectos de un sitio web, desde la introducción de contenidos e imágenes hasta la actualización de un catálogo de productos o la realización de reservaciones online.
WordPress
WordPress es un sistema de gestión de contenido enfocado a la creación de blogs (sitios web periódicamente actualizados). Desarrollado en PHP y MySQL, bajo licencia GPL y código modificable, tiene como fundador a Matt Mullenweg.
WordPress fue creado a partir del desaparecido b2/cafelog y se ha convertido junto a Movable Type en el CMS más popular de la blogosfera.
Las causas de su enorme crecimiento son, entre otras, su licencia, su facilidad de uso y sus características como gestor de contenidos.
2.5 Metodologías para el desarrollo de aplicaciones Web.
El creciente desarrollo del comercio electrónico así como el desplazamiento de las distintas organizaciones hacia la Web ha traído en la actualidaduna constante evolución de las aplicaciones Web. Cada día se incrementan las transacciones financieras, la transferencia de información confidencial y ejecución de procesos online, entre otros, las cuales exigen funcionalidad, confiabilidad, usabilidad y eficiencia por mencionar algunas características de calidad. Esta relevancia de la economía genera grandes desafíos en las aplicaciones Web que son los de controlar y mejorar su calidad.
Aunque las aplicaciones Web están creciendo rápidamente tanto en uso como en aceptación, su desarrollo tiende a ser ad hoc, resultando en aplicaciones de pobre calidad. La mayoría de los desarrolladores Web ponen poca atención en la elicitación y análisis de requisitos, así como en las metodologías y procesos de desarrollo. A demás los desarrolladores de aplicaciones confían excesivamente en el conocimiento y experticia de los desarrolladores individuales y sus prácticas de desarrollo individual más bien que en las prácticas estándar. No obstante, son las mismas metodologías de desarrollo las que no tratan de manera adecuada y profunda los atributos de calidad. Estas situaciones traen como consecuencia que los atributos de calidad de los sistemas basados en la Web tales como la funcionalidad, confiabilidad, mantenibilidad, usabilidad y portabilidad no se les da la debida consideración que se merecen durante el proceso de desarrollo.En la ingeniería software se denomina aplicación web a aquellas aplicaciones que los usuarios pueden utilizar accediendo a un servidor web a través de Internet o de una intranet mediante un navegador. En otras palabras, es una aplicación software que se codifica en un lenguaje soportado por los navegadores web en la que se confía la ejecución al navegador.
Las aplicaciones web son populares debido a lo práctico del navegador web como cliente ligero, así como a la facilidad para actualizarlas y mantenerlas. Algunas aplicaciones son: los webmails, wikis, weblogs, tiendas en línea, intranet.Ingeniería Web es el proceso utilizado para crear, implantar y mantener aplicaciones y sistemas Web de alta calidad. Esta breve definición nos lleva a abordar un aspecto clave de cualquier proyecto como es determinar que tipo de proceso es más adecuado en función de las características del mismo.
Un empleo sistemático y disciplinado de modelos, métodos y modelos de ingeniería de software en la Web para el aseguramiento y control de la calidad favorece a la compresión y análisis y potencialmente mejorar los desarrollos producidos.
El Proceso de Ingeniería Web
Características como inmediatez y evolución y crecimiento continuos, nos llevan a un proceso incremental y evolutivo, que permite que el usuario se involucre activamente, facilitando el desarrollo de productos que se ajustan mucho lo que éste busca y necesita.
Según Pressman, las actividades que formarían parte del marco de trabajo incluirían las tareas abajo enumeradas. Dichas tareas serían aplicables a cualquier aplicación Web, independientemente del tamaño y complejidad de la misma.
Las actividades que forman parte del proceso son: formulación, planificación análisis, modelado, generación de páginas, test y evaluación del cliente.
La formulación identifica objetivos y establece el alcance de la primera
entrega.
La planificación genera la estimación del costo general del proyecto, la
evaluación de riesgos y el calendario del desarrollo y fechas de entrega.
El análisis especifica los requerimientos e identifica el contenido.
La Modelado se compone de dos secuencias paralelas de tareas. Una consiste
en el diseño y producción del contenido que forma parte de la aplicación. La
otra, en el diseño de la arquitectura, navegación e interfaz de usuario. Es
importante destacar la importancia del diseño de la interfaz.
Independientemente del valor del contenido y servicios prestados, una buena
interfaz mejora la percepción que el usuario tiene de éstos.
En la generación de páginas se integra contenido, arquitectura, navegación e
interfaz para crear estética o dinámicamente el aspecto más visible de las
aplicación, las páginas.
El Test busca errores a todos lo niveles: contenido, funcional, navegacional,
rendimiento, etc. El hecho de que las aplicaciones residan en la red, y que
interoperen en plataformas muy distintas, hace que el proceso de test sea
especialmente difícil.
Finalmente, el resultado es sometido a la evaluación del cliente.
Control y Garantía de la Calidad
Una de las tareas colaterales que forman parte del proceso es el Control y Garantía de la Calidad (CGC). Todas las actividades CGC de la ingeniería software tradicional como son: establecimiento y supervisión de estándares, revisiones técnicas formales, análisis, seguimiento y registro de informes, etc, son igualmente aplicables a la Ingeniería Web. Sin embargo, en la Web toman especial relevancia para valorar la calidad aspectos como:
Usabilidad
Funcionabilidad
Fiabilidad
Seguridad
Eficiencia
Mantenibilidad
Control de la Configuración
Establecer mecanismos adecuados de control de la configuración para la Ingeniería Web es uno de los mayores desafíos a los que esta nueva disciplina se enfrenta. La Web tiene características únicas que demandan estrategias y herramientas nuevas. Hay cuatro aspectos importantes a tener en cuenta en el desarrollo de tácticas de control de configuración para la Web.
Contenido: Considerando la dinamicidad con la que el contenido se genera, es
tarea compleja organizar racionalmente los objetos que forman la configuración
y establecer mecanismos de control.
Personal: Cualquiera realiza cambios. Hay mucho personal no especializado
que no reconoce la importancia que tiene el control del cambio.
Escalabilidad: Es común encontrar aplicaciones que de un día para otro
crecen considerablemente. Sin embargo, las técnicas de control no escalan de
forma adecuada.
Política: ¿Quién posee la información? ¿Quién asume la responsabilidad y
coste de mantenerla?
La Gestión del Proceso
En un proceso tan rápido como es el proceso de Ingeniería Web, donde los tiempos de desarrollo y los ciclos de vida de los productos son tan cortos,¿merece la pena el esfuerzo requerido por la gestión? La respuesta es que dada su complejidad es imprescindible. Entre los aspectos que añaden dificultad a la gestión destacamos:
Alto porcentaje de contratación a terceros
El desarrollo incluye una gran variedad de personal técnico y no técnico
trabajando en paralelo
El equipo de desarrollo debe dominar aspectos tan varidos como, software
basado en componentes, redes, diseño de arquitectura y navegación, diseño
gráfico y de interfaces, lenguajes y estándares en Internet, test de aplicaciones
Web, etc, lo que hace que el proceso de búsqueda y contratación de personal
sea arduo.
¿Qué marca la diferencia?
A modo de breve resumen enumeramos las siguientes diferencias: Confluencia de disciplinas: Sistemas de información, ingeniería software y
diseño gráfico que requiere equipos multidisciplinares y polivalentes. Ciclos de
vida y tiempo de desarrollo muy cortos
Cambio continuo:
Necesidad de soluciones que permitan flexibilidad y adaptación conforme el
proyecto cambia.
Requisitos fuertes de seguridad, rendimiento y usabilidad.
¿Por qué es necesaria?
La Web evoluciona y crece sin diseño alguno. Prácticas tan pobres de calidad pueden introducir defectos que dejen al efecto 2000 como un juego de niños. Es deber de todos proporcionar cimientos firmes a una tecnología que “mágicamente” nos permite acceder a cualquier hora a cualquier punto del planeta para obtener bienes tan valiosos como son los servicios y la información.
Conclusiones
La aplicación de principios de ingeniería pueden evitar el caos potencial al que nos enfrentamos, y poner bajo control el desarrollo de las aplicaciones Web, minimizando riesgos y mejorando el mantenimiento y calidad.
2.6. Aspectos de seguridad.
Hoy en día las aplicaciones web son uno de los servicios más utilizados ya sea accediendo a un servidor web a través de internet o de una intranet.
Los lenguaje de programación web son versátiles, sencillos de usar y permiten crear soluciones de gran envergadura.
Las aplicaciones escritas en estos lenguajes están expuestas a diversas amenazas si no se toman las medidas adecuadas para evitarlo, por este motivo se resalta la importancia de la formación en seguridad que deberían de recibir todos los programadores.
Si no se procede de forma correcta, las aplicaciones web desarrolladas en estos lenguajes pueden servir como puerta de entrada de un intruso a la red de la empresa, por lo que la seguridad de este tipo de aplicaciones tiene que ser tomada como prioritaria para no exponer la seguridad de su negocio.
Esta formación está orientada a que los equipos de programadores conozcan y utilicen las buenas prácticas en el diseño y desarrollo de aplicaciones para evitar vulnerabilidades de seguridad.
El objetivo del mismo es conocer como proteger la aplicación contra los fallos más comunes (SQL Injection, XSS, Command Execution, File Inclusion …).
Las fallas de seguridad más comunes son:
Cross Site Scripting (XSS). Las vulnerabilidades de XSS originalmente
abarcaban cualquier ataque que permitiera ejecutar código de "scripting", como VBScript o JavaScript, en el contexto de otro sitio web (y recientemente esto se
podría clasificar más correctamente como "distintos orígenes").
Injection Flaws
Insecure Remote File Include
Insecure Direct Object Reference
Cross Site Request Forgery (CSRF)
Information Leakage and Improper Error Handling
Broken Authentication and Session Management
Insecure Cryptographic Storage
Insecure Communications
Failure to Restrict URL access
3.1. Procesamiento del lado del servidor.
La Programación del lado del servidor es una tecnología que consiste en el procesamiento de una petición de un usuario mediante la interpretación de un script en el servidor web para generar páginas HTML dinámicamente como respuesta.
Todo lo que suceda dentro del servidor es llamado procesamiento del lado del servidor, o server-side processing. Cuando tu aplicación necesita interactuar con el servidor (por ejemplo, para cargar o guardar datos), ésta realiza una petición del lado del cliente (client-side request) desde el navegador, a través de la red usando invocaciones remotas a métodos (remote procedure
call, RPC). Mientras se está procesando una llamada RPC, tu servidor está ejecutando código del lado del servidor.
La utilización de las diferentes aplicaciones o servicios de Internet se lleva a cabo respondiendo al llamado modelo cliente-servidor.
Cuando se utiliza un servicio en Internet, como consultar una base de datos, transferir un archivo o participar en un foro de discusión, se establece un proceso en el que entran en juego dos partes. Por un lado, el usuario, quien ejecuta una aplicación en procesador local: el denominado programacliente. Este programa cliente se encarga de ponerse en contacto con el procesador remoto para solicitar el servicio deseado. El procesador remoto por su parte responderá a lo solicitado mediante un programa que esta ejecutando. Este último se denomina programa servidor. Los términos cliente y servidor se utilizan tanto para referirse a los programas que cumplen estas funciones, como a las computadoras donde son ejecutados esos programas.
El programa o los programas cliente que el usuario utiliza para acceder a los servicios de Internet realizan dos funciones distintas. Por una parte, se encargan de gestionar la comunicación con el computador servidor, de solicitar un servicio concreto y de recibir los datos enviados por éste; y por otra, es la herramienta que presenta al usuario los datos en pantalla y que le ofrece los comandos necesarios para utilizar las prestaciones que ofrece el servidor.
Cuando nosotros seleccionamos un enlace hipertexto, en realidad lo que pasa es que establecemos una petición de un archivo HTML residente en el servidor (una computadora que se encuentra continuamente conectado a la red) el cual es enviado e interpretado por nuestro navegador (el cliente).
Así pues, podemos hablar de lenguajes de lado servidor que son aquellos lenguajes que son reconocidos, ejecutados e interpretados por el propio servidor y que se envían al cliente en un formato comprensible para él, por ejemplo: ASP, PHP, JSP.
Por otro lado, los lenguajes de lado cliente (entre los cuales no sólo se encuentra el HTML sino también el Java y el JavaScript los cuales son simplemente incluidos en el código HTML) son aquellos que pueden ser directamente "digeridos" por el navegador y no necesitan un pretratamiento.
Cada uno de estos tipos tiene por supuesto sus ventajas y sus inconvenientes. Así, por ejemplo, un lenguaje de lado cliente es totalmente independiente del servidor, lo cual permite que la página pueda ser albergada en cualquier sitio sin necesidad de pagar más ya que, por regla general, los servidores que aceptan páginas con scripts de lado servidor son en su mayoría de pago o sus prestaciones son muy limitadas.
Inversamente, un lenguaje de lado servidor es independiente del cliente por lo que es mucho menos rígido respecto al cambio de un navegador a otro o respecto a las versiones del mismo.
3.2. Conceptos básicos de la herramienta de desarrollo
Una herramienta es un objeto elaborado a fin de facilitar la realización de una tarea mecánica que requiere de una aplicación correcta de energía. El término herramienta, en sentido estricto, se emplea para referirse a utensilios resistentes, útiles para realizar trabajos mecánicos que requieren la aplicación de una cierta fuerza física.
Cada herramienta tiene un fin específico y debería ser usado solo con un fin determinado, Sin embargo esto no se cumple en la mayoría de las tareas del quehacer humano y mucho menos en las aplicaciones web. Cuando pensemos en las mejores herramientas para el desarrollo web es necesario pensar en donde estará alojado nuestro sitio (hosting).
El hosting o alojamiento web es un sistema esencial para el funcionamiento de los sitios en Internet y es el lugar donde físicamente reside nuestra información. Si tenemos recursos ilimitados para tener nuestro propio sitio entonces tendriamos que hacer una gran investigación para seleccionar las herramientas más sofisticadas. Sin embargo para la mayoría de las aplicaciones debemos pagar porque nuestra información sea colocada en cierto servidor.
El lugar donde físicamente se almacenara nuestra información determina los lenguajes soportados (cliente, servidor), el gestor de la base de datos y las prestaciones que podremos ofrecer a nuestro futuros usuarios.
Sin el afan de romperse las camisas discutiendo este punto, las herramientas que usaremos para desarrollar el sitio, dependen de las preferencias, del acceso a las herramientas ("licencias") y la disponibilidad . En resumen cada quien habla como le va en la feria. Si somos expertos en un X lenguaje y el sistema Operativo de nuestro host no lo soporta, podremos tener las herramientas más sofisticadas pero no servirán de nada.
Las fases de un desarrollo web, así como los lenguajes de programación usados, son muy extensas y variadas, y por ello necesitamos herramientas específicas para cada una de ellas. Conoceremos a continuación las principales herramientas existentes para poder desarrollar fácilmente unproyecto web.
En el desarrollo web tenemos unas herramientas para el diseño, otras para la maquetación, otras para la programación, y para la depuración.Todas las herramientas que usemos son muy importantes, desde el sistema operativo hasta el comando más insignificante, y por ello debemos elegir la más adecuada a nuestras necesidades y capacidades.
Sistema Operativo
Para desarrollar una web, lo primero que necesitamos es un Sistema Operativo, como es lógico, y su elección no es tan trivial. Hay que tener en cuenta las aplicaciones de las que dispone el Sistema Operativo y sus costos.
Si pensamos desarrollar en .NET este solo es soportado por windows y los costos de hospedaje son mas caros que los que soportan Linux.
Fases de desarrollo de una web
Para elegir las herramientas a utilizar, antes debemos identificar las fases del proceso que forman el ciclo de vida de un desarrollo web.
Diseño: consiste en crear esbozos de la web final mediante una herramienta
gráfica, como Photoshop
Maquetación HTML/CSS: consiste en convertir los esbozos creados en la
fase anterior en plantillas HTML, su respectiva hoja de estilos, y las imágenes
usadas. Es posible saltarse la fase anterior para comenzar directamente con
esta fase, dependiendo de si dominamos herramientas como Photoshop o no.
Programación cliente: consiste básicamente en Javascript. Existen muchas
librerias de distribución libre como JQUERY que nos aportan verdaderas joyas
para el desarrollo.
Programación servidor: en esta fase, que se desarrolla junto con la anterior,
crearemos la aplicación web en un lenguaje de servidor, como puede ser PHP,
ASP .NET, Python, Perl, Java, etc.
Depuración: esta fase enlaza la anterior con la siguiente, y es donde haremos
las pruebas unitarias, aserciones, trazas, etc.
Pruebas en local: en nuestro servidor local haremos todas las pruebas
posibles. Por ejemplo usando wampServer
Subir archivos al hosting: Dependiendo del hosting, podremos usar FTP,
SSH, aconsejo usar cuteFTP es una herramienta confiable y versatil.
Pruebas en hosting: realizaremos las últimas pruebas en el servidor del
hosting para comprobar que el cambio de servidor no ha afectado a nada. Para
evitar problemas, nuestro servidor local debe tener exactamente la misma
configuración que el servidor del hosting. Recuerde probar que sus códigos
sean compatibles al menos con Firefox, Safari e Internet explorer
En general podemos usar comercialmente la suite de Adobe que incluye a Dreamwever y sus herramientas de edición un servidor FTP, además de validar nuestros códigos javascript y css. Con el inconveniente de ser una herramienta muy cara.
En contra parte, va versión Joomla! edition de kademar Linux es la adaptación de la versión de Escritorio DVD (Leo) 4.9.1 con la inclusión de los programas necesarios para trabajar con el gestor de contenidos Joomla!.
En esta edición se incluye instalado el gestor de contenidos Joomla, junto con los programas necesarios para su funcionamiento totalmente instalados y configurados. Es posible aprender a usar Joomla! sin necesidad de buscar un
servidor de hosting para crear páginas web. Está funcionando en local y no se tiene que pelear con la instalación de todo lo necesario: base de datos MySql, phpmyadmin, apache.... etc. Todo está ya instalado y configurado, plenamente funcional para usarlo inmediatamente.
3.3. Variables
Para ejemplificar como se estructura un programa en PHP, checaremos el siguiente código para probar nuestro primer programa. El cual, muestra el himno del Tecnológico de Veracruz.
Los programas en PHP inician con "<?php" y terminan con el tag "?>". En el código la instrucción echo imprime en pantalla la cadena encerrada entre pares de '"'. Note que entre las líneas encontramos el tag html "<br />" lo cual regresa un retorno de línea.
Además observe que cada línea termina con un ";".
?123456789
<?php echo "Himno del Instituto Tecnológico de Veracruz"; echo"Letra: Francisco Rivera Ávila. "; echo"Música: Agustín Lara y Aguirre"; echo "Con ilusión, prestancia y con valor,"; echo "con juvenil deseo de vencer,"; echo "a mi Instituto voy con sin igual fervor,"; echo "en busca de la luz y del saber."; ?>
DescargarEjecutar
Variables.
Las variables en PHP no necesitan, a diferencia de otros lenguajes de programación ser declaradas específicamente dado que cuando a una variable se le asigna un valor esta se inicializa en forma automática determinando la cantidad de memoria necesaria para dicha variable.
Los nombres de las variables van precedidas del signo "$". Los nombres de las variables son sensibles al uso de las mayúsculas y minúsculas. De tal forma que la sintaxis correcta es:
$nombreVariable = valor;
Por ejemplo, las siguientes asignaciones serían perfectamente validas
?1234
$miNovia = "Gabriela Vergara <br />";$nacio = "Caracas, Venezuela<br />";$cumple = "29 de Mayo <br />";$signo = "Géminis <br />"
El nombre de una variable también se conoce como identificador y debe cumplir las siguientes normas:
Sólo puede estar formada por letras y números y los símbolos ($ dólar
y _ guión bajo).
El primer carácter del nombre del identificador o varible debe ser estrictamente
el signo de dólar.
Ahora observe el siguiente código, después de ejecutarlo, use la opción ver código fuente de su navegador y encontraras solo código html.
?123456789101112
<?php
$foto = "<img src='../img/artistas/gabrielaVergara.jpg' />"; $miNovia = 'Gabriela Vergara'; $nacio = 'Caracas, Venezuela'; $cumple = '29 de Mayo'; $signo = 'Géminis'; echo $foto; echo 'Mi novia: '.$miNovia."<br />"; echo 'Nacio: '.$nacio."<br />"; echo 'Cumpleaños: '.$cumple."<br />"; echo 'Signo: '.$signo."<br />";?>
DescargarEjecutar
Tipos de datos
PHP soporta los siguientes tipos y son definidos en tiempo de ejecución
integer. Son datos de tipo numérico entero
double. Datos numéricos en coma flotante ( manejo de decimales)
string. Cadenas alfanuméricas.
boolean. Valores de tipo Verdadero o Falso como resultado de evaluar una
condición, estado de una variable, etc. array . Matrices
object. Estructuras complejas de datos.
class. Moldes mediante los cuales se crean los objetos
unknown type. Tipo desconocido
NULL.Es el tipo de una variable a la que aún no se le asigna valor alguno.
Para forzar una variable a un tipo concreto use la función settype()
Dado que las variables no se declaran, el tipo se adquiere en tiempo de ejecución al tipo que usted quiera. Dependiendo de la información que contenga, una variable puede ser considerada de uno u otro tipo:
Usos de las variables
Tipo Asignación Resultado
Entero $edad = 45; Números sin decimales
Real$pi = 3.1415;
Números en punto flotante.
Octal $a = 0123 Número octal (equivalente al 83 decimal).
Hexadecimal $b = 0x12Número hexadecimal (equivalente al 18 decimal).
Alfanuméricas
$c = "a" Variable alfanumérica
Usos de las variables
Tipo Asignación Resultado
Alfanuméricas
$c = 'a' Variable alfanumérica
Ejemplos:Expresión Resultado
$algo = 1 + 5; 6
$algo = 1 + "5"; 6
$algo = 3 + "4 es basura"; 7!!!
$algo = "4 es basura" + 7; 11!!!
$algo = "4.2 es basura" + 7.2 11.4!!!!!
DescargarEjecutar
Las cadenas (string) de caracteres se especifican entre uno de dos tipos de delimitadores (" o '). Encerrada entre doble comillas " es posible emplear los siguientes caracteres especiales.
Caracteres protegidos
Secuencia Significado
\n Nueva línea
\r Retorno de carro
\t Tabulación horizontal
\\ Barra invertida
\$ Signo de dólar
\" Comillas dobles
\[0-7]{1,3}La secuencia de caracteres que coincide con la expresión regular es un carácter en notación octal
\x[0-9A-Fa-f]{1,2}
La secuencia de caracteres que coincide con la expresión regular es un carácter en notación hexadecimal
Nuevamente, si intenta escapar cualquier otro carácter, ¡la barra invertida será impresa también! Antes de PHP 5.1.1, la barra invertida en \{$var} no venía imprimiéndose.
A diferencia de otros lenguajes, PHP posee una gran flexibilidad a la hora de operar con variables. En efecto, cuando definimos una variable asignándole un valor, el computador le atribuye un tipo. Si por ejemplo definimos una variable entre comillas, la variable será considerada de tipo cadena:
$variable="5"; //esto es una cadena
Sin embargo si pedimos en nuestro script realizar una operación matemática con esta variable, no obtendremos un mensaje de error sino que la variable cadena se tomara como numérica:
?12345678
<?php //esto es una cadena $cadena = '25'; //esto es un entero $entero = 15; echo "$cadena + $entero = "; echo $cadena + $entero?>
DescargarEjecutar
Este script dará como resultado "40". La variable cadena ha sido asimilada en entero (aunque su tipo sigue siendo cadena) para poder realizar la operación matemática. Del mismo modo, podemos operar entre variables tipo entero y real.
PHP se encarga durante la ejecución de interpretar el tipo de variable necesario para el buen funcionamiento del programa. Esto podría parecer una ventaja pero en la práctica es un dolor de cabeza.
Sin embargo, en contraste, hay que tener cuidado en no cambiar mayúsculas por minúsculas ya que, en este sentido, PHP es sensible. Conviene por lo tanto trabajar ya sea siempre en mayúsculas o siempre en minúsculas para evitar este conflicto regularmente difícil de identificar.
Variables predefinidas
PHP dispone de una gran cantidad de variables que ya están definidas, y que tenemos a disposición para usarlas dentro de nuestros script. Para ver todas las variables que tenemos disponibles en nuestro servidor y versión de PHP, es necesario hacer un llamado a la función predefinida phpinfo(). Por ejemplo:
?123
<?php echo phpinfo();?>
Ejecutar
A continuación se presentan algunas de las variables predefinidas. El resto de las variables las puede obtener de la página resultado del programa anterior.
Variable Descripción
$DOCUMENT_ROOTNombre del subdirectorio donde se ejecuta el script
$HTTP_ACCEPT_LANGUAGE Idioma utilizado
$HTTP_CONNECTIONIndica los contenidos de la cabecera Conecction.
$HTTP_REFERER http://localhost/
$HTTP_USER_AGENT Indica el navegador del cliente
$PHP_SELFNombre del archivo donde se está ejecutando el script
$QUERY_STRINGDevuelve la QueryString. Variables y sus valores
$REMOTE_ADDR IP del cliente
$REQUEST_METHODMétodo de petición con el cual se accedio a la página
$SERVER_FILENAMERuta y nombre del script que se esta ejecutando
$SERVER_PORT Puerto desde donde se ejecuta el scipt
$SERVER_PROTOCOL Versión del protocolo HTTP
Variable Descripción
$SERVER_SOFTWARENombre del servidor Web que está corriendo el script
$_SERVERVersión del servidor web y la versión de PHP
Con estas variables predefinidas se pueden hacer cosas interesantes, como por ejemplo pedir la $HTTP_ACCEPT_LANGUAGE y dependiendo de su contenido, enviar a los usuarios a sitios en su idioma. Para visualizar el contenido de cualquiera de estas variables predefinidas de PHP, use el siguiente código:
?123456789
<?php echo "Idioma: ".$HTTP_ACCEPT_LANGUAGE; echo "Navegador: ".$HTTP_USER_AGENT"; echo "Cabecera: ".$HTTP_CONNECTION; echo "IP cliente: ".$REMOTE_ADDR."; echo "Nombre del archivo:".$PHP_SELF; echo "Versión Apache: ".$SERVER_SOFTWARE; echo "Puerto: ".$SERVER_PORT; ?>
DescargarEjecutar
Ejemplo: Dirección IP del cliente
getIPReal es una función que nos regresa la IP del cliente
empty es una función PHP que nos dice si una variable está vacia o es nula.
?123456789
<?php function getIpReal() { if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip = $_SERVER['REMOTE_ADDR']; } return $ip; } echo 'ip = '.getIpReal();?>
1011
DescargarEjecutar
Expansión de variables
Propiedad de PHP de incluir el valor de la variables en una cadena. Y funciona si la cadena se dilimita con ".
La variable escudo se expande en la línea 5.
La variable capital se expande en la línea 11.
?123456789101112
<?php $estado = 'VERACRUZ DE IGNACIO DE LA LLAVE'; $escudo = '../img/escudoVeracruz.jpg'; $capital = 'Xalapa'; echo "<img src='$escudo' border='0' />"; echo "El nombre oficial de nuestro Estado es $estado, " echo "su origen se"; echo ' enmarca en una serie de acontecimientos históricos '; echo 'que marcaron un hito en la vida política, económica y '; echo 'social '; echo "de nuestro país. Su capital es $capital."; ?>
DescargarEjecutar
Variables de variables
PHP puede reconocer y manejar variables que se refieran a otras variables. Se trata de variables cuyo contenido es el nombre de otras variables. Por ejemplo: Las líneas 4, 7 y 10 hacen uso de la propiedad de referenciar variables.
?12
<?php
$saludo = 'Programmation en PHP';
34567891011
$mensaje = 'saludo'; echo $$mensaje."<br />"; $saludo = 'Programming in PHP'; $mensaje = 'saludo'; echo $$mensaje."<br />"; $saludo = 'Programacion en PHP'; $mensaje = 'saludo'; echo $$mensaje."<br />";?>
DescargarEjecutar
Otra forma de hacer uso de las variables de variables es:
Las líneas del 2 al 9 declaran variables con el nombre de los estados de la
Republica Mexicana
Mediante la expresión ${"estado".$i} se aplica la variable de variables (líneas
12 y 14)
?1234567891011121314151617
<?php $estado1 = 'Aguascalientes'; $estado2 = 'Baja California'; $estado3 = 'Baja California Sur'; $estado4 = 'Campeche'; . . . $estado30 = 'Veracruz'; $estado31 = 'Yucatan'; $estado32 = 'Zacatecas'; $cadena = ''; for($i = 1;$i <= 32; $i++) { $estado = 'estados/'.${'estado'.$i}.'.jpg'; $cadena .= "<img src='$estado' />"; $cadena .= ${'estado'.$i}; } echo $cadena;?>
DescargarEjecutar
Constantes
Una constante es un dato cuyo valor no puede variar durante la ejecución del
programa.
El nombre de las constantes es sensible a mayúsculas.
Por convención, los identificadores (nombres) de las constantes suelen
declararse en mayúsculas.
El alcance de una constante es global, es decir, es posible acceder a ellas sin
preocuparse por el ámbito de alcance.
Importante: Un nombre de constante válido empieza con una letra o el carácter de subrayado, seguido por una serie letras, números, o subrayados. Los nombres de constantes en PHP no admiten espacios en blanco, signos de puntuación (acentos, ¡!, ¿?, etc), ni caracteres especiales(%, ñ, etc).
Sintaxis
Se puede definir una constante usando la función define(). Una vez definida, no
puede ser modificada, ni eliminada.
Solo se puede definir como constantes valores escalares (boolean, integer, float
y string ). Los tipos escalares son aquellos cuyos valores no pueden 'dividirse'
en partes menores, no como los arrays, por ejemplo.
Para obtener el valor de una constante solo es necesario especificar su nombre.
A diferencia de las variables, no se tiene que especificar el prefijo $. También se
puede utilizar la función constant() para obtener el valor de una constante.
Diferencias entre constantes y variables:
No son precedidas por un símbolo de dólar ($).
Son declaradas usando la función() define , nunca por asignación simple.
Se definen y acceden sin tener en cuenta las reglas de alcance del ámbito.
No pueden ser redefinidas o eliminadas después de establecerse.
Las constantes solo puede albergar valores escalares (boolean, integer, float y
string ).
Ejemplo: Definición de constantes
?12345678910
<?php define('YARDA', 0.9144 ); define('RECORD', 5048 );
$cadena = 'El record de Dan Marino en Yardas '; $cadena .= 'por pase en una temporada es de '; $cadena .= RECORD. 'Yardas'; $record = RECORD * YARDA; $cadena .= "Es decir $record metros"; echo $cadena;?>
DescargarEjecutar
Constantes predifinicas
En PHP exiten algunas constantes predefinidas que no requieren la instrucción: define("Nombre","Valor"). A continuación se presenta un ejemplo del uso de estas variables.
?12345678
<?
$cadena = 'Ruta: '.__FILE__.'<br />'; $cadena .= 'Esta es la línea: '; $cadena .= __LINE__.' del archivo<br />'; $cadena .= 'Versión PHP: '.PHP_VERSION; $cadena .= 'Sistema operativo: '.PHP_OS; echo $cadena;?>
DescargarEjecutar
Funciones de manejo de variables
PHP proporciona funciones para manipular las variables que se usaran intensivamente en secciones posteriores. Como por ejemplo:
Función Descripción Sintaxis
issetDetermina si una variable tiene valor. Su argumento es un nombre de variable
isset($var)
unsetElimina el contenido de una variable. El resultado es un NULL unset($var)
emptyRegresa un true si la variable todavía no ha recibido valor
empty($var)
gettypePermite conocer el tipo de datos de la variable
gettype($var)
settypePermite modificar el tipo de dato de una variable
settype($var, "tipo")
lowercaseConvierte el contenido de una variable alfanumérica en minúscula
lowercase($var)
uppercase
Convierte el contenido de una variable alfanumérica en mayúscula
uppercase($var)
is_intEsta función regresa true si la variable pasada como argumento es entera; en caso contrario devuelvefalse.
is_int($var)
is_floatRegresa true si la variable pasada como argumento es de tipo float; en caso contrario regresa false.
is_float($var)
is_number
Regresa true si la variable pasada como argumentp es un número o una cadena numérica; en caso contrario, devuelve false.
is_number($var)
3.4. Operadores
Los operadores constituyen elementos esenciales de cualquier lenguaje de programación. Con ellos podemos asignar, unir, cambiar ocomparar valores de datos, cambiar el flujo del programa, etc.
Los operadores son símbolos que representan operaciones sobre un valor. Vamos a ver a continuación los operadores admitidos por PHP agrupados según su utilidad.
Operador de asignación
El símbolo = permite asignar valores a variables:
?
1
2
3
4
5
6
<?php
$calle = 'Veracruz';
echo $calle.' ';
$mi_numero = 319;
echo $mi_numero;
?>
Descargar
Ejecutar
El operador .=, agrega valores al contenido de una variable, es equivalente a $var = $var + 'nuevo valor';
?
1
2
3
4
5
<?php
$numeros = 'uno, dos, tres';
$numeros .= ', <span class="e2507h48" id="e2507h48_2">cuatro</span>, cinco, seis';
echo $numeros;
?>
Descargar
Ejecutar
Operador de concatenación
Usando el símbolo . concatenamos cadenas
?
1
2
3
4
5
6
<?php
$nombre = 'Jorge';
$apellido = 'Perez';
//Concatena nombre y apellido m'as un espacio
echo 'Nombre: '.$nombre.' '.$apellido;
?>
Descargar
Ejecutar
Operadores aritméticos
Los operadores aritméticos de PHP son similares a los de C, Java y Javascript. Los símbolos +, -, /, * realizan operaciones de aritmética básica, el símbolo % obtiene el resto de una división (módulo).
Por ejemplo sea $var1 = 10 y $var2 = 5;
Operador Ejemplo Resultado
Negación -$var1 -10
Suma $var1 + $var2 15
Operador Ejemplo Resultado
Resta $var1 - $var2 5
Multiplicación
$var1 * $var2 50
División $var1 / $var2 2
Módulo $var1 % $var2 0
Ejemplo: Uso de los operadores aritméticos
?
<?php
$enviar = $_POST['enviar'];
if( isset($enviar) and $_SERVER['REQUEST_METHOD'] == 'POST' ) {
$a = $_POST['a'];
$b = $_POST['b'];
if( $a*$b !== 0 ) {
$titulo = '<h2>Operadores Aritméticos</h2>';
$tabla = '<table><thead>';
$tabla .= '<tr><td>Ejemplo</td><td>Resultado</td></tr>';
$tabla .= '</thead>';
$finlinea = '</div></td></tr>';
$tabla .= "<tr><td>a</td><td>$a</td></tr>";
$tabla .= "<tr><td>b</td><td>$b</td></tr>";
$tabla .= '<tr><td>a + b</td><td>'.($a + $b).'</td></tr>';
$tabla .= '<tr><td>a - b</td><td>'.($a - $b).'</td></tr>';
$tabla .= '<tr><td>a * b</td><td>'.($a * $b).'</td></tr>';
$tabla .= '<tr><td>a / b</td><td>'.($a / $b).'</td></tr>';
$tabla .= '<tr><td>a % b</td><td>'.($a % $b).'</td></tr>';
$tabla .= '</table>';
echo $tabla';
} else { echo "<p class='centrado'>División por cero</p>";}
} else { echo "<p class='centrado'>Falta información asi no puedes ejecutar</p>";}
echo "<p class='centrado'><a href='0304Operadores04.html'>Regresar</a>";
?>
DescargarEjecutar
Operadores abreviados o combinados
Una forma habitual de modificar el contenido de las variables es mediante los operadores combinados. La siguiente tabla resume los operadores de asignación combinados
Operador Ejemplo Descripción
+= $variable += 10 $variable = $variable + 10;
-= $variable -= 10 $variable = $variable - 10;
*= $variable *= 10 $variable = $variable * 10;
/= $variable /= 10 $variable = $variable / 10;
%= $variable %= 10 $variable = $variable % 10;
.=$variable .= "concatenar"
Concatena las cadenas $variable y "concatenar"
Ejemplo: Tabla multiplicar usando +=
?
= $_POST['enviar'];
= $_POST['tabla'];
if( isset($enviar) && $_SERVER["REQUEST_METHOD"] == "POST" ) {
= "<h2 align='center'><strong>";
.= "Operadores Abreviados o Combinados";
$titulo."</strong></h2>";
= "<h2 align='center'><strong>Tabla de multiplicar usando +=";
.= " </strong></h2></td></p>";
$subtitulo;
= 0;
"<table>";
= 1; $i <= 10; $i++) {
"<tr><td>".$i."</td><td>*</td><td>".$tabla."</td>";
$resultado += $tabla;
"<td>=</td><td>".$resultado."</td></tr>";
"</table>";
unset($_POST['enviar']);
unset($_POST['tabla']);
"<p class='centrado'>Falta información asi no puedes ejecutar</p>";}
"<p class='centrado'><a href='0304Operadores05.html'>";
"<img src='../../images/icon-<span class="e2507h48" id="e2507h48_6">home</span>.gif' /><br />Regresar</a></p>";
DescargarEjecutar
Operadores de incremento - decremento
PHP ofrece soporte de operadores de pre- y post- (incremento o decremento), estilo del lenguaje C y Java. Los símbolos ++ y -- aplicados a una variable, permiten incrementar o decrementar su valor. Su efecto es distinto según se empleen precediendo o siguiendo el nombre de la variable.
Operador Ejemplo Efecto
Pre-incremento ++$a Incrementa $a en uno y después devuelve a.
Post-incremento $a++ Devuelve $a y después incrementa $a en uno.
Pre-decremento --$a Decrece el valor de $a en uno y después devuelve $a.
Post-decremento
$a-- Devuelve $a y después decrece su valor en uno.
Ejemplo: Operadores de Post y Pre incremento -- decremento
Los operadores de incremento/decremento no afectan a los valores booleanos.
Decrementar valores NULL tampoco tiene efecto, aunque al incrementarlos su
resultado es 1.
Pruebe introducir una letra que sucede
Ads not by this site
?
<?php
$enviar = $_POST['enviar'];
$a = $_POST['a'];
$b = $_POST['b'];
if( isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST' ) {
$titulo = "<h2>".'Operadores de Incremento - Decremento';
echo $titulo."</h2>";
$tabla = "<table>";
$tabla .= "<tr><td>Ejemplo</td><td>Resultado</td></tr>";
$tabla .= "<tr><td>a</td><td>$a</td></tr>";
$tabla .= "<tr><td>b</td><td>$b</td></tr>";
$tabla .= "<tr><td>a++</td><td>".($a++)."</td></tr>";
$tabla .= "<tr><td>++a</td><td>".(++$a)."</td></tr>";
$tabla .= "<tr><td>b--</td><td>".($b--)."</td></tr>";
$tabla .= "<tr><td>--b</td><td>".(--$b)."</td></tr>";
$tabla .= "</table>";
echo "$tabla";
unset($_POST['enviar']);
unset($_POST['a']);
unset($_POST['b']);
} else {echo "<p class='centrado'>Falta información asi no puedes ejecutar</p>";}
echo "<p class='centrado'><a href='0304Operadores06.html'>";
echo "<img src='../../images/icon-home.gif' /><br />Regresar</a></p>";
?>
DescargarEjecutar
Operadores de Comparación.
Los operadores de comparación, como su nombre indica, permiten comparar dos valores.
Operador Ejemplo Cierto si:
Igualdad $a == $b $a es igual a $b.
Identidad $a === $b $a es igual a $b y además son del mismo tipo
Desigualdad
$a != $b $a no es igual a $b.
$a !== $b Los operandos no son iguales o del mismo tipo
Menor que $a < $b $a es estrictamente menor que $b.
Operador Ejemplo Cierto si:
Menor o igual que
$a <= $b $a es menor o igual que $b.
Mayor que $a > $b $a es estrictamente mayor que $b.
Mayor o igual que $a >= $b $a es mayor o igual que $b.
Ejemplo: Operadores de comparación
?
<?php
$enviar = $_POST['enviar'];
$a = $_POST['a'];
$b = $_POST['b'];
$c = $_POST['c'];
if( isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST' ) {
$titulo = "<h2 align='center'><strong>";
$titulo .= "Operadores de Comparación</strong></h2>";
echo $titulo;
echo '<p align="center">'.'$a = '.$a."</p><br>";
echo '<p align="center">'.'$b = '.$b."</p><br>";
echo '<p align="center">'.'$c = '.$c."</p><br>";
$res0 = '($a == $c)';
$res2 = '($a === $c)';
$res4 = '($a >= $b)';
if ($a == $c) {$res1 = 'TRUE';} else {$res1 = 'FALSE';}
if ($a === $c) {$res3 = 'TRUE';} else {$res3 = 'FALSE';}
if ($a >= $b) {$res5 = 'TRUE';} else {$res5 = 'FALSE';}
$tabla = "<table border='1' align='center' ";
$tabla .= "<tr><td>Ejemplo</td><td>Resultado</td></tr>";
$tabla .= "<tr><td>$res0</td><td>$res1</td></tr>";
$tabla .= "<tr><td>$res2</td><td>$res3</td></tr>";
$tabla .= "<tr><td>$res4</td><td>$res5</td></tr></table>";
echo "<pre>$tabla</pre>";
unset($_POST['enviar']);
unset($_POST['a']);
unset($_POST['b']);
} else { echo "<p>Falta información así no puedes ejecutar</p>";}
echo "<a href='0304Operadores07.html'><img src='../../images/icon-home.gif' ";
echo " /><br />Regresar</a></div>";
?>
DescargarEjecutar
Otro operador condicional es el operador "?:" (o ternario), que funciona como en C, Java y otros muchos lenguajes:
(expr1) ? (expr2) : (expr3);
La expresión toma el valor expr2 si expr1 se evalúa a cierto, y expr3 si expr1 se evalúa a falso.
Operadores Lógicos
Los operadores lógicos o booleanos se utilizan conjuntamente con expresiones que devuelven valores lógicos. Con ellos es posible combinar condiciones y evaluarlas en una sola expresión. La sintaxis de estos operadores es la siguiente:
Operador Ejemplo Cierto si:
&& $a && $b
Ambos son ciertos
and $a and $b
|| $a || $b
Si uno o ambos es cierto
or $a or $b
xor $a xor $b Solo si uno de los dos es cierto.
! !$a Si $a es Falsa
Ejemplo: Clasificación de huracanes según la escala Saffir-Simpson
?
<?php
if( isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST' && $velocidad >= 119) {
echo mensaje();
if(($velocidad >= 119) && ($velocidad <= 153)){
$categoria = 1;
} elseif(($velocidad >= 154) && ($velocidad <= 177)){
$categoria = 2;
} elseif(($velocidad >= 178) && ($velocidad <= 209)){
$categoria = 3;
} elseif(($velocidad >= 210) && ($velocidad <= 249)){
$categoria = 4;
}elseif( $velocidad >= 250){
$categoria = 5;
}
$imagen = "<img src='huracan/damage".$categoria.".jpg' />";
$fila = "<tr><td align='center'> $velocidad </td>"; //construyendo la última fila
$fila .= "<td align='center'>".$categoria."</td>";
$efecto = damages($categoria);
$fila .= "<td><small>$efecto</small></td>";
$fila .= "<td>".$imagen."</td></tr></table>";
echo $fila;
} else {
echo "<p align='center'>Falta información así no puedes ejecutar</p>";
}
?>
DescargarEjecutar
Operador de ejecución
PHP soporta un operador de ejecución: el apóstrofe invertido (``). PHP intentará ejecutar la instrucción contenida dentro de los apóstrofes invertidos como si fuera un comando del shell; y su salida devuelta como el valor de esta expresión (i.e., no tiene por qué ser simplemente volcada como salida; puede asignarse a una variable).
Ejemplo: Operador de ejecución
La línea 2 carga la configuración del servidor web
La línea 4 asigna a la variable entorno el contenido del subdirectorio
Es equivalente a la función shell_exec y por defecto está inhabilitado su uso si php esta configurado para ejecutarse en safe_mode.
?
1
2
<?php
$entorno = `set`;
3
4
5
6
echo "$entorno";
$entorno = `ls -l`;
echo "$entorno";
?>
Precedencia de operadores
Cuando una expresión está formada por más de un operador del mismo tipo, PHP la evalúa de izquierda a derecha, pero cuando creamos expresiones que utilizan más de un operador diferente, no siempre evalúa estas expresiones de la misma forma.
La precedencia de operadores específica cómo se agrupan las expresiones para ser evaluadas. La precedencia relativa de los operadores se puede modificar mediante paréntesis en las expresiones que se desea evaluar a criterio del programador.
A continuación se presenta en la tabla la precedencia de los operadores de menor a mayor.
Asociatividad Operadores
izquierda ,
izquierda or
izquierda xor
izquierda and
derecha print
izquierda = += -= *= /= .= %= &= |= ^= ~= <<= >>=
Asociatividad Operadores
izquierda ? :
izquierda ||
izquierda &&
izquierda |
izquierda ^
izquierda &
no asociativo == != ===
no asociativo < <= > >=
izquierda << >>
izquierda + - .
izquierda * / %
derecha! ~ ++ -- (int) (double) (string) (array) (object) @
derecha [
no asociativo new
3.5. Sentencias de control
Las sentencias de control permiten ejecutar bloque de códigos dependiendo de condiciones. La evaluación de dichas condiciones retorna uno de dos
valores verdadero o falso. Para PHP el 0 es equivalente a falso y cualquier otro número es verdadero.
if...else
La sentencia if...else permite ejecutar un bloque de instrucciones si la condición es verdadera y otro bloque de instrucciones si ésta es falsa. Es importante tener en cuenta que la condición que evaluemos ha de estar encerrada entre paréntesis (esto es aplicable a todas la sentencias de control).
?12345
if (condición) { //Se ejecuta si la condición es VERDADERA} else { //Se ejecuta si la condición es FALSA}
Ejemplo: Determinar si n es par o impar El vector $_POST recupera los datos del formulario (Líneas 2 y 3).
La funcion isset determinan si la variable tomo valor (Líneas 4 y 5)
Note que en la línea 6 se usa el operador == para comparar.
?
= $_POST['enviar'];
if( isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST' ){
% 2 ) == 0 ) {= "$n es par";
= "$n es impar";"<div align='center'>".$cadena."</div><br />";
<p class='centrado'><a href='0305SentenciasControl01.html'><img src='../../images/icon-<span class="e2507h48" id="e2507h48_6">home</span>.gif' /><br />Regresar</a></p>
<form <span class="e2507h48" id="e2507h48_4">id</span>='forma' name='forma' method='post' action='0305SentenciasControl01.php'>
<legend>Par o impar</legend><p><label for='n'>n</label><input type="text" name="n" id="n" /></p><p><input type="submit" name="enviar" id="enviar" value="Enviar" /></p>
DescargarEjecutar
Ejemplo: Construir un programa que capture un deporte y despliegue dos implementos deportivos apropiados.
isset es una función PHP que regresa verdadero si una variable tomo valor
$_SERVER['REQUEST_METHOD'] método de petición se usó para
acceder a la página unset destruye una variable especificada
?<?php $enviar = $_POST['enviar']; if( isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST' ) { echo "<h1>Implementos deportivos de ".$_POST['deporte']."</h1>"; echo "<p class='centrado'><img alt='' src='deportivos/".$_POST['deporte']."01.jpg' />"; echo "<img alt='' src='deportivos/".$_POST['deporte']."02.jpg' /></p>"; unset($enviar); unset($_POST['deporte']); ?> <p class='centrado'> <a href='0305SentenciasControl02.php'> <img src='../../images/icon-home.gif' /> <br />Regresar</a></p> <? } else { ?> <form id='forma' name='forma' method='post' action='0305SentenciasControl02.php'> <fieldset> <legend>Implementos deportivos</legend> <p><label for='deporte'>Deporte</label> <select name='deporte' id='deporte'> <option value='basquet' selected='selected'>Basketball</option> <option value='baseball'>Béisbol</option> <option value='futbol'>Fútbol</option> </select></p> <p><input type='submit' name='enviar' id='enviar' value='Enviar' /></p> </fieldset> </form> <? }?>
DescargarEjecutar
Existe una forma sencilla de usar la sentencia if cuando no tenemos que usar el else y solo tenenemos que ejecutar una línea de código.
?12
$a = 6;if ($a > 4) echo "$a es mayor que 4";
Ejemplo: Cálculo del área y perímetro de un triángulo dados sus lados, mediante la formula de Herón. Note que si el radical de área es negativo, los lados proporcionados no forman un triángulo
Ads not by this site
?<?php> $a = $_POST['a']; $b = $_POST['b']; $c = $_POST['c']; $datos = empty($a) or empty($b) or empty($c); $enviar = $_POST['enviar']; if( !$datos && isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST' ) { $perimetro = $a + $b + $c; //semiperimetro $p = $perimetro/2; $radical = $p*($p - $a) * ($p - $b) * ($p - $c); if($radical < 0 ) { $resultado = 'No es un triángulo'."<br />"; } else { $resultado = "<strong>Área = </strong>".sqrt($radical)."<br />"; $resultado .= "<strong>Perímetro </strong>= ".$perimetro."<br />"; echo "<p class='centrado'>".$resultado."</p>"; } ?> <p class='centrado'>
<a href='0305Triangulo.php'><img src='../../images/icon-home.gif' /> <br />Regresar</a> </p> <? } else { ?> <form id='forma' name='forma' action='0305Triangulo.php' method='post'> <fieldset> <legend>Área y perímetro de un triángulo</legend> <p><label for='a'>a</label> <input id='a' name='a' maxlength='4' type='text' size='4' /></p> <p><label for="b">b</label> <input id='b' name='b' maxlength='4' type='text' size='4' /></p> <p><label for="c">c</label> <input id='c' name='c' maxlength='4' type='text' size='4' /></p> <p><input id='enviar' name='enviar' type='submit' value='Enviar' /></p> </fieldset> </form> <? }?>
DescargarEjecutar
switch...case...default
Una alternativa a if...elseif...else, es la sentencia switch, la cual evalúa y compara cada expresión de la sentencia case con la expresión que evaluamos, si llegamos al final de la lista de case y no encontramos condición verdadera, ejecuta el código de bloque que haya en la sentenciadefault.
Si encontramos una condición verdadera debemos ejecutar un break para que la sentencia switch no siga buscando en la lista de case.
Ejemplo: El siguiente código imprime el día de la semana actual.
Las líneas 3 al 13 describen un vector asociativo para representar el nombre
largo en español del día.
La función DATE maneja diversos parámetros como se obtienen el día de la
semana abreviado en inglés (Línea 12).
Observe que la sentencia break evita que la ejecución del código continue
evaluando
?12345678910111213141516171819202122232425
<?php function diaSemana(){ $semanaArray = array( 'Mon' => 'Lunes', 'Tue' => 'Martes', 'Wed' => 'Miercoles', 'Thu' => 'Jueves', 'Fri' => 'Viernes', 'Sat' => 'Sábado', 'Sun' => 'Domingo', ); return $semanaArray[date('D')]; } //diaSemana
switch (diaSemana()) { case 'Lunes': echo 'Hoy es Lunes'; break; case 'Martes': echo 'Hoy es Martes'; break; case 'Miercoles': echo 'Hoy es Miercoles'; break; case 'Jueves': echo 'Hoy es Jueves'; break; case 'Viernes': echo 'Hoy es Viernes'; break; case 'Sábado': echo 'Hoy es Sábado'; break; case 'Domingo': echo 'Hoy es Domingo'; break; default: echo 'Esa cadena no corresponde a ningún día de la semana'; }?>
DescargarEjecutar
A continuación se presenta un código donde no se evalua una variable, lo que se efectua es una evaluación de expresiones. Usaremos nuevamente el ejemplo de los huracanes.
La función mt_rand(119,400) genera valores aleatorios entre 119 y 400
(Liínea 32)
switch (true) permitirá que siempre se evalue la expresión a cierto o falso según
sea el caso (Línea 34)
?
<?php function damages($i) { $damage = array(); $damage[1] = 'No daño efectivo a edificios <br/> Daños a remolques y arboles <br/>'; $damage[5] .= '460 mts de la costa<br/>'; return $damage[$i]; }
function mensaje() { ?> <h1>Escala Saffir Simpson</h1><p>La escala Saffir-Simpson se ha convertido ...</p> <p>Fue nombrada así por los científicos que la desarrollaron</p></br> <div class='centrar'> <p>Categoría 1: de 119 a 153 km/h.</p> <p>Categoría 2: de 154 a 177 km/h.</p> <p>Categoría 3: de 178 a 209 km/h.</p> <p>Categoría 4: de 210 a 249 km/h.</p> <p>Categoría 5: 250 km/h o más</p> </div> <table> <thead> <tr> <th>Velocidad</th> <th>Categoría</th> <th>Daños</th> <th>Imagen</th> </tr> </thead> <? }
$velocidad = mt_rand(119,400); echo mensaje($velocidad); switch (true) { case ($velocidad >= 119) && ($velocidad <= 153): $categoria = 1; break; case ($velocidad >= 154) && ($velocidad <= 177): $categoria = 2; break; case ($velocidad >= 178) && ($velocidad <= 209): $categoria = 3; break; case ($velocidad >= 210) && ($velocidad <= 249): $categoria = 4; break; case ($velocidad >= 250): $categoria = 5; break; }
$imagen = "<img src='huracan/damage".$categoria.".jpg' />"; $html = "<tr><td align='center'> $velocidad </td>"; $html .= "<td>".$categoria."</td>"; $efecto = damages($categoria); $html .= "<td><small>$efecto</small></td>"; $html .= "<td>".$imagen."</td></tr></table>"; echo $fila; ?> <br /> <p class='centrado'> <a href='0305Switch.php'><img alt='' src='../../images/icon-home.gif' > <br />Regresar</a> </p> <??>
DescargarEjecutar
Estructuras de control repetitivas/interactivas
A menudo es necesario ejecutar una instrucción o un bloque de instrucciones más de una vez
Ejemplo:
for
El bucle for resulta muy útil cuando debemos ejecutar un bloque de código a condición de que una variable se encuentre entre un valor mínimo y otro máximo. El bucle for se puede romper mediante la sentencia break.
Ejemplo:
?123
<?php for ($num = 1; $num <= 5; $num++){ echo $num."<br />"; if ($num == 3){
456789
echo "Aquí nos salimos \n"; break; } }?>
Ejemplo: Calcular una tabla multiplicar. La selección de la tabla se hace mediante la generación de un número aleatorio.
?123456789101112
<?php $tabla = mt_rand( 1, 10);; $html = '<table class="simple">'; for($i = 1; $i <= 10; $i++) { $html .= '<tr>'; $r = $tabla*$i; $html .= "<td>$tabla</td><td>*</td><td>$i</td>"; $html .= "<td>=</td><td>$r</td>"; $html .= '</tr>'; } echo $html.'</table>';?>
DescargarEjecutar
while
La sentencia while ejecuta un bloque de código mientras se cumpla una determinada condición. Podemos romper un bucle while utilizando la sentencia break.
El siguiente código dado por la formula abajo mencionada, calcula el factorial de n. El valor de n debe ser menor o igual a 69 por el tipo de variables que maneja PHP.
La función number_format nos permite formatear los números con comas
para separar los miles (Línea 15)
?
<?php $enviar = $_POST['enviar']; if( isset($enviar) && $_SERVER['REQUEST_METHOD'] == 'POST') { $n = $_POST['n']; if($n >= 0 && $n <= 1) { $factorial = 1; } elseif( $n >= 2 and $n <= 69) { $factorial = 1; $i = 2; while ( $i <= $n ) { $factorial *= $i++; } } else $factorial = "indefinido"; $html = "<p class='centrado'>El factorial de $n es "; $html .= number_format($factorial, 0, '.',',')."</p><br />"; echo $html; ?> <p class='centrado'> <a href='0305While.php'><img alt='' src='../../images/icon-home.gif'></a> </p> <? } else { ?> <form id='forma' name='forma' method='post' action='0305While.php'> <fieldset> <legend>Factorial con while en PHP</legend> <p> <label for='n'>n</label>
<input id='n' maxlength='2' name='n' type='text' size='2' /> </p> <p class='centrado'> <input id='enviar' name='enviar' type='submit' value='Enviar' /> </p> </fieldset> </form> <? }?>
DescargarEjecutar
El código factorial se puede optimizar y calcularlo para cualquier valor positivo mediante otros mecanismos.
do..while
Esta sentencia es similar a while, salvo que con esta sentencia primero ejecutamos el bloque de código y después se evalúa la condición, por lo que el bloque de código se ejecuta siempre al menos una vez.
Ejemplo: Calcularemos el factorial de n con la sentencia do while
Ads not by this site
?<?php if( isset($_POST['enviar']) && $_SERVER['REQUEST_METHOD'] == 'POST') { $n = $_POST['n']; if($n == 0 and $n == 1) { $factorial = 1; } elseif( $n < 0 or $n >69) { $factorial = 'indefenido'; } else { $i = 2; $factorial = 1; do { $factorial *= $i++; } while ($i <= $n); } $html = "<p align='center'>El factorial de $n es "; $html .= number_format($factorial, 0, '.',',').'</p><br />'; echo $html; ?> <p class='centrado'> <a href='0305doWhile.php'> <img alt='Calcular otro factorial' src='../../images/icon-home.gif' title='Calcular otro factorial' /> </a>
</p> <? } else { ?> <form id='forma' name='forma' method='post' action='0305doWhile.php'> <fieldset> <legend>Factorial con do while en PHP</legend> <p> <label for='n'>n</label>
<input id='n' maxlength='2' name='n' type='text' size='2' /> </p> <p class='centrado'> <input id='enviar' name='enviar' type='submit' value='Enviar' /> </p> </fieldset> </form> <? } ?>
DescargarEjecutar
El usar while, do while o for es principalmente cuestión de preferencia personal.
foreach
El bucle foreach nos permite iterar en cada elemento de un vector, su sintaxis es sencilla. Consiste en indentificar el índice de la matriz, mediante la expresion as y seguidamente la variable que identificará el valor del elemento:
Por ejemplo: La tabla general de la Jornada 17 del Torneo Bicentenario 2010 FEMEXFUT.
?1234567891011121314151617181920212223
<?php echo "<h4 align = 'center'>Torneo Bicentenario 2010. "; echo "Jornada 17</h4>"; $equipo['Chivas'] = 32; $equipo['Monterrey'] = 36; $equipo['Santos'] = 28; $equipo['Pumas'] = 28; $equipo['Morelia'] = 25; $equipo['Cruz Azul'] = 25; $equipo['América'] = 25; $equipo['Gallos Blancos'] = 21; $equipo['Toluca'] = 30; $equipo['Pachuca'] = 25; $equipo['Atlas'] = 24; $equipo['Estudiantes'] = 19; $equipo['Atlante'] = 16; $equipo['Jaguares'] = 19; $equipo['Puebla'] = 19; $equipo['San Luis'] = 14; $equipo['Tigres'] = 19; $equipo['Indios'] = 15; arsort($equipo); echo "<table>"; echo "<thead><tr><th>Equipo</th><th>Puntos</th></tr></thead>"; $i = 1; foreach( $equipo as $key =>$puntos) { echo "<tr>"; echo "<td>".$key."</td><td>".$puntos."</td>"; echo "</tr>"; } echo "</table>";?>
DescargarEjecutar
3.6. Arreglos
Una arreglo (array) es una estructura de datos que contienen una colección de datos del mismo tipo. Los array se utilizan como contenedores para almacenar datos relacionados ( en vez de declarar variables por separado para cada uno de los elementos del array).
Los elementos del array se acceden a través de la posición que ocupan dentro
del conjunto de elementos del arreglo. El primer elemento es la posición cero.
El tamaño del array se establece cuando creamos el arreglo, pero este puede
crecer posteriormente en forma ilimitada (- Hasta agotar la RAM -).
Los elementos del arreglo pueden tener diferentes tipos de datos.
Denominamos vector a los array unidimensionales y matrices a los array bidimensionales. Si bien es posible definir matrices de más de dos dimensiones después de casi tres decadas programando jamás necesite una. Los array se clasifican según su naturaleza en indexadas oasociativas.
Array indexados
Son aquellos en las que el índice es un valor numérico.
$estaciones = array ('primavera', 'verano', 'otoño', 'invierno');
$sentidos = array ('gusto', 'oido', 'olfato', 'tacto', 'vista');
$numeros = array(1,2,30, 50, 60, 70);
Para acceder un elemento del arreglo usaremos la notación genérica:
$estaciones[$i];
$sentidos[$i];
$numeros[$i];
Como índice podemos usar un número, una variable o constante que represente el elemento referenciando. Iniciando desde la posición cero.
Ejemplo:Se declara un arreglo denominado $estacion. El cual se recorre mediante un ciclo for.
?123456
<?php $estacion = array ('Primavera', 'Verano', 'Otoño', 'Invierno'); echo "Las estaciones del año son <br />"; for($i = 0; $i <=4; $i++) echo $estacion[$i]."<br />";?>
DescargarEjecutar
Los arrays se ordenan usando las funciones asort(), arsort(), ksort(), rsort(), sort(), uasort() y uksort() según el tipo de ordenación.
Ejemplo: Generar un vector aleatorio de tamaño n y ordenarlo.
Usamos la función mt_rand para generar números aleatorios El método sort ordena los valores del vector de menor a mayor
?<?php
$n = $_POST['n']; if( isset($_POST['enviar']) && $_SERVER['REQUEST_METHOD'] == 'POST' && ($n > 0 && $n < 200000)) { for($i = 0; $i <= $n; $i++) { // Genera un vector de tamaño n $vector[$i] = mt_rand(1, 1000); //mt_rand genera números aleatorios } sort($vector); // Ordena el vector //Imprime el Vector ordenado for($i = 0; $i <= $n; $i++) { echo $vector[$i].' '; } ?> <p class='centrado'> <a href='0306Vector.php'> <img src='../../images/icon-home.gif' /><br />Home </a> </p> <? } else { ?> <form id='forma' name='forma' method='post' action='0306Vector.php'> <fieldset> <legend>Ordenar un vector</legend>
<p><label for='n'>n</label> <input alt='Número de elementos del vector' id='n' name='n' title='Número de elementos del vector' type='text' /> </p> <p><input id='enviar' name='enviar' type='submit' value='Enviar' /></p> </fieldset> </form> <? }?>
DescargarEjecutar
Otra función interesante es count que cuenta el número de elementos de un arreglo.
Ejemplo. Considere las temperaturas máximas registradas en la ciudad de Veracruz durante el mes de febrero del 2010.
?1234567891011121314
<?php $temperatura = array(23, 25,27, 23, 27,26, 26, 28,27, 22, 26, 21, 23,24,21,18,18,19,26,28,27,27,26,18,23,26,24,27); sort($temperatura); $n = count($temperatura); $promedio = 0; for($i = 1; $i < $n; $i++) $promedio += $temperatura[$i]; $promedio = $promedio/$n; $maximo = $temperatura[$n - 1]; echo "Temperatura mínima = $temperatura[0] <br />"; echo "Temperatura media = $promedio <br />"; echo "<span class="e2507h48" id="e2507h48_2">Temperatura máxima</span> = $maximo <br />";?>
DescargarEjecutar
Ejemplo: Obtener los archivos de un directorio ordenados alfabéticamente.
En la línea 3 se establece un apuntador al directorio indicado mediante la
función opendir La línea 4 realiza un ciclo, en el cual la función readdir lee uno a uno los
archivos del subdirectorio
La línea 5 asigna el archivo a una posición del vector
La función closedir en la línea 7 cierra el apuntador
La función sort() línea 8 ordenada el vector de menor a mayor
El sentencia de control foreach recorre el vector
?123456789101112
<?php // llenar un array con todos los ítems de un directorio $handle = opendir('zodiaco'); while (false !== ($archivo = readdir($handle))) { $archivos[] = strtolower($archivo); } closedir($handle); sort($archivos); foreach($archivos as $i => $valor) { echo $valor."<br />"; };?>
DescargarEjecutar
Ejemplo: Funciones básicas en arreglos
En la línea 2 se declara un array numérico.
Las líneas 3, 9, 14, 20 imprimen el contenido del arreglo mediante la
función print_r. La función count cuenta el número de elementos del array (Líneas 4, 6, 11, 16,
21).
En la línea 8 se borra uno a uno el contenido del array (unset) En las líneas 14 y 19 se agregan valores en la siguiente posición del vector.
En la línea 18 se restablecen los índices mediante la función array_values.
?12345678910111213141516171819202122
<?php $array = array(1, 2, 3, 4, 5,70,90); // Creamos un array simple. print_r($array); // Imprimimos el array echo "<br />Número de elementos en el array: ".count($array)."<br />"; // ahora borraremos los items pero el apuntador del array quedará intacto: $n = count($array); for($i = 0; $i <= $n; $i++) { unset($array[$i]); } print_r($array); echo "<br />Número de elementos en el array: ".count($array)."<br />"; // Ahora sumaremos un item (observe que el nuevo índice es 7, y no 0). $array[] = 60; print_r($array); echo "<br />Número de elementos en el array: ".count($array)."<br />"; // Re-index: $array = array_values($array); $array[] = 57; print_r($array); echo "<br />Número de elementos en el array: ".count($array)."<br />";?>
DescargarEjecutar
Función range
Crea un vector que contiene una secuencia de elementos. Sintaxis
array range ( mixed $inicial , mixed $final [, number $incremento ] )
range() retorna vector de elementos desde inicial hasta final, ambos inclusive.
Si inicial > final, la secuencia será del mayor al menor.
Si recibe como parámetro incremento, éste será usado como el incremento
entre elementos en la secuencia.
incremento es un número positivo. Si no se especifica, incremento tendrá un
valor predeterminado de 1.
?12
<?php echo "<h1>Uso de range</h1><br />"; echo "Vector simple<br />";
345678910111213141516171819
foreach (range(0, 20) as $numero) { echo $numero."<br />"; } echo "Vector con incremento<br />"; foreach (range(0, 200, 20) as $numero) { echo $numero."<br />"; } echo "Vector de letras<br />"; foreach (range('a', 'z') as $letra) { echo $letra."<br />"; } echo "Vector de letras descendente<br />"; foreach (range('M', 'C') as $letra) { echo $letra."<br />"; }?>
DescargarEjecutar
Arrays asociativos
Un array esta formado por conjuntos de parejas índice => valor, o como suele expresarse en inglés, key, value. Los cuales se expresan comunmente con índices o keys numéricos (también conocidos como arrays escalares). Además es posible usar strings como índices, es decir, cadenas de texto. Este tipo de array es el array asociativo:
Ejemplo: Imprimiremos la fecha actual mediante el uso de arreglos.
En la línea 4 se declara un arreglo asociativo que contiene los nombres del mes
en español
En la línea 11 se declara un arreglo asociativo que contiene los nombres del día
de la semana en español
En la línea 18 se obtiene el número del día del mes
El año se obtiene en la línea 19
?<?php function imprimeFecha(){ $mesArray = array( 1 => 'Enero', 2 => 'Febrero', 3 => 'Marzo', 4 => 'Abril', 5 => 'Mayo', 6 => 'Junio',
7 => 'Julio', 8 => 'Agosto', 9 => 'Septiembre', 10 => 'Octubre', 11 => 'Noviembre', 12 => 'Diciembre' );
$semanaArray = array( 'Mon' => 'Lunes', 'Tue' => 'Martes', 'Wed' => 'Miercoles', 'Thu' => 'Jueves', 'Fri' => 'Viernes', 'Sat' => 'Sábado', 'Sun' => 'Domingo', );
$mesReturn = $mesArray[date('n')]; $semanaReturn = $semanaArray[date('D')]; $dia = date('d'); $año = date ('Y'); return $semanaReturn.' '.$dia.' de '.$mesReturn.' de '.$año; } echo imprimeFecha();?>
DescargarEjecutar
Recorrer una tabla con índices numéricos mediante un bucle es sencillo, pero ¿cómo recorremos una tabla con índices asociados? Para ello, utilizaremos una serie de sentencias especificas para tal fin:
each() se usa normalmente de forma conjunta a list() para recorrer una matriz: por ejemplo:
?123456789
<?php $deportivos = array('a' => 'BWM M3 Sedan', 'b' => 'Mazda Miata', 'c' => 'cFerrari 612 Sca glietti','d' => 'Corvette C6'); while (list($key, $val) = each($deportivos)) { $foto = "deportivos/$val".'.jpg'; echo "<img src='$foto' border='0' height='350' width='500'/>"."<br />"; echo $val."<br />"; }?>
DescargarEjecutar
Matrices
Los arrays bidimensionales - matrices - similares a una tabla de doble entrada. Cada uno de los elementos se identifica unívocamente por un nombre ($nombre) seguido de dos ([]) que contienen los índices del array.
Los índices pueden ser de tipo escalar - equivalen al número de fila y columna que la celda ocupa en la tabla – o puede ser asociativos lo que equivaldría en alguna medida a usar como índices los nombres de la fila y de la columna.
Los elementos de un array bidimensional escalar pueden escribirse usando una de estas sintaxis:
$arreglo[][] = valor. En este caso los índices se autoincrementan
iniciando los índices en cero. El primer índice corresponde a renglones y el
segundo a las columnas. $arreglo[i][j] = valor. En este caso corresponde al programador
el control de los índices.
Ejemplo: Crear e imprimir una matriz r - renglones - x c - columnas -.
En las líneas 6 y 11 se controla el índice renglón
En las líneas 7 y 12 se controla el índice columna
mt_rand es una función PHP que genera números aleatorios en este caso entre
1 y 100.
Ads not by this site
?<?php if( isset($_POST['enviar']) && $_SERVER['REQUEST_METHOD'] == 'POST') { $r = $_POST['renglones'] - 1; $c = $_POST['columnas'] - 1; $html = "<table class='simple'>"; for($i = 0; $i <= $r; $i++) { $html .= "<tr>"; for($j = 0; $j <= $c; $j++) { $matriz[$i][$j] = mt_rand(1, 100); $html .= "<td>".$matriz[$i][$j]."</td>"; }
$html .= "</tr>"; } echo $html."</table>"; ?> <p class='centrado'> <a href='0306ImprimirMatriz.php'> <img alt= '' src='../../images/icon-home.gif'><br />Home</a> </p>
<? } else { ?> <form action='0306ImprimirMatriz.php' id='forma' name='forma' method='post' > <fieldset> <legend>Imprimir Matriz</legend> <p><label for='renglones'>Renglones</label> <input id='renglones' maxlength='1' name='renglones' size='1' type='text' /> </p> <p><label for='columnas'>Columnas</label> <input id='columnas' maxlength='1' name='columnas' size='1' type='text' /> </p> <p> <input id='enviar' name='enviar' type='submit' value='Enviar' /> </p> </fieldset> </form> <? }?>
DescargarEjecutar
Ejemplo: Suma o resta de matrices
Dadas las matrices m-por-n , A y B, su suma A + B es la matriz m-por-n calculada sumando los elementos correspondientes (i.e. (A + B)[i, j] = A[i, j] + B[i, j] ). Es decir, sumar cada uno de los elementos homólogos de las matrices a sumar. Por ejemplo:
Mediante la función mt_rand que genera números aleatorios llenamos la matriz
A y B La sentencia $operacion*$matriz2[$i][$j] determina si se realiza
una suma o resta de matrices. $operación toma los valores -1 y 1.
?
function imprimeMatriz($matriz, $r, $c, $mensaje) {$html = '<table class="simple"';$html .= '<tr><td>'.$mensaje.'</td></tr>';for($i = 0; $i < $r; $i++) {
$html .= '<tr>'; for($j = 0; $j < $c; $j++) { $html .= '<td>'.$matriz[$i][$j].'</td>'; } $html.= '</tr>';
$html.= '</table><br />';echo $html;
if( isset($_POST['calcular']) && $_SERVER["REQUEST_METHOD"] == "POST") {
$fila1 = $_POST['f1'];$col1 = $_POST['c1'];$fila2 = $_POST['f2'];$col2 = $_POST['c2'];$operacion = $_POST['operacion'];
if($fila1 == $fila2 && $col1 == $col2){ for($i = 0; $i < $fila1; $i++){ for($j = 0; $j < $col1; $j++){ $matriz[$i][$j] = mt_rand(1,100); $matriz2[$i][$j] = mt_rand(1,100); } } imprimeMatriz($matriz, $fila1, $col1, 'Matriz A:'); imprimeMatriz($matriz2, $fila2, $col2, 'Matriz B:'); if($operacion == 1) { $mensaje = 'A + B'; } else $mensaje = 'A - B'; $html = '<table class="simple">'; $html .= '<tr><td>'.$mensaje.':</td></tr>'; for($i = 0; $i < $fila2; $i++) { $html .= '<tr>'; for($j = 0; $j < $col2; $j++) { $html .= '<td>'.($matriz[$i][$j] + $operacion*$matriz2[$i][$j]).'</td>'; } $html.= '</tr>'; } $html.= '</table><br>'; echo $html; ?> <p class='centrado'> <a href='0306SumaRestaMatrices.php'>
<img src='../../images/icon-home.gif' alt=''><br>Home </a> </p> <?
} else { echo 'Las matrices no tienen las mismas dimensiones por lo que no se puede hacer la suma o resta';
} else {
<form action='0306SumaRestaMatrices.php' id='forma' method='post' name='forma' > <fieldset> <legend>Suma o Resta de Matrices</legend> <p> <label for='f1'>Filas A</label>
<input id='f1' name='f1' type="text" size='2' maxlength='1' onKeypress='if (event.keyCode < 48 || event.keyCode > 57) event.returnValue=false;'/> </p> <p> <label for='c1'>Columnas A</label> <input id='c1' name='c1' type='text' size='2' maxlength='1' onKeypress='if (event.keyCode < 48 || event.keyCode > 57) event.returnValue=false;' /> </p>
<p> <label for='f2'>Filas B</label>
<input id='f2' name='f2' type="text" size='2' maxlength='1' onKeypress='if (event.keyCode < 48 || event.keyCode > 57) event.returnValue=false;'/> </p> <p> <label for='c2'>Columnas B</label> <input id='c2' name='c2' type='text' size='2' maxlength='1' onKeypress='if (event.keyCode < 48 || event.keyCode > 57) event.returnValue=false;' /> </p> <p><label for=0operacion'></label> <select name='operacion' id='operacion'> <option value='-1'>Resta</option> <option value='1' selected='selected'>Suma</option> </select> </p> <p class='centrado'> <input id='calcular' name='calcular' type='submit' value='Calcular' /> </p> </fieldset></form>
DescargarEjecutar
Ejemplo: Producto de matrices
El producto de dos matrices se puede definir sólo si el número de columnas de la matriz izquierda es el mismo que el número de filas de la matriz derecha. Si A es una matriz m×n y B es una matriz n×p, entonces su producto matricial AB es la matriz m×p (m filas, p columnas) dada por:
para cada par i y j.
Aplicación:
?<?php function imprimirMatriz($matriz, $r, $c, $mensaje) { $html = "<table align='center'>"; $html .= '<tr><td colspan='."'$c'".'>'.$mensaje.'</td></tr>'; for($i = 0; $i < $r; $i++) { $html .= "<tr>"; for($j = 0; $j < $c; $j++) $html .= '<td>'.$matriz[$i][$j].'</td>'; $html .= "</tr>"; } $html .= "</table>"; echo $html; }
function multiplicaMatriz($matriz, $matriz2, $fila1, $col1, $fila2, $col2){ $html = '<table class="simple" >'; $html .= '<tr><td>Matriz Resultante:</td></tr>'; for($i = 0; $i < $fila1; $i++) { $html .= '<tr>';
for($j = 0; $j < $col2; $j++) { $suma = 0; for($k = 0; $k < $col1; $k++){ $suma += $matriz[$i][$k]*$matriz2[$k][$j]; } $html .= '<td>'.($suma).'</td>'; } $html .= '</tr>'; } $html .= '</table><br><br>'; echo $html; }
if( isset($calcular) && $_SERVER["REQUEST_METHOD"] == "POST") { $fila1 = $_POST['f1']; $col1 = $_POST['c1']; $fila2 = $_POST['f2']; $col2 = $_POST['c2']; $suma = 0; unset($enviar); if($col1 == $fila2){ for($i=0; $i < $fila1; $i++) for($j=0; $j < $col1; $j++) $matriz[$i][$j] = mt_rand(1,10); imprimirMatriz($matriz, $fila1, $col1, 'Matriz A:'); for($i=0;$i < $fila2; $i++) for($j=0; $j <$col2; $j++) $matriz2[$i][$j] = mt_rand(1,10); imprimirMatriz($matriz2, $fila2, $col2, 'Matriz B:'); multiplicaMatriz($matriz, $matriz2, $fila1, $col1, $fila2, $col2); ?> <p class='centrado'> <a href='0306MultiplicaMatrices.php'> <img alt='' src='../../images/icon-home.gif' ><br>Home </a> </p> <? } else { $html = 'Las matrices no son conformables '; $html .= 'Por lo tanto no se puede hacer la multiplicacion'; echo $html; ?> <p class='centrado'> <a href='0306MultiplicaMatrices.php'> <img alt='' src='../../images/icon-home.gif' ><br>Home </a> </p> <? } } else { ?> <form action='0306MultiplicaMatrices.php' id='forma' method='post' name='forma' > <fieldset> <legend>Multiplicación de Matrices</legend> <p>Dimensión para la Matriz A</p> <p><label for='f1'>Filas</label> <input id='f1' maxlength='1' name='f1' size='2' type='text' /> </p> <p><label for='c1'>Columnas</label> <input id='c1' maxlength='1' name='c1' size='2' type='text' /> </p> <p>Dimensión para la Matriz B</p>
<p><label for='f2'>Filas</label> <input id='f2' maxlength='1' name='f2' size='2' type='text' /> </p> <p><label for='c2'>Columnas</label> <input id='c2' maxlength='1' name='c2' size='2' type='text' /> </p> <p class='centrado'> <input id='calcular' name='calcular' type='submit' value='Calcular' /> </p> </fieldset> </form> <? }?>
DescargarEjecutar
Ejemplo: Una rocola básica
En las líneas 2 al 10 se declara una matriz bidimensional asociativa
llamada Salseros Mediante la instrucción foreach recorremos dicha matriz que obtiene un vector
denominado cantante (Línea 22)
La extracción del vector cancion en la línea 25 nos permite tomar la musica en
nuestro caso la primera columna es el nombre del artista y el resto de las
posibles serán las canciones a reproducir
Si bien el programa no tiene errores de lógica, su uso no es óptimo y su
optimización será tema de otro apartado
Ads not by this site
?
<?php $Salseros = array( array('Adolescentes','Se acabo el amor', 'Sera o no sera'), array('Alberto Barros','Cali Aji', 'La Palomita'), array('Gilberto Santa Rosa','Vivir Sin Ti', 'Me Cambiaron Las Preguntas'), array('Maelo Ruiz','Te va a doler','Regalame una noche'), array('Mariano Civico','Ana Mile','La Mitad'), array('Puerto Rico Power','Quiereme tal como soy','Tengo miedo'), array('Tito Nieves','Si yo fuera el','La leccion de Pedro K'), array('Victor Manuelle', 'Noche De Loba','Nuestro amor se ha vuelto ayer') ); ?> <table> <thead> <th>Salsero</th> <th>Canción 1</th> <th>Canción 2</th> </thead> <tbody> <? $html= ''; foreach($Salseros as $cantante) { $html .= '<tr>'; $i = 1; foreach($cantante as $cancion) { if ($i !== 1) { $rola = 'mp3/'.$cancion.'.mp3'; $html .= "<td><embed class='flash_close' width='100' "; $html .= "height='25' type='application/x-shockwave-flash' "; $html .= "src='singlemp3player.swf' "; $html .= "pluginspage='http://www.adobe.com/go/getflashplayer' "; $html .= "flashvars='file=$rola'/><br />"; $html .= $cancion.'</td>'; } else { $html .= '<td>'.$cancion.'</td>'; } ++$i; } $html .= '</tr>'; } echo $html; ?>
DescargarEjecutar
3.7. Funciones
Una función es el término para describir una secuencia de órdenes que hacen una tarea específica de una aplicación más grande.
Una función de usuario en PHP no es más que una porción de código que podemos llamar en cualquier momento. De un lado, al dividir nuestro código en funciones podemos aislar y perfeccionar cada una de sus funcionalidades; de otro lado, podemos reutilizar este código, ya que una función puede ser llamada cuantas veces la necesitemos.
Para definir una función debemos usar la palabra reservada function. Para llamar la función basta con invocar su nombre.
Las declaraciones de funciones generalmente son especificadas por:
Nombre de la función con el que se identifica y se distingue de otras. No podrá
haber otra función, ni procedimiento con ese nombre (salvo sobrecarga o
polimorfismo en programación orientada a objetos).
Un tipo de dato de retorno. Tipo de dato del valor que la función devolverá al
terminar su ejecución.
Una lista de parámetros. Especificación del conjunto de argumentos (pueden
ser cero, uno o más) que la función debe recibir para realizar su tarea.
El código u órdenes de procesamiento. Conjunto de órdenes y sentencias que
debe ejecutar la función.
La sintaxis de una función es la siguiente:
?
123
<span class="style3">function</span> nombreFuncion(arg1, arg2,... argn) { //cuerpo de la función}
Ejemplo: Conventir grados centígrados a grados Fahrenheit.
En las líneas 2 al 4 se hace la declaración de la función
La palabra reservada return regresa el valor de la función línea 3
En la línea 11 se hace un llamado a la función cF pasandole como parámetro
una variable
?
= $_POST['centigrados']; if( isset($_POST['convertir']) && $_SERVER["REQUEST_METHOD"] == "POST" && !empty($g) ) {
function cF( $grados ){ return 1.8 * $grados + 32;}
echo "<p class='centrado'>$g grados centigrados equivalen a ".cF($g)." grados Fahrenheit</p>"; unset($_POST['centigrados']);?> <p class='centrado'> <a href='0307Centigrados.php'><img src='../../images/calcular.gif' alt=''>Home</a> </p><?
} else { ?> <form id='forma' name='forma' method='POST' action='0307Centigrados.php'> <fieldset> <legend>Grados centígrados a grados Fahrenheit</legend> <p> <label for='centigrados'>Centígrados</label> <input alt='Grados centígrados' name='centigrados' maxlength='3' title='Grados centígrados' size='3' type='text' /> </p> <p class='centrado'> <input name='convertir' type='submit' value='Convertir' /> </p> </fieldset> </form><?
DescargarEjecutar
PHP no distingue entre mayúsculas y minúsculas al nombrar las funciones, asi que cF sería lo mismo que CF, aunque es buena práctica ser consistente en la forma de escribir los nombres. Como curiosidad, podrás observar que en los
mensajes de error, PHP siempre designa tus funciones en minúscula.
Los paréntesis permiten pasar valores a las funciones (parámetros), son siempre necesarios, aunque no pases valor alguno
Una función puede retornar más de un valor, si lo regresamos como un arreglo y lo asignamos mediante la función de PHP list.
Ejemplo: Convertir grados Centígrados (Celsius) a grados Fahrenheit, Kelvin y Rankine.
La línea 6 regresa un array de valores
Mediante la función list se recuperan los valores del array en variables
?<?php function conversion( $grados ){ $f = 1.8 * $grados + 32; $r = $f + 459.67; $k = $r/1.8; return array($f, $r, $k); }
$convertir = $_POST['convertir']; $formato = "<p class='centrado'>"; if( isset($convertir) && $_SERVER['REQUEST_METHOD'] == 'POST'){ $g = $_POST['grados']; list($f, $r, $k) = conversion($g); echo "$formato $g grados centígrados equivalen a:</p>"; echo "$formato $f grados Fahrenheit</p>"; echo "$formato $r grados Rankine</p>"; echo "$formato $k grados <span class="e2507h48" id="e2507h48_5">Kelvin</span> </p>"; ?> <p class='centrado'><a href='0307Conversion.php'> <img alt='' src='../../images/home.gif'><br />Home</a> </p> <? } else { ?> <form id='forma' name='forma' method='POST' action='0307Conversion.php'> <fieldset> <legend>Conversión de temperaturas</legend> <p> <label for='grados'>Grados</label> <input alt='Grados' maxlength='3' name='grados' size='3' type='text' title='Grados' /> </p>
<p class='centrado'> <input alt='' name='convertir' type='submit' value='Convertir' /> </p> </fieldset> </form> <? }?>
DescargarEjecutar
Paso de parámetros por referencia
Hasta el momento usamos parámetros por valor. Si queremos pasar nuestras variables por referencia - de tal manera que los cambios en los argumentos persistan - es necesario anteponer al argumento o parámetro el símbolo "&".
Ejemplo: Considere el cálculo del área y volumen de una esfera en función de su radio mediante las siguientes formulas;
En la línea 4 al 7 se declara una función con parámetros por referencia. Observe que los parámetros por referencia se denotan anteponiendo un & al $.
La línea 5 usa la función predifinida pi() que no necesita explicación
Observe que la función no regresa valores, pero aun así las variables área y
volumen tomaron valor. Esto es porque fueron declaradas como parámetros por
referencia.
La función PHP number_format (Líneas 14 y 15) da formato a un
parámetro numérico con separador de miles y decimales
Ads not by this site
?
$radio = $_POST['radio'];if( isset($_POST['calcular']) && $_SERVER['REQUEST_METHOD'] == 'POST' && $radio >0) {
function calculo( $radio, &$area, &$volumen ){ $area = 4 * pi() * $radio * $radio; $volumen = $area * $radio /3;
$formato = "<p class='centrado'>"; $area = 0;$volumen = 0;calculo($radio, $area, $volumen);echo "$formato Sea una esfera cuyo radio es $radio metros</p>"; echo "$formato tiene un área de ".number_format($area,2,'.',',')." metros<sup>2</sup></p>"; echo "$formato tiene un volumen de ".number_format($volumen,2,'.',',')." metros<sup>3</sup></p>";?> <p class='centrado'> <a href='0307Esfera.php'> <img alt='' src='../../images/icon-home.gif'> </a> </p> <?
} else { ?> <form name='forma' method='POST' action='0307Esfera.php'> <fieldset> <legend>Área y volumen de una esfera</legend> <p> <label for='radio'>Radio</label> <input alt='Radio de una esfera' maxlength='2' name='radio' size='2' type='text' /> </p> <p> <input name='calcular' type='submit' value='Calcular' /> </p> </fieldset> </form><?
DescargarEjecutar
Se puede proporcionar un valor por defecto para la función, que se aplicará salvo que específique otro al llamarla.
Ejemplo: Convertir de yardas a metros
En las líneas 2 al 4 declara la función yardas_metros cuyo parámetro por
defecto es 1
$y = yardas_metros() hace una llamada a la función sin parámetros
$m = yardas_metros($yardas) hace una llamada a la función con parámetros
?<?php $yardas = $_POST['yardas']; if( isset($_POST['convertir']) && $_SERVER["REQUEST_METHOD"] =='POST' && $yardas > 0) { function yardas_metros( $yarda = 1 ){ return 0.9144 * $yarda; } $forma = "<p class='centrado'>"; $y = yardas_metros(); $m = yardas_metros($yardas); echo "$forma Una yarda equivale a $y metros</p>"; echo "$forma $yardas yardas equivalen a $m metros</p>"; ?> <p class='centrado'> <a href='0307Yardas.html'> <img alt='' |src='../../images/icon-home.gif'><br />Home </a> </p> <? } else { ?> <form method='POST' action='0307Yardas.php'> <fieldset> <legend>Convertir yardas a metros</legend> <p> <label for='yardas'>Yardas</label> <input maxlength='4' name='yardas' size='4' type='text' /> </p> <p> <input name='convertir' type='submit' value='Convetir' /> </p> </fieldset> </form> <? }?>
DescargarEjecutar
Cuando la función necesite varios valores y sea necesario fijar un valor por defecto, debe ser el último de los parámetros enviados. Esto implica un cuidadoso diseño, ya que al pasar los valores a una función debes hacerlo por el mismo orden fijado al definirla.
Funciones recursivas
Se denominan funciones recursivas a aquellas que se llaman a sí mismas.
Ejemplo: Para todo número natural n, se llama n factorial o factorial de n al producto de todos los naturales desde 1 hasta n. Es decir:
Se define 0! = 1, para que la relación n! = n × (n - 1)! sea también válida para n = 1. Esta relación permite definir los factoriales por recursividad. La notación n! fue popularizada por el matemático francés Christian Kramp.
?<?php $n = $_POST['n']; $forma = "<p class='centrado'>";
if( isset($_POST['calcular']) and $_SERVER["REQUEST_METHOD"] == 'POST' and !empty($n) && ($n >= 0 and $n <= 69)) { function factorial($n = 1) { if($n <= 1) { return 1; } else { //llamada así misma return $n * factorial($n - 1); } } //Fin: Factorial echo "$forma El factorial de $n = ".factorial($n)."</p>"; ?> <p class='centrado'> <a alt='' href='0307Factorial.php'> <img src='../../images/icon-home.gif' ><br />Home</a> </p> <? } else { ?> <form id='forma' name='forma' method='POST' action='0307Factorial.php'> <fieldset> <legend>Cálculo del factorial de n</legend> <p> <label for='n'>n</label>
<input alt='Ingrese un número' maxlength='2' name='n' size='2' type='text' /> </p> <p> <input name='calcular' type='submit' value='Calcular' /> </p> </fieldset> </form> <? }?>
DescargarEjecutar
Ejemplo: Determinar si un número es primo, par o impar.
Cero y uno es un número primo y par
Dos es primo y par
abs calcula el valor absoluto de un número
sqrt obtiene la raíz cuadrada de un número
floor es el número entero inferior a n. floor(6.7) = 6
$multiplo = floor(sqrt($n)) = Máximo entero que puede dividir exactamente a un
número
Ads not by this site
?
<?php function tipo($m) { $n = abs($m); $forma = "<p class='centrado'>"; if($n == 0) return "$forma 0 es par</p>"; if($n == 1) return "$forma 1 es un primo impar</p>"; if($n == 2) return "$forma 2 es el unico primo par<p />"; if($n % 2 == 0) return "$forma".number_format($m, 0, ".", ",")." es par</p>"; $multiplo = floor(sqrt($n)); $i = 3; while ( ($n % $i !== 0) && ( $i <= $multiplo )) $i += 2; if( $i > $multiplo ) { return "$forma $m es primo</p>"; } else { return "$forma $m es impar</p>"; } }
if( isset($_POST['calcular']) && $_SERVER["REQUEST_METHOD"] == 'POST' && !empty($_POST['n']) ) { echo tipo($_POST['n']); ?> <p class='centrado'><a href='0307Primos.php'> <img alt='' src='../../images/icon-home.gif' /><br />Home</a> </p> <? } else { ?> <form id='forma' name='forma' method='POST' action='0307Primos.php'> <fieldset> <legend>Cálculo de un número primo</legend> <p> <label for='n'>n</label> <input name='n' type='text' id ='n' size='6' maxlength='6' /> </p> <p> <input name='calcular' type='submit' value='Calcular' /> </p> </fieldset> </form> <? }?>
DescargarEjecutar
Ejemplo: Máximo común divisor.
En matemáticas el máximo común divisor (abreviado mcd) de dos números enteros es el mayor número que los divide sin dejar resto. El método que se codifica es el algoritmo de Euclides, el cual se describe formalmente como:
?<?php function mcd($a, $b) { $a = abs($a); $b = abs($b); if ($b == 0) $resultado = $a; else $resultado = mcd($b, $a%$b); return $resultado; } //mcd $a = $_POST['a']; $b = $_POST['b']; $forma = "<p class='centrado'>"; if( isset($_POST['calcular']) && $_SERVER['REQUEST_METHOD'] == 'POST' && !empty($a) && !empty($b)) { $mcd = mcd($a,$b); echo "$forma mcd( $a, $b) = $mcd</p>"; echo "$forma $a".'/'.$b. ' = '.$a/$mcd.'/'.$b/$mcd."</p>"; ?> <p class='centrado'> <a href='0307mcd.php'> <img src='../../images/icon-home.gif' ><br />Home </a> </p> <? } else { ?> <form id='forma' name='forma' method='post' action='0307mcd.php'> <fieldset> <legend>Máximo común divisor</legend> <p> <label for='a'>Numerador</label> <input maxlength='2' name='a' size='2' type='text' /> </p> <p> <label for='b'>Denominador</label> <input maxlength='2' name='b' size='2' type='text' />
</p> <p> <input maxlength='2' name='calcular' size='2' type='submit' value='Calcular' /> </p> </fieldset> </form> <? }?>
DescargarEjecutar
Ejemplo: Mínimo común múltiplo
El mínimo común múltiplo (m.c.m.) de dos números naturales es el menor número natural que es múltiplo de todos ellos. Sólo se aplica con números naturales, es decir, no se usan decimales ni números negativos.
Conociendo el máximo común divisor de dos números, se puede calcular el mínimo común múltiplo de ellos, que será el producto de ambos dividido entre su máximo común divisor.
?1234567
<?php function mcd($a, $b) { if ($b == 0) $resultado = $a; else $resultado = mcd($b, $a%$b); return $resultado; } //mcd
function mcm($a, $b) {
89101112131415161718192021222324252627282930313233343536373839404142434445464748
$a = abs($a); $b = abs($b); return ($a * $b)/mcd($a, $b); }
$a = $_POST['a']; $b = $_POST['b']; $forma = "<p class='centrado'>"; if( isset($_POST['calcular']) && $_SERVER['REQUEST_METHOD'] == 'POST' && !empty($a) && !empty($b) ) { $mcm = mcm($a,$b); echo "$forma mcm( $a, $b) = $mcm</p>"; ?> <p class='centrado'> <a href='0307mcm.php'> <img src='../../images/icon-home.gif'><br />Home </a> </p> <? } else { ?> <form id='forma' name='forma' method='post' action='0307mcm.php'> <fieldset> <legend>Mínimo común múltiplo</legend> <p> <label for='a'>Numerador</label> <input maxlength='2' name='a' size='2' type='text' /> </p> <p> <label for='b'>Denominador</label> <input maxlength='2' name='b' size='2' type='text' /> </p> <p> <input name='calcular' type='submit' value='Calcular' /> </p> </fieldset> </form> <? }?>
DescargarEjecutar
Ejemplo de aplicación: Suma, resta, multiplicación y división de quebrados
Suma o Resta
Multiplicación
División
Reducir
Fracciones
function sumaResta($n1, $d1, $n2, $d2, $signo) { $dr = mcm($d1, $d2); $nr = ($n1 * ($dr / $d1) + $signo * $n2 * ( $dr / $d2)); $cadena = $n1.'/'.$d1.' '; $cadena .= ($signo == 1?'+':'-').' '.$n2.'/'.$d2; if($nr == 0) { $mensaje = $cadena.' = 0'; } else { if( $nr == $dr) { $mensaje = $cadena.' = 1'; } else { $mensaje = reducir($nr, $dr, $cadena); } } return $mensaje; }
DescargarEjecutar
Ejemplo: La constante matemática e
Es uno de los más importantes números reales. El logaritmo en base e se llama logaritmo natural o neperiano. El número e, conocido a veces como número de Euler o constante de Napier fue reconocido y utilizado por primera vez por el matemático escocés John Napier, quien introdujo el concepto de logaritmo en el cálculo matemático.
El número e, al igual que el número π, es un número trascendente, es decir, que no puede ser obtenido directamente mediante la resolución de una ecuación algebraica. Por lo tanto, es un irracional y su valor exacto no puede ser expresado como un número finito de cifras decimales o con decimales periódicos. Su valor aproximado (truncado) es dado por la función
El código PHP para calcular el número de Euler esta dado por:
?1234567891011121314151617
<?php function numeroEuler() { $error = 0.000000000001; $e = 2; $anterior = 0; $i = 2; $f = 2; while ( abs($e - $anterior) >= $error) { $anterior = $e; $e += 1/$f; $f = $f * ++$i; } return $e; } $e = numeroEuler(); echo 'Número de Euler o constante de Napier = '.$e?>
DescargarEjecutar
Ejemplo: Mediante una serie de Taylor podemos calcular muchas funciones importantes. Como por ejemplo la función exponencial dada por:
Un código depurado se presenta a continuación. El cual es más eficiente al no tener que calcular cada factorial.
Ads not by this site
?
<?php function exponencial($x = 0) { //máximo error permitido $error = 0.000000000001; if ($x != 0) { $e = 1;} else return 0; $anterior = 0; $i = 0; $f = 1; //Aproximación while ( abs($e - $anterior) >= $error) { $anterior = $e; $f *= ++$i; $e += pow($x, $i)/$f; } return $e; } $x = $_POST['e']; $forma = "<p class='centrado'>"; if( isset( $_POST['calcular'] ) and $_SERVER['REQUEST_METHOD'] == 'POST' and !empty($x)) { echo "$forma Exponente($x) = ".exponencial($x)."</p><br />"; ?> <p class='centrado'> <a href='0307ExponencialSerie.php'> <img alt='' src='../../images/icon-home.gif' ><br />Home </a> </p> <? } else { ?> <form name='forma' method='POST' action='0307ExponencialSerie.php'> <fieldset> <legend>exp(x)</legend> <p> <label for='e'>x</label> <input alt='Ingrese un número' maxlength='2' name='e' size='2' type='text' /> </p> <p> <input name='calcular' type='submit' value='Calcular' /> </p> </fieldset> </form> <?}?>
DescargarEjecutar
3.8 Formularios
Los formularios no forman parte de PHP pero le permiten a este interactuar con el mundo exterior. PHP maneja en forma simple las variables de formulario, es capaz de generar salidas HTML. La sintaxis de un formulario es la siguiente:
action
Identifica el archivo PHP que manipula el formulario que se envia. Los formularios son manipulados por PHP del lado servidor.
El atributo "method" define cómo la información de un formulario es enviada al navegador. Existen dos valores posibles para este atributo (insensibles a mayúsculas/minúsculas):
get: Los datos del formulario son agregados a la URL definida en el atributo
"action" (por ejemplo, pagina.php?pnombre=jorge&papellido=perez
post: Los datos del formulario son agregados al cuerpo del formulario.
target
Este parámetro indica dónde debe mostrarse esa información. Puede tomar los valores:
_self : en este mismo marco o ventana.
_blank: en una ventana nueva. _top: en el marco de que depende toda la ventana que estamos visualizando (si
no utilizamos marcos en nuestra página (FRAMESET) equivaldrá a_self).
_parent: el marco padre de la ventana que estamos visualizando (si
utilizamos FRAMESET con sólo un nivel de anidación, equivaldrá a _top).
id
Nombre del formulario. id y name deben comenzar con una letra ([A-Za-z]) que puede estar seguida por un número cualquiera de letras, dígitos, ([0-9]), guiones ("-"), subguiones ("_"), dos puntos (":"), y puntos ("."). Es un identificador único, por ejemplo el CURP y el RFC.
name
Este atributo da nombre al elemento de modo que se pueda hacer referencia a él desde hojas de estilo o scripts. Sirve para referenciar elementos del mismo tipo. Por ejemplo la raza de un perro que identifica animales con características iguales.
Ejemplo: El índice de masa corporal (IMC) es una medida de asociación entre el peso y la talla de un individuo. Ideado por el estadístico belga L. A. J. Quetelet, también se conoce como índice de Quetelet. Se calcula según la expresión matemática:
El valor obtenido varía con la edad y el sexo. También depende de otros factores, como las proporciones de tejidos muscular y adiposo. En el caso de los adultos se ha utilizado como uno de los recursos para evaluar su estado nutricional, de acuerdo con los valores propuestos por la Organización Mundial de la Salud.
?
<?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>Valoración</strong></td><td>".valoracion($imc);
$html .= "</td><td></td></tr></table>";
return $html."<br />";
}
$calcular = $_POST['calcular'];
if( isset($calcular) and $_SERVER['REQUEST_METHOD'] == 'POST' ) {
$peso = $_POST['peso'];
$altura = $_POST['altura'];
if(!empty($peso) and !empty($altura)) { //checamos si $peso y $estatura tomaron valor
$html = resultado($peso, $altura, imc($peso, $altura));
} else {
$html = "<p class='centrado'>Faltan datos <br /></p>";
}
echo "<p class='centrado'>".$html."</p>";
?>
<p class='centrado'>
<a href='0308IMC.php'><img src='../../images/icon-home.gif' /><br />Home</a>
</p>
<?
} else {
?>
<form name='forma' method='post' action='0308IMC.php'>
<fieldset>
<legend>Índice de masa corporal</legend>
<p>
<label for='peso'>Peso</label>
<input name='peso' type='text' alt='Peso en kilogramos' /> Kg
</p>
<p>
<label for='altura'>Altura</label>
<input name='altura' type='text' alt='Altura en metros' /> mts
</p>
<p>
<input type='submit' name='calcular' value='Calcular' id='calcular' />
</p>
</fieldset>
</form>
<?
}
?>
Descargar
Ejecutar
Ejemplo: Consideremos la ecuación cuadrática general ax2 + bx + c = 0.
Se puede resolver la ecuación mediante la expresión:
.
Analizando la raíz cuadrada, se llega a las siguientes conclusiones:
Al término b2 − 4ac se le llama discriminante.
Si b2 es menor que − 4ac los resultados de X serán dos valores con parte real
y parte imaginaria. Es decir, el resultado será un número complejo.
Si b2 es mayor que − 4ac obtendremos dos valores distintos de X reales.
Y si b2 es igual que − 4ac obtendremos dos valores de X reales e iguales.
La solución en código PHP se presenta a continuación tanto para números reales como complejos.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$calcular = $_POST['calcular'];
if( isset($calcular) && $_SERVER['REQUEST_METHOD'] == 'POST' ) {
unset($calcular);
$a = $_POST['a'];
$b = $_POST['b'];
$c = $_POST['c'];
if( !(empty($a) or empty($b) or empty($c) )) {
if($a != 0) {
$descriminante = ($b * $b) - 4 * $a * $c;
if($descriminante >= 0) {
$raiz = sqrt($descriminante);
$x1 = (-$b + $raiz)/(2*$a);
$x2 = (-$b - $raiz)/(2*$a);
} else {
$raiz = sqrt(-$descriminante)/(2*$a);
$real = -$b/(2*$a);
$x1 = $real.' + '.$raiz.'i';
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
$x2 = $real.' - '.$raiz.'i';
}
echo "<p class='centrado'>x1 = ".$x1."</p>";
echo "<p class='centrado'>x2 = ".$x2."</p>";
} else echo "<p class='centrado'>No es una cuadrática</p>";
} else echo "<br /><p class='centrado'>Faltan datos</p>";
} else {
?>
<form name='forma' method='post' action='0308fGeneral.php'>
<fieldset>
<legend>Formula general</legend>
<p>
<label for='a'>a</label>
<input name='a' type='text' size='2' maxlength='2' />
</p>
<p>
<label for='b'>b</label>
<input name='b' type='text' size='2' maxlength='2' />
</p>
<p>
<label for='c'>c</label>
<input name='c' type='text' size='2' maxlength='2' />
</p>
<p class='centrado'>
<input type='submit' name='calcular' value='Calcular' />
</p>
</fieldset>
</form>
<?
}
?>
48
49
Descargar
Ejecutar
Ejemplo: A continuación se desarrolla una calculadora básica en PHP. Se recupera la información del archivo html mediante $_POST (líneas 5, 6 y 7) el valor recuperado se logra al invocar como parámetro el id del componente.
?
<?php
$calcular = $_POST['calcular'];
if( isset($calcular) && $_SERVER["REQUEST_METHOD"] == "POST" ) {
$a = $_POST['a'];
$operador = $_POST['operador'];
$b = $_POST['b'];
if( !empty($a) and !empty($b) ) {
switch ($operador) {
case '+': $resultado = $a + $b; break;
case '-': $resultado = $a - $b; break;
case '*': $resultado = $a * $b; break;
case '/': $resultado = $a / $b; break;
case '%': $resultado = $a % $b; break;
}
echo "<p class='centrado'>$a $operador $b = ". $resultado."</p>";
} else {
echo "<p class='centrado'>Por favor no jugar</p>";
}
} else {
?>
<form name='forma' method='post' action='0308Calculadora.php'>
<fieldset>
<legend>Calculadora básica</legend>
<p>
<label for='a'>a</label>
<input name='a' type='text' />
</p>
<p>
<label for='operador'>Operador</label>
<select name='operador'>
<option value='+'>+</option>
<option value='-'>-</option>
<option value='*'>*</option>
<option value='/'>/</option>
<option value='%'>%</option>
</select>
</p>
<p>
<label for='b'>a</label>
<input name='b' type='text' />
</p>
<p class='centrado'>
<input name='calcular' type='submit' value='Calcular' />
</p>
</fieldset>
<?
}
?>
Descargar
Ejecutar
3.9. Ejemplos PHP
Redireccionamiento de los visitantes a las páginas específicas en su idioma.
Conocer los idiomas seleccionados en el navegador de nuestros visitantes puede ser un dato muy importante que puede utilizar para redirigir al usuario a una página específica en el idioma correspondiente, o bien para mostrar información específica dirigida al usuario (como por ejemplo el anuncio más adecuado)
Si deseamos que nuestro sitio sea bilingüe en inglés y español, bajo el supuesto que el español y el inglés son los dos idiomas más utilizado por nuestros visitantes (nuestro idioma por defecto será español).
?1234567
<? if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE],0,2) == 'es'){ include('paginaEspanol.html'); >} else { include('paginaIngles.html'); }?>
Imprimir fecha y hora del sistema
?1234567
<html> <body> La fecha del día de hoy es: <? echo date("Y/m/d"); ?> La hora local del servidor es: <? echo date("G:i:s"); ?> </body></html>
Ejecutar
Procesando Formularios
Para conocer mediante que método recibimos el formulario en PHP usamos la variable de servidor $_SERVER['REQUEST_METHOD']. El siguiente código muestra su uso.
?1234567
<?phpif ($_SERVER['REQUEST_METHOD'] == 'GET'){ echo 'Usaste GET para enviar los datos';} else if($_SERVER['REQUEST_METHOD'] == 'POST'){ echo 'Usaste PUT para enviar los datos';}?>
Eliminar espacios
La funcióm trim elimina los espacios en blanco de la cadena. Observe que está
función solo elimina los espacios en blanco de los extremos izquierdo y derecho
de la cadena, ignorando los espacios en blanco internos (Línea 10)..
La función strlower convierte la cadena en minúsculas (Línea 3).
ereg_replace busca cualquier ocurrencia del patrón en la cadena y la
reemplaza por otra. En nuestro caso, cambia todo espacio en blanco por vacio
(Línea 4).
?1234567891011121314151617181920212223242526272829303132333435
<?php function eliminarEspacios($cadena) { $cadena = strtolower($cadena); $cadena = ereg_replace( ' ', '', $cadena); return "<p class='centrado'>".$cadena."</p><br />"; }
if( isset($_POST['enviar']) && $_SERVER['REQUEST_METHOD'] == 'POST' ) { $cadena = trim($_POST['cadena']); if( empty($cadena)) { echo "<p class='centrado'>Enviaste una cadena vacía</p>"; } else echo eliminarEspacios($cadena); ?> <p class='centrado'> <a href='0309espacios.php'> <img alt='' src='../../images/icon-home.gif' /><br />Home </a> </p> <? } else { ?> <form name='forma' method='post' action='0309espacios.php'> <fieldset> <legend>Eliminar Espacios</legend> <p> <label for='cadena'>Cadena</label> <input name='cadena' type='text' /> </p> <p class='centrado'> <input name='enviar' value='Enviar' type='submit' /> </p> </form> <? }?>
DescargarEjecutar
Cálculo de áreas y perímetros
El programa principal realiza una interfase básica para manejar multiples formularios en un mismos archivo. El procesamiento con PHP permite capturar las diferentes características de las figuras geométricas.
El componente hidden permite manejar el tipo de figura para el cálculo de área y perímetro.
?<?php $calcular = $_POST['calcular']; if(isset( $calcular ) && $_SERVER['REQUEST_METHOD'] == 'POST' ) { $cuerpo = $_POST['cuerpo']; if($cuerpo == 'cuadrado') { ?> <form name='cuadrado' method='post' action='0309FigurasAreaPerimetro.php'> <fieldset> <legend>Cálculo del área y perímetro de un cuadrado</legend> <p> <label for='lado'>Lado</label> <input name='lado' type='text' /> </p> <p class='centrado'> <input type='submit' name='calcular' id='calcular' value='Calcular' /> </p> <input name='figura' type='hidden' value='Cuadrado' /> </fieldset> </form> <? } else if($cuerpo == "circulo") { ?> <? } else { ?> <? } } else { ?> <form name='forma' method='post' action='0309Figuras.php'> <fieldset> <legend>Cálculo área y perímetro figuras geométricas</legend> <p> <label for='cuerpo'>Figura</label> <select name='cuerpo'> <option value='circulo'>Circulo</option> <option value='cuadrado'>Cuadrado</option> <option value='rectangulo'>Rectángulo</option> </select> </p> <p> <input name='calcular' type='submit' value='Calcular' /> </p> </fieldset> </form> <? }?>
Por último se presenta el código que procesa los datos de entrada
?
<?php$figura= $_POST['figura'];if($figura == 'Cuadrado') { $lado = $_POST['lado']; $area = number_format($lado * $lado, 2, '.', ','); $perimetro = number_format(4 * $lado, 2, '.', ','); $resultado = "El área de un Cuadro de lado = $lado es de $area unidades cuadradas ";} else if($figura == 'Rectangulo') { $altura = $_POST['altura']; $base = $_POST['base']; $area = number_format($altura * $base, 2, '.', ','); $perimetro = number_format(2 * ($altura + $base), 2, '.', ','); $resultado = "El área de un Rectángulo de base = $base y altura = $altura es "; $resultado .= "de $area unidades cuadradas ";} else { $radio = $_POST['radio']; $area = number_format(pi() * $radio * $radio, 2, '.', ','); $perimetro = number_format(2 * $radio* pi(), 2, '.', ','); $resultado = "El área de un Circulo de radio = $radio es de $area unidades cuadradas "; }echo "<p class='centrado'>$resultado</p>";echo "<p class='centrado'>con un perímetro de $perimetro unidades</p><br />";
DescargarEjecutar
Envio de correos
Enviar correos mediante PHP es sumamente sencillo si usamos la función mail
La función mail es: mail($destino, $asunto, $mensaje, $encabezado);
donde
$destino: es la dirección a donde se enviará el mensaje
$asunto: asunto del mensaje
$mensaje: cuerpo del mensaje
$encabezado: aquí se anexa por ejemplo a quien se envía el mensaje, si el
mensaje va ir con copia para, si el mensaje ira con copia oculta para, si tendrá
formato html, etc.
or die manda un mesaje si ocurre un error y detiene el proceso
Ads not by this site
?<?php $enviar = $_POST['enviar']; if ( isset($enviar) && $_SERVER["REQUEST_METHOD"] == "POST") { $destino = trim($_POST['destino']); $asunto = trim($_POST['asunto']); $mensaje = trim($_POST['mensaje']); if( !( empty($destino) or empty($asunto) or empty($mensaje))) { if( filter_var($destino, FILTER_VALIDATE_EMAIL)) { mail($destino, $asunto, $mensaje) or die ("Su mensaje no se envio a $destino."); $cadena = "Mensaje enviado con éxito a $destino"; } else $cadena = "Correo no valido"; } else $cadena = "Faltan datos"; ?> <p class='centrado'> <a href='0309email.php'><img src='../../images/icon-home.gif' /><br />Home</a> </p> <?
} else { ?> <form name='forma' method='post' action='0309email.php'> <fieldset> <legend>Envio de email con PHP</legend> <p> <label for='destino'>Destino</label> <input name='destino' type='text' /> </p> <p> <label for='asunto'>Asunto</label>
<input name='asunto' type='text' /> </p> <p> <label for='mensaje'>Mensaje</label> <textarea cols='40' name='mensaje' rows='5'></textarea> </p> <p class='centrado'> <input name='enviar' type='submit' value='Enviar' /> </p> </fieldset> </form> <? }?>
DescargarEjecutar
Convertir números arábigos a romanos.
Los números romanos se escriben usando una serie de caracteres alfanúmericos. Los números romanos validos tienen un rango entre 1 y 3,999. Se presenta a continuación la interfase y la solución PHP.
La función principal es escribeRomanos la cual recibe como parámetro un
número arábigo. El código proporcionado incluye una función
denominadaentero que verifica que la cadena a traducir sea un entero valido
entre 1 y 3,999.
En las líneas 2, 8, 13 y 20 se crean los vectores necesarios para representar
números romanos (unidades, decenas, centenas y miles).
La función substr extrae subcadenas y se usa para ir traduciendo el número
arábigo a romano.
La función int convierte una cadena a número si lo es.
?<?phpfunction entero( $cadena, $n ) { if( is_numeric($cadena) ) { if( $n == $cadena ) { if( $n >= 1 && $n <= 3999 ) { return TRUE; } else { echo "<p class='centrado'>"."El número $n está fuera de rango"."</p><br />";} } else { echo "<p class='centrado'>".'Número no valido = '.$cadena."</p><br />";} } else { echo "<p class='centrado'>".'Cadena no valida '.$cadena."</p><br />"; } return FALSE;}
function unidades($n) { $unidad= array('I', 'II','III','IV','V','VI','VII','VIII','IX'); $n = (int)$n; if( $n >= 1 ) { return $unidad[$n -1]; } else { return "";}}
function decenas($n) { $n = (int)$n; $decena = array('X', 'XX','XXX','XL','L','LX','LXX','LXXX','LX'); if( $n >= 10 ) { return $decena[substr($n, 0, 1) - 1].unidades(substr($n,1,1)); } else { return unidades($n); }}
function centenas($n) { $n = (int)$n; $centena = array ('C','CC','CCC','CD','D','DC','DCC','DCC','CM'); if( $n >= 100 ) { return $centena[substr($n, 0, 1) - 1].decenas(substr($n, 1, 2)); } else { return decenas($n); }}
function miles($n){ if( strlen($n) == 4 ) { $mil = array('M','MM','MMM'); $romano = $mil[substr($n, 0, 1) - 1]; $romano .= centenas( substr($n,1,3) ); } else {$romano = centenas($n);} return $n.' = '.$romano;}
$enviar = $_POST['enviar'];if( isset($enviar) && $_SERVER["REQUEST_METHOD"] == "POST") { $n = (int)$_POST['numero']; if( entero($_POST['numero'], $n) ) { echo "<p class='centrado'>".miles($n)."</p>"; } else "<p class='centrado'>"."Cadena no valida ".$_POST['numero']."<br />"; ?> <p class='centrado'> <a href='0309Romanos.php'> <img src='../../images/icon-home.gif' ";/><br />Home </a> </p> <?} else { ?> <form name='forma' method='post' action='0309Romanos.php'> <fieldset> <legend>Convertir números Arábigos a Romanos PHP</legend> <p> <label for='numero'>Número</label>
<input maxlength='4' name='numero' size='4' type='text' /> </p> <p class='centrado'> <input name='enviar' type='submit' value='Aceptar' /> </p> </fieldset> </form> <?}
DescargarEjecutar
Convertir números a letras
La función que se presenta a continuación convierte números a letras. El número a convertir debe ser un entero positivo menor a 999,999, 999,999.
La línea 3 (Editada para fines de presentación) declara un array con la
representación alfabética de los números comprendidos entre 1 y 29. Esta
característica se debe a que dichos números no siguen un patrón para su
escritura.
La línea 11 declara un arreglo asociativo que contiene la conversión de los
números 30, 40 ... y 90.
La línea 14 obtiene el módulo 10 de n.
Si el módulo 10 de n es cero se regresa la posición asociada a n en el vector
decenas(línea 11)
Si el módulo 10 de n es diferente de cero. Se regresa la posición asociada a n
en el vector decenas y se hace un llamado a la función básico.
La línea 21 declara un arreglo asociativo para la representación alfabética de
los números 100,200, ... y 900.
La línea 30 hace uso de un operador ternario para poder manejar la escritura de
los números comprendidos entre 101 y 199.
En la línea 39 se obtiene la longitud de n. En el caso de los miles está longitud
varía entre 4 y 6.
substr($cadena, -3) obtiene los últimos 3 caracteres de la cadena, línea 41.
?
function basico($numero) {$valor = array ('uno','dos','tres','cuatro','cinco','seis','siete','ocho','nueve','diez', 'once','doce','trece','catorce','quince','dieciséis','diecisiete',
'dieciocho','diecinueve','veinte','veintiuno','veintidos','ventitres', 'veinticuatro','veinticinco','veintiséis','veintisiete','veintiocho','veintinueve');return $valor[$numero - 1];
function decenas($n) {$decenas = array (30=>'treinta',40=>'cuarenta',50=>'cincuenta',60=>'sesenta', 70=>'setenta',80=>'ochenta',90=>'noventa');
if( $n <= 29) return basico($n);= $n % 10;if ( $x == 0 ) { return $decenas[$n]; } else return $decenas[$n - $x].' y '. basico($x);
function centenas($n) {$cientos = array (100 =>'cien',200 =>'doscientos',300=>'trecientos',400=>'cuatrocientos', 500=>'quinientos',600=>'seiscientos',700=>'setecientos',800=>'ochocientos', 900 =>'novecientos');if( $n >= 100) { if ( $n % 100 == 0 ) { return $cientos[$n]; } else { $u = (int) substr($n,0,1); $d = (int) substr($n,1,2); return (($u == 1)?'ciento':$cientos[$u*100]).' '.decenas($d); }} else return decenas($n);
function miles($n) { if($n > 999) { if( $n == 1000) {return 'mil';} else { $l = strlen($n); $c = (int)substr($n,0,$l-3); $x = (int)substr($n,-3); if($c == 1) {$cadena = 'mil '.centenas($x);} else if($x != 0) {$cadena = centenas($c).' mil '.centenas($x);} else $cadena = centenas($c). ' mil'; return $cadena; } } else return centenas($n);
function millones($n) {if($n == 1000000) {return 'un millón';} else { $l = strlen($n); $c = (int)substr($n,0,$l-6); $x = (int)substr($n,-6); if($c == 1) { $cadena = ' millón '; } else { $cadena = ' millones '; } return miles($c).$cadena.(($x > 0)?miles($x):''); }
function convertir($n) { switch (true) { case ( $n >= 1 && $n <= 29) : return basico($n); break; case ( $n >= 30 && $n < 100) : return decenas($n); break; case ( $n >= 100 && $n < 1000) : return centenas($n); break; case ($n >= 1000 && $n <= 999999): return miles($n); break; case ($n >= 1000000): return millones($n); }
$convertir = $_POST['convertir']; ='';
if( isset($convertir) && $_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['numero']) ) {
$html = "<p class='centrado'>".$_POST['numero'].' se escribe ';$html .= "<strong>".ucfirst(convertir($_POST['numero']))."</strong></p><br />";echo $html;
DescargarEjecutar
Gráficos
La gráfica es una de las herramientas más útiles en el estudio de la mayoría de las disciplinas, ya que permite una visión de conjunto del fenómeno sometido a investigación, más rápidamente perceptible que la observación directa de los datos numéricos y alfanuméricos. Sus aplicaciones son múltiples y variadas en casi todo el quehacer humano.
Existen diversas librerías escritas para PHP gratuitas y de paga, su selección depende del objetivo y el precio. En este punto abordaremos el uso
de JpGraph librería de uso libre completamente escrita en PHP y funcional para scripts PHP. JpGraph es una librería orientada a objetos para PHP >= 5.1
Gráfica X - Y
A continuación se presentan las temperaturas (mínimo, media y máxima) promedio en la ciudad y puerto de Veracruz, Ver. México
En la línea 2 y 3 se carga la librería JpGraph.
Las líneas 4, 5 y 6 se encargan de definir los datos mediante arreglos para cada
serie
En las líneas 7 al 13 se definen las características de las gráficas. Donde
Graph( Ancho, Alto), crea un objeto de tipo gráfica
En las líneas 15 al 17, se definen el eje X en este caso meses en español.
Las líneas 32 al 34, definen las series en la gráfica
La línea 24 agrega físicamente las series a las gráficas y la línea 35 imprime la
gráfica.
Ads not by this site
?<?php include_once('jpgraph/jpgraph.php'); include_once('jpgraph/jpgraph_line.php');
$minimo = array(19, 20, 22, 24, 25, 25, 25, 25, 24, 24, 21, 20); $maximo = array(26, 27, 29, 31, 32, 32, 32, 32, 32, 31, 29, 27); $promedio = array(22.5, 23.5, 25.5, 27.5, 28.5, 28.5, 28.5, 28.5, 28.0, 27.5, 25.0, 23.5); $graph = new Graph(650, 450); $graph->SetScale('textlin',18, 38); // Escala linear en x $graph->SetMargin(50,60,40,45); $graph->SetMarginColor('white'); $graph->title->Set('Temperatura en Veracruz, Ver. México'); $graph->xaxis->title->Set('Mes');
$gDateLocale->Set('spanish'); //Obtiene los meses del año $mes = $gDateLocale->GetShortMonth(); $graph->xaxis->SetTickLabels($mes); //$graph->xaxis->SetFont(FF_ARIAL,FS_BOLD,8); $graph->yaxis->title->Set('Grados centígrados'); //$graph->yaxis->SetFont(FF_ARIAL,FS_BOLD,8);
$tminimo = new LinePlot($minimo); $tminimo->SetLegend('Mínimo'); $tminimo->SetColor('blue');
$tpromedio = new LinePlot($promedio); $tpromedio->SetLegend('Promedio'); $tpromedio->SetColor('green'); $tmaximo = new LinePlot($maximo); $tmaximo->SetColor('red'); $tmaximo->SetLegend('Máximo');
$graph->Add($tminimo); $graph->Add($tpromedio); $graph->Add($tmaximo); $graph->Stroke();?>
DescargarEjecutar
Gáfica de barras
El ejemplo describe los resultados oficiales del examen de admisión 2010 del Instituto Técnologico de Veracruz.
La línea 11 se encarga de posicionar las leyendas de cada serie en nuestro caso ingresos a primer semestre e ingresos al semestre cero.
La línea 15 y 20 definen el formato de presentación de los datos, en este caso %0.0f indica que los valores se presentaran como enteros.
La propiedad SetFillGradient (líneas 16 y 21) configuran el degradado de los colores en las barras
El método Stroke nos permite mostrar la gráfica (línea 28)
?<?php require_once ('jpgraph/jpgraph.php'); require_once ('jpgraph/jpgraph_bar.php'); $psemestre = array(74, 75, 75, 75, 100, 75, 75, 75, 100); $cero = array(90, 36, 72, 90, 90, 90, 61, 61, 90);
$carreras = array('Admin', 'Bioquímica','Electrónica', 'Electríca','Industrial', 'Mecánica','Mecatrónica','Química','Sistemas'); $grafica = new Graph(650, 450); // Crea la gráfica $grafica->SetScale('textlin', 0, 120); //$grafica->SetShadow(); $grafica->SetMarginColor('white:1.1'); $grafica->legend->SetPos(0.5,0.97,'center','bottom'); $serie1 = new BarPlot($psemestre); // Crea las barras $serie1->SetLegend('1er. Semestre'); $serie1->value->Show(); $serie1->value->SetFormat('%0.0f'); $serie1->SetWidth(0.6); $serie1->SetFillGradient('navy:0.9','navy:1.85',GRAD_LEFT_REFLECTION); $serie2 = new BarPlot($cero); $serie2->SetLegend('Sem. Cero'); $serie2->value->Show(); $serie2->value->SetFormat('%0.0f'); $serie2->SetWidth(0.6); $serie2->SetFillGradient('red:0.95','red:1.85',GRAD_RIGHT_REFLECTION); // Create the grouped bar plot $gbplot = new GroupBarPlot(array($serie1,$serie2)); $grafica->Add($gbplot); // Suma la serie a la gráfica $grafica->title->Set('Resultado oficial examen admisión I.T.V 2010'); $grafica->xaxis->title->Set('Carrera'); $grafica->xaxis->SetTickLabels($carreras); $grafica->yaxis->title->Set('Número de aceptados'); $grafica->Stroke(); // Despliega la gráfica?>
DescargarEjecutar
Gráficas de pastel
Las gráficas de pastel sirven para expresar porcentajes o conteos de variables cualitativas (ordinales o nominales).
PiePlot crea una instancia de una gráfica de pastel (línea 5)
Las etiquetas se crean en la línea 20 se definen las etiquetas de los datos y su
representación (.1f) expresa un decimal.
?
<?php require_once ('jpgraph/jpgraph.php'); require_once ('jpgraph/jpgraph_pie.php'); $datos = array(16, 30); // Datos $grafica = new PieGraph(600,400,'auto'); // Crear Gráfico $grafica->SetFrame(true); // Despliega el borde $grafica->SetShadow(); $grafica->title->Set('Alumnos por genero Seguridad en Redes. Verano 2010. I.T.V'); $grafica->title->SetMargin(8); // Add a little bit more margin from the top
// Crea la gráfica $genero = new PiePlotC($datos); $genero->SetSize(0.35); $genero->value->SetColor('white'); $genero->value->Show(); $genero->midtitle->Set('Genero'); $genero->SetMidColor('yellow'); $genero->SetLabelType(PIE_VALUE_PER);
$lbl = array('Mujeres\n%.1f%%','Hombres\n%.1f%%'); $genero->SetLabels($lbl); $genero->SetShadow();
$genero->ExplodeAll(15); // Explode all slices 15 pixels $grafica->Add($genero); // Add plot to pie graph $grafica->Stroke(); //Despliega la gráfica?>
DescargarEjecutar
3.10 Manejo de archivos
Hasta el momento almacenamos datos en constantes, variables y arreglos este almacenamiento es temporal y se pierde cuando termina la ejecución del programa. La solución computacional es almacenar dichos datos en una fuente de almacenamiento secundario como por ejemplo undisco duro o pendrive
entre otros medios a fin de que persistan aun después de la ejecución del programa que los crea y puedan ser usados inclusive por otros programas.
Para lograr esto los datos se almacenan en un recipiente llamado archivo, el procesamiento de archivos es una herramienta invaluable de programación. Existen diversos tipos de archivos y su descripción escapa del alcance de este curso.
Sin embargo, mis caros y estimados lectores simplemente cualquier cosa almacena en su disco duro o en su pendrive es un archivo.
Los archivos que PHP pueden ser secuenciales y binarios. Los archivos secuenciales son archivos de texto y los binarios pueden almacenargráficos y diversos formatos de información. Básicamente responden a las siguientes operaciones básicas:
abrir
borrar
cerrar
copiar
escribir
leer
renombrar
Desde las operaciones básicas como copiar, mover y eliminar, hasta operaciones que exigen una cierta complejidad son requeridas para la configuración de páginas Web.
Función Descripción Sintaxis
copy Copia un archivocopy($origen, $destino)
renameCambia el nombre del archivo de $antes a $despues
rename($antes, $despues)
unlink Borra el archivo unlink($archivo)
Manejo de imagenes
A continuación se presentan dos ejemplos, para mostrar la totalidad de las imagenes de una carpeta.
Ejemplo:
La función PHP opendir() se encarga de habilitar una ruta a un subdirectorio.
La función readdir() se encarga de leer un archivo o subdirectorio.
strlower() convierte el contenido de una cadena a minúscula.
substr() extrae una subcadena de una cadena, en este caso por ser el parámetro negativo extrae los últimos cuatro carácteres (línea 10). El objetivo
es extraer la extensión del archivo.
closedir() cierra la ruta al subdirectorio.
<?php if ($gestor = opendir('../imagenes')) { // Abre un gestor de directorios echo "<table border=1 align='center'>"; echo "<tr>"; $i=0; while (false !== ($archivo = readdir($gestor))) { //readdir: Lee un elemento del directorio //$gestor abierto previamente //con opendir y desplaza el puntero al elemento siguiente if ($archivo != "." and $archivo != "..") { //checa que no sea subdirectorio $extension = strtolower(substr($archivo, -4)); //strlower pasa a minuscula una cadena en este caso //los 4 últimos caracteres //de la cadena if (($extension == '.jpg') or ($extension == '.gif') or ($extension == '.png')) { if ($i==4) {// Cuatro imagenes por renglón $i=0; echo "</tr>"; echo "<tr>"; } $i++; echo "<td>"; echo "<a href='../imagenes/$archivo'>"; echo "<img src='../imagenes/$archivo'"; echo "border='0' ></a>";
echo "</td>"; } } } echo "</tr>"; echo "</table>"; closedir($gestor); //Cierra el gestor }?>
DescargarEjecutar
Ejemplo:
La función glob() realiza una búsqueda por todos los nombres de ruta que
coincidan con cierto patrón. En este caso con los gráficos validos para html.
sort() ordena los nombres de los archivos encontrados.
el ciclo foreach recorre el arreglo de archivos.
<?php echo "<table border=1 align='center'>"; echo "<tr>"; $i = 0; //carga las imagenes de la carperta //La función glob() realiza una búsqueda por todos los nombres //de ruta que coincidan con patrón $ruta = "../imagenes/"; $imagenes = glob($ruta . "{*.jpg, *.gif, *.png}", GLOB_BRACE); sort($imagenes); //Recorre el vector foreach($imagenes as $foto){ if ($i==4) { $i=0; echo "</tr>"; echo "<tr>"; } $i++; echo "<td><a href='".$foto."'><img src='".$foto."/></a></td>"; } echo "</tr>"; echo "</table>"; ?>
DescargarEjecutar
Para el siguiente ejemplo usaremos 4 funciones básicas de manipulación de archivos
Función Descripción Sintaxis
filesize Obtiene el tamaño del archivo filesize($archivo);
fopenAbre un archivo y le asigna un identificador id.
$id =fopen($archivo, $modo);
fpassthru
Lee completamente el archivo y lo muestra. El cierre del archivo es automático al terminar el volcado del archivo.
fpassthru($id);
header
Permite modificar las cabeceras que envía el servidor al navegador. Estas cabeceras, que siguen el protocolo HTTP, es la primera información que recibe el navegador en cada petición que realiza, antes que el contenido del archivo.
header("mensaje");
Ejemplo: Mostrar una imagen
fopen además de abrir un archivo, obtiene un apuntador a su contenido. fopen solo debe usarse para abrir un archivo cuyo contenido vamos a manipular. Si unicamente queremos recuperar su contenido (y por ejemplo mostrarlo en pantalla), hay otras funciones mas adecuadas.
Los modos en los que se puede abrir un archivo son:
r Sólo lectura. El puntero al comienzo del archivo
r+ Lectura y escritura; apuntador al inicio del archivo
w Sólo escritura, si no existe el archivo lo crea, si existe lo convierte en archivo
de longitud cero y el apuntador se coloca en el inicio (sobreescribe el contenido,
vamos)
w+ Lectura y escritura, si existe lo trunca a tamaño cero, y se situa al inicio, si
no existe lo crea
a Modo append, sólo escritura, si no existe lo crea. Si existe, el apuntador se
coloca al final del archivo (listo para escribir a continuacion del contenido)
a+ Modo append, lectura y escritura, si no existe lo crea; apuntador al final del
archivo
b es un flag adicional a cualquiera de los anteriores que indica que vamos a
operar sobre un archivo binario (en contraposicion a archivo de texto) como una
imagen o un sonido. En algunos sistemas operativos como linux no existe esta
diferencia asi que el indicador b será ignorado.
Las líneas 7 y 8 envían cabeceras HTTP para indicar el tamaño y formato del archivo.
fpassthru (línea 11) hace un volcado del archivo previamente definido en la línea 4.
<?php // Abree el archivo en modo binario $imagen = '../imagenes/Shakira02.png'; $id = fopen($imagen, 'rb');
// Envia las cabeceras header('Content-Type: image/png'); header('Content-Length: ' . filesize($imagen));
// imprime el archivo y detiene el script fpassthru($id); exit;?>
Ejecutar
Una versión reducida de este código lo podemos encontrar en:
La función file_get_contents (línea 4) permite leer el contenido de un archivo en una cadena.
<? header( 'Content-type: image/png');
$archivo = '../imagenes/Shakira02.png'; $imagen = file_get_contents($archivo); echo $imagen; ?>
Ejecutar
Leer un archivo de texto
En la línea 2 se genera un apuntador al archivo alumnos.txt La función feof (línea 4) comprueba si se encuentra el fin del archivo
La función fgets lee el contenido de un archivo hasta encontrar el fin de línea
(línea 4)
fclose (línea 5) cierra el apuntador
<?php $archivo = fopen('0310alumnos.txt', 'r'); //Imprime una linea hasta que el //final del archivo es encontrado while(!feof($archivo)) { echo fgets($archivo)."<br />"; } fclose($archivo);?>
Ejecutar
Otra forma de hacerlo es mediante la función fread (línea 6) la cual lee el contenido de un archivo.
<?php // obtiene el contenido de un archivo en //una cadena $archivo = '0310alumnos.txt'; $id = fopen($archivo, 'r'); $contenido = fread($id, filesize($archivo)); echo $contenido; fclose($id);?>
Ejecutar
Contador de visitas
file_exists comprueba si un archivo existe (línea 2)
La línea 9 y 12 crean un puntero al archivo
La línea 13 recupera el número de visitantes
La línea 14 incrementa en uno el número de visitantes o reinicia la cuenta si el
archivo no tiene el dato.
fputs guarda la información en el archivo
Las líneas 21 al 21 imprimen el número de visitantes mediante imagenes de los
dígitos
fclose (línea 25) cierra el apuntador ysalva el contenido del archivo.
<?php /******************************************************** * Contador de visitas programado en PHP *************** * Modificado Jose Evaristo Pacheco Velasco ******* * Mas utilidaddes para webmsters en www.desenredate.com ********************************************************/ $destino = '0310visitante.dat'; if (!file_exists($destino)) { // si el archivo no existe lo crea $abrir = fopen($destino, 'w'); $cuenta = ''; } else { $abrir = fopen($destino,'r'); $cuenta = trim(fread($abrir,filesize($destino))); } if ($cuenta != '') $cuenta++; else $cuenta = 1; fclose($abrir); $abrir = fopen($destino,'w'); fputs($abrir, $cuenta); echo "<p align='center'>Eres el visitante:</p>"; // Imprime contador for($i = 0; $i < strlen($cuenta); $i++) { $imagen = substr($cuenta, $i, 1); $contador .= "<img alt='$imagen ' src='$imagen.gif'>"; } fclose($abrir); echo "<p align='center'> $contador </p>";?>
DescargarEjecutar
3.11 Conectividad entre el servidor Web y el servidor de base de datos.
PHP puede conectarse con bases de datos de dos formas: mediante el uso directo de funciones propias del intérprete que dependen del gestor de base de datos usadas o a tráves del estándar ODBC (Open Data Base Connectivity).
En PHP el trabajo con la base de datos se basa en tres etapas fundamentales:
1. Establecer contacto con la base de datos
2. Realizar las operaciones necesarias
3. Cerrar los recursos empleados
Conectar con una base de datos MySQL - PHP
Para conectarse con una base de datos es necesario crear una conexión con el servidor. Esto se logra en PHP mediante el uso de la funciónmysql_connect() . Sintaxis
mysql_connect($ruta, $usuario, $password);
Parámetro Descripción
$rutaOpcional. Específica el servidor al cual se conecta. El
valor por defecto es " localhost:3306".
$usuarioOpcional. Identifica el usuario. El valor por defecto es el nombre de usuario propietario del proceso.
$password Opcional. El valor por defecto es "". No recomendado
ruta invariablemente en un servidor de paga o remoto sera LOCALHOST
Ejemplo de conexión de una base de datos MySQL desde PHP
Línea 6 mediante la función mysql_connect nos conectamos al gestor MySQL
La función mysql_error, devuelve el texto del mensaje de error de la última
operación MySQL
Mediante la función mysql_select_db seleccionamos la base datos (Línea 8)
mysql_close cierra la conexión a la base de datos (Línea 10).
?1234567891011
<?php
$ruta = "localhost"; $login = "mi_login"; $password = "mi_password"; $db = "miBaseDatos"; $conexion = mysql_connect( $ruta, $login, $password) or die(mysql_error()); mysql_select_db( $db, $conexion ) or die(mysql_error()); echo "conectado bravo!!!!!!"; mysql_close($conexion); ?>
DescargarEjecutar
Crear una base de datos en MySQL - PHP
La sentencia CREATE DATABASE es usada para crear una base de datos en MySQL. Su sintaxis es la siguiente:
CREATE DATABASE nombre
Para generar esta sentencia desde PHP usaremos las siguiente funciones:
La función mysql_connect() nos conecta al servidor mysql con los parámetros
ruta, login y password. $ruta indica el sitio donde estaran nuestros datos. La
ruta localhost funciona regularmente cuando nos conectamos a un servidor instalados en nuestra pc o aun servidor de paga.
La funcion mysql_query ejecuta una sentencia SQL.
La función mysql_close() nos lleva los datos de la memoria principal a un
almacenamiento secundario.
die muestra el mensaje de error indicado por pantalla y finaliza el script actual
en el punto en el que se encuentre. No devuelve valor alguno.
Ejemplo de creación de una base de datos MySQL desde PHP
mysql_connect (línea 3) hace una conexión a la base de datos
mysql_query (línea 8) hace una consulta en este caso crea la base de datos.
mysql_close (línea 13) cierra la conexión a la base de datos
?1234567891011121314
<?php include('ruta.php'); $conexion = mysql_connect($ruta,$usuario, $password); if(!$conexion) { die('Imposible conexión al servidor: '. mysql_error()); } $sentencia = 'CREATE DATABASE IF NOT EXISTS prograwe_miBD'; if (mysql_query($sentencia, $conexion)) { echo 'Base de datos creada'; } else { echo 'Error al crear la base de datos: '.mysql_error(); } mysql_close($conexion); ?>
Descargar
Crear una tabla en MySQL - PHP
El componente principal de una base de datos son las tablas, MySQL tiene varios tipos de tablas, nosotros usaremos en este sitio las InnoDB, por razones de integridad referencial y concurrencia.
Ejemplo: El Campeonato Mundial de Pilotos es otorgado por la Federación Internacional de Automovilismo al piloto de Fórmula 1 más exitoso de la temporada, determinado por el sistema de puntuación en relación con los resultados de los Grandes Premios. El primer Campeonato Mundial de Pilotos fue otorgado en la temporada 1950 a Giuseppe Farina. Considere la siguiente tabla de datos correspondientes a los campeones de Formula 1 (2000 - 2011) y sus escuderias.
Año Campeón Escudería
2011 Sebastian Vettel Red Bull Racing
2010 Sebastian Vettel Red Bull Racing
2009 Jenson Button Brawn GP
2008 Lewis Hamilton McLaren
2007 Kimi Raikkonen Ferrari
2006 Fernando Alonso Renault
2005 Fernando Alonso Renault
2004 Michael Schumacher Ferrari
2003 Michael Schumacher Ferrari
2002 Michael Schumacher Ferrari
2001 Michael Schumacher Ferrari
2000 Michael Schumacher Ferrari
A continuación se presenta el código MySQL necesario para crear una tabla
CREATE TABLE f1 ( year INT, campeon CHAR( 35 ) NOT NULL, escuderia CHAR( 35 ) NOT NULL, PRIMARY KEY ( year )) ENGINE = InnoDB;
A continuación se presenta el correspondiente código PHP
En la línea 9 se crea una conexión a la base datos mediante la
función mysql_connect
La función mysql_select_db nos permite seleccionar la base de datos (línea
10)
mysql_query nos permite ejecutar un query a la base de datos (línea 12)
Mediante la función mysql_close cerramos la conexión a la base de datos.
?
<?php $query = "CREATE TABLE IF NOT EXISTS f1 ("; $query .= "year INT NOT NULL , "; $query .= "campeon CHAR( 35 ) NOT NULL,"; $query .= " escuderia CHAR( 35 ) NOT NULL , "; $query .= "PRIMARY KEY ( year ) ) "; $query .= "ENGINE = InnoDB;"; include('ruta.php'); $conexion = mysql_connect($ruta,$login,$password) or die(mysql_error()); mysql_select_db( $db, $conexion ) or die(mysql_error()); if (mysql_query($query, $conexion)){ echo "Tabla creada con éxito <br />"; } else die(mysql_error()); mysql_close($conexion);?>
Descargar
Ejemplo: Los XVI Juegos Panamericanos se llevaron a cabo del 14 al 30 de octubre de 2011, en la ciudad de Guadalajara, México. Ésta es la tercera vez que nuestro país organiza unos juegos panamericanos y la primera vez que se organizan fuera de la Ciudad de México. En esta actividad crearemos una tabla que contendrá el medallero de esta competencia.
Ads not by this site
?
<?php include('ruta.php'); $query = 'CREATE TABLE IF NOT EXISTS panamericanos ('; $query .= 'pais CHAR(35)NOT NULL,'; $query .= ' oro INT DEFAULT 0,'; $query .= ' plata INT DEFAULT 0,'; $query .= ' bronce INT DEFAULT 0,'; $query .= ' total INT DEFAULT 0,'; $query .= ' PRIMARY KEY ( PAIS ) ) ENGINE = InnoDB;'; $conexion = mysql_connect( $ruta, $login, $password) or die(>mysql_error()); mysql_select_db( $db, $conexion ) or die(>mysql_error()); mysql_query($query, $conexion) or die(>mysql_error()); mysql_close($conexion);?>
Descargar
Insertar registros en una tabla.
La sentencia INSERT INTO es usada para agregar registros en una tabla de base de datos.
La sentencia tiene dos sintaxis genericas validas
La primera se usa si insertaremos valores en todas las columnas que
componen la tabla
INSERT INTO nombre_tabla VALUES (valor1, valor2, valor3,...)
La segunda se usa cuando solo ingresaremos datos en algunas columnas
INSERT INTO nombre_tabla (columna1, columna2, columna3,...) VALUES (valor1, valor2, valor3,...)
Ejemplo: Inserción de registros en MySQL con PHP usaremos el caso de Formula 1
?<?php include("ruta.php"); $conexion = mysql_connect( $ruta, $login, $password) or die(mysql_error()); mysql_select_db( $db, $conexion ) or die(mysql_error()); mysql_query("INSERT INTO f1 VALUES (2011,'Sebastian Vettel','Red Bull Racing')", $conexion) or die(mysql_error()); mysql_query("INSERT INTO f1 VALUES (2010,'Sebastian Vettel','Red Bull Racing')", $conexion) or die(mysql_error()); mysql_query("INSERT INTO f1 VALUES (2009,'Jenson Button Brawn','GP')",
$conexion) or die(mysql_error()); mysql_query("INSERT INTO f1 VALUES (2008,'Lewis Hamilton','McLaren')", $conexion) or die(mysql_error()); echo "Operación exitosa"; mysql_close($conexion);?>
Descargar
Ejemplo: Medallero juegos Panamericanos Guadalajara 2011.
?
<?PHP include('ruta.php'); $conexion = mysql_connect( $ruta, $login, $password) or die(mysql_error()); mysql_select_db( $db, $conexion ) or die(mysql_error()); $query = 'DELETE FROM panamericanos'; mysql_query($query, $conexion) or die(mysql_error()); $query = 'INSERT INTO panamericanos VALUES'; $query .= "('Estados Unidos','usa.png',92,79,65,236),"; $query .= "('Cuba','cuba.png',58,35,43,136),"; $query .= "('Brasil','brasil.png',48,35,58,141),"; $query .= "('México','mexico.png',42,41,50,133),"; $query .= "('Canadá','canada.png',30,40,49,119),"; ... $query .= "('Guyana','guyana.png',0,0,1,1),"; $query .= "('Panamá','panama.png',0,0,1,1)"; mysql_query($query, $conexion) or die(mysql_error()); mysql_close($conexion); echo 'Operación exitosa'; ?>
Descargar
Insertar registros en una tabla desde una forma
La función isset checa si una variable fue declarada
$_SERVER['REQUEST_METHOD'] permite determinar de donde proviene la
llamada
Ads not by this site
?
<?php if ( isset($_POST['aceptar']) && $_SERVER['REQUEST_METHOD'] == 'POST') { $year = $_POST['year']; $campeon = $_POST['campeon']; $escuderia = $_POST['escuderia']; if(!(isset($year) && !empty($year) && isset($campeon) && !empty($campeon) && isset($escuderia) && !empty($escuderia) ) ) { echo "Todos los campos son necesarios"; } else { $n = date('Y'); // Obtiene el año actual if ($year >= 1950 and $year <= $n) { //F1 inicio en 1950 include('ruta.php');
$conexion = mysql_connect( $ruta, $login, $password) or die(mysql_error()); mysql_select_db( $db, $conexion ) or die(mysql_error()); $query = "SELECT * FROM f1 WHERE year = $year"; $registros = mysql_query($query, $conexion) or die(mysql_error()); $n = mysql_num_rows($registros); if($n == 0) {//Checamos que no exista información para ese año $query = "INSERT INTO f1 VALUES ($year, "; $query .= "'$campeon','$escuderia')"; $resultado = mysql_query($query, $conexion); if(!$resultado) { echo 'Ocurrio un error al insertar'. mysql_error(); } else echo 'Operación realizada con éxito'; } else echo 'Ya existe información para ese año'; //Un solo campeón por año mysql_close($conexion); } else echo 'Año fuera de rango'; } }?>
DescargarEjecutar
Mostrar el contenido de una tabla
La sentencia SELECT nos permite recuperar los registros de una tabla. La sintaxis básica es:
SELECT * FROM nombre_tabla WHERE condición
Si requiere conocer más sobre esta sentencia visite nuestro sitio
En caso de una consulta usaremos básicamente las siguientes funciones
mysql_query() ejecuta una sentencia valida sobre la base de datos. Para el
caso de un SELECT regresa 0 o más registros.
mysql_num_rows() regresa el número de registros otorgados
por mysql_query(). mysql_fetch_assoc regresa un conjunto de registros obtenidos
por mysql_query().
Ejemplo: Muestra los campeones de Formula 1 desde 1950 hasta el 2010.
?123456789101112131415161718192021
<?php include("ruta.php");$conexion = mysql_connect( $ruta, $login, $password) or die(mysql_error());mysql_select_db( $db, $conexion ) or die(mysql_error());$query = "SELECT * FROM f1 ORDER BY year DESC";$registros = mysql_query($query, $conexion) or die(mysql_error());$n = mysql_num_rows($registros);mysql_close($conexion);if ($n > 0) { // si hay registros $html = '<center><h2>Campeones de Formula 1</h2></center>'; $html.= '<table>'; $html.= '<thead><tr><th>Año</th><th>Campeón</th>'; $html.= '<th>Escudería</th></tr></thead>'; while ($registro = mysql_fetch_assoc($registros)) { $html.= '<tr>'; $html.= '<td>'. $registro['year'].'</td>'; $html.= '<td>'. $registro['campeon'].'</td>'; $html.= '<td>'. $registro['escuderia'].'</td></tr>'; } $html.= '</table>'; echo $html; } ?>
22DescargarEjecutar
Ejemplo: Estados de la República Mexicana
?
<?php include('postal.php'); $conexion = mysql_connect( $ruta, $login, $password) or die(mysql_error()); mysql_select_db( $db, $conexion ) or die(mysql_error()); $query = 'SELECT estado, ruta FROM estados ORDER BY estado'; $registros = mysql_query($query, $conexion) or die(mysql_error()); $n = mysql_num_rows($registros); mysql_close($conexion); if ($n > 0) { // si hay registros $html = '<center><h2>Estados de México</h2></center>'; $html.= '<table><thead>'; $html.= '<tr><th>Estado</th><th>Escudo</th></tr>'; while ($registro = mysql_fetch_assoc($registros)) { $html.= '<tr><td>'; $html.= $registro['estado']; $html.= "</td><td><img src='"; $html.= $registro['ruta']; $html.= "' height='50' width='50' /></td></tr>"; } echo $html.'</table>'; } ?>
DescargarEjecutar
Ejemplo: Mostrar los campeones de la NBA
?<?php include(0ruta.php');
$conexion = mysql_connect( $ruta, $login, $password) or die(mysql_error()); mysql_select_db( $db, $conexion ) or die(mysql_error()); $query = 'SELECT * FROM campeonesNBA ORDER BY temporada DESC'; $registros = mysql_query($query, $conexion) or die(mysql_error()); $n = mysql_num_rows($registros); mysql_close($conexion); if ($n > 0) { // si hay registros $html = '<center><h2>Campeones NBA</h2></center>'; $html.= '<table>';
$html.= '<thead><tr><th>Temporada</th><th>Campeón</th>'; $html.= '<th>Marcador</th>'; $html.= '<th>Marcador</th><th>SubCampeón</th></tr></thead>'; while ($registro = mysql_fetch_assoc($registros)) { $html.= '<tr>'; $html.= '<td>'. $registro['temporada'].'</td>'; $html.= '<td>'. $registro['campeon'].'</td>'; $html.= '<td>'. $registro['ganador'].'</td>'; $html.= '<td>'. $registro['perdedor'].'</td>'; $html.= '<td>'. $registro['subcampeon'].'</td></tr>'; } $html.= '</table>'; echo $html; }?>
DescargarEjecutar
Ejemplo: Muestra los paises por continente con su capital, superficie, población, densidad (población/superficie) y su bandera. Así mismo presenta la suma de superficie, población y densidad promedio.
El programa genera una página html como resultado.
Ads not by this site
?<?php if( isset($_POST['enviar']) && $_SERVER['REQUEST_METHOD'] == 'POST') { include('0311paises.inc'); function consultas( $continente ) { switch ($continente) { case 1: $continent = "África"; break; case 2: $continent = "América"; break; case 3: $continent = "Asia"; break; case 4: $continent = "Europa"; break; case 5: $continent = "Oceanía"; break; case 6: $continent = "Los países del Mundo"; break; } $queryT = 'SELECT COUNT(*) paises, SUM(superficie) superficie,'; $queryT.= 'SUM(poblacion) poblacion, poblacion/superficie densidad FROM pais'; if($continente == 6) { $query = 'SELECT * FROM pais ORDER BY densidad DESC, nombre'; } else { $query = "SELECT * FROM pais WHERE idContinente = $continente "; $query .= 'ORDER BY densidad DESC, nombre'; $queryT.= " WHERE idContinente = $continente"; } return array($query, $queryT, $continent);
}// Consultas $continente = $_REQUEST['continente']; list($query, $queryT, $continent) = consultas( $continente ); $conexion = mysql_connect($ruta, $login, $password); mysql_select_db( $db, $conexion ); $registros = mysql_query($query, $conexion) or die(mysql_error()); $registrosT = mysql_query($queryT, $conexion) or die(mysql_error()); $n = mysql_num_rows($registros); mysql_close($conexion); if ($n > 0) { // si hay registros $html = "<p class='centrado'><h1>$continent</h1><br />"; $html.= '<table class="stripeMe">'; $html.= '<thead><tr>'; $html.= '<th>Nombre</th>'; $html.= '<th>Capital</th>'; $html.= '<th>Superficie<br />Km<sup>2</sup></th>'; $html.= '<th>Población<br />Habitantes</th>'; $html.= '<th>Densidad<br />Hab/Km<sup>2</sup></th>'; $html.= '<th>Bandera</th>'; $html.= '</tr></thead>'; while ($registro = mysql_fetch_assoc($registros)) { $html.= '<tr>'; $html.= '<td>'. $registro['nombre'].'</td>'; $html.= '<td>'. $registro['capital'].'</td>'; $html.= '<td class="derecha">'.number_format($registro['superficie']).'</td>'; $html.= '<td class="derecha">'.number_format($registro['poblacion']).'</td>'; $html.= '<td >'.number_format($registro['densidad'],2,'.',',').'</td>'; $html.= "<td class='center'><p class='centrado'><img src='banderas/"; $html.= $registro['nombre'].".jpg' /></p></td></tr>"; } $html.= '</table><br />'; $html.= '<table class="stripeMe">'; $html.= '<thead><tr>'; $html.= '<th>Continente</th>'; $html.= '<th>Países</th>'; $html.= '<th>Superficie<br />Km<sup>2</sup></th>'; $html.= '<th>Población<br />Habitantes</th>'; $html.= '<th>Densidad<br />Hab/Km<sup>2</sup></th>'; $html.= '</tr></thead>'; $html .= '<tbody'; while ( $registro = mysql_fetch_assoc($registrosT) ) { $html .= '<tr><td>'. $continent.'</td>'; $html .= '<td class="derecha">'. $registro['paises'].'</td>'; $html .= '<td class="derecha">'. number_format($registro['superficie']).' </td>'; $html .= '<td class="derecha">'. number_format($registro['poblacion']).'</td>'; $html .= '<td >'. number_format($registro['densidad'],2,'.',',').'</td></tr>'; } $html .= '</tbody></table><br />'; $html .= '<div><a href="0311paises.php"><br />REGRESAR</a></div>'; echo $html; } } else { ?> <form id='forma' name='forma' method='post' action='0311paises.php'> <p class='centrado'><strong>Selecciona el continente</strong></p> <p class='centrado'> <select name='continente' id='continente'> <option value='1' selected='selected'>África</option> <option value='2'>América</option> <option value='3'>Asia</option>
<option value='4'>Europa</option> <option value='5'>Oceanía</option> <option value='6'>Todos los países</option> </select> </p> <div> <input type='submit' name='enviar' id='enviar' value='Enviar' /> </div>
</form> <? }?>
DescargarEjecutar
Paginación
Consiste en dividir resultados de consultas extensas a una base de datos, en grupos al estilo de Google. La solución esta basada en la libreria de Marco A. Madueño Mejía y modificada para los ejemplos presentados.
Ejemplo: Campeones NBA
?<body> <h2><p class="centrado">Campeones NBA</p></h2> <table class="zebra"> <thead> <th>Temporada</th> <th>Campeón</th>
<th>Ganador</th> <th>Perdedor</th> <th>Subcampeón</th> </thead> <?php //Autor libreria: Marco A. Madueño Mejía require_once('lib/PHPPaging.lib.php'); // Apertura de la conexión a la base de datos e Inclusión del script include('ruta.php'); $conexion = mysql_connect($ruta, $login, $password); mysql_select_db($db, $conexion);
// Instanciamos el objeto $paging = new PHPPaging( $conexion ); // Indicamos la consulta al objeto $query = 'SELECT * FROM campeonesNBA ORDER BY temporada DESC'; $paging->agregarConsulta($query); $paging->porPagina(15);
// Ejecutamos la paginación $paging->ejecutar();
// Imprimimos los resultados, para esto creamos un ciclo while // Similar a while($registro = mysql_fetch_array($sql)) $html= ''; while($registro = $paging->fetchResultado()) { $html.= '<tr>'; $html.= '<td>'. $registro['temporada'].'</td>'; $html.= '<td>'. $registro['campeon'].'</td>'; $html.= '<td>'. $registro['ganador'].'</td>'; $html.= '<td>'. $registro['perdedor'].'</td>'; $html.= '<td>'. $registro['subcampeon'].'</td></tr>'; } $html.= '</table>'; $html.= "<div class='navigation'><b>Navegación</b>: "; $html.= $paging->fetchNavegacion().'</div>'; echo $html; ?> </body>
DescargarEjecutar
Ejemplo: Precio del dólar con respecto al peso Mexicano desde 1995 a la fecha
?
<?php //Autor libreria: Marco A. Madueño Mejía require_once('lib/PHPPaging.lib.php'); include('ruta.php'); $conexion = mysql_connect($ruta, $login, $password); mysql_select_db($db, $conexion);
$paging = new PHPPaging( $conexion ); // Instanciamos el objeto $query = 'SELECT * FROM dolar ORDER BY fecha DESC'; $paging->agregarConsulta($query); // Indicamos la consulta al objeto $paging->porPagina(15);
// Ejecutamos la paginación $paging->ejecutar();
// Imprimimos los resultados, para esto creamos un ciclo while // Similar a while($registro = mysql_fetch_array($sql)) $html = ''; while($registro = $paging->fetchResultado()) { $html.= '<tr>'; $html.= '<td>'. $registro['fecha'].'</td>'; $html.= '<td>'. $registro['precio'].'</td>'; } $html.= '</table>'; $html.= "<div class='pagination'><b>Navegación</b>: ".$paging->fetchNavegacion()."</div>"; echo $html; ?>
DescargarEjecutar
Ejemplo: Medallero Panamericano Guadalajara 2011
Ads not by this site
?<body> <h3 align='center'>Medallero Panamericano</h3> <h3 align='center'>Guadalajara, México 2011</h3> <table class='stripeMe'> <thead> <th>Pos</th> <th>País</th> <th><img src="panamericanos/oro.png" alt='Oro' title='Oro' /></th> <th><img src="panamericanos/plata.png" alt='Plata' title='Plata' /></th> <th><img src="panamericanos/bronce.png" alt='Bronce' title='Bronce' /></th> <th>Total</th> </thead><?php
//Autor libreria: Marco A. Madueño Mejía require_once('lib/PHPPaging.lib.php');
// Apertura de la conexión a la base de datos e Inclusión del script
include('ruta.php'); $conexion = mysql_connect($ruta, $login, $password); mysql_select_db($db, $conexion);
// Instanciamos el objeto $paging = new PHPPaging( $conexion ); // Indicamos la consulta al objeto $paging->agregarConsulta('SELECT * FROM panamericanos ORDER BY id'); $paging->porPagina(10);
// Ejecutamos la paginación $paging->ejecutar();
// Imprimimos los resultados, para esto creamos un ciclo while // Similar a while($registro = mysql_fetch_array($sql)) $html=''; while($registro = $paging->fetchResultado()) { $html.= '<tr>'; $html.= '<td>'. $registro['id'].'</td>'; $html.= '<td>'. "<img src='panamericanos/".$registro['bandera']."' "." alt='' />"; $html.= $registro['pais'].'</td>'; $html.= '<td class="derecha">'. $registro['oro'].'</td>'; $html.= '<td class="derecha">'. $registro['plata'].'</td>'; $html.= '<td class="derecha">'. $registro['bronce'].'</td>'; $html.= '<td class="derecha">'. $registro['total'].'</td>'; $html.= '</tr>'; } $html.= '</table>'; echo $html; echo "<div class='pagination'><b>Navegación</b>: ".$paging->fetchNavegacion()."</div>"; ?>
DescargarEjecutar
Modificar datos desde un formulario
La sentencia UPDATE permite modificar uno o más registros de una tabla. La sintaxis es:
UPDATE nombre_tabla SET columna1 = valor1, columna2=valor2,... WHERE alguna_columna = algun_valor
Con las funciones PHP ya conocidas anteriormente es relativamente sencillo modificar registros desde una forma.
La variable $checaRadio contiene la definición de un Radio Group dinámico y guardara la llave con la cual reconoceremos el registro a modificar
Ejemplo para modificar registros MySQL mediante formularios con PHP
Modificar Formulario
Imprime Tabla
Imprime Formulario
<?php function update_registro($ruta, $login, $password, $db, $year, $campeon, $escuderia) { $conexion = mysql_connect( $ruta, $login, $password) or die(mysql_error()); mysql_select_db( $db, $conexion ) or die(mysql_error()); $query = "UPDATE f1 SET year = $year, campeon = '$campeon', "; $query .= "escuderia = '$escuderia' WHERE year = $year"; $registros = mysql_query($query, $conexion) or die(mysql_error()); mysql_close($conexion); } // END update_registro
include("ruta.inc"); if(!isset($modificar) && !isset($aceptar)) { imprime_tabla($ruta, $login, $password, $db); } else if (isset($modificar)) { unset($modificar); $year = $_POST['rg']; $conexion = mysql_connect( $ruta, $login, $password) or die(mysql_error()); mysql_select_db( $db, $conexion ) or die(mysql_error()); $query = "SELECT * FROM f1 WHERE year =$year"; $registros = mysql_query($query, $conexion) or die(mysql_error());
imprime_forma($registros, $conexion); } else if ($aceptar) { unset($aceptar); $year = $_POST['year']; $campeon = $_POST['campeon']; $escuderia = $_POST['escuderia']; update_registro($ruta, $login, $password, $db, $year, $campeon, $escuderia); imprime_tabla($ruta, $login, $password, $db); } else if ($cancelar) { header ("Location: http://www.prograweb.com.mx/pweb/ejecutables/codigo50.php"); }?>
DescargarEjecutar
Eliminar datos desde una forma
La sentencia DELETE FROM es usada para borrar registros de una tabla en una base de datos.
Sintaxis
DELETE FROM nombre_tablaWHERE alguna_columna = algun_valor;
La clausula WHERE específica que registros serán eliminados. Si se omite la clausula WHERE, todos los registros de la tablas serán ¡eliminados!
Para aprender más sobre SQL, visite la página de base de datos de este sitio.
Para ejecutar esta sentencia usaremos la función mysql_query(). Esta función es usada para enviar una consulta o comando MySQL al servidor de base de datos.
El siguiente ejemplo permite borrar registros de una tabla mediante un formulario.
$borrar[] es un vector de tipo checkbox.
implode une los elementos de un vector en una cadena. Para el ejemplo une
los identidicadores de los registros a eliminar mediante una coma. La línea $consulta = mysql_query($query, $conexion) or
die(mysql_error()); esta comentada por razones obvias. Borrar registros
Imprime Tabla
<?php include("ruta.inc"); if( isset($_POST['eliminar']) && $_SERVER["REQUEST_METHOD"] == "POST") { unset($_POST['eliminar']); // Obtener las llaves de registros a borrar $borrar = $_POST['borrar']; $n = count($borrar); if($n == 0) { print ("<p>No elegiste registros para eliminar</p>"); print ("<p>[ <a href='0311borrarF1.php'>Eliminar más Registros</a> ]</p>"); } else { $registros = implode(',', $borrar); $query = "DELETE FROM f1 WHERE year IN (".$registros.")"; unset($borrar); // Conectar con el servidor y la basede datos $conexion = mysql_connect( $ruta, $login, $password) or die(mysql_error()); mysql_select_db( $db, $conexion ) or die(mysql_error()); mysql_query($query, $conexion) or die(mysql_error()); mysql_close($conexion); //Cerrar conexión imprime_tabla(); } } else { if(!isset($nuevo)) { iniciar(); $nuevo = 1; } imprime_tabla(); }?>
DescargarEjecutar
3.12. Sesiones
Una sesión es la secuencia de páginas que un usuario visita en un sitio web. Desde que entra en nuestro sitio, hasta que lo abandona.
Las sesiones básicamente son varibles globales que nos permiten almacenar datos que necesiten volver a ser usados en otros accesos a la página. Cuando una persona entra a una página que utiliza sesiones automáticamente se crea un archivo de session en los archivos temporales del servidor y en este archivo es donde se guardan los datos que nosotros necesitamos almacenar.
Este archivo posee el mismo nombre que su "id". El archivo se mantendra mientras tenga activo su navegador y se destruye al cerrar el navegador.
Para que una página use sesiones debemos inicializarla con la funcion session_start(), la cual crea una nueva sesión o retoma una creada en otra página(del sitio).
Las sessiones propagan su SID(SESSION ID) de dos posibles maneras,
según php.ini, por cookies o por url, es decir agregando a todos losposibles link el SID de la sesion.
Otra razón por la que la sesiones suelen ser muy utilizadas es para la autentificación, determinando el acceso a la página según alguna variable específica de la sesión.
Funciones de gestión de sesiones
función Significado
session_start(); Si es la primera solicitud genera un
función Significado
identificador de sesión aleatorio cuyo nombre serásess_IDsesión; si es otra solicitud continua la sesión iniciada anteriormente.
session_destroy();Elimina todos los datos asociados con una sesión, borra el archivo en el servidor pero no borra la cookie.
session_unset(); Borra una variable de sesión.
session_id([nombre]);
Si no le proporcionamos ningún parámetro nos da el identificador de sesión; si le proporcionamos el parámetro nombre cambia el valor del identificador por el parámetro nombre.
session_name([nombre]);
Si se invoca sin parámetro devuelve el nombre de la variable interna que tiene el id de sesiones; si se pasa parámetro cambia el nombre de la sesión.
session_get_cookie_params();Obtiene los parámetros de la cookie de la sesión
session_cache_limiter([cache_limiter]);
Si se le proporciona valor modifica el valor por defecto en cambio sino se muestra el caché que tiene por defecto.
session_regenerate_id()Actualiza el id de sesión activa con uno más reciente
session_encode();Codifica los datos de la sesión actual en una cadena
session_decode(cadena);
Descodifica la cadena que recibe como parámetro y que contiene la información de sesión, después de usar esta función se actualiza la información de sesión.
session_save_path([path]); Devuelve la ruta al directorio donde se guardan los archivos asociados a la
función Significado
sesión. El efecto solo dura en el script actual.
session_module_name([modulo]);
Devuelve el nombre del módulo que se usa para realizar la gestión de sesiones. Cuando se invoca un parámetro se usa como nuevo gestor de sesiones.
session_set_save_handler(open,close,read,write,destroy,gc);
Permite definir su propio manejador para almacenar la información asociada con una sesión.De esta forma los datos pueden ser metidos en una base de datos en vez de en un archivo. Tenemos que pasarle como parámetro toda la información necesaria para crear y destruir sesiones.
Iniciando con sesiones:
En la línea 2 se inicia la sesión - session_star() -
Declaramos una variable llamada usuario (línea 3) de tipo session
Header nos envia a la página específicada (línea 4)
?
1
2
3
4
5
<?php
@session_start();
$_SESSION['usuario'] = 'ProgramacionWEB';
header('location:0312InicioSesiona.php');
?>
Ejecutar
Evitando accesos indeseados
En la línea 3 del segundo programa checamos que se recibió la variables
esperada, para evitar accesos indeseados (línea 6)
Se elimina la variable de sesión (línea 5).
?
1
2
3
4
5
6
7
<?php
@session_start();
if($_SESSION['usuario'] == 'ProgramacionWEB') {
echo 'Usuario: '.$_SESSION['usuario'];
unset($_SESSION['usuario']);
} else echo 'Te equivocaste';
?>
Descargar
Contador de visitas con sesiones
Mediante el siguiente ejemplo se implementa un contador de visitas
La línea 2 captura el id de la sesión
Si la sesión no fue iniciada la genera (Línea 3)
Si la variable de sesión "visitas" existe la incrementa, caso contrario la crea y la
inicia en 1 (línea 4)
?
1
2
3
4
5
<?php
$nombre_anterior = session_id();
if ($nombre_anterior == '') session_start();
($_SESSION['visitas'])
? >$_SESSION['visitas']++: $_SESSION['visitas'] = 1;
6 ?>
Descargar
Ejecutar
Note que en realidad este código cuenta el número de veces que recargamos la página durante la sesión
Control de sesiones y autentificación
En esta sección crearemos una forma de autentificación que puede ser usada en múltiples situaciones
Crear una tabla mysql llamada usuarios e insertar un registro.
?
1
2
3
4
5
6
CREATE TABLE IF NOT EXISTS usuarios (
usuario CHAR(25) NOT NULL,
password CHAR(255) NOT NULL
) ENGINE = InnoDB DEFAULT CHARSET = latin1;
INSERT INTO usuarios VALUES ('root','bingo');
0312Sesion.php
La línea 2 inicia la sesión
La línea 3 checa si esta logeado el usuario. De ser así lo envia a la
página 0312PaginaSegura.php, en caso contrario al enviar el login y el
password será enviado a la página 0312Login.php
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
session_start(); // Iniciar sesión
// Checa, si el usuario esta logeado
if (isset($_SESSION['usuario'])) {
header('Location: 0312SesionPaginaSegura.php');
}
?>
<table border='0'>
<form id='forma' name='forma' method='POST'
action='0312SesionLogin.php'>
<tr><td>Usuario</td><td>:</td><td><input name='usuario'
type='text' size='25' maxlength='25'></td></tr>
<tr><td>Password</td><td>:</td><td><input name='password'
type='password' size='25' maxlength='25'></td></tr>
<tr><td></td><td></td><td><input name='login'
type='submit' id='login' value='Accesar'></td></tr>
</form>
</table>
Descargar
Ejecutar
0312SesionLogin.php
En la línea 4 y 5 se realiza la configuración de la conexión a la base de datos
mysql_real_escape_string — Escapa caracteres especiales en una cadena
para ser usado en una sentencia SQL para evitar la inyección de código SQL
La variable de sesión usuario se define si la consulta regresa un único registro.
Si somos usuarios registrados nos envia a la
pagína 0312SesionPaginaSegura.php
De no ser un usuario registrado la línea 20 nos envia a la página
de 0312Sesion.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
@session_start(); // Iniciar sessión
// Incluir la configuración para la conexión a la base de datos
include('ruta.php');
$conexion = mysql_connect( $ruta, $login, $password)
or die(mysql_error());
mysql_select_db( $db, $conexion ) or die(mysql_error());
$sql = "SELECT * FROM usuarios WHERE (usuario = '";
$sql .= mysql_real_escape_string($_POST['usuario']);
$sql .= "') and (password = '"
$sql .= mysql_real_escape_string(md5($_POST['password']))."')";
$resultado = mysql_query($sql, $conexion);
// Checa el usuario y el password
$nr = mysql_num_rows($resultado);
mysql_close($conexion);
if ($nr == 1) {
// Establece la variable de sesión usuario
$_SESSION['usuario'] = $_POST['usuario'];
// nos envia a la página segura
header('Location: 0312SesionPaginaSegura.php');
} else {
// nos envia a la página inicial
header('Location: 0312Sesion.php');
}
23
24
25
?>
0312SesionPaginaSegura.php
La línea 2 inicia la sesión
La línea 5 checa que la variable de sesión usuario no exista de ser así lo envia
a la página 0312Sesion.php -intento indebido de acceso a la página-.
De existir borra la variable de sesión para evitar accesos posteriores y maneja
el código html
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
session_start(); // Inicia sesión
// Si la sesión de usuario no se establece,
// esta página saltará a página de acceso
if (!isset($_SESSION['usuario'])) {
header('Location: 0312Sesion.php');
} else session_unset('usuario');
//Borra la variable de sesión
?>
<html>
<head>
<title>Página segura</title>
</head>
<body>
<p>Esta es una página segura con sesiones: <b>
<?php echo $_SESSION['usuario']; ?></b>
<br>Usted puede poner su información restringida aquí.</p>
19
20
21
22
<p><a href='0312SesionLogout.php'>Desconectarse</a></p>
</body>
</html>
0312SesionLogout.php
Esta página destruye las variables de sesión, la misma sesión y nos reenvia automáticamente a la página 0312Sesion.php.
?
1
2
3
4
5
6
<?php
session_start();
session_unset();
session_destroy();
header('Location: 0312Sesion.php');
?>
3.13. Seguridad
La seguridad y funcionamiento sin duda uno de los temas más importantes al desarrollar un portal web. La validación de datos, es por tanto fundamental.
El no cuidarnos de esto, puede traernos problemas de inyección SQL, CrossScripting, Cookie Poisoning, amenazas de seguridad en la nube (Cloud Computing) y un largo etc, etc, que compromete la estabilidad del sitio y el recurso más valioso de nuestro sitio "la información".
El filtrado de datos es una de las piedras angulares en cualquier aplicación en el tema de seguridad, independientemente del lenguaje con el cual se desarrolle.
Filtrado de datos
Una de las mayores fortalezas de PHP es su facilidad de uso. Lamentablemente, este mismo beneficio se usa en contra de PHP, programadores con poca experiencia olvidan usar medidas de seguridad o carecen de los conocimientos para generar una clase que valide los datos introducidos por los usuarios finales.
Se han desarrollado diversas clases de validación, algunas mejores que otros, con igual o mayor número de métodos para hacer la misma tarea estas no estan estandarizadas. PHP versión 5 proporciona la extensión Filter cuyo objetivo es realizar esta tarea en forma sencilla, robusta y laestandarización de la entrada de datos del usuario. Las funciones base se presentan a continuación.
Función Descripción
filter_has_var
Verifica si la variable del tipo especificado existe
filter_list Devuelve una lista de todos los filtros soportados
filter_varFiltra una variable con un filtro específico. Devuelve los datos filtrados, o FALSE si el filtro falla.
filter_inputObtiene una variable desde afuera de PHP y opcionalmente la filtra
Ejemplo de filter_has_var
La sintaxis es:
filter_has_var(tipo, variable)
Parámetro Descripción
tipo Requerido. específica el tipo que deseamos checar. Los
Parámetro Descripción
posibles tipos son: INPUT_GET
INPUT_POST
INPUT_COOKIE
INPUT_SERVER
INPUT_ENV
variable Requerida. Específica la variable que deseamos checar
El objetivo del ejemplo es tratar de frenar invasiones a la seguridad asegurandonos que no introduzcan datos mediante la URL. Este método no es infalible contra la inyección de código SQL, pero es una aproximación..
<?php if(!filter_has_var(INPUT_POST, 'login') or !filter_has_var(INPUT_POST, 'key')) { echo('Sin Peligro'); } else die('Por aquí no entras');?>
Mediante la función filter_list es posible recuperar la lista de filtros soportados por nuestro servidor y con filter_id recuperados el inditificador del filtro.
Ejemplo del uso de filter_list y filter_id.
La línea 5 recorre el vector filter_list
La línea 6 imprime el nombre del filtro extraido en la línea 5
la línea 7 imprime el id del filtro
<body> <table> <tr><td>Nombre del Filtro</td><td>ID</td></tr> <?php foreach( filter_list() as $id =>$filter) { echo "<tr><td>".$filter.'</td><td>'; echo filter_id($filter).'</td></tr>'."\n"; } ?>
</table></body>
DescargarEjecutar
Ejemplo de filter_var y filter_input
La validación de datos es una parte integral del trabajo con formularios. Datos válidos los datos presentados pueden dar lugar a problemas de seguridad
A partir del formulario
Futuro colega*
Estatura* metros
Peso* (40 a 150 kg)
url*
Por ejemplo: http://www.itver.edu.mx
email*
ip*
<?php if (filter_has_var(INPUT_POST, 'enviar')) { $colega = filter_input(INPUT_POST, 'colega', FILTER_SANITIZE_STRING); if ($colega === false or empty($colega) or trim($colega) == "" ) { echo "El nombre es un campo requerido! <br />"; } else echo "Hola $colega <br />";
$options = array('options'=>
Reiniciar
array('min_range'=>40, 'max_range'=>150)); $peso = filter_input(INPUT_POST, 'peso', FILTER_VALIDATE_INT, $options); if ($peso === false) { echo "Escriba un peso válido entre 40 y 150 kg.<br />"; } else { echo "$peso kg es un peso válido.<br/>";}
$estatura = $_POST['estatura']; if (!filter_var($estatura, FILTER_VALIDATE_FLOAT)) { echo "$estatura no es una variable flotante <br />"; } else echo "$estatura es una dato flotante válido<br />"; $url = $_POST['url']; if (filter_var($url, FILTER_VALIDATE_URL)) { echo "La url $url es válida <br />"; } else echo "La url $url no es válida! <br />"; $email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL); if ($email === false) { echo "El email es un campo requerido! <br />"; } else echo "$email es una dirección de correo válida<br />";
$ip = filter_input(INPUT_POST, 'ip', FILTER_VALIDATE_IP); if($ip === false) { echo "No es una IP válida <br />"; } else echo "$ip es una IP válida <br />"; } else echo "Por aqui no puedes entrar <br />"; ?>
DescargarEjecutar
4.1 Lenguaje Script del cliente.
JavaScript es un lenguaje de programación usado principalmente para crear páginas web dinámicas. Una página web dinámica es aquella que incorpora efectos como texto que aparece y desaparece, animaciones, acciones activadas al pulsar botones y ventanas con mensajes de aviso al usuario.
Técnicamente, JavaScript es un lenguaje de programación interpretado, y no es necesario compilar los programas para ejecutarlos. En otras palabras, los programas escritos con JavaScript se pueden probar directamente en cualquier navegador sin necesidad de procesos intermedios.
A pesar de su nombre, JavaScript no guarda ninguna relación directa con el lenguaje de programación Java. Legalmente, JavaScript es una marca registrada de la empresa Sun Microsystems. Su nombre es exclusivamente por marketing, ya que Java era la palabra de moda en el mundo informático y de Internet de la época de desarrollo.
Cómo incluir JavaScript en documentos XHTML
La integración de JavaScript y XHTML es muy flexible, ya que existen al menos tres formas para incluir código JavaScript en las páginas web en esta sección solo se presentaran dos de ellas.
Incluir JavaScript en el mismo documento XHTML
El código JavaScript se encierra entre etiquetas <script></script> y se incluye en cualquier parte del documento. Aunque es correcto incluir cualquier bloque de código en cualquier zona de la página, se recomienda definir el código JavaScript dentro de la cabecera del documento (dentro de la etiquetas <head></head>):
Para que la página XHTML resultante sea válida, es necesario añadir el atributo type a la etiqueta <script>. Los valores que se incluyen en el atributo type están estandarizados y para el caso de JavaScript, el valor correcto es text/javascript.
Este método se emplea cuando se define un bloque pequeño de código o cuando se quieren incluir instrucciones específicas en un determinado documento HTML que completen las instrucciones y funciones que se incluyen por defecto en todos los documentos del sitio web.
El principal inconveniente es que si se quiere hacer una modificación en el bloque de código, es necesario modificar todas las páginas que incluyen ese mismo bloque de código JavaScript.
En este documento presentan diversos ejemplos, probados en Google Chrome 12, Firefoxn 4, Internet Explorer 9, Opera 11.11 y Safari 5.0.5.
Ejemplo
Colocar el código después de body document.write imprime en la pantalla actual una cadena de texto
<script type="text/javascript"> document.write("Este es mi primer JavaScript!");</script>
DescargarEjecutar
Definir JavaScript en un archivo externo.
Las instrucciones JavaScript se pueden incluir en un archivo externo de tipo JavaScript que los documentos XHTML enlazan mediante las etiquetas<script></script> . Colocadas entre las etiquetas <head></head>.
Se pueden crear todos los archivos JavaScript (*.js) que sean necesarios y cada documento XHTML puede enlazar tantos archivos JavaScript como necesite.
Además del atributo type, este método requiere definir el atributo src, que es el que indica la URL correspondiente al archivo JavaScript que se quiere enlazar.
Ejemplo
Cada etiqueta <script> solamente puede enlazar un único archivo en este
ejemplo el archivo js01.js, pero en una misma página se pueden incluir tantas
etiquetas <script></script> como sean necesarias (línea 5).
El código hace uso de este archivo en la línea 9 <body onload="inicio()">, el
manejo de funciones en JavaScript se explicara posteriormente.
<head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Ejemplo de código JavaScript en documento externo</title> <script type="text/javascript" src="0401js02.js"></script>
</head><body onload='inicio()'></body>
DescargarEjecutar
Los archivos de tipo JavaScript son simples documentos de texto con la extensión js que se pueden crear con cualquier editor de texto como Notepad, Wordpad, UltraEdit, Vi, etc.
La principal ventaja de enlazar un archivo JavaScript externo es que se simplifica el código XHTML de la página, además de la capacidad de reutilizar el mismo código JavaScript en páginas del sitio web y que cualquier modificación realizada en el archivo JavaScript se refleja inmediatamente en todas las páginas XHTML que lo enlazan.
Variables
Las variables o identificadores se utilizan para almacenar valores en un programa; cada variable tiene un nombre que permite referenciarla, nombre que se da en base a unas reglas. En JavaScript un nombre o identificador debe comenzar siempre con una letra o un subrayado; los siguientes caracteres pueden ser dígitos o letras; y nunca se puede usar una palabra reservada como identificador (por ejemplo: true, false, null yundefined).
Una variable se puede declarar en JavaScript, de dos formas:
Forma explícita: var nombre_Variable;
Forma implícita: var nombre_Variable = valor;
En el último caso no es imprescindible escribir var, pero es necesario por razones de compatibilidad entre navegadores.
Ejemplos validos de declaración de variables son:
var mi_variable1 = 3;var mi_variable2 = 5;var resultado = mi_variable1 + mi_variable2
JavaScript tiene la peculiaridad de ser un lenguaje tipificado débilmente, esto es, se puede declarar una variable que ahora sea un entero y más adelante una cadena. Por lo cual es responsabilidad del programador cuidar su contenido.
Tipos de variables
Aunque todas las variables de JavaScript se crean de la misma forma (mediante la palabra reservada var), la forma en la que se les asigna un valor depende del tipo de valor que se quiere almacenar (números, textos, etc.).
Variables numéricas
Almacenan valores numéricos enteros (integer en inglés) o decimales (float en inglés). En este caso, el valor se asigna indicando directamente el número entero o decimal. Los números decimales usan el carácter ( . punto) en vez de ( , coma) para separar la parte entera y la parte decimal:
var iva = 10;var total = 234.65;var distancia = 4.5E06;
JavaScript define 3 valores especiales muy útiles cuando se trabaja con números. En primer lugar se definen los valores ±Infinity para representar números demasiado grandes (positivos y negativos) y con los que JavaScript no puede trabajar.
var variable1 = 3,var variable2 = 0;alert(variable1/variable2); // muestra "Infinity"
El otro valor especial definido por JavaScript es NaN, cuyo nombre viene de “Not a Number”. De esta forma, si se realizan funciones matemáticas con variables no numéricas, el resultado será de tipo NaN.
Para manejar los valores NaN, se utiliza la función relacionada isNaN(), que devuelve true si el parámetro que se le pasa no es un número:
var variable1 = 3;var variable2 = 'hola';isNaN(variable1); // falseisNaN(variable2); // trueisNaN(variable1 + variable2); // true
Cadenas de texto
Almacenan caracteres, palabras y/o frases de texto. Para asignar el valor a la variable, se encierra el valor entre comillas dobles o simples, para delimitar su comienzo y su final:
var instituto = 'Instituto Tecnológico de Veracruz';var carrera = 'Ingeniería en Sistemas Computacionales';var semestre = 'Cuarto';
Algunos caracteres especiales son difíciles de incluir en una variable de texto (tabulador, ENTER, etc.) Por otra parte, como las comillas se utilizan para definir el contenido de la variable, no es posible incluir comillas dentro de la propia cadena de texto.
Para resolver estos problemas, JavaScript define un mecanismo para incluir de forma sencilla caracteres especiales y problemáticos.
Mecanismo para incluir caracteres especiales
Si se incluye... En realidad se está incluyendo...
\n Una nueva línea
\t Un tabulador
\’ Una comilla simple
\” Una comilla doble
\\ Una barra inclinada
Variables de tipo boolean
Son un tipo de variables que solo pueden tomar uno entre dos valores especiales que representan el valor “verdadero” y el valor “falso”.
var variable1 = true;var variable2 = false;
JavaScript convierte automáticamente el resto de variables a sus valores boolean si es necesario. En el caso de los números, el 0 se convierte en false y cualquier otro número distinto de 0 se convierte en true.
Conversión entre tipos de variables
JavaScript incluye un método llamado toString() que permite convertir variables de cualquier tipo a variables de cadena de texto.
var variable1 = true;// devuelve 'true' como cadena de textovariable1.toString();var variable2 = 5;// devuelve '5' como cadena de textovariable2.toString();
JavaScript también incluye métodos para convertir los valores de las variables en valores numéricos. Los métodos definidos son parseInt() yparseFloat(). Cada uno de ellos convierte la variable que se le indica en un número entero o un número decimal. La conversión numérica de una cadena se realiza carácter a carácter empezando por el de la primera posición. Si ese carácter no es un número, la función devuelve el valor NaN.
Si el primer carácter es un número, se continúa con los siguientes caracteres mientras estos sean números.
var variable1 = 'hola';parseInt(variable1); // devuelve NaNvar variable2 = '34';parseInt(variable2); // devuelve 34var variable3 = '34hola23';parseInt(variable3); // devuelve 34var variable4 = '34.23';parseInt(variable4); // devuelve 34
En el caso de parseFloat(), el comportamiento es el mismo salvo que también se consideran válidos los caracteres que indican la parte decimal del número:
var variable1 = 'hola';parseFloat(variable1); // devuelve NaNvar variable2 = '34';parseFloat(variable2); // devuelve 34.0var variable3 = '34hola23';parseFloat(variable3); // devuelve 34.0var variable4 = '34.23';parseFloat(variable4); // devuelve 34.23
Palabras reservadas
Son palabras especiales que se utilizan para aumentar la legibilidad y separar las entidades sintácticas. Estas palabras no pueden usarse como identificadores.
La siguiente tabla muestra todas las palabras reservadas existentes en JavaScript 1.7, estas palabras tienen o tendrán un significado especial dentro del lenguaje:
Palabras reservadas en JavaScript 1.7
break delete function return typeof
case do if switch var
catch else in this void
continue finally instanceof throw while
default for new try with
Palabras reservadas para desarrollos futuros por la especificación ECMAScript 262
abstract double implements private throws
boolean enum import protected transient
byte export int public volatile
char extends interface short
class final long static
Palabras reservadas en JavaScript 1.7
const float native super
debugger goto package synchronized
Constantes
Se definen con la palabra clave const. La sintaxis de un identificador de constante es la misma que la de un identificador de variable: debe empezar con una letra o un guión bajo "_" [underscore] y puede contener caracteres alfanuméricos y/o guiones bajos.
const x = 48;
Una constante es asignada en el momento de la declaración y no puede cambiar el valor mediante una asignación o ser re-declarada mientras el script está en ejecución.
Las reglas de ámbito [scope] para constantes son las mismas que para las variables, excepto que la palabra clave const es siempre requerida, incluso para constantes globales. Si la palabra clave es omitida, se asume que el identificador representa a una variable.
No se puede declarar una constante con el mismo nombre de una función o de una variable en el mismo ámbito [scope].
Existen tres constantes predefinidas: true, false y undefined.
Expresiones
Una expresión es cualquier conjunto válido de literales, variables, operadores y expresiones que se evalúan como un único valor; el valor puede ser un número, una cadena o un valor lógico (booleano).
Conceptualmente, hay dos tipos de expresiones: las que asignan un valor a una variable y las que simplemente tienen un valor.
Por ejemplo, la expresión x = 7 es una expresión que asigna a x el valor 7. Esta expresión se evalúa como siete. Dicha expresión usa un operador de asignación.
Por otra parte, la expresión 3 + 4 simplemente se evalúa como siete; no se realiza ninguna asignación. Los operadores usados en dichas expresiones se les llaman simplemente operadores.
JavaScript tiene los siguientes tipos de expresiones:
Aritméticas: se evalúan como un número, por ejemplo 3.14159.
(Generalmente usan operadores aritméticos.)
De cadena: se evalúan como una cadena de caracteres, por ejemplo, "Sofía" o
"234". (Generalmente usan operadores de cadena de caracteres (string).)
Lógicas: se evalúan como verdadero o falso. (A menudo emplean operadores
lógicos.)
De objeto: se evalúan como un objeto.
Operadores
Símbolo matemático que denota un conjunto de operaciones que han de realizarse. En JavaScript los operadores permiten manipular el valor de las variables, realizar operaciones matemáticas o de manejo de texto con sus valores y comparar diferentes variables. De esta forma, los operadores permiten a los programas realizar cálculos complejos y tomar decisiones lógicas en función de comparaciones y otros tipos de condiciones.
Operador de asignación.
Un operador de asignación asigna un valor a su operando izquierdo basándose en el valor de su operando derecho. El operador básico de asignación es el igual (=), el cual asigna el valor de su operador derecho a su operador izquierdo. Esto es, x = y asigna el valor de y a x.
El resto de los operadores de asignación son abreviaturas de operaciones estándar
Operadores de asignación
Operador abreviado Significado
x += y x = x + y
x -= y x = x - y
x *= y x = x * y
x /= y x = x / y
x %= y x = x % y
Operadores de comparación
Un operador de comparación compara sus operandos y devuelve un valor lógico en función de si la comparación es verdadera.
Los operandos pueden ser valores numéricos, de cadena de caracteres, lógicos u objetos. Las cadenas se comparan basándose en el orden lexicográfico estándar, usando los valores Unicode.
Si dos operandos no son del mismo tipo, JavaScript intentará convertir los operandos a un tipo apropiado para la comparación, excepto para los operandos === y !==. Esto acostumbra a resultar en una comparación numérica. La tabla a continuación describe los operadores de comparación.
Operadores de comparación.
Operador DescripciónEjemplos que
devuelven verdadero1
Igual (==)
true si los operandos son iguales.3 == var1"3" == var13 == '3'
Distinto (!=)
true si los operandos no son iguales.
var1 != 4var2 != "3"
Igual estricto (===)
true si los operandos son iguales y del mismo tipo.
3 === var1
Distinto estricto(!==)
true si los operandos no son iguales y/o no son del mismo tipo.
var1 !== "3"3 !== '3'
Mayor que(>)
true si el operando izquierdo es mayor que el derecho.
var2 > var1"12" > 2
Mayor o igual que (>=)
true si el operando izquierdo es mayor o igual que el derecho.
var2 >= var1var1 >= 3
Menor que (<)
true si el operando izquierdo es menor que el derecho.
var1 < var2"12" < "2"
Menor o igual que (<=)
true si el operando izquierdo es menor o igual que el derecho.
var1 <= var2var2 <= 5
1Estos ejemplos asumen que var1 = 3 y var2 = 4.
Operadores aritméticos
Los operadores aritméticos toman valores numéricos (tanto literales como variables) como operandos y devuelven un único valor numérico. Los operadores aritméticos estándar son el de suma (+), el de resta (-), el de multiplicación (*) y el de división (/). Estos operadores trabajan igual que en la mayoría de lenguajes de programación, excepto el operador / que devuelve la división real (de coma flotante), no la división entera como sucede en C o en Java.
Operador Significado
+ Suma
- Resta
Operador Significado
* Multiplicación
/ División
% Módulo
++ Incremento en uno
-- Decremento en uno
- Negación
Por ejemplo:
1/2 //devuelve 0.5 en avaScript1/2 //devuelve 0 en Java
Operadores lógicos
Los operadores lógicos son generalmente empleados con valores lógicos (booleanos); estos operadores devuelven un valor booleano. Sin embargo, los operadores && y || realmente devuelven el valor de uno de sus operandos, por esto si se emplean con valores no booleanos, podrían devolver un valor no booleano. Los operadores lógicos se describen en la siguiente tabla.
Operadores lógicos. Dado x = 6 y y = 7
Operador Uso Descripción Ejemplo
&& expr1 && expr2 and (x < 10 && y > 1) es true
|| expr1 || expr2 or (x==5 || y==5) es false
! !expr1 not !(x==y) es true
Operadores de cadena de caracteres (String)
Además de los operadores de comparación, los cuales pueden ser empleados con los valores de cadena, el operador de concatenación (+) gnera otra cadena que es la unión de los dos operandos de tipo cadena. Por ejemplo, "mi " + "cadena" retorna la cadena "mi cadena".
El operador abreviado de asignación += también puede usarse para concatenar cadenas. Por ejemplo, si la variable micadena tiene el valor "Vera", la expresión micadena += "cruz" se evalúa como "Veracruz" y asigna este valor a micadena.
Sentencias condicionales
En JavaScript, como en muchos lenguajes, la sentencia para verificar si una condición se cumple y realizar una acción u otra es if. Su sintaxis es la siguiente:
if(condición) { instrucciones si se cumple } else { instrucciones si no se cumple }
Ejemplo: El código proporciona una aplicación de la sentencia if.
onclick es un evento que ejecuta la función evaluar
parseInt regresa el valor entero de una cadena
document innerHTL nos permite modificar un elemento de la forma
function evaluar() { var edad = parseInt(document.getElementById('year').value); var mensaje = ''; if (edad <= -1) { mensaje = "Edad no valida";} else if (edad == 0) { mensaje = 'Bebe'; } else if (edad >=1 && edad <= 6) { mensaje = 'Infante'; }
else if (edad >= 7 && edad < 12) { mensaje = 'Niñez';} else if (edad >= 12 && edad <= 14) { mensaje =
'PreAdolescente';} else if (edad > 14 && edad < 18 ) { mensaje =
'Adolescente';} else if (edad >= 18 && edad <= 25) { mensaje = 'Joven';} else if (edad > 25 && edad <= 60 ) { mensaje = 'Adulto';} else if (edad > 60 && edad <= 99 ) { mensaje =
'Anciano';} else mensaje = 'Matuzalen';
mensaje = 'Con dicha edad eres un: ' + mensaje; document.getElementById('parrafo').innerHTML = mensaje;}
DescargarEjecutar
switch
Esta expresión se utiliza cuando tenemos múltiples posibilidades como resultado de la evaluación de una sentencia. La sintaxis se presenta a continuación:
switch( expresión ){ case valor1 : sentencias; break; case valor2 : sentencias; break; case valorn: sentencias; break; default : sentencias; break; }
Ejemplo: Aproximación a la predicción de los signos del zodiaco
El índice de la opción seleccionada se captura en la línea 2.
El arreglo de los signos zodiacales se declara en la línea 3.
La línea 6 usa la sentencia switch El objeto document permite acceder a los componentes
function horoscopos(){ var opcion = document.forma.horoscopo.selectedIndex; var signo = new Array('Acuario','Aries', . . .,'Virgo'); var fecha = ''; var caracter = ''; switch (opcion) { case 0: fecha = '21 de Enero a 19 de Febrero';
caracter = 'Signo de Aire, humanitario, . . . ';break;
case 11: fecha = '24 de Agosto a 23 de Septiembre'; caracter = 'Signo de Tierra, . . .';
break; }
fecha = signo[opcion] + ' del ' + fecha; document.getElementById("fecha").innerHTML = fecha; document.getElementById("caracter").innerHTML = caracter; var imagen = 'zodiaco/' + signo[opcion] + '.gif' document.getElementById("fSigno").src = imagen;}
<head><meta http-equiv='Content-Type' content='text/html; charset=charset=iso-8859-1' /><title>Horoscopos</title><link href='0104js04.css' rel='stylesheet' type='text/css' /><script type='text/javascript' src='0104js04.js'></script></head><body><form id='forma' name='forma' method='post' action=''> <div> <select name='horoscopo' id='horoscopo' onchange='horoscopos()'> . . . <option value='12'>Virgo</option> </select> <img id='fSigno' src='zodiaco/blanco.gif' /> <p class='parrafo' id='fecha'> <p class='parrafo' id='caracter'> </div></form></body>
DescargarEjecutar
Ciclos
Los ciclos son sentencias esenciales en cualquier lenguaje de programación. JavaScript cuenta con tres: while, do while y for. Hay cuatro partes en todos los bucles. Inicialización, cuerpo, iteración y condición.
while: Ejecuta repetidamente el mismo bloque de código hasta que se cumpla una condición de terminación.
[inicialización;]while(condicion[es]) { cuerpo;
[iteración;]}
do..while: Como mínimo siempre se ejecutará el cuerpo del bucle una vez, en el bucle while es posible que no se ejecute ni una sola vez el contenido de este.
[inicialización;]do{ cuerpo; [iteración;]}while(condición);
for: Es el ciclo más común, en el una variable se fija a un valor inicial, que se actualiza con cada ciclo, y cuando el valor cumple una determinada condición, el ciclo se termina. La sintaxis del ciclo es:
for ([inicialización]; [condición]; [expresión] ){ Instrucción o bloque de instrucciones;}
Hay dos formatos más de ciclos for, aunque no todas se aplican en todos los navegadores y se expondrán en incisos posteriores.
break: La sentencia break se puede colocar dentro de un ciclo o ciclos anidados. Cuando se ejecuta la sentencia break se abandona el ciclo más interno. A todos los efectos la sentencia break actúa como un salto a la instrucción siguiente al ciclo en el que se ejecuta.
continue: La sentencia continue, no abandona el ciclo si no hace que se ejecute la siguiente iteración. En el ciclo while la ejecución del continuehace que el flujo del programa salte a la condición. En el bucle for la ejecución del continue ejecuta la expresión de incremento (decremento), para después continuar normalmente con la condición. Es decir, la ejecución del continue evita que se ejecute durante una interacción el resto del cuerpo del ciclo.
Funciones
Una función es un bloque de código con un nombre. Cada vez que se usa el nombre, se llama a la función y el código de la función es ejecutado. Las funciones pueden llamarse con valores, conocidos como parámetros, que se usan como variables.
Las funciones tienen dos objetivos: organización del programa (archivo o documento) y ejecución del código de la función.
El nombre de una función se escribe inmediatamente después del comando function. Todos los nombres de funciones deben ser únicos y diferentes de los nombres de los comandos que usa JavaScript. No puede haber dos funciones con el mismo nombre.
La lista de parámetros (argumentos) de una función se separa por comas. La función usa esos parámetros en las sentencias de su cuerpo que la configuran.
Los argumentos que se le pasan a una función no pueden ser cambiados en su interior pues se pasan por valor.
Hay tres enfoques principales para la creación de funciones en JavaScript: declarativo/estático, dinámico/anónima, y literal.
Muchas tareas de programación que se puede lograr con el enfoque declarativo. Sin embargo es importante comprender el impacto de cada tipo de declaración antes de usarlas.
La sintaxis de las funciones declarativas es la siguiente:
function nombreFunción(){ sentencia1; sentencia2; ...; ...; [return]}
Los parámetros de una función se pasan por valor, los arrays se pasan por referencia.
Nota: Las funciones pueden regresar más de un valor en la versión 1.7. Sin embargo Internet Explorer no acepta completamente esta especificación.
Javascript tiene por característica no tipificar sus variables y cuando de operaciones matemáticas en particular en la suma dicha característica podría producirnos errores inesperados.
Ejemplo: Calcular las funciones trigonometricas seno y coseno mediante las siguientes series de Taylor. Recuerde que x es un valor en radianes
Solución:
Se presentan las funciones factorial, radianes y decimal
Math.abs(x) calcula el valor absoluto de x.
Math.PI regresa el valor del número pi. Math(x, n) eleva x a la potencia n.
Math.round(x) redondea x.
function factorial(n) { if (n > 0) { return n * factorial(n - 1); } else return 1;}
function radianes( grados) { return Math.PI * grados/180;}
function decimal(numero,cantDecimales){ if (cantDecimales > 0){ var i = 0; var aux = Math.pow(10, cantDecimales); numero = Math.round(numero * aux) /aux; } return numero;}
Serie de Taylor
error es la aproximación usada para el cálculo de las funciones trigonométricas.
Entre menor sea la aproximación, la precisión será mayor, a costa de aumentar
la cantidad de ciclos.
Los ángulos toman valor entre 0 y 360 grados. Lo cual logramos calculando el
módulo de 360. Así 370 grados es igual a 10 grados.
Cálculo del seno mediante la aproximación de Taylor
function seno( angulo ) { var error = 0.00000001; var x = radianes( angulo % 360); var anterior = 1; var nuevo = 0; var n = 0; var m = 0; while (Math.abs(anterior - nuevo) >= error) { n = 2 * m +1;
anterior = nuevo; nuevo += Math.pow(-1,m)/factorial(n)
* Math.pow(x, n); ++m; } return nuevo; }
Cálculo del coseno mediante la aproximación de Taylor
function coseno( angulo ) { var error = 0.00000001; var x = radianes( angulo % 360);
var anterior = 1; var nuevo = 0; var n = 0; var m = 0; while (Math.abs(anterior - nuevo) >= error) { n = 2 * m;
anterior = nuevo; nuevo += Math.pow(-1,m)/factorial(n)
* Math.pow(x, n); ++m; } return nuevo;}
Impresión de resultados
document es parte de DOM (Document Object Model) que será abordado más
adelante. En este ejemplo sirve para regresar los resultados a la forma sin
recargar
Ads not by this site
function calcular() {var x = document.getElementById('grados').value;var dec = 5;
var senox = decimal(seno( x ), dec); var cosenox = decimal(coseno( x ), dec);
document.getElementById('senox').innerHTML = senox;document.getElementById('cosenox').innerHTML =
cosenox;}
Aplicación del código javaScript desde HTML
<head><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /><title>Serie de Taylor</title><script type='text/javascript' src='0401js05.js'></script><link href='0401js05.css' rel='stylesheet' type='text/css' /></head><body><form id='forma' name='forma' action='' method='post' ><fieldset>
<ul> <li> <label for='grados'>Grados</label> <input name='grados' type='text' id='grados' value=''/> </li> <li> <label for='senox'>Seno x: </label> <p id='senox'></p> </li> <li> <label for='cosenox'>Coseno x: </label> <p id='cosenox'></p> </li> <li> <p><input type='button' name='enviar' id='enviar' value='Enviar' onclick='calcular()' /></p> </li></ul> </fieldset></form></body>
DescargarEjecutar
4.2. Modelo de objetos con lenguaje Script.
El Modelo de Objetos de Documento (DOM - Document Object Model -) describe cómo todos los elementos en una página HTML, tales como campos de entrada, imágenes, etc, se relacionan con la estructura más alta: el propio documento. Llamando al elemento por su nombre correcto DOM, podemos influir en él mediante un lenguaje de programación, e,g. Javascript, Java, etc.
La gran difusión de Ajax y Javascript es notable en muchos proyectos en Internet. Sin embargonavegadores tienen deshabilitado Javascript por defecto. Lo cual hace necesario que se habilite en cada máquina cliente.
Para que estos códigos funcionen en Mozilla Firefox es necesario
1. Selecciona “2. Selecciona “3. Selecciona “4. Selecciona la casillla de ‘Habilitar JavaScript’ y darle clic en OK
write
Permite escribir texto html desde Javascript. El texto se escribe directamente el body del html.
Es la forma más fácil de escribir HTML desde Javascript, lo cual no quiere decir que es la mejor manera de escribir código HTML desde Javascript o incluso que va a trabajar en todas las situaciones. De hecho, el método document.write es muy limitado en lo que puedes hacer con él.
El lector debe considerar que document.write sólo funciona con las página que el navegador procesa como HTML.
html
JavaScript
DescargarEjecutar
Ejemplo: Imprimir un mensaje y abrir una nueva ventana mediante DOM
Las cadenas en Javascript son objetos y por lo tanto tienen métodos y atributos.
En las líneas 4 y 5 se presenta ejemplos de ellos que facilmente pueden deducir
su finalidad.
La línea 6 imprime la cadena en el body.
La línea 8 abre una página nueva, la función open tiene como parámetros la
página que abrira, y el lugar donde lo hará en este caso _self sustituye la
página actual
<body><script language='JavaScript'> var mensaje = '¡Hola mis estimados y finos alumnos!. Buen dia'; mensaje = mensaje.toUpperCase().bold().italics(); mensaje = mensaje.fontsize(6).fontcolor('red'); document.write(mensaje); if ( confirm('Abrir HomePage del curso?') )
window.open('http://www.prograweb.com.mx/pweb/index.html', '_self');</script></body>
DescargarEjecutar
Ejemplo: Imprimir un saludo en la pantalla dependiente de la hora de la máquina cliente
En la línea 4 hacemos una instancia de la clase Date.
getHours extrae la hora del lado cliente (Línea 6)
Escribimos en el documento el mensaje: document.write( saludo() )
<head><script language='javascript'>function saludo() { var horario = new Date() var hora = horario.getHours(); if( hora < 12 ) { var mensaje = 'Buenos dias!';} else if (hora >= 12 and hora <= 19) { var mensaje = 'Buenas tardes!'; } else { var mensaje = 'Buenas noches!'; } mensaje = '¡Hola Mundo. ' + mensaje; return mensaje;}</script></head><body><script language='javascript'> document.write( saludo() );</script></body>
DescargarEjecutar
ejemplo: form
Modifica el valor del elemento indicado que esta contenido en una forma.
HTML
JavaScript
<head><link href='0402almaMater.css' rel='stylesheet' type='text/css' /><script language='javascript' type='text/javascript' src='0402almaMater.js'></script></head><body><form><table class='tablaSinBorde'><tr><td><a href='#' onclick='mostrar(1)' onmouseout='mostrar(0)'> <img src='../../images/colpos.gif' /></a></td><td><a href='#' onclick='mostrar(2)' onmouseout='mostrar(0)'> <img src='../../images/escudoITV.png' /></a></td> <td><a href='#' onclick='mostrar(3)' onmouseout='mostrar(0)'> <img src='../../images/UV2.jpg' /></a></td> </tr></table><form id='forma' name='forma' method='post' action='#'><p id='contenedor' class="centrado"></p></form></body>
DescargarEjecutar
getElementById
Permite obtener la referencia a un elemento de la página mediante el id de dicho elemento.
Una vez obtenida la referencia al elemento, podemos acceder a todas sus propiedades
<head>
<title>getElementById</title><script type='text/javascript'> function cambiarColor( color ) { var elemento = document.getElementById('parrafo');
elemento.style.font = 'bold italic 16 pt Verdana'; elemento.style.color = color; }</script> </head> <body> <p id='parrafo'>Mis colores favoritos. ¿Adivina por qué?</p> <button onclick = 'cambiarColor('blue');'>Azul</button> <button onclick = 'cambiarColor('red');'>Rojo</button> </body>
DescargarEjecutar
innerHTML
Sirve para obtener o modificar el HTML del documento HTML. Se utiliza la propiedad InnerHtml para modificar mediante programación el contenido interno entre las etiquetas de apertura y cierre de un control de servidor HTML.
La propiedad InnerHtml no codifica automáticamente los caracteres especiales en entidades HTML, es el programador el responsable de hacerlo.
Ejemplo: Crear una lista con viñetas no ordena en forma dinámica
En la línea 4 creamos un vector de días de la semana.
En la línea 11 modificamos el contenido del elemento llamado contenedor.
<body><div id='contenedor' name='contenedor'></div> <script language='javascript' type='text/javascript'> dias = new Array('Lunes','Martes','Miércoles','Jueves', 'Viernes', 'Sábado', 'Domingo'); HTML = '<ul>'; for(i = 0; i < dias.length; i++) { HTML += '<li>' + dias[i] + '</li>';
} HTML += '</ul>'; document.getElementById('contenedor').innerHTML = HTML; </script></body>
DescargarEjecutar
Ejemplo: En matemáticas, la sucesión de Fibonacci es la siguiente sucesión infinita de números naturales:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, . . .
La sucesión inicia con 0 y 1, y a partir de ahí cada elemento es la suma de los dos anteriores.
Se presenta la función formato la cual incorpora el separador de miles, su
autoria es de Roberto Herrero & Daniel ()
La línea 2 recupera mediante getElementbyId en número de elementos de la
serie.
El mínimo de elementos es 2 (Líneas 3 a 6).
Mediante innerHTML pasamos el resultado a un contenedor
HTML
JavaScriptAds not by this site
<head><script type='text/jscript' src='0402fibonacci.js'></script><link href='0402fibonacci.css' rel='stylesheet' type='text/css' /></head><body><form id='forma' name='forma' method='post' action='#'> <table class='tablaSinBorde'> <tr> <td colspan='2'><p align='center'> <strong>Serie de Fibonacci</strong></p></td> </tr> <tr>
<td><strong>Elementos de la serie</strong></td> <td><input name='n' type='text' id='n' size='2' maxlength='2' /></td> </tr> <tr> <td colspan='2'><p align='center'> <input type='button' name='calcular' id='calcular' value='Enviar' onclick='fibonacci()' /> </p></td> </tr> </table> <div id='centrado'></div></form></body>
DescargarEjecutar
Crear y accesar elementos
Para crear etiquetas "tag" html debemos usar el método createElement(). Cuya sintaxis es la siguiente:
createElement( tag )
Donde tag es una etiqueta valida en html.
Si necesitamos agregar un nodo es necesario usar el método appendChild(). El cual agrega un nodo al final del arbol. La sintaxis es
appendChild( tag )
El método insertBefore tiene un comportamiento similar al de appendChield, solo que el nodo agregado es puesto antes del padre. La sintaxis es
insertBefore( nuevo tag, referencia )
Ejemplo: Agregar elementos a un documento
HTML
Los elementos son agregados mediante el evento onclick (Línea 7)
La línea 8 declara un elemento div vacio cuya función es servir de contenedor
Javascript
En la línea 5 se crea un objeto de tipo div El objeto nuevoElemento hereda todas las características de div, por
ejemplo innerHTML, color, fontSize.
Se crea una instancia del contenedor Para agregar los elementos al contenedor usamos appenChild
HTML
JavaScript
<head><script type='text/javascript' src='0402createElement.js'></script></head><body><button onclick='sumarHijo();'>Sumar un nuevo elemento</button><div id='contenedor'></div></body>
DescargarEjecutar
Ejemplo: Cargar la ruta a un archivo
Se asignan las características de un fieldset en fi (Línea 4)
Creamos un contenedor de tipo div (Línea 5)
Las líneas 9 y 15 crean dos objetos de tipo input
Mediante insertBefore insertamos el contenedor antes del botón crear (Línea
7)
Asignamos al evento onclick del botón la función borrar y el pasamos como
par'ametro el nombre del propio botón
Usamos removeChild para eliminar el div y su contenido (Línea 25)
HTML
JavaScript
Descargar
Ejecutar
Ejemplo: Mostrar los objetos interconstruidos de Javascript
Se presentan los siguientes objetos: document, even, history, location,
navigator, screen y windows
La función eval evalúa una cadena de código JavaScript sin referencia a ningún
objeto en particular (Línea 2). El objetivo de Object es este caso es crear un
arreglo atributos, métodos y parámetros del objeto interconstruido.
La línea 9 desarrolla un array asociativo con los nombres de los métodos del
objeto interconstruido.
En la línea 19 asignamos al atributo innerHTML el contenido.
HTML
JavaScript
<head><title>Propiedad de los Objetos</title><link href='0402ObjectPropiedades.css' rel='stylesheet' type='text/css' /><meta http-equiv='content-type' content='text/html; charset=iso-8859-1' /><script type='text/javascript' src='0402ObjectPropiedades.js'></script></head><body><form name='forma' method='post' action='#'> <div align='center'>
Objeto: <select name='objetos' id='objetos'
onChange='propiedades(window.document.forms[0][0].value)'>
<option value='document'>document</option> <option value='event'>event</option> <option value='history'>history</option> <option value='location'>location</option> <option value='navigator'>navigator</option> <option value='screen'>screen</option> <option value='window'>window</option>
</select> </div> </form> <div id='contenedor' class='centrado'></div>
DescargarEjecutar
Ejemplo: Efecto Row Rollover Table
HTML
JavaScript
CSSAds not by this site
<head><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1' /> <title>Row Rollover table</title><script type='text/javascript' src='0402tableruler.js'></script><script type='text/javascript'> window.onload = function(){tableruler();} </script><link href='0402tableruler.css' rel='stylesheet' type='text/css' /></head><body><table class='ruler' summary='Campeones FIFA'><caption>Campeones FIFA (1930 - 2022)</caption><thead> <tr> <th>Año</th> <th>Lugar</th> <th>Campeón</th>
<th>Marcador</th> <th>Subcampeón</th> </tr></thead><tfoot><tr><td colspan='5'>Última actualización: 2010-9-9</td></tr></tfoot><tbody> <tr> <th>1930</th> <td>Uruguay</td> <td>Uruguay</td> <th>4-2</th> <td>Argentina</td> </tr></tbody></table></body>
DescargarEjecutar
4.3. Eventos en JavaScript
JavaScript nos proporciona la capacidad de crear páginas dinámicas, la interacción con el usuario se consigue mediante la captura de los eventos que éste produce.
Un evento es una acción del usuario ante la cual puede realizarse algún proceso (por ejemplo, el cambio del valor de un formulario, o la pulsación de un enlace).
Los sucesos o eventos se definen en las etiquetas HTML. Los eventos se capturan mediante los manejadores de eventos y se realizan mediante funciones JavaScript llamadas por los manejadores de eventos.
Un controlador de eventos ejecuta un segmento de código basado en eventos que ocurren dentro de la aplicación, como por ejemplo el evento on Change. Elcontrolador de eventos onChangeejecuta código JavaScript cuando pierde el foco de entradadel campo después de que el usuario modifique su texto.
La siguiente tabla muestra los controladores de eventos que pueden utilizarse en JavaScript y su significado.
Manejadores de eventos JavaScript
Manejador Se produce cuando...Objetos para los que
está definido
onAbortEl usuario interrumpe la carga de una imagen
Image
onBlurUn elemento de formulario, una ventana o un marco pierden el foco
Button, Checkbox, FileUpload, Layer, Password, Radio, Reset, Select, Submit, Text, Textarea, window
onChangeEl valor de un campo de formulario cambia
FileUpload, Select, Text, Textarea
onClickSe hace click en un objeto o formulario
Button, document, Checkbox, Link, Radio, Reset, Submit
onDblClickSe hace click doble en un objeto o formulario
document, Link
onDragDropEl usuario arrastra y suelta un objeto en la ventana
window
onErrorLa carga de un documento o imagen produce un error
Image, window
onFocusUna ventana, marco o elemento de formulario recibe el foco
Button, Checkbox, FileUpload, Layer, Password, Radio, Reset, Select, Submit, Text, Textarea, window
onKeyDown El usuario pulsa una tecladocument, Image, Link, Textarea
onKeyPressEl usuario mantiene pulsada una tecla
document, Image, Link, Textarea
onKeyUpEl usuario libera una tecla
document, Image, Link, Textarea
Manejadores de eventos JavaScript
Manejador Se produce cuando...Objetos para los que
está definido
onLoadEl navegador termina la carga de una ventana
Image, Layer, window
onMouseDown
El usuario pulsa un botón del ratón
Button, document, Link
onMouseMoveEl usuario mueve el puntero
Ninguno (debe asociarse a uno)
onMouseOutEl puntero abando una área o enlace
Layer, Link, img
onMouseOverEl puntero entra en una área o imagen
Layer, Link, img,
onMouseUpEl usuario libera un botón del ratón
Button, document, Link
onMoveSe mueve una ventana o un marco
window
onResetEl usuario limpia un formulario
Form
onResizeSe cambia el tamaño de una ventana o marco
window
onSelectSe selecciona el texto del campo texto o área de texto de un formulario
Text, Textarea
onSubmitEl usuario envía un formulario
Form
onUnload El usuario abandona window
Ejemplo: Evento onChange
<head><script language='javascript'>function valida(dato) { alert('Cambio el valor de 30 a ' + dato);}</script></head><body><fieldset>
<legend>Controlador de eventos onChange</legend>Cambie cualquier valor mayor que 30:<br /><form name='forma' method='post'> <input type='text' value='30' onChange='valida(this.value)'></form></fieldset></body>
DescargarEjecutar
Ejemplo: Mostrar la fecha y la hora del cliente al colocar el cursor de mouse sobre una imagen (Evento onMouseOver)
<head><title>Evento onMouseOver/onMouseOut</title><link href='basico.css' rel='stylesheet' type='text/css' /><script type='text/javascript'>function borrar() { document.getElementById('contenedor').style.visibility = 'hidden';}
function muestraFecha() { var fecha = new Date(); texto = 'Hoy es: '+ fecha.toLocaleDateString()+'<br />'; texto += 'La hora es: '+ fecha.toLocaleTimeString(); document.getElementById('contenedor').style.visibility = 'visible'; document.getElementById('descripcion').innerHTML=texto;}</script></head><body><p class='centrado'><img alt='' src='../img/0403Calendario.png' onmouseover='muestraFecha()' onmouseout='borrar()' /></p><div id="contenedor" class='codigoCorto'><p id='descripcion'></p></div></body>
DescargarEjecutar
Ejemplo: Uso de area shape y onMouseOver
<head>
<meta http-equiv='content-type' content='text/html; charset=iso-8859-1' /> <script type='text/javascript'> function escribe(texto) { document.getElementById('descripcion').innerHTML=texto; } </script></head><body><div align='center'> <img src ='../img/Mujer.jpg' alt='Mujer' usemap='#mapa' /><map name='mapa'><area shape='rect' coords='135,6,164,28' onmouseover='escribe("Cabello")' /></map> </div><div class='codigoCorto'><p id='descripcion></p></div></body>
DescargarEjecutar
Ejemplo: Uso del evento onclick y document
<form id='forma' name='forma' method='post'> <tr> <td><input type='button' name='title' id='title' value='Enviar' onclick='alert(document.title)' /></td> <td>onclick='alert(document.title)'</td> </tr> </form>
DescargarEjecutar
Ejemplo: Uso de los eventos onmouseover y onmouseout
0403onMouseOver.js
En la línea 2 se crea un objeto de tipo arreglo.
Las líneas 3 y 7 crean un objeto de tipo imagen.
Las líneas 4, 5, y 6, así como las líneas 8, 9 y 10 proporcionan las
características de dichas imagenes.
La función mostrar nos regresara una imagen si el elemento html que la llama
es una imagen (línea 14).
if(document.images) { contenedor = new Array(); contenedor[0] = new Image(); contenedor[0].src = '../img/Saltillo/carro01.gif'; contenedor[0].alt = 'Pulsame'; contenedor[0].title = 'Pulsame'; contenedor[1] = new Image(); contenedor[1].src = '../img/Saltillo/carro02.gif'; contenedor[1].alt = 'Saltillo, Coahuila. México 2010'; contenedor[1].title = 'Saltillo, Coahuila. México 2010';}
function mostrar(i) { if(document.images) {
document.foto.src = contenedor[i].src; document.foto.alt = contenedor[i].alt; document.foto.title = contenedor[i].title;
} }
0403onMouseOver.html
<head> <script language='javascript' src='0403onmousemove.js' type='text/javascript'></script> <link href='0403onmousemove.css' rel='stylesheet' type='text/css' /></head><body> <a href='http://www.prograweb.com.mx' onmousemove='mostrar(1)' onmouseout='mostrar(0)'> <img alt='' name='foto' src='../img/Saltillo/carro01.gif' /></a></body>
DescargarEjecutar
Ejemplo: Formulario con eventos onfocus y onblur
Observe que ambas funciones modifican el atributo del bordo y el tipo de
letra 0403onfocus.js
function conFoco( elemento ) {elemento.style.border = '1px solid #CC3300';elemento.style.font = 'italic bold 18px arial,serif';
}
function sinFoco( elemento ){ elemento.style.border = '2px solid #336699'; elemento.style.font = '14px Courier New';}
class="datos" indica las características base de la caja de edición.
En las líneas 9, 12 y 14 se implementan los eventos onFocus y onBlur. A los
cuales se les pasa como parámetro el componente input mediante this.
<head><title>Eventos onfocus y onbur</title><link href='0403onfocus.css' rel='stylesheet' type='text/css' /><script type='text/javascript' src='0403onfocus.js'></script></head><body><form id='forma' name='forma' method='post'><strong>Login</strong><input type='text' name='login' id='login' class='datos' onblur='sinFoco(this)' onfocus='conFoco(this)' /><strong>Password</strong><input type='text' name='password' id='password' class='datos' onblur='sinFoco(this)' onfocus='conFoco(this)' /><strong>email</strong><input type='text' name='email' id='email' class='datos' onblur='sinFoco(this)' onfocus='conFoco(this)' /></form></body>
DescargarEjecutar
5.1 Visión general de servicios Web XML.
Básicamente, un servicio web (webservice) es un sistema de entrada/salida, al que se le puede pasar una serie de parámetros con el fin de obtener un resultado en concreto y recuperarlo para ser mostrado en una aplicación. La tecnología de los servicios web es relativamente reciente, y está basada en el protocolo SOAP (Simple Object Access Protocol), consistente en un simple documento XML que habilita el intercambio de información vía HTTP entre diversas aplicaciones.
La ventaja de este protocolo radica en una comunicación efectiva independiente del lenguaje de programación que defina a la aplicación. WSDL (Web Services Description Language) es el nombre del lenguaje utilizado para describir un servicio web. El mismo utiliza el formato wsdl como extensión para sus archivos. Estos últimos son referenciados desde una URL, e incluyen una serie de métodos y operaciones que serán llamados desde la aplicación central del lado del cliente.
De ahí la necesidad de Servicios Web en un mundo Internet. De la misma manera que el software de conectividad de componentes permite hacer uso de la funcionalidad contenida dentro de otra pieza de software en otro computador, los Servicios Web usan los protocolos de Internet para proveer una infraestructura de componentes para el desarrollo de componentes distribuidos que funcionen sobre la red pública. En pocas palabras, los Servicios Web son aplicaciones modulares que pueden ser descritas, localizadas, e invocadas sobre una red a través de un intercambio estandarizado de mensajes XML.
Definidos por nuevos estándares – como SOAP (Simpla Object Access Protocol), WSDL (Web Services Description Language), y UDDI (Universal Discovery Description and Integration) – los Servicios Web ofrecen un nuevo modelo para la creación de aplicaciones e-Business a partir de módulos reutilizables de software a los que se tiene acceso a través de la Web.
Beneficios de los Servicios Web
Desde un punto de vista técnico, los Servicios Web ofrecen una manera más fácil de desarrollar aplicaciones a las que se requiera tener acceso a través de la Web. Es importante anotar que los servicios Web no resuelven todos los requerimientos de integración – sólo la habilidad de comunicarse con otros módulos de software a través de la red pública. Se requieren tecnologías adicionales de integración para manejar la integración de datos, aplicaciones y procesos del negocio. También se requieren características de clase empresarial para complementar los Servicios Web, permitiéndoles ser seguros y escalables.
Desde el punto de vista del negocio, los Servicios Web le permiten a una compañía concentrar los esfuerzos de desarrollo en los recursos computacionales que le representan ganancia. Los modelos y relaciones empresariales son desarrollados en la medida en que es necesario, los costos de integración son reducidos, las interacciones con otros mercados son establecidas más efectivamente, y las funciones del negocio son entregadas a un conjunto más amplio de clientes y asociados.
Más aún, la tecnología de Servicios Web permite la contratación de servicios que no brindan un beneficio al negocio. Dado que los Servicios Web separan aplicaciones de infraestructura, una compañía puede rápidamente componer y desplegar soluciones basadas en componentes reutilizables provenientes del proveedor que ofrezca un menor costo, sea éste interno o externo. Estas soluciones pueden cambiar el enfoque e incluso la naturaleza de las interacciones, en respuesta a condiciones cambiantes del negocio. En consecuencia, los e-Business pueden explotar modelos de negocio flexibles y dinámicos – maximizando su alcance a clientes, asociados, proveedores y mercados, al mismo tiempo que minimizan sus costos y tiempo de mercadeo.
5.2.1. SOAP (Simple Object Access Protocol)
SOAP es un protocolo que proporciona un mecanismo estándar de empaquetar mensajes. Este protocolo está pensado para el intercambio de información en entornos descentralizados y distribuidos. Usa las tecnologías relacionadas con XML a fin de definir un marco de trabajo extensible para los mensajes.
Provee una estructura de mensajes capaz de ser intercambiada sobre una gran cantidad de protocolos de soporte. Este marco ha sido diseñado con el fin de que fuera independiente del cualquier modelo de programación y otras implementaciones de semánticas.
Los dos objetivos de diseño principales de SOAP son la simplicidad y la extensibilidad. Para alcanzar estos objetivos, SOAP simplemente elimina de su arquitectura aquellos aspectos que con más frecuencia se encuentra en los sistemas distribuidos. Podemos agregar las características que nosotros queramos simplemente extendiendo la especificación.
Ventajas
No esta asociado con ningún lenguaje: los desarrolladores involucrados en
nuevos proyectos pueden elegir desarrollar con el último y mejor lenguaje de
programación que exista pero los desarrolladores responsables de mantener
antiguas aflicciones heredadas podrían no poder hacer esta elección sobre el
lenguaje de programación que utilizan.
No se encuentra fuertemente asociado a ningún protocolo de transporte: La especificación de SOAP no describe como se deberían asociar los mensajes de SOAP con HTTP. Un mensaje de SOAP no es más que un
documento XML, por lo que puede transportarse utilizando cualquier protocolo capaz de transmitir texto.
No está atado a ninguna infraestructura de objeto distribuido. La
mayoría de los sistemas de objetos distribuidos se pueden extender, y ya lo
están alguno de ellos para que admitan SOAP.
Aprovecha los estándares existentes en la industria: Los principales
contribuyentes a la especificación SOAP evitaron, intencionadamente, reinventar las cosas. Optaron por extender los estándares existentes para que
coincidieran con sus necesidades. Por ejemplo, SOAP aprovecha XML para la
codificación de los mensajes, en lugar de utilizar su propio sistema de tipo que
ya están definidas en la 2 especificación esquema de XML. Y como ya se ha
mencionado SOAP no define un medio de trasporte de los mensajes; los mensajes de SOAP se pueden asociar a los protocolos de transporteexistentes
como HTTP y SMTP.
Permite la interoperabilidad entre múltiples entornos: SOAP se desarrollo
sobre los estándares existentes de la industria, por lo que las aplicaciones que se ejecuten en plataformas con dicho estándares pueden comunicarse
mediante mensaje SOAP con aplicaciones que se ejecuten en otras
plataformas. Estructura de un mensaje SOAP SOAP proporciona un mecanismo
estándar de empaquetar un mensaje. Un mensaje SOAP se compone de un
sobre que contiene el cuerpo del mensaje y cualquier información de cabecera
que se utiliza para describir le mensaje.
5.2.2. WSDL (Web Service Description Language)
Un archivo WSDL es un archivo en formato XML en donde se declaran los objetos que se van a compartir via SOAP, es decir, las operaciones, sus
argumentos y sus tipos de datos, y se debe de aclarar que todo via XML, entonces hay un asunto de codificación de caracteres que debemos de tomar en cuenta en nuestro archivo XML, ya sea UTF-8, Latin, Occidental , lo que sea, como se transporta la información vía XML, pues se tienen que tomar los cuidados necesarios.
Una gramática basada en XML que permite describir las capacidades de un servicio Web.
http://www.prograweb.com.mx/pweb/index.html