< > Programación 1 < > Programación Somos una empresa 100% mexicana, con más de 20 años de experiencia siendo el Centro líder de Capacitación en informática. Hoy en día, tener las mejores herramientas es sólo una parte del todo lo que signi- fica que conviene siempre estar en permanente capacitación. Grupo Eduit ha establecido un programa integrado capaz de identificar y perso- nalizar las necesidades de los diferentes niveles educativos del país manteniéndose en cada paso como asesor y colaborador, generando un “programa conforme a sus necesidades”. Misión Satisfacer las necesidades de capacitación en tecnologías de informática a través de programas de entrenamiento de calidad, siendo siempre una empresa a la vanguardia. Visión Ser líder de soluciones de capacitación a nivel internacional. 2 < > Programación 1 Contenido 1 Aplicaciones Web 1.1 7 1.1.1 Páginas Web / Formularios Web 7 1.1.2 Controles HTML 7 1.1.3 Controles Web. 9 1.1.4 Componentes de las aplicaciones Web 10 1.1.5 Ciclo de vida de las aplicaciones Web 10 1.1.6 Herramientas de desarrollo 10 1.2 Desarrollo de aplicaciones Web 11 1.2.1 Crear Formas Web 11 1.2.2 Agregar y configurar controles de servidor en Formas Web 16 1.2.3 Trabajar con archivos de código adjunto 21 1.2.4 Manejo de eventos 21 1.2.5 Controles de validación 22 1.2.6 Depuración en aplicaciones web 23 1.3 3 Introducción a ASP.NET 7 Acceso a datos desde aplicaciones web 23 < > Programación 2 1.3.1 Introducción a ADO.NET 23 1.3.2 Controles de acceso a datos 23 1.3.3 Administrar información de la base de datos desde una aplicación web 24 Introducción a PHP 2.1 27 2.1.1 Declaración y uso de variables 28 2.1.2Operadores 29 2.1.3 Estructuras de control 32 2.1.4Arreglos 37 2.1.5Funciones 38 2.1.6 Incluir funciones en un script 39 2.2 Librerías de PHP 40 2.2.1 Funciones para trabajar con arreglos 40 2.2.2 Funciones para trabajar con cadenas 41 2.2.3 Funciones para trabajar con fecha y hora 42 2.3 4 Sintaxis Básica de PHP 27 Creación de Formularios con PHP 43 2.3.1 Elementos de un formulario 43 2.3.2 Validación de datos en un formulario 47 < > Programación 3 Desarrollo de Aplicaciones Web para dispositivos móviles 3.1Introducción 3.1.1 Características de las aplicaciones para dispositivos móviles 3.2Formularios Web con emuladores de dispositivos para móviles 49 49 50 3.2.1 Formularios Web para Móviles 50 3.2.2 Redirección y detección de dispositivos móviles 52 3.3 5 49 Desarrollo de aplicaciones Web para dispositivos móviles 53 3.3.1 Consideraciones de diseño 53 3.3.2 Diseño de la interface 54 • Conocer los componentes y el ciclo de vida de las aplicaciones ASP.NET. • Realizar interfaces Web utilizando los diversos componentes que conforman una aplicación web ASP.NET. • Identificar los componentes principales de ADO.NET y como enlazarlos con aplicaciones web. < > Programación 1 Aplicaciones Web 1.1 Introducción a ASP.NET ASP.NET es una tecnología gratuita que permite a los programadores crear páginas web dinámicas, desde websites personales hasta aplicaciones web empresariales. 1.1.1 Páginas Web / Formularios Web Las formularios Web son el corazón y el alma de ASP.NET. Las formularios Web son los elementos de interfaz de usuario (UI), que dan a las aplicaciones web de su apariencia. Son similares a los Windows Forms ya que proporcionan propiedades, métodos y eventos de los controles que se colocan sobre ellos. Las formularios Web están formados por dos componentes: la parte visual (el archivo ASPX), y el código detrás de la forma, que reside en un archivo de clase independiente como se observa en al figura 1.1. Figura 1.1 1.1.2 Controles HTML Los Controles HTML imitan a los elementos HTML reales que usarías si estuvieras utilizando Front Page o cualquier otro editor HTML para dibujar la interfaz de usuario. Puedes usar los elementos HTML estándar en Formularios Web Por ejemplo, si deseas crear un cuadro de texto, debería escribir: <input type=”text” id=txtFirstName size=25> 7 < > Programación Si está utilizando Visual Studio. NET, elije un TextField de control de la caja de herramientas HTML y dibuja el control que desea en la página HTML. Controles HTML disponibles en ASP.NET Control Botón Botón Restablecer Botón Enviar Campo de texto Área de texto Campo de archivo Campo de contraseña CheckBox Radio Botón Tabla Imagen ListBox 8 Descripción Un botón normal que se puede utilizar para responder a eventos de Clic Restablece todos los elementos de formulario a un valor predeterminado Un botón normal que se puede utilizar para responder a eventos de Clic Hace automáticamente un POST de los datos del formulario a una página especificada Proporciona al usuario un campo de entrada en un formulario HTML Se utiliza para la entrada de varias líneas en un formulario HTML Coloca un campo de texto y un botón de búsqueda en un formulario y permite al usuario seleccionar un archivo de su máquina Un área de entrada de un formulario HTML, todos los caracteres escritos en este campo se muestran como asteriscos Proporciona al usuario una casilla de verificación que puede activar o desactivar Se utiliza dos o más en un formulario, y permite al usuario elegir uno de los controles Permite presentar la información en un formato de tabla Muestra una imagen en un formulario HTML Muestra una lista de elementos para el usuario. . Si hay más elementos de los que caben dentro de este límite, una barra de desplazamiento se agrega automáticamente a este control. Ejemplos de Formularios Web <input type=button runat=server> <input type=reset runat=server> <input type=button runat=server> <input type=submit runat=server> <input type=text runat=server> <input type=textarea runat=server> <input type=file runat=server> <input type=password runat=server> <input type=checkbox runat=server> <input type=radio runat=server> <table runat=server> </ table> <img src=”FileName” runat=server> <seleccionar size=2 runat=server> </ select> < > Programación 1.1.3 Controles Web. Los controles de servidor Web ASP.NET son objetos de páginas Web ASP.NET que se ejecutan cuando se solicita la página y representan el formato en un explorador. Muchos controles de servidor Web son similares a elementos HTML conocidos, como botones y cuadros de texto. Sin embargo, otros controles abarcan un comportamiento complejo, por ejemplo un control de calendario o los controles que administran conexiones de datos. Las propiedades que figuran en la siguiente tabla se aplican a todos los controles de servidor Web que se deriven de la clase WebControl. Los controles de servidor Web que no heredan de la clase WebControl incluyen Literal, PlaceHolder, Repeater y Xml. 1.1.3.1 Propiedades de controles Web Propiedad AccessKey Attributes BackColor BorderColor BorderWidth BorderStyle CssClass 9 Descripción Tecla de método abreviado del control (AccessKey). Esta propiedad especifica una sola letra o un solo número que el usuario puede presionar mientras presiona la tecla ALT. Por ejemplo, especifique “K” si desea que el usuario presione ALT+K para obtener acceso al control. Las teclas de método abreviado se admiten únicamente en Microsoft Internet Explorer 4.0 y versiones posteriores. Colección de atributos adicionales del control no definidos por una propiedad pública pero que también se han de representar. Cualquier atributo no definido por el control de servidor Web se agrega a esta colección. Esto permite utilizar un atributo HTML que el control no admite directamente. Color de fondo del control. La propiedad BackColor se puede establecer mediante identificadores de color HTML estándar: el nombre de un color (“black” o “red”) o un valor RGB expresado con formato hexadecimal (“#ffffff”). Color del borde del control. La propiedad BorderColor se puede establecer mediante identificadores de color HTML estándar: el nombre de un color (“black” o “red”) o un valor RGB expresado con formato hexadecimal (“#ffffff”). Ancho, en píxeles, del borde del control si existe. Estilo del borde del control, si existe. Algunos valores posibles son: • • • • • NotSet None Dotted Solid Double Clase de hojas de estilos en cascada (CSS) que se va a asignar al control. < > Programación 1.1.4 Componentes de las aplicaciones Web En las páginas Web ASP.NET, la programación de la interfaz de usuario se divide en dos partes: el componente visual y el lógico. Es la división entre la parte visible de una página y el código que se oculta detrás y que interactúa con ella. El elemento visual está compuesto por un archivo que contiene el marcado estático como HTML o controles de servidor ASP.NET o ambos. La página Web ASP.NET funciona como un contenedor del texto y los controles estáticos que se desea mostrar. La lógica de las páginas Web ASP.NET se compone del código creado para interactuar con la página. El código puede residir en un bloque de script en la página o en una clase independiente. Si el código está en un archivo de clase independiente, a este archivo se le conoce como archivo de código subyacente. El código del archivo de código subyacente se puede escribir en Visual Basic, Visual C#, Visual J# o JScript .NET. Las páginas Web ASP.NET se compilan en un archivo de biblioteca de vínculos dinámicos (.dll). La primera vez que un usuario examina la página .aspx con el explorador, ASP.NET genera automáticamente un archivo de clase .NET que representa a la página y la compila. El archivo .dll se ejecuta en el servidor y genera dinámicamente la salida HTML para su página. 1.1.5 Ciclo de vida de las aplicaciones Web En aplicaciones web, a diferencia de las tradicionales de escritorio, nos encontramos con una dificultad adicional a la hora de controlar en ambiente. Tanto el software como el hardware cliente cambian sin previo aviso. Es fundamental en función de esta complejidad, encontrar marcos de referencia adecuados. La existencia de estándares y componentes web estandarizados sin duda ayuda, pero no es suficiente, por lo que el proceso de adecuación se vuelve continuo. 1.1.6 Herramientas de desarrollo El Kit de desarrollo de software (SDK) de Windows incluye varias herramientas que puede utilizar al desarrollar sitios Web ASP.NET. • Herramienta Registro de IIS en ASP.NET (Aspnet_regiis.exe).- Permite que un programa administrador o de instalación actualice las asignaciones de secuencias de comandos de una aplicación ASP.NET para que señalen a la versión de la ISAPI de ASP.NET asociada a la herramienta. Esta herramienta también se puede utilizar para mostrar el estado de todas las versiones de ASP. NET instaladas, registrar la versión de ASP.NET que se corresponde con la herramienta, crear directorios de secuencias de comandos de cliente y realizar otras operaciones de configuración. • Complemento MMC para ASP.NET 10 < > Programación 1.1.6.1 Herramienta Registro de IIS en ASP.NET (Aspnet_regiis.exe) Cuando se ejecutan varias versiones de .NET Framework simultáneamente en un único equipo, la versión de las API de servidor de Internet (ISAPI) de ASP.NET asignada a una aplicación ASP.NET determina qué versión de Common Language Runtime (CLR) se utiliza para la aplicación. La herramienta Registro de IIS en ASP.NET (Aspnet_regiis.exe) permite que un programa administrador o de instalación pueda actualizar fácilmente las asignaciones de secuencias de comandos de una aplicación ASP.NET para que señalen la versión de ISAPI (API de servidor de Internet) de ASP.NET asociada a la herramienta. Esta herramienta también se puede utilizar para mostrar el estado de todas las versiones de ASP. NET instaladas, para registrar la versión de ASP.NET que se corresponde con la herramienta, para crear directorios de secuencias de comandos de cliente y para realizar otras operaciones de configuración. 1.1.6.2 Complemento MMC para ASP.NET MMC aloja herramientas administrativas que puede utilizar para administrar equipos, servicios, otros componentes del sistema y redes. Se puede agregar una o varias de estas herramientas administrativas, denominados complementos, a la consola para administrar una aplicación Web. La herramienta Complemento de ASP.NET para Microsoft Management Console (MMC) proporciona una interfaz de usuario (UI) única para configurar servidores Web y las aplicaciones que alojan. Incluye varios cuadros de diálogo que permiten administrar características específicas, como por ejemplo, control de errores personalizado o autenticación de usuario. 1.2 Desarrollo de aplicaciones Web 1.2.1 Crear Formas Web 1.2.1.1 Para crear un sitio web del sistema de archivos 1. Abra Microsoft Visual Studio o Microsoft Visual Web Developer Express. 2. En el menú Archivo, haga clic en Nuevo sitio Web. a. Aparecerá el cuadro de diálogo Nuevo sitio web tal y como se muestra en la Figura 1.2: 11 < > Programación Figura 1.2 3. En Plantillas instaladas, haga clic en Visual Basic o en C# y, a continuación, seleccione Sitio web ASP.NET. a. Cuando se crea un proyecto de sitio web, se especifica una plantilla. Cada plantilla crea un proyecto web que contiene diferentes archivos y carpetas. En este tutorial, creará un sitio web basado en la plantilla Sitio web ASP.NET, que crea archivos y carpetas que normalmente se usan en sitios web ASP.NET. 4. En el cuadro Ubicación web, seleccione Sistema de archivos y, a continuación, escriba el nombre de la carpeta en la que desea guardar las páginas del sitio web. a. Por ejemplo, escriba el nombre de carpeta C:\BasicWebSite. 5. Haga clic en Aceptar. Visual Studio crea un proyecto web que incluye la funcionalidad preintegrada para el diseño (una página maestra, las páginas de contenido About.aspx y Default.aspx y una hoja de estilos en cascada), para Ajax (archivos de script de cliente) y para la autenticación (pertenencia de ASP.NET). Cuando se crea una nueva página, Visual Web Studio muestra de forma predeterminada la página en la vista Código, donde se pueden ver los elementos HTML de la página. En la Figura 1.3 se muestra la vista Código fuente de una página web. 12 < > Programación Figura 1.3 1.2.1.2 Para agregar una página al sitio Web 1. Cierre la página Default.aspx. Para ello, haga clic con el botón secundario en la pestaña que muestra el nombre del archivo y, a continuación, haga clic en Cerrar. 2. En el Explorador de soluciones, haga clic con el botón secundario en el sitio web, (por ejemplo, C:\ BasicWebSite) y, a continuación, haga clic en Agregar nuevo elemento. Se abrirá el cuadro de diálogo Agregar nuevo elemento. En la figura 1.4 se muestra un ejemplo del cuadro de diálogo Agregar nuevo elemento: 13 < > Programación Figura 1.4 3. En la lista de plantillas, seleccione Formulario Web Forms. 4. En el cuadro Nombre, escriba FirstWebPage. a. Cuando creó el proyecto de sitio web, especificó un lenguaje predeterminado basado en la plantilla de proyecto que seleccionó. Sin embargo, cada vez que se crea una página o un componente nuevo para el sitio web, se puede seleccionar el lenguaje de programación para esa página o componente. Puede utilizar diferentes lenguajes de programación en el mismo sitio Web. 5. Desactive la casilla Colocar el código en un archivo independiente. a. A continuación crearemos una página de un sólo archivo con código y HTML en la misma página. El código para las páginas ASP.NET se puede ubicar en la página o en un archivo de clase independiente. 6. Haga clic en Agregar. Visual Studio crea la nueva página y la abre. 14 < > Programación 1.2.1.3 Para agregar texto a la página 1. En la parte inferior de la ventana de documento, haga clic en la ficha Diseño para pasar a la vista Diseño. a. La Vista de diseño muestra la página en la que se está trabajando en modo WYSIWYG. En este momento, no hay texto ni controles en la página, por lo que está en blanco, aparte de una línea discontinua que forma un rectángulo. Este rectángulo representa un elemento div en la página. 2. Haga clic en el interior del rectángulo formado por la línea discontinua. 3. Escriba “Welcome to Visual Web Developer” y, a continuación, presione ENTRAR dos veces. La Figura 1.5 muestra el texto que escribió en la Vista de diseño. Figura 1.5 4. Cambie a la vista Código fuente. Puede ver el código HTML que ha creado escribiendo en la Vista de diseño, como se muestra en la Figura 1.6. 15 < > Programación Figura 1.6 1.2.2 Agregar y configurar controles de servidor en Formas Web Ahora agregará controles de servidor a la página. Los controles de servidor, entre los que se incluyen botones, etiquetas, cuadros de texto y otros controles familiares, proporcionan las funciones típicas de procesamiento de formularios para las páginas Web ASP.NET. Sin embargo, puede programar los controles con código que se ejecuta en el servidor, no el cliente. Agregará a la página un control Button, un control TextBox y un control Label y escribirá código para controlar el evento Click para el control Button. 16 < > Programación 1.2.2.1 Para agregar controles a la página 1. Haga clic en la pestaña Diseño para cambiar a la Vista de diseño. 2. Sitúe el punto de inserción al final del texto “Welcome to Visual Web Developer” y presione ENTRAR al menos cinco veces para ampliar el espacio del cuadro del elemento div. 3. En el Cuadro de herramientas, expanda el grupo Estándar. 4. Arrastre un control TextBox hasta la página y colóquelo en el centro del cuadro del elemento div con el texto “Welcome to Visual Web Developer” en la primera línea. 5. Arrastre un control Button hasta la página y colóquelo a la derecha del control TextBox. 6. Arrastre un control Label hasta la página y colóquelo en una línea independiente debajo del control Button. 7. Sitúe el punto de inserción encima del control TextBox y, a continuación, escriba el texto “Escriba su nombre:”. 8. Este texto HTML estático es el título del control TextBox. Puede mezclar HTML estático y controles de servidor en la misma página. La Figura 1.7 muestra cómo aparecen los tres controles en la Vista de diseño. Figura 1.7 17 < > Programación 1.2.2.2 Para establecer las propiedades de los controles 1. Seleccione el control Button y después, en la ventana Propiedades, establezca Text en Display Name. El texto que escribió aparece en el botón en el diseñador, tal y como se muestra en la Figura 1.8. Figura 1.8 2. Cambie a la vista Código fuente. En la vista Código, se muestra el código HTML de la página, incluidos los elementos que Visual Studio ha creado para los controles de servidor. Los controles se declaran utilizando sintaxis de tipo HTML, con la excepción de que las etiquetas utilizan el prefijo asp: e incluyen el atributo runat=”server”. Las propiedades del control se declaran como atributos. Por ejemplo, cuando estableció la propiedad Text del control Button en el paso 1, en realidad estableció el atributo Text del marcado del control. Observe que todos los controles están dentro de un elemento form, que también tiene el atributo runat=”server”. El atributo runat=”server” y el prefijo asp: de las etiquetas de los controles marcan los controles para que ASP.NET los procese en el servidor cuando se ejecuta la página. El código que se encuentra fuera de los elementos <form runat=”server”> y <script runat=”server”> se envía sin cambios al explorador; este es el motivo por el que el código ASP. NET debe estar dentro de un elemento cuya etiqueta de apertura contiene el atributo runat=”server”. 3. Sitúe el punto de inserción detrás de asp:Label en la etiqueta <asp:Label> y, a continuación, presione la BARRA ESPACIADORA. Aparece una lista desplegable que muestra las propiedades que se pueden establecer para un control Label. Esta característica, denominada IntelliSense, ayuda en la vista Código fuente con la sintaxis de los controles de servidor, los elementos HTML y otros elementos de la página. La Figura 1.9 muestra la lista desplegable de IntelliSense para el control Label. 18 < > Programación Figura 1.9 4. Seleccione ForeColor y, a continuación, escriba un signo igual y comillas (=”). IntelliSense muestra una lista de colores. 5. Seleccione un color para el texto del control Label. Asegúrese de seleccionar un color suficientemente oscuro para que se pueda leer el texto sobre un fondo de color blanco. El atributo ForeColor se completa con el color que ha seleccionado, incluidas las comillas de cierre. 1.2.2.3 Para agregar un controlador de eventos de botón predeterminado 1. Cambie a la Vista de diseño. 2. Haga doble clic en el control Button. Visual Studio cambia a la vista Código y crea un esquema del controlador de eventos para el evento predeterminado del control Button, es decir, el evento Click. 3. Dentro del controlador, escriba Label1 seguido de un punto (.). 19 < > Programación Cuando se escribe un punto después de Label, Visual Studio muestra una lista de los miembros disponibles para el control Label, tal como se muestra en la Figura 1.10. Figura 1.10 4. Complete el controlador de eventos Click para el botón de manera que tenga el aspecto mostrado en el ejemplo de código siguiente C# protected void Button1_Click(object sender, System.EventArgs e) { Label1.Text = TextBox1.Text + “, welcome to Visual Studio!”; } 5. Desplácese hasta el elemento <asp:Button>. Observe que el elemento <asp:Button> tiene ahora el atributo onclick=”Button1_Click”. 20 < > Programación Este atributo enlaza el evento Click del botón al método controlador que codificó en el paso anterior. Los métodos de control de eventos pueden tener cualquier nombre; el nombre que se ve es el nombre predeterminado creado por Visual Studio. Lo importante es que el nombre utilizado para el atributo onclick debe coincidir con el nombre de un método de la página. 1.2.3 Trabajar con archivos de código adjunto 1.2.4 Manejo de eventos Cuando trabajas con controles de servidor en una página Web ASP.NET, mucha de la lógica de la página implica responder a los eventos provocados por controles. Una característica importante de ASP.NET es que permite programar páginas Web utilizando un modelo basado en eventos similar al de las aplicaciones de cliente. Sólo que los eventos producidos por los controles de servidor ASP.NET funcionan de manera diferente a los eventos de las páginas HTML tradicionales. La diferencia se basa principalmente en la separación existente entre el propio evento y el lugar donde se controla el evento. En las aplicaciones basadas en cliente, los eventos se producen y controlan en el cliente y en las páginas Web ASP.NET, los eventos asociados a los controles de servidor se originan en el cliente (explorador) pero los controla la página ASP.NET en el servidor Web. ASP.NET controla la tarea de capturar, transmitir e interpretar el evento. Al crear controladores de eventos en una página Web ASP.NET, no es necesario saber capturar la información del evento y hacer que esté disponible para el código. En cambio, se pueden crear controladores de eventos casi de la misma forma que en un formulario de cliente tradicional. 1.2.4.1 Conjunto de eventos para controles de servidor y páginas Debido a que los eventos de controles de servidor ASP.NET requieren un viaje de ida y vuelta al servidor para procesarse, pueden afectar al rendimiento de una página. Por lo tanto, los controles de servidor ofrecen un conjunto limitado de eventos, normalmente sólo de tipo clic. Los eventos que tienen lugar con frecuencia (y que pueden provocarse sin que el usuario lo sepa), como onmouseover, no se pueden usar en los controles de servidor. Los controles de servidor ASP.NET siguen pudiendo llamar a los controladores de cliente para esos eventos. 21 < > Programación 1.2.4.2 Argumentos de eventos Los eventos de los controles y de páginas ASP.NET siguen un modelo de .NET Framework estándar para los métodos de controladores de eventos. Todos los eventos pasan dos argumentos: un objeto que representa al objeto que ha provocado el evento, y un objeto evento que contiene la información específica del evento. El segundo argumento suele ser de tipo EventArgs, pero para algunos controles es de un tipo específico de dicho control. Por ejemplo, para un control ImageButton de servidor Web, el segundo argumento es de tipo ImageClickEventArgs, que incluye información sobre las coordenadas donde el usuario ha hecho clic. 1.2.5 Controles de validación Los controles de validación proporcionan un mecanismo fácil de utilizar para todos los tipos comunes de validación estándar (por ejemplo, probar fechas válidas o valores comprendidos en un intervalo), además de otras formas para proporcionar validación escrita personalizada. Se pueden utilizar con cualquier control que se coloque en una página Web ASP.NET, incluidos los controles HTML y de servidor Web. Estos controles llevan a cabo la validación (Validation controls) en el servidor. También es posible validar en el cliente gracias a código JavaScript y, en muchas ocasiones, ello puede ser válido para nuestros propósitos, pero la validación en el servidor es necesaria para tareas más complejas en las que la seguridad adquiere mayor importancia, y Asp .NET tiene un mecanismo sencillo para realizarla. Los Validation controls de Asp .NET permiten: • Capturar y validar cualquier cosa enviada por el usuario desde un formulario Web • Personalizar los avisos de error cuando los datos no pasan la validación • Escribir validaciones personalizadas de acuerdo a nuestras preferencias Todos los Validation controls son controles Web, se ejecutan en el servidor y generan HTML que es enviado al cliente. La sintaxis básica es similar en todos aunque hay diferencias en las propiedades que admiten, según el tipo de control. 1.2.5.1 Utilizar controles de validación Los controles de validación más comunes son los siguientes: CompareValidator: Compara un control de entrada de datos con otro, un valor fijo, un tipo de datos o un archivo. Por ejemplo, este control puede utilizarse para campos de verificación de contraseñas. CustomValidator: Nos permite escribir nuestro propio código para crear la expresión de validación. Por ejemplo, este control puede utilizarse para verificar que el valor es un número primo. 22 < > Programación RangeValidator: Verifica que la entrada de datos de usuario esta entre dos valores o los valores de otros controles de entrada de datos. Por ejemplo, este control puede utilizarse para verificar que la entrada del usuario coincide con el intervalo de edad esperado. RegularExpressionValidator: Verifica que la entrada coincide con un modelo definido por una expresión habilitar. Este control de validación permite comprobar secuencias predecibles de caracteres, como números de la seguridad social, direcciones electrónicas, número de teléfono y códigos postales. RequiredFieldValidator: Comprueba si se ha introducido un valor en un control. Es el único control de validación que requiere un valor. ValidationSummary: Muestra un resumen de todos los errores de validación para todos los controles de validación de la página. Este control se ubica normalmente cerca del botón Submit para proporcionar respuesta inmediata sobre el estado de entrada de datos de la página. 1.2.6 Depuración en aplicaciones web Depurar las aplicaciones Web de ASP.NET es similar a depurar un formulario Windows Forms o cualquier otra aplicación para Windows porque ambos tipos de aplicación implican controles y eventos. No obstante, hay también diferencias básicas entre ambos tipos de aplicación: El seguimiento del estado es más complejo en una aplicación Web. En una aplicación para Windows, el código que se va a depurar está principalmente en un solo lugar; en una aplicación Web, el código puede estar en el cliente y en el servidor. El código de ASP.NET está completamente en el servidor, si bien también puede haber código de JavaScript o Visual Basic en el cliente. 1.3 Acceso a datos desde aplicaciones web 1.3.1 Introducción a ADO.NET ADO.NET es un conjunto de componentes del software que pueden ser usados por los programadores para acceder a datos y a servicios de datos. Es una parte de la biblioteca de clases base que están incluidas en el Microsoft .NET Framework. Es comúnmente usado por los programadores para acceder y para modificar los datos almacenados en un Sistema Gestor de Bases de Datos Relacionales, aunque también puede ser usado para acceder a datos en fuentes no relacionales. 1.3.2 Controles de acceso a datos La mayoría de las aplicaciones Web ASP.NET implican el acceso a datos. Muchas aplicaciones recogen datos para almacenarlos en una base de datos o en un archivo y, a menudo, se basan en información procedente de los usuarios. Puesto que los datos originales pueden proceder de orígenes que no son de confianza (ya que la informa- 23 < > Programación ción se almacena en un formato permanente) y hay que asegurarse de que los usuarios no autorizados no puedan obtener acceso al origen de datos directamente, es necesario prestar especial atención a los problemas de seguridad relacionados con el acceso a datos. Aunque se puede mejorar la seguridad de la aplicación siguiendo las buenas prácticas en materia de codificación y configuración, también es importante mantener actualizado el servidor Web con las últimas actualizaciones de seguridad de Microsoft Windows e Internet Information Services (IIS), así como las actualizaciones de seguridad de Microsoft SQL Server o cualquier otro software de base de datos. 1.3.2.1 Proteger el acceso a un origen de datos Las secciones siguientes proporcionan información sobre cómo ayudar a proteger diferentes aspectos del acceso a datos. 1.3.2.2 Cadenas de conexión Para conectar con una base de datos, se necesita una cadena de conexión. Puesto que las cadenas de conexión pueden contener datos confidenciales, se deben seguir estas instrucciones: • No almacenes cadenas de conexión en ninguna página. Almacénelas en el archivo Web.config del sitio. • No almacenes cadenas de conexión como texto sin formato. Para proteger la conexión al servidor de bases de datos, se recomienda cifrar la información de la cadena de conexión del archivo de configuración mediante la configuración protegida. Conexión a bases de datos 1.3.3 Administrar información de la base de datos desde una aplicación web Si es posible, conéctate a una instancia de SQL Server utilizando la seguridad integrada en lugar de un nombre de usuario explícito y una contraseña. De esta forma, se evita la posibilidad de comprometer la integridad de la cadena de conexión y de exponer el identificador de usuario y la contraseña. Se recomienda que te asegures de que la identidad del proceso (por ejemplo, la agrupación de aplicaciones) que está ejecutando ASP.NET sea la cuenta de proceso predeterminada o una cuenta de usuario restringida. En los casos en los que distintos sitios Web conectan con diversas bases de datos de SQL Server, puede que no resulte práctico utilizar la seguridad integrada. Por ejemplo, en los sitios de alojamiento Web, se suele asignar a cada cliente una base de datos de SQL Server diferente, pero todos utilizan el servidor Web como usuarios anónimos. En estos casos, debe utilizar credenciales explícitas para conectarse a una instancia de SQL Server. 24 < > Programación 1.3.3.1 Permisos de base de datos de SQL Server Se recomienda asignar los privilegios mínimos al identificador de usuario que se utiliza para la conexión a las bases de datos de SQL Server usadas en la aplicación. 1.3.3.2 Restringir las operaciones de SQL Los controles enlazados a datos pueden admitir una gran variedad de operaciones con datos como selección, inserción, eliminación y actualización de registros en las tablas de datos. Se recomienda configurar los controles de datos para realizar la funcionalidad mínima necesaria de la página o aplicación. Por ejemplo, si un control no debe permitir a los usuarios que eliminen datos, no incluya una consulta Delete con un control de origen de datos y no permita eliminación en el control. 1.3.3.3 SQL Server Express Para asociar un proceso a una base de datos de SQL Server Express (archivo .mdf), debe tener permisos de administrador. En general, esta es la razón por la que las bases de datos de SQL Server Express no son prácticas para la creación de sitios Web, ya que el proceso de ASP.NET no se ejecuta (ni se debe ejecutar) con privilegios administrativos. Por consiguiente, utilice las bases de datos de SQL Server Express sólo en los siguientes casos: Como base de datos de prueba al desarrollar la aplicación Web. Cuando estés listo para implementar la aplicación, puede transferir la base de datos de SQL Server Express a una instancia de producción de SQL Server. Utilízalas si estás ejecutando un sitio Web que permita la suplantación y pueda controlar los privilegios del usuario suplantado. En la práctica, esta estrategia es conveniente si la aplicación se está ejecutando en una red de área local (no en un sitio Web público). Almacena el archivo .mdf en la carpeta App_Data del sitio porque el contenido de la carpeta no se devolverá para enviar solicitudes HTTP. También debes asignar la extensión .mdf a ASP.NET en IIS y al controlador HttpForbiddenHandler en ASP.NET mediante el siguiente elemento en el archivo Web.config del sitio: “<httpHandlers>” “ <add verb=”*” path=”*.mdf” type=”System.Web.HttpForbiddenHandler” />” “</httpHandlers>” 25 • Conocer las capacidades básicas del lenguaje de programación PHP. • Conocer la sintaxis del lenguaje, tipos de datos y su manejo en PHP, operadores y expresiones, estructuras de control y funciones. • Trabajar con pequeñas funciones que permitan manipular datos. • Realizar aplicaciones web sencillas centradas en el uso de formularios. < > Programación 2 Introducción a PHP PHP (acrónimo de PHP: Hypertext Preprocessor) es un lenguaje de código abierto especialmente adecuado para desarrollo web y que puede ser incrustado en HTML. PHP nos permite embeber sus pequeños fragmentos de código dentro de la página HTML y realizar determinadas acciones de una forma fácil y eficaz, combinando lo que ya sabemos del desarrollo HTML. Es decir, con PHP escribimos scripts dentro del código HTML. 2.1 Sintaxis Básica de PHP 2.1.3.1 Etiquetas de PHP Cuando PHP interpreta un archivo, busca las etiquetas de apertura y cierre, que son: <?php inicializa ?> finaliza la interpretación del código. Este mecanismo permite a PHP ser incrustado en todo tipo de documentos, ya que todo lo que esté fuera de las etiquetas de PHP será ignorado por el intérprete. Ejemplo <?php echo “Hola mundo”; // ... más código echo «Última sentencia»; // el script finaliza aquí sin etiqueta de cierre de PHP 27 < > Programación 2.1.3.2 Separación de instrucciones PHP requiere que las instrucciones terminen en punto y coma al final de cada sentencia. <?php echo ‘Esto es una prueba’; ?> <?php echo ‘Esto es una prueba’ ?> <?php echo ‘Hemos omitido la última etiqueta de cierre’; Nota: La etiqueta de cierre de un bloque de PHP es opcional al final de un archivo 2.1.1 Declaración y uso de variables En PHP las variables se representan con un signo de dólar seguido por el nombre de la variable. El nombre de la variable es sensible a minúsculas y mayúsculas. Un nombre de variable válido tiene que empezar con una letra o un carácter de subrayado seguido de cualquier número de letras, números y caracteres de subrayado. Ejemplo: <?php $var1 = ‘Roberto’; $Var2 = ‘Juan’; echo “$var1, $Var2”; $4site = ‘aun no’; $_4site = ‘aun no’; // imprime “Roberto, Juan” // inválido; comienza con un número // válido; comienza con un carácter de subrayado $täyte = ‘mansikka’; // válido; ‘ä’ es ASCII (Extendido) 228 ?> 28 < > Programación 2.1.2 Operadores Los operadores se pueden agrupar de acuerdo con el número de valores que toman. Los operadores unarios toman sólo un valor, por ejemplo ! (el operador lógico de negación) o ++ (el operador de incremento). Los operadores binarios toman dos valores, como los familiares operadores aritméticos + (suma) y - (resta), y la mayoría de los operadores de PHP entran en esta categoría. Finalmente, hay sólo un operador ternario, “? :”, el cual toma tres valores y podríamos interpretarlo de la forma siguiente: condición ? valorSiEsVerdadero : valorSiEsFalso Un ejemplo sería: <?php $mensaje = ($dinero > 10) ? ‘Me puedo ir al cine!’ : ‘Me tengo que quedar en casa’; ?> 2.1.2.1 Operadores aritméticos Ejemplo Nombre Negación Suma Resta Multiplicación División Módulo -$a $a + $b $a - $b $a * $b $a / $b $a % $b Resultado Opuesto de $a Suma de $a y $b Resta de $a y $b Multiplicación de $a y $b División de $a y $b Residuo de $a dividido entre $b El operador de división (“/”) devuelve un valor flotante a menos que los dos operandos sean int (o strings que se conviertan a int) y los números sean divisibles, en cuyo caso será devuelto un valor int. Los operandos del módulo se convierten en int (por extracción de la parte decimal) antes del procesamiento. El resultado del operador módulo % tiene el mismo signo que el dividendo — es decir, el resultado de $a % $b tendrá el mismo signo que $a. Por ejemplo: <?php 29 echo (5 % 3).”\n”; // muestra 2 echo (5 % -3).”\n”; // muestra 2 echo (-5 % 3).”\n”; // muestra -2 < > Programación echo (-5 % -3).”\n”; // muestra -2 ?> 2.1.2.2 Operadores de asignación El operador básico de asignación es “=”. Se podría inclinar a pensar primero que es como un “igual a”. No lo es. Realmente significa que el operando de la izquierda se establece con el valor de la expresión de la derecha (es decir, “se define como”). El valor de una expresión de asignación es el valor asignado. Es decir, el valor de “$a = 3” es de 3. Esto permite hacer algunas cosas intrincadas: <?php $a = ($b = 4) + 5; // ahora $a es igual a 9 y $b se ha establecido en 4. ?> 2.1.2.3 Operadores bit a bit Los operadores bit a bit permiten la evaluación y la manipulación de bits específicos dentro de un integer. Ejemplo $a & $b $a | $b $a ^ $b ~ $a $a << $b $a >> $b 30 Nombre Resultado AND (Y) Los bits que están activos en ambos $a y $b son activados OR (O inclusivo) Los bits que están activos ya sea en $a o $b son activados XOR (O exclusivo) Los bits que están activos en $a o en $b , pero no en ambos son activados NOT (No) Los bits que están activos en $a son desactivados y viceversa SHIFT LEFT (desplazamiento a la Desplaza los bits de $a, $b pasos izquierda) a la izquierda (cada paso quiere decir “multiplicar por dos”) SHIFT RIGHT (desplazamiento a la Desplaza los bits de $a, $b pasos derecha) a la derecha (cada paso quiere decir “dividir por dos”) < > Programación 2.1.2.4 Operadores de comparación Los operadores de comparación, como su nombre lo indica, permiten comparar dos valores. Puede también estar interesado en ver las tablas de comparación de tipos, ya que muestran ejemplos de las varias comparaciones relacionadas con tipos. Ejemplo $a == $b Nombre Igual $a === $b $a != $b Idéntico Diferente $a <> $b Diferente $a != =$b No idéntico $a < $b $a > $b $a <= $b $a >= $b Menor que Mayor que Menor o igual que Mayor o igual que Resultado TRUE si $a es igual a $b después de la manipulación de tipos TRUE si $a es igual a $b, y son del mismo tipo TRUE si $a no es igual a $b después de la manipulación de tipos TRUE si $a no es igual a $b después de la manipulación de tipos TRUE si $a no es igual a $b, o si no son del mismo tipo TRUE si $a es estrictamente menor que $b TRUE si $a es estrictamente mayor que $b TRUE si $a es menor o igual que $b TRUE si $a es mayor o igual que $b Si se compara un número con un string o la comparación implica strings numéricos, entonces cada string es convertido en un número y la comparación realizada numéricamente. Estas reglas también se aplican a la sentencia switch. La conversión de tipo no tiene lugar cuando la comparación es === o !== ya que esto involucra comparar el tipo así como el valor. Ejemplo: <?php var_dump(0 == “a”); // 0 == 0 -> true var_dump(“1” == “01”); // 1 == 1 -> true var_dump(“10” == “1e1”); // 10 == 10 -> true var_dump(100 == “1e2”); // 100 == 100 -> true switch (“a”) { case 0: echo “0”; break; 31 < > Programación case “a”: // nunca alcanzado debido a que “a” ya ha coincidido con 0 echo “a”; break; } ?> 2.1.3 Estructuras de control Todo script PHP está construido en base a una serie de sentencias. Una sentencia puede ser una asignación, una llamada de función, un ciclo, una sentencia condicional o incluso una sentencia que no hace nada (una sentencia vacía). Las sentencias generalmente finalizan con un punto y coma. Adicionalmente, las sentencias pueden agruparse en un conjunto de sentencias, encapsulándolas entre corchetes. Un grupo de sentencias es una sentencia por sí misma también. 2.1.3.1 if Permite la ejecución condicional de fragmentos de código. PHP dispone de una estructura if que es similar a la de C: if (expr) sentencia la expresión es evaluada a su valor booleano. Si la expresión se evalúa como TRUE, PHP ejecutará la sentencia y si se evalúa como FALSE la ignorará. El siguiente ejemplo mostraría a es mayor que b si $a es mayor que $b: <?php if ($a > $b) { echo “a es mayor que b”; } ?> 32 < > Programación A menudo se desea tener más de una sentencia para ser ejecutada condicionalmente. Por supuesto, no hay necesidad de envolver cada sentencia con una cláusula if. En cambio, se pueden agrupar varias sentencias en un grupo de sentencias. Por ejemplo, este código mostraría a es mayor que b si $a es mayor que $b y entonces asignaría el valor de $a a $b: <?php if ($a > $b) { echo “a es mayor que b”; $b = $a; } ?> 2.1.3.2 else Con frecuencia si deseas ejecutar una sentencia si una determinada condición se cumple y una sentencia diferente si la condición no se cumple. Esto es para lo que sirve else. El else extiende una sentencia if para ejecutar una sentencia en caso que la expresión en la sentencia if se evalúe como FALSE. Por ejemplo, el siguiente código deberá mostrar a es mayor que b si $a es mayor que $b y a NO es mayor que b en el caso contrario: <?php if ($a > $b) { echo “a es mayor que b”; } else { echo “a NO es mayor que b”; } ?> La sentencia else sólo es ejecutada si la expresión if es evaluada como FALSE. 33 < > Programación 2.1.3.3 elseif / else if elseif, como su nombre lo sugiere, es una combinación de if y else. Del mismo modo que else, extiende una sentencia if para ejecutar una sentencia diferente en caso que la expresión if original se evalúe como FALSE. Sin embargo, a diferencia de else, esa expresión alternativa sólo se ejecutará si la expresión condicional del elseif se evalúa como TRUE. Por ejemplo, el siguiente código debe mostrar a es mayor que b, a es igual que b o a es menor que b: <?php if ($a > $b) { echo “a es mayor que b”; } elseif ($a == $b) { echo “a es igual que b”; } else { echo “a es menor que b”; } ?> Puede haber varios elseif dentro de la misma sentencia if. La primera expresión elseif (si hay alguna) que se evalúe como TRUE sería ejecutada. En PHP también se puede escribir ‘else if’ (en dos palabras) y el comportamiento sería idéntico al de ‘elseif’ (en una sola palabra). La sentencia elseif es ejecutada solamente si la expresión if precedente y cualquiera de las expresiones elseif precedentes son evaluadas como FALSE, y la expresión elseif actual se evalúa como TRUE. 2.1.3.4 while Los ciclos while son el tipo más sencillo de ciclo en PHP. La forma básica de una sentencia while es: while (expr) sentencia El significado de una sentencia while es simple. Le dice a PHP que ejecute las sentencias anidadas, mientras que la expresión while se evalúe como TRUE. El valor de la expresión es verificado cada vez al inicio del ciclo, por lo que incluso si este valor cambia durante la ejecución de las sentencias anidadas, la ejecución no se detendrá hasta el final de la iteración (cada vez que PHP ejecuta las sentencias contenidas en el ciclo es una iteración). 34 < > Programación A veces, si la expresión while se evalúa como FALSE desde el principio, las sentencias anidadas no se ejecutarán ni siquiera una vez. Al igual que con la sentencia if, se pueden agrupar varias instrucciones dentro del mismo ciclo while rodeando un grupo de sentencias con corchetes, o utilizando la sintaxis alternativa: while (expr): sentencias ... end while; Los siguientes ejemplos son idénticos y ambos presentan los números del 1 al 10: <?php /* ejemplo 1 */ $i = 1; while ($i <= 10) { echo $i++; /* el valor presentado sería $i antes del incremento (post-incremento) */ } /* ejemplo 2 */ $i = 1; while ($i <= 10): echo $i; $i++; endwhile; ?> 35 < > Programación 2.1.3.5 do-while Los ciclos do-while son muy similares a los ciclos while, excepto que la expresión verdadera es verificada al final de cada iteración en lugar de al principio. La diferencia principal con los ciclos while es que está garantizado que corra la primera iteración de un ciclo do-while (la expresión verdadera sólo es verificada al final de la iteración), mientras que no necesariamente va a correr con un ciclo while regular (la expresión verdadera es verificada al principio de cada iteración, si se evalúa como FALSE justo desde el comienzo, la ejecución del ciclo terminaría inmediatamente). Hay una sola sintaxis para ciclos do-while: <?php $i = 0; do { echo $i; } while ($i > 0); ?> El ciclo de arriba se ejecutaría exactamente una sola vez, ya que después de la primera iteración, cuando la expresión verdadera es verificada, se evalúa como FALSE ($i no es mayor que 0) y termina la ejecución del ciclo. 2.1.3.6 for Los ciclos for son los más complejos en PHP. Se comportan como sus homólogos en C#. La sintaxis de un ciclo for es: for (expr1; expr2; expr3) sentencia La primera expresión (expr1) es evaluada (ejecutada) una vez incondicionalmente al comienzo del ciclo. En el comienzo de cada iteración, se evalúa expr2. Si se evalúa como TRUE, el ciclo continúa y se ejecutan la(s) sentencia(s) anidada(s). Si se evalúa como FALSE, finaliza la ejecución del ciclo. Al final de cada iteración, se evalúa (ejecuta) expr3. Cada una de las expresiones puede estar vacía o contener múltiples expresiones separadas por comas. En expr2, todas las expresiones separadas por una coma son evaluadas, pero el resultado se toma de la última parte. Que expr2 esté vacía significa que el ciclo debería ser corrido indefinidamente (PHP implícitamente lo considera como TRUE, como en C). 36 < > Programación Ejemplo. Muestra los números del 1 al 10: <?php for ($i = 1; $i <= 10; $i++) { echo $i; } 2.1.4 Arreglos Un arreglo es realmente un mapa ordenado. Un mapa es un tipo de datos que asocia valores con claves. Este tipo es optimizado para varios usos diferentes; puede ser usado como una matriz real, una lista (vector), una tabla asociativa (una implementación de un mapa), diccionario, colección, pila, cola, y posiblemente más. Ya que los valores de un arreglo pueden ser otros arreglos, árboles y también son posibles arreglos multidimensionales. Sintaxis: Especificación con array() Un arreglo puede ser creado usando el constructor del lenguaje array(). Éste toma un cierto número de parejas clave => valor como argumentos. array( clave => valor, clave2 => valor2, clave3 => valor3, ... ) La coma después del elemento del arreglo es opcional y se puede omitir. Esto normalmente se hace para arreglos de una sola línea, esto es, es preferible array(1, 2) que array(1, 2, ). Por otra parte, para arreglos multilínea, la coma final se usa comúnmente, ya que permite la adición sencilla de nuevos elementos al final. Ejemplo #1: Un arreglo simple <?php $array = array( “foo” => “bar”, “bar” => “foo”, ); 37 < > Programación 2.1.5 Funciones La función podría ser definida como un conjunto de instrucciones que explotan ciertas variables para realizar una tarea más o menos elemental. PHP basa su eficacia principalmente en este tipo de elemento. Una gran librería que crece constantemente, a medida que nuevas versiones van surgiendo, es complementada con las funciones de propia cosecha dando como resultado un sinfín de recursos que son aplicados por una simple llamada. Las funciones integradas en PHP son muy fáciles de utilizar. Tan sólo hemos de realizar la llamada de la forma apropiada y especificar los parámetros y/o variables necesarios para que la función realice su tarea. Lo que puede parecer ligeramente más complicado, pero que resulta sin lugar a dudas muy práctico, es crear nuestras propias funciones. De una forma general, podríamos crear nuestras propias funciones para conectarnos a una base de datos o crear los encabezados o etiquetas meta de un documento HTML. Para una aplicación de comercio electrónico podríamos crear por ejemplo funciones de cambio de una moneda a otra o de cálculo de los impuestos a añadir al precio de artículo. En definitiva, es interesante crear funciones para la mayoría de acciones más o menos sistemáticas que realizamos en nuestros programas. Un esqueleto típico de una función es: function outputcol($strCadena, $strColor) { // Saca una cadena con el color deseado Echo(“<FONT COLOR=”#$strColor”>$strCadena</FONT>”); } Y se llama con: outputcol(“Rojo”, “FF0000”); outputcol(“Verde”, “00FF00”); Dando el resultado: <FONT COLOR=”#FF0000”>Rojo</FONT> <FONT COLOR=”#00FF00”>Verde</FONT> 38 < > Programación 2.1.6 Incluir funciones en un script Un script es un conjunto de instrucciones generalmente almacenadas en un archivo de texto que deben ser interpretados línea a línea en tiempo real para su ejecución, se distinguen de los programas, pues deben ser convertidos a un archivo binario ejecutable para correrlos. Los scripts pueden estar embebidos en otro lenguaje para aumentar las funcionalidades de este, como es el caso los scripts PHP o Javascript en código HTML. Aquí daremos el ejemplo de creación de una función que, llamada al comienzo de nuestro script, nos crea el encabezado de nuestro documento HTML y coloca el título que queremos a la página: <? function hacer_encabezado($titulo) { $encabezado=”<html><head>t<title>$titulo</title></head>”; echo $encabezado; } ?> Esta función podría ser llamada al principio de todas nuestras páginas de la siguiente forma: $titulo=”Mi web”; hacer_encabezado($titulo); De esta forma automatizamos el proceso de creación de nuestro documento. Podríamos por ejemplo incluir en la función otras variables que nos ayudasen a construir la etiquetas meta y de esta forma, con un esfuerzo mínimo, crearíamos los encabezados personalizados para cada una de nuestras páginas. De este mismo modo nos es posible crear cierres de documento o formatos diversos para nuestros textos como si se tratase de hojas de estilo que tendrían la ventaja de ser reconocidas por todos los navegadores. Por supuesto, la función ha de ser definida dentro del script ya que no se encuentra integrada en PHP sino que la hemos creado nosotros. 39 < > Programación 2.2 Librerías de PHP 2.2.1 Funciones para trabajar con arreglos Algunas de las funciones más utilizadas y útiles con respecto a arreglos son: 2.2.1.1 array_diff Muestra las diferencias entre un arreglo y otro: $a = array( “hola”, “adios”, “como” ); $b = array( “hola”, “va”, “como” ); $dif = array_diff( $a, $b ); print_r($dif); mostrará algo asi: Array ( [1] => “adios” ) 2.2.1.2 array_search Buscará un valor específico en un arreglo y devuelve el índice si lo encuentra, por ejemplo: $a = array( 0 => “Justi”, 1 => “Thor”, 2 => “Debi” ); $key = array_search(’Debi’, $a); La variable $key va a tener valor 2. 40 < > Programación 2.2.1.3 in_array Es similar a la anterior pero en lugar de devolver el indice de la coincidencia, devuelve true o false. Por ejemplo: if ( in_array( “Justi”, $a ) ) { $cuerso = “php”; } A continuación mostramos una lista de otras funciones: Sort(): Nos permite ordenar los elementos de un array de un orden numérico o alfabético del siguiente modo: Primero los números, luego signos de puntuación y finalmente las letras. Asort(): Nos permite ordenar el array de índice de texto manteniendo el valor de sus índices. Rsort(): Igual que la función sort() con la diferencia de que el ordenamiento es a la inversa de dicha función. Arsort(): Idem que asort() con la diferencia de que el ordenamiento es en forma descendente. Ksort(): Ordena el arreglo de acuerdo con su índice. Krsort(): Opera de manera idéntica a la explicada anteriormente pero ordena el array de acuerdo a su índice con orden inverso. Shuffle(): Función que nos permite mezclar los elementos de un array. Range(): Con esta función definimos rapidamente un array definiendo un rango de elementos entre los dos parámetros de inicio y de fin. 2.2.2 Funciones para trabajar con cadenas A continuación le mostramos una lista de las 10 funciones más utilizadas con cadenas: Strtolower(string): Nos permite convertir una cadena a minúsculas, por ejemplo tenemos un libro de visitas donde no aceptamos mayúsculas, solo debemos usar esta función y pasará automáticamente todo el texto a minúsculas. Trim(string): Elimina los espacios en blanco al final y al inicio de una cadena. En caso de que solo queramos borrar los espacios al principio de la cadena usamos itrim() y en caso de que sea al final usaremos la 41 < > Programación función chop(), esto sirve para por ejemplo cuando se crea un usuario que el mismo no pueda contener espacios ni al principio ni al fin del mismo. Strlen(string): Función muy útil ya que nos permite saber la cantidad de caracteres que tiene una cadena con lo cual podríamos saber si supera el largo deseado. Chr(valor ascii): Recibe como parámetro un carácter ascii y devuelve su equivalente. Substr(“cadena original”, inicio_a_extraer, largo_a_extraer): Esta función nos permitirá extraer parte de una cadena la cual le es pasada como parámetro. Ereg(“busqueda”, “cadena”): Esta función nos permite buscar una cadena dentro de otra cadena y nos devolverá verdadero en caso de encontrarla por lo cual su utilización viene acompañada de un if. Eregi(“busqueda”, “cadena”): Igual que la anterior pero esta función no hace diferencias entre mayúsculas y minúsculas. Ereg_replace(“busqueda”, “reemplazo”, “cadena”): Esta función nos permite buscar una cadena dentro de otra y reemplazarla por la que hemos definido como segundo parámetro. Eregi_replace(“busqueda”, “reemplazo”, “cadena”): Funciona como la anterior pero no diferencia entre mayúsculas y minúsculas. Split(“separador”, “cadena”): Nos permite separar una cadena de caracteres con el valor que le pasamos como parámetro de separador. 2.2.3 Funciones para trabajar con fecha y hora Algunas de las funciones más utilizadas son las siguientes: checkdate — Validar una fecha gregoriana. date_default_timezone_get — Obtiene la zona horaria predeterminada usada por todas las funciones de fecha/hora en un script. date_default_timezone_set — Establece la zona horaria predeterminada usada por todas las funciones de fecha/hora en un script. 42 < > Programación 2.3 Creación de Formularios con PHP Otra de las características más importantes de PHP es que gestiona formularios HTML. El concepto básico que es importante entender es que cualquier elemento de los formularios estará disponible automáticamente en su código PHP. Ejemplo #1 Un formulario HTML simple <form action=”accion.php” method=”post”> <p>Su nombre: <input type=”text” name=”nombre” /></p> <p>Su edad: <input type=”text” name=”edad” /></p> <p><input type=”submit” /></p> </form> 2.3.1 Elementos de un formulario 2.3.1.1 TEXT Introduzca la cadena a buscar: <INPUT TYPE=”text” NAME=”cadena” VALUE=”valor por defecto” SIZE=”20”> <?PHP print ($cadena); //print ($_REQUEST [‘cadena’]); ?> El resultado dell código anterior se puede ver en la figura 2.1. Figura 2.1 43 < > Programación 2.3.1.2 RADIO <INPUT TYPE=”radio” NAME=”titulacion” VALUE=“II“ CHECKED>I.Informática <INPUT TYPE=”radio” NAME=”titulacion” VALUE=”ITIG”>I.T.I. Gestión <INPUT TYPE=”radio” NAME=”titulacion” VALUE=”ITIS”>I.T.I. Sistemas <?PHP print ($titulacion); //print ($_REQUEST [‘titulacion’]); ?> El resultado dell código anterior se puede ver en la figura 2.2. Figura 2.2 2.3.1.3 CHECKBOX <INPUT TYPE=”checkbox” NAME=”extras[]” VALUE=”garaje” CHECKED>Garaje <INPUT TYPE=”checkbox” NAME=”extras[]” VALUE=”piscina”>Piscina <INPUT TYPE=”checkbox” NAME=”extras[]” VALUE=”jardin”>Jardín <?PHP $n = count ($extras); for ($i=0; $i<$n; $i++) print (“$extras[$i]<BR>\n”); //foreach ($_REQUEST[‘extras’] as $extra) //print (“$extra<BR>\n”); ?> El resultado dell código anterior se puede ver en la figura 2.3. Figu 2.3 44 < > Programación 2.3.1.4 BUTTON <INPUT TYPE=”button” NAME=”nueva” VALUE=”Añadir una más”> <?PHP if ($nueva) print (“Se va a añadir una nueva”); //if ($_REQUEST [‘nueva’]) //print (“Se va a añadir una nueva”); ?> El resultado dell código anterior se puede ver en la figura 2.4. Figura 2.4 2.3.1.5 FILE <FORM ACTION=”procesa.php” METHOD=”post“ ENCTYPE=”multipart/form-data”> <INPUT TYPE=”file” NAME=”fichero”> </FORM> El resultado dell código anterior se puede ver en la figura 2.5. Figura 2.5 45 < > Programación 2.3.1.6 PASSWORD Contraseña: <INPUT TYPE=”password” NAME=”clave”> <?PHP print ($clave); //print ($_REQUEST [‘clave’]); ?> El resultado dell código anterior se puede ver en la figura 2.6. Figura 2.6 2.3.1.7 SUBMIT <INPUT TYPE=”submit” NAME=”enviar” VALUE=”Enviar datos”> <?PHP if ($enviar) print (“Se ha pulsado el botón de enviar”); //if ($_REQUEST [‘enviar’]) //print (“Se ha pulsado el botón de enviar”); ?> El resultado dell código anterior se puede ver en la figura 2.7. Figura 2.7 46 < > Programación 2.3.2 Validación de datos en un formulario Toda la información proveniente de un formulario debe considerarse por norma como contaminada, y hay que validarla antes de darla por buena y procesarla La validación de datos se hace verdaderamente importante para cualquier proyecto, ya que así impedimos que los usuarios que hagan uso del software tengan menos posibilidad de cometer errores en el traspaso de datos. La validación de datos se hace de distintas formas, pero también hay distintos tipos, por ejemplo, lo primero que tenemos que validar es si el usuario ingresó o no datos, luego validamos los tipos de datos que el usuario introduzca en los formularios. Lo más eficiente es mostrar los errores sobre el propio formulario para facilitar su corrección. Procedimiento: si se ha enviado el formulario: si hay errores: Mostrar formulario con errores si no: Procesar formulario fsi si no: Mostrar formulario Fsi Este procedimiento se puede resumir para que sólo haya que mostrar una vez el formulario, bien con los valores por defecto o con los valores introducidos, y con los errores en su caso: si se ha enviado el formulario: validar datos fsi si se ha enviado el formulario y no hay errores: Procesar formulario si no: Mostrar formulario con valores por defecto o ya enviados fsi 47 • Conocer las capacidades de los dispositivos móviles y los tipos de aplicación adecuadas para dichos dispositivos. • Comprender las características que conforman una aplicación web destinada a ambientes móviles. • Conocer las mejores prácticas en el ciclo de desarrollo de aplicaciones web para dispositivos móviles. < > Programación 3 Desarrollo de Aplicaciones Web para dispositivos móviles 3.1 Introducción Una aplicación móvil es un software escrito para dispositivos móviles que realiza una tarea específica, como un juego, un calendario, un reproductor de música, etc. Se define como nativa aquella aplicación específicamente diseñada para ejecutarse en el sistema operativo de un dispositivo y en el firmware de la máquina, y que, por lo general, tiene que ser adaptada para distintos dispositivos. Una aplicación Web o una aplicación de navegador, en cambio, es aquella en la cual la totalidad o algunas partes de los programas se descargan de la Web cada vez que se ejecuta. Por lo general, se puede acceder desde todos los dispositivos móviles con capacidad Web. Para aplicaciones web para móviles, sin embargo, el interés de desarrolladores surgió sólo en los dos últimos años, específicamente después de la implementación exitosa por parte de Google de las aplicaciones basadas en HTML 5. Naturalmente, los sitios Web móviles habían existido mucho antes, por ejemplo, Portales WAP. En cuanto a los motivos para preferir una aplicación nativa a una Web, la mayoría de los desarrolladores de aplicaciones nativas argumentan que la interfaz de usuario es superior y las oportunidades comerciales que ofrece por ejemplo, el iPhone App Store, son mejores. 3.1.1 Características de las aplicaciones para dispositivos móviles • Mayor compatibilidad con diferentes modelos y sistemas operativos. • No es necesario distribuir ni instalar ninguna aplicación. • Podemos utilizar la aplicación en sistemas operativos propietarios que no permiten la instalación de aplicaciones Stand-alone. • Podemos realizar cálculos y algoritmos complejos dado que la ejecución se realiza en el servidor. • Se puede trabajar con gran cantidad de información. 49 < > Programación 3.2 Formularios Web con emuladores de dispositivos para móviles 3.2.1 Formularios Web para Móviles Cuando se diseña un formulario que queremos que sea sencillo de usar en un móvil es útil aplicar la máxima “Más es menos”, porque cuanto menor y más objetivo sea el formulario, más contentos estarán tus usuarios. 1.- Minimizar la entrada de texto Como decíamos, cuanto menos texto haya que escribir, mucho mejor. Existen muchas veces opciones alternativas a un campo de texto, como cajas de selección, botones de radio, “sliders”, etc. En muchos casos sólo nos servirá colocar un campo de texto y tampoco debe significar un problema, pero al menos sí debemos minimizar el número de campos donde tener que escribir datos con el incómodo teclado virtual. Un claro ejemplo de este detalle es utilizar “datepickers”, para seleccionar una fecha en un calendario, en lugar de escribirla a mano. 2.- Minimizar el número de campos Cuanto menor sea el número de campos del formulario como en la figura 3.1, también más satisfecho estará el usuario. En general, si hay campos prescindibles, se quitan y punto. Figura 3.1 50 < > Programación 3.- Utilizar campos input del HTML5 En HTML5 existen diversos tipos nuevos de campos INPUT que pueden ayudarnos a mejorar la interfaz de entrada de datos en los formularios. Existen campos para selección de colores, fechas, meses, números, rangos, URL, email, etc. Estos campos muchas veces se implementan con ligeras diferencias en el navegador a los campos INPUT de texto de toda la vida, por ejemplo cambiando cosas como el “layout” del teclado virtual, para que muestre unas teclas u otras, dependiendo del tipo de campo y del dato que se supone tiene que introducirse en él. 4.- Alinear etiquetas arriba Al lado de cada campo de formulario se suele colocar un texto explicativo que sirve para saber qué información se debe colocar en el campo, al que en inglés se le llama “label” y que se traduciría por etiqueta. Ese texto debe aparecer al lado del campo, pero debido al tamaño reducido de las pantallas de móviles, se recomendaría colocarlo en la parte de arriba del campo, en lugar de al lado, como se suele hacer en formularios habitualmente. 5.- Eliminar contenido accesorio A veces los formularios para webs de escritorio tienen elementos accesorios para ayudar a rellenar el formulario, como “tips” que se activan al situarse sobre determinados campos o enlaces que pueden abrir capas flotantes o “pop-ups” para explicar ciertas informaciones. Generalmente, todos esos contenidos accesorios son prescindibles en formularios para móviles y los podemos eliminar sin ningún reparo. 6.- Evitar formularios multicolumna Por motivos similares al de colocar las etiquetas arriba (poco espacio en las pantallas de los móviles), también es buena idea organizar los formularios en una única columna. Pero es que además, en este caso, los formularios de varias columnas a menudo son menos claros en el sentido de saber el orden en el que se supone que la información debe escribirse. 7.- Recordar datos introducidos anteriormente En la medida de lo posible, siempre será de utilidad que nuestro sitio web sea lo suficientemente inteligente como para no solicitar datos que ya conocemos de antemano. Por ejemplo, si se le pidió al usuario el nombre en algún momento, es bueno introducirlo ya en el campo nombre del formulario, en vez de hacer que lo vuelva a escribir. Otro ejemplo: si es la segunda vez que se rellena ese formulario, determinados campos que se supone que no van a variar, aparecerán con el mismo texto introducido anteriormente. Para conseguir esto tendrás que utilizar algún lenguaje de programación, como Javascript en el lado del cliente o PHP en el lado del servidor, porque los formularios HTML de manera predeterminada no implementan esta funcionalidad. 51 < > Programación 8.- Obtener automáticamente los datos que se pueda Existen diversas tecnologías asociadas al HTML5 que nos pueden ofrecer información del usuario de manera automática y que, en la medida de lo posible, debemos utilizar para minimizar la entrada de datos por parte del usuario. El más claro ejemplo es la geolocalización, que nos permitiría averiguar dónde está físicamente ese usuario. De modo que, en vez de obligarle a escribir datos como su país, ciudad, etc. podemos ofrecer que el propio dispositivo defina su localización. 9.- Uso inteligente de los campos INPUT con autocompletar Cuando debemos utilizar un campo INPUT para entrada de datos, algo que a veces es incluso más indicado que otras alternativas, siempre que sea posible se debe usar la función de autocompletar. Por ejemplo, pensemos en un campo país, que tiene más de 150 posibilidades. Podríamos hacerlo en un elemento SELECT, para que el usuario no tenga que teclear el nombre del país, pero puede ser incluso más cómodo un campo INPUT, en el que escribiendo una o dos letras ya proponga países que las contengan. 10.- Opción para ver la clave escrita en los campos “password” Los campos donde escribir claves a menudo son un problema por los errores tipográficos, tan habituales en los teclados virtuales. No es mala idea crear un botón o algún elemento que nos permita ver escrita en texto plano la clave que el usuario ha escrito en un campo password. Eso debe ser una opción para el usuario, es decir, que si el usuario no la selecciona, el campo password, debe ocultar la clave escrita para mayor seguridad. 3.2.2 Redirección y detección de dispositivos móviles Esta opción permite que el diseño de la página web se visualice correctamente en dispositivos móviles, re-direccionando automáticamente a los navegadores de los dispositivos móviles para que entren directamente a la versión diseñada específicamente para estos, y que los navegadores de las PC´s de escritorio entren al sitio normal. Permite que el diseño de la página web se visualice correctamente en dispositivos móviles 52 < > Programación 3.3 Desarrollo de aplicaciones Web para dispositivos móviles 3.3.1 Consideraciones de diseño Cuando se trata de diseñar un sitio web para móviles es necesario diseñar la aplicación para que pueda hacerse uso en dispositivos de diferentes compañías. Uno de los problemas más comunes experimentados por los diseñadores que trabajan en dispositivos móviles es el conocer cuáles son las proporciones reales de la pantalla de un dispositivo móvil (Figura 3.2). El iPhone es de 320 píxeles de ancho por 480 píxeles de alto. Muchos dispositivos de Nokia N-Series son 240 píxeles de ancho por 320 píxeles de alto. Los dispositivos más nuevos a menudo apoyan un modo apaisado donde la anchura y la altura se invierte de forma espontánea. Los dispositivos de Nokia más populares disponen de pantallas que van de 176 por 208 píxeles hasta 352 por 416 píxeles. Las resoluciones de pantalla Blackberry variar desde 160 x 160 píxeles hasta a 324 x 352 píxeles. Figura 3.2 53 < > Programación 3.3.2 Diseño de la interface Existen muchos modelos de dispositivos, es posible agrupar muchos dispositivos con un ancho de pantalla similar (Figura3.3) y acabar con cinco grupos con diferentes anchos de pantalla: Figura 3.3. NOTA: Las medidas de una pantalla siempre se miden en diagonal y la unidad de medida es la pulgada • tiny: 84px, 96px, 101px, 128px, 130px, 132px • pequeña: 160px, 176px • medio: 208px, 220px, 240px • grande: 320px, 360px, 480px o superior (Figura 3.4) • escritorio: 800px o superior 54 < > Programación Figura 3.4 Estas agrupaciones son arbitrarias, y los requisitos de un proyecto pueden dictar un conjunto muy diferente. Por ejemplo 320 pixeles para el Iphone y poco más de 240 pixeles para navegadores móviles más recientes y 128 pixeles para dispositivos más antiguos. La definición de las agrupaciones de dispositivos realmente se reduce a los objetivos y las necesidades del proyecto. Cada dispositivo tiene capacidades diferentes, no todos soportan CSS avanzado, manipulación del DOM y JavaScript. Antes de hacer las agrupaciones comentadas anteriormente, debemos asegurarnos que los dispositivos móviles son compatibles con las tecnologías que ofrecerá el proyecto Web. 55 www.grupoeduit.com 01 800 808 62 40