Libro de Programacion Web
Libro de Programacion Web
Libro de Programacion Web
Todos los Derechos Reservados. Ninguna parte de esta publicación puede ser
reproducida, almacenada en un sistema de consulta, o transmitida en cualquier forma
o por cualquier medio, electrónico, mecánico, fotocopiado, grabado o de cualquier
tipo sin antes tener el permiso escrito del Editor.
Muchos de los nombres utilizados por los fabricantes o vendedores de software para
distinguir sus productos son marcas registradas. El editor tiene toda la intención de
proporcionar la información de la marca registrada acerca de los fabricantes y los
productos mencionados en este libro. Una lista de las designaciones de marcas
registradas se muestra a continuación:
Marcas Registradas:
Windows, Microsoft SQL Server, Microsoft Acces y Visual Basicson marcas registradas
de Microsoft Corporation.
Adobe Dreamweaver: Es una marca registrada por Adobe Systems Incorporated.
C++ Builder: Es una marca registrada por Borland software Corporation
Java: Es una marca registrada por Sun Microsystems.
Unix: Es una marca registrada por The Open Group.
2
Agradecimientos
Este libro no habría sido posible, y no estaría ahora en sus manos sin el apoyo de la
Dirección General de Educación Superior Tecnológica, el Instituto Tecnológico del
Istmo y de mis compañeros docentes de la Academia de Sistemas y Computación.
3
Contenido
4
4.4 Eventos con lenguaje Script. 166
4.5 Validación de entrada de datos del lado del cliente. 170
4.6 Consideraciones del soporte del navegador. 174
5
Prologo
Este libro pretende ser una guía para el docente y los alumnos en el curso de
PROGRAMACIÓN WEB que se ofrece en un semestre en la carrera de Ingeniería
en Sistemas Computacionales del sistema de Institutos Tecnológicos.
Desde el primer capítulo se abordan ya aspectos prácticos del lenguaje HTML, tales
como el manejo de tablas, marcos, formularios y hojas de estilos en cascada.
En el capitulo dos se da un panorama general de la programación Web, desde el
punto de vista del cliente, el servidor y la seguridad necesaria para evitar el acceso de
intrusos al sistema.
Es en el capitulo tres donde se aborda la programación por el lado del servidor en
detalle, se profundiza con ejemplos por lo menos en un lenguaje de entre los varios
existentes.
En el capítulo cuarto se trata sobre uno de los lenguajes más utilizados para la
programación por el lado del cliente. Por último en el capitulo cinco los servicios
Web como estandar de comunicación entre aplicaciones usando XML.
Un caso de estudio, se encuentra al final en un anexo con la finalidad de darle al
lector una visión de lo que puede ser en conjunto un sistema de información en
ambiente Web.
Cada tema expuesto viene acompañado de uno o más ejercicios, el nombre del
archivo aparece como comentario al inicio de cada listado de programa
En el CD ROM que acompaña al libro encontrará un directorio por cada unidad con
los ejercicios desarrollados.
Espero que al terminar de leer este libro se cubran las expectativas planteadas,
cualquier comentario o sugerencia acerca del contenido del material lo puede hacer a
la siguiente dirección de correo electrónico: gastondv@hotmail.com
6
1
7
1.1.- PERSPECTIVA HISTÓRICA DEL INTERNET
8
Cada protocolo del TCP/IP se describe en un documento conocido como RFC
(Request For Comment) y un número, mismos que se pueden hallar en la red para su
análisis o revisión, así por ejemplo el protocolo HTTP se describe en el RFC 2616,
de igual forma existen documentos para cada uno de los demás protocolos.
9
COMUNICACIÓN ENTRE EL NAVEGADOR Y EL SERVIDOR WEB
Solicitud HTTP
Una solicitud HTTP es un conjunto de líneas que el navegador envía al servidor.
Incluye:
10
El cuerpo de la solicitud: es un conjunto de líneas opcionales que deben estar
separadas de las líneas precedentes por una línea en blanco y, por ejemplo,
permiten que se envíen datos por un comando POST durante la transmisión de
datos al servidor utilizando un formulario.
Por lo tanto, una solicitud HTTP posee la siguiente sintaxis (<crlf> significa retorno
de carro y avance de línea):
Comandos
Comando Descripción
GET Solicita el recurso ubicado en la URL especificada
HEAD Solicita el encabezado del recurso ubicado en la URL
especificada
POST Envía datos al programa ubicado en la URL especificada
PUT Envía datos a la URL especificada
DELETE Borra el recurso ubicado en la URL especificada
Encabezados
Nombre del Descripción
encabezado
Accept Tipo de contenido aceptado por el navegador (por
ejemplo, texto/html). Consulte Tipos de MIME
Accept-Charset Juego de caracteres que el navegador espera
Accept-Encoding Codificación de datos que el navegador acepta
Accept-Language Idioma que el navegador espera (de forma
11
predeterminada, inglés)
Authorization Identificación del navegador en el servidor
Content-Encoding Tipo de codificación para el cuerpo de la solicitud
Content-Language Tipo de idioma en el cuerpo de la solicitud
Content-Length Extensión del cuerpo de la solicitud
Content-Type Tipo de contenido del cuerpo de la solicitud (por
ejemplo, texto/html). Consulte Tipos de MIME
Date Fecha en que comienza la transferencia de datos
Forwarded Utilizado por equipos intermediarios entre el navegador y
el servidor
From Permite especificar la dirección de correo electrónico del
cliente
From Permite especificar que debe enviarse el documento si ha
sido modificado desde una fecha en particular
Link Vínculo entre dos direcciones URL
Orig-URL Dirección URL donde se originó la solicitud
Referer Dirección URL desde la cual se realizó la solicitud
User-Agent Cadena con información sobre el cliente, por ejemplo, el
nombre y la versión del navegador y el sistema operativo
RESPUESTA HTTP
Una línea de estado: es una línea que especifica la versión del protocolo utilizada y
el estado de la solicitud en proceso mediante un texto explicativo y un código. La
línea está compuesta por tres elementos que deben estar separados por un espacio: La
línea está formada por tres elementos que deben estar separados por un espacio:
12
servidor. Cada una de estas líneas está formada por un nombre que describe el tipo de
encabezado, seguido de dos puntos (:) y el valor del encabezado.
El cuerpo de la respuesta: contiene el documento solicitado.
<html>
<head>
<title>Instituto Tecnológico del Istmo</title>
</head>
<body>
(Contenido)
.
.
.
</body>
</html>
Encabezados de respuesta
Nombre del Descripción
encabezado
Content-Encoding Tipo de codificación para el cuerpo de la respuesta
Content-Language Tipo de idioma en el cuerpo de la respuesta
Content-Length Extensión del cuerpo de la respuesta
Content-Type Tipo de contenido del cuerpo de la respuesta (por ejemplo,
texto/html).
Date Fecha en que comienza la transferencia de datos
Expires Fecha límite de uso de los datos
Forwarded Utilizado por equipos intermediarios entre el navegador y el
servidor
Location Redireccionamiento a una nueva dirección URL asociada
con el documento
Server Características del servidor que envió la respuesta
Los códigos de respuesta
13
Son los códigos que se ven cuando el navegador no puede mostrar la página
solicitada. El código de respuesta está formado por tres dígitos: el primero indica el
estado y los dos siguientes explican la naturaleza exacta del error.
14
pago correctos
403 FORBIDDEN El acceso al recurso simplemente se deniega
404 NOT FOUND Un clásico. El servidor no halló nada en la dirección
especificada. Se ha abandonado sin dejar una dirección
para redireccionar... :)
50x Error debido Estos códigos indican que existe un error interno en el
al servidor
servidor
500 INTERNAL ERROR El servidor encontró una condición inesperada que le
impide seguir con la solicitud (una de esas cosas que les
suceden a los servidores...)
501 NOT El servidor no admite el servicio solicitado (no puede
IMPLEMENTED
saberlo todo...)
502 BAD GATEWAY El servidor que actúa como una puerta de enlace o proxy
ha recibido una respuesta no válida del servidor al que
intenta acceder
503 SERVICE El servidor no puede responder en ese momento debido a
UNAVAILABLE
que se encuentra congestionado (todas las líneas de
comunicación se encuentran congestionadas, inténtelo de
nuevo más adelante)
504 GATEWAY La respuesta del servidor ha llevado demasiado tiempo en
TIMEOUT
relación al tiempo de espera que la puerta de enlace podía
admitir (excedió el tiempo asignado...)
15
respuestas en formato HTML, de esta forma el cliente nunca recibirá respuesta en el
lenguaje de programación Web dinámica. Esto sirve como un mecanismo de
seguridad para evitar que el usuario del cliente Web pueda ver los detalles de
implementación ejecutados en el servidor Web utilizando el modor de base de datos.
1.2.2 URL’s.
El URL es la cadena de caracteres con la cual se asigna una dirección única a cada
uno de los recursos de información disponibles en la Internet. Existe un URL único
para cada página de cada uno de los documentos de la World Wide Web,
Una URL indica tanto una dirección de Internet como el servicio que se espera
ofrezca el servidor al que corresponde la dirección. Tiene el siguiente formato:
servicio://máquina:puerto/ruta/archivo@usuario
http
Es el servicio invocado para transmitir páginas Web y el que se usará
normalmente en los enlaces.
16
https
Es una innovación sobre el anterior, que permite acceder a servidores
(generalmente comerciales) que ofrecen el uso de técnicas de encriptación
para proteger los datos que se intercambien con él de terceras personas.
ftp
Permite trasmitir archivos desde servidores de ftp anónimo. Si no se le pide un
archivo sino un directorio, en general el navegador se encargará de mostrar el
contenido del mismo para que se pueda escoger el archivo cómodamente.
Utilizando la @ se puede acceder a servidores privados.
mailto
Para poder mandar un mensaje. Por ejemplo, la URL
mailto:gastondv@hotmail.com me enviaría un mensaje.
news
Para poder acceder a foros de discusión (mal traducidos a veces como grupos
de noticias). Se indica el servidor y el grupo. Por ejemplo
news://news.ibernet.es/es.comp.demos se conectaría con el foro
es.comp.demos en el servidor nacional de Telefónica.
telnet
No es implementado generalmente por los navegadores, que suelen invocar un
programa externo. Permite conectarse con otras computadoras externas y
entrar a ellos como si la computadora local fuese una terminal del mismo.
La dirección de la máquina puede ser, o bien la dirección IP compuesto por una serie
de cuatro números entre 0 y 255 (148.208.237.1) o bien algo más fácil de recordar
cómo es una serie de palabras separadas por puntos (www.itistmo.edu.mx).
ruta_relativa/archivo
En la ruta relativa se puede utilizar los dos puntos (..) para acceder al directorio padre
o comenzar con la barra diagonal (/) para acceder a una ruta absoluta dentro de la
misma computadora.
17
diferenciación es dependiente del servidor Web y del sistema operativo del sistema
que albergue al servidor, como en el caso de Windows que no diferencía entre
mayúsculas y minúsculas, sin embargo los sistemas operativos basados en Unix sí.
COOKIES
Las cookies constituyen una potente herramienta empleada por los servidores Web
para almacenar y recuperar información acerca de sus visitantes. Dado que el HTTP
es un protocolo sin estados (no almacena el estado de la sesión entre peticiones
sucesivas), las cookies proporcionan una manera de conservar información entre
peticiones del cliente, extendiendo significativamente las capacidades de las
aplicaciones cliente/servidor basadas en la Web. Mediante el uso de cookies se
permite al servidor Web recordar algunos datos concernientes al usuario, como sus
preferencias para la visualización de las páginas de ese servidor, nombre y
contraseña, productos que más le interesan, personalización, es la palabra clave.
Una cookie no es más que un archivo de texto que algunos servidores piden al
navegador que escriba en el disco duro, con información acerca de lo que se ha estado
haciendo en las páginas.
Entre las mayores ventajas de las cookies se cuenta el hecho de ser almacenadas en el
disco duro del usuario, liberando así al servidor de una importante sobrecarga. Es el
propio cliente el que almacena la información y quien se la devolverá posteriormente
al servidor cuando éste la solicite. Además, las cookies poseen una fecha de
caducidad, que puede oscilar desde el tiempo que dure la sesión hasta una fecha
futura especificada, a partir de la cual dejan de ser operativas.
Algunos ejemplos que se pueden revisar y podrán servir para aclarar la función de las
cookies son los siguientes archivos:
18
1.3 INTRODUCCIÓN AL HTML. LENGUAJE DE DESPLIEGUE
DEL WEB
¿QUÉ ES HTML?
Los diseñadores utilizan el lenguaje HTML para crear sus páginas Web, los
programas que utilizan los diseñadores generan páginas escritas en HTML y los
navegadores que utilizamos los usuarios muestran las páginas Web después de leer su
contenido HTML.
ESPECIFICACIÓN OFICIAL
El organismo W3C elabora las normas que deben seguir los diseñadores de páginas
Web para crear las páginas HTML. Las normas oficiales están escritas en inglés y se
pueden consultar de forma gratuita en las siguientes direcciones:
Especificación oficial de HTML 4.01 (http://www.w3.org/TR/html401/)
Revisión de HTML 5
http://dev.w3.org/html5/spec/Overview.html
19
documentos. La Organización Internacional de Estándares (ISO) normalizó este
lenguaje en 1986.
El estándar XHTML 1.0 incluye el 95% del estándar HTML 4.01, ya que sólo añade
pequeñas mejoras y modificaciones menores. Afortunadamente, no es necesario leer
las especificaciones y recomendaciones oficiales de HTML para aprender a diseñar
páginas con HTML o XHTML. Las normas oficiales están escritas con un lenguaje
bastante formal y algunas secciones son difíciles de comprender
HTML y XHTML
20
Fig. 1.4.- Lenguajes descendientes de SGML
Las páginas y documentos creados con XHTML son muy similares a las páginas y
documentos HTML. Las discusiones sobre si HTML es mejor que XHTML o
viceversa son recurrentes en el ámbito de la creación de contenidos Web, aunque no
existe una conclusión ampliamente aceptada.
La principal ventaja de los lenguajes de etiquetas es que son muy sencillos de leer y
escribir por parte de las personas y de los sistemas electrónicos. La principal
desventaja es que pueden aumentar mucho el tamaño del documento, por lo que en
general se utilizan etiquetas con nombres muy cortos.
<html>
</html>
21
Un documento HTML tiene una estructura que lo separa en dos partes: cuerpo y
cabecera. En la primera estará la página en sí, mientras que en la segunda se incluyen
algunas cosas que no se ven al principio pero que pueden llegar a ser muy
importantes. Lo primero que hay que incluir en el código es la cabecera.
<head>
<title>Libro de programación Web</title>
</head>
Body >
…
</body>
La mayor parte del código HTML reside entre las etiquetas de inicio y cierre del
cuerpo del documento, es decir contendrá una gran cantidad de etiquetas según la
función que se le pretenda dar a las pagina Web, como en este caso tan solo, se
encuentran dos juegos de etiquetas más, que muestra un mensaje con un tamaño de
encabezado grande.
Al finalizar aparece la etiqueta <hr> que muestra una línea horizontal. La línea
horizontal carece de etiqueta de cierre. Esto es normal en etiquetas que no varían los
atributos de un texto, sino que insertan un elemento.
FORMATEO BÁSICO
Se pueden establecer varias categorías dentro de las etiquetas usadas para formatear
el texto. Se pueden dividir en aquellas que sirven para cambiar párrafos enteros y las
que son capaces de formatear tiras de caracteres dentro del párrafo.
22
Estas son las etiquetas más importantes
Las 6 cabeceras
El HTML nos ofrece seis etiquetas distintas para mostrar cabeceras. Son éstas:
Etiqueta Resultado
23
Estas etiquetas se pueden definir como de formato de párrafo pero por su importancia
se prefiere tratarlas aparte. No resulta recomendable utilizarlas para aumentar o
disminuir el tamaño del tipo de letra, ya que cada navegador los muestra de manera
diferente. Se usan para dividir correctamente en secciones una página, tal y como se
hace en un documento de texto normal.
Todas estas etiquetas permiten cambiar de una manera u otra el aspecto del tipo de
letra que se esté utilizando y se pueden utilizar con tiras de caracteres dentro de un
párrafo.
Otros elementos
Otros elementos que no son texto más sin embargo se pueden incorporar a una página
son:
24
<!--formato.htm-->
<HTML>
<HEAD>
<TITLE>Formato</TITLE>
</HEAD>
<BODY>
<DIV ALIGN=CENTER><H1>FORMATO DE LA PAGINA</H1></DIV>
<H2>Instituto Tecnológico del Istmo</H2>
<HR>
<P>Este párrafo es muy sencillo. Por el momento no se que
tendrá, pero dentro de poco pondré aquí muchas cosas
interesantes.
MARCOS
Ejemplo:
25
Se puede observar que la cabecera de la página es similar a un documento normal,
pero el habitual BODY es sustituido por un FRAMESET. En cada FRAMESET que
exista se divide la ventana actual (sea la general o un marco) en varias ventanas
definidas o por el parámetro COLS o por ROWS. En éste, separado por comas, se
define el número de marcos y el tamaño de cada uno.
Dentro del <FRAMESET> se hacen dos cosas. Primero, definir cada uno de los
marcos poniéndoles un nombre y especificando qué archivo HTML le corresponde
mediante la etiqueta <FRAME>.
Etiqueta <FRAMESET>
Según el estándar, esta etiqueta sólo debería contener el número y tamaño de cada
marco, pero las extensiones de Netscape y Explorer al estándar obligan a estudiar un
par de parámetros más.
Las propiedades COLS y ROWS se les asigna una lista de tamaños separados por
comas. Se admiten los siguientes formatos de tamaño:
<frameset rows="30%,*">
En este caso el primer marco ocupará el 30%, del espacio vertical de la pantalla y el
segundo marco el especio restante (70%).
Etiqueta <FRAME>
26
Esta etiqueta define tan sólo las características de un marco determinado, no de un
conjunto de ellos. Estos son los parámetros que admite:
Parámetro Utilidad
NAME Asigna un nombre a un marco para identificarlo y referenciarlo
después.
SRC Indica la dirección del documento HTML que ocupará el marco.
SCROLLING Decide si se colocan o no barras de desplazamiento al marco. Su valor
por defecto es AUTO, que deja al navegador la decisión. Las otras
opciones son YES y NO.
NORESIZE Si se especifica el usuario no podrá cambiar de tamaño el marco.
FRAMEBORDER Al igual que su homónimo en la etiqueta <FRAMESET>, si se iguala a
cero se eliminará el borde con todos los marcos contiguos que tengan
también este valor a cero.
MARGINWIDTH Permite cambiar los márgenes horizontales dentro de un marco. Se
representa en pixels.
MARGINHEIGHT Igual al anterior pero con márgenes verticales.
Las tablas son una de las herramientas más útiles que se disponen en HTML, ya que
van a permitir en cierto modo "organizar" el documento, ayudando a situar dentro del
mismo los diferentes elementos que lo componen, siendo esta la única forma
coherente que había antes de la introducción de las Hojas de Estilo y de las etiquetas.
Es por esta facilidad a la hora de organizar con tablas nuestras páginas, el que el 99%
de las que veamos en Internet las usen, aunque muchas veces no las veamos
directamente porque están "ocultas".
Las tablas están formadas por filas, columnas y celdas. Cada espacio horizontal
continuado es una fila y cada espacio vertical continuado es una columna,
definiéndose una celda como el espacio formado por la intersección de una fila y una
columna.
27
celda(2,1) celda(2,2) celda(2,3)
Lo primero que se tiene que hacer para introducir una tabla es decirle al navegador
dónde empieza y dónde acaba esta; esto se consigue mediante la etiqueta de inicio
<TABLE> y su correspondiente de cierre </TABLE>.
Seguidamente indicarle cuantas filas se va a tener en la tabla, cosa que se hace con las
etiqueta de inicio de fila <TR> y su correspondiente de cierre de fila </TR>, por lo que se
debe insertar una pareja de etiquetas por cada fila que tenga la tabla.
Por último, dentro de cada fila indicar cuantas celdas va a haber, que inicialmente
deben corresponderse con el número de columnas que se desea tenga la tabla. Esto se
consigue mediante las parejas de etiquetas <TD> y </TD>.
<TABLE>
<TR> <TD>...</TD> <TD>...</TD> <TD>...</TD> </TR>
</TABLE>
Este es el esquema general de toda tabla simple, que traducido a código HTML
quedaría de la forma:
<TABLE>
<TR>
<TD> celda(1,1) </TD>
<TD> celda(1,2) </TD>
<TD> celda(1,3) </TD>
</TR>
<TR>
<TD> celda(2,1) </TD>
<TD> celda(2,2) </TD>
<TD> celda(2,3) </TD>
</TR>
</TABLE>
La cantidad de celdas debe ser el mismo en cada uno de las filas, para que la tabla
tenga la misma cantidad de columnas. Se debe definir la cantidad de columnas que va
a tener la tabla mediante el número de celdas que se defina en la primera fila.
28
Además de estas etiquetas básicas existen otras que van a permitir adaptar la tabla a
ciertas necesidades. Y cada etiqueta posee además varios atributos, que van a
modificar la forma en que se comportan.
Las tablas tienen sus propios atributos o propiedades que se colocaran dentro de su
etiqueta. Entre los más importantes están:
align Alinea horizontalmente la tabla con respecto a su entorno.
background Permite colocar un fondo para la tabla a partir de un enlace a una
imagen.
bgcolor Da color de fondo a la tabla.
border Define el número de píxel del borde principal.
bordercolor Define el color del borde.
cellpadding Define, en píxel, el espacio entre los bordes de la celda y el contenido
de la misma.
cellspacing Define el espacio entre los bordes (en píxel).
height Define la altura de la tabla en píxel o porcentaje.
width Define la anchura de la tabla en píxel o porcentaje.
Algunos atributos que permiten modificar una celda en concreto o toda una fila:
Otros atributos que pueden ser únicamente asignados a una celda y no al conjunto de
celdas de una línea son:
29
Algunos de los atributos usan la siguiente sintaxis:
Atributo=”Valor”
Donde el Valor puede venir expresado en píxeles ó en tanto por ciento (%). Si toma un
valor en píxeles será un valor absoluto, mientras que si toma un valor en % será
relativa al tamaño de pantalla ó del elemento que lo contenga.
Así por ejemplo, si se desea que la tabla tenga un tamaño absoluto de 400 pixeles se
especificaría el atributo a WIDTH="400" mientras que si se desea que la tabla ocupe
toda la ventana del navegador, bastará con especificar el atributo a WIDTH="100%".
Para evitar que una tabla se vea de tamaño distinto según la configuración de la
pantalla es mejor usar valores en %.
Ejemplo:
REGISTRO DE CLIENTES
NOMBRE
30
DIRECCIÓN
Se trata de una tabla de 3 filas por 2 columnas, con atributos ancho del 30% del
tamaño de la pantalla, borde de tamaño 1, y centrado; la primera fila tiene combinada
sus 2 celdas horizontalmente, y el atributo color está fijado en verde, contiene el texto
“REGISTRO DE CLIENTES”, la segunda fila, su primera celda contiene el texto
“NOMBRE” y la segunda está vacía con sus atributo color fijado en amarillo y del
60% del ancho de la tabla; la tercera fila, su primera celda contiene el texto
“DIRECCIÓN” y la segunda está vacía y también con su atributo color en amarillo, se
puede observar que ya no es necesario definir el ancho de la celda, pues se adapta al
ancho fijado en la segunda celda de la segunda fila.
1.3.4 FORMULARIOS
Los formularios son el interface mediante el cual los usuarios interactúan con las
aplicaciones Web. Los datos que los usuarios introducen son procesados o enviados a
otras páginas que regularmente son lenguajes embebidos en el propio HTML, tales
como PHP, JSP, ASP.NET
31
Ejemplo:
Los elementos que se deseen incluir en el formulario deberán hallarse entre las
etiquetas <FORM> y </FORM>
ELEMENTOS DE UN FORMULARIO
Campos de texto
Botón de opción
Lista/Menú
Botón
Casilla de verificación
Campo oculto
Botones mejorados
Campo de Imagen
Etiquetas
Campo de archivo
Algunos de estos elementos son usados con más frecuencia que otros, sin embargo a
continuación se explicarán cada uno de ellos para más adelante mostrar un ejemplo
en conjunto.
CAMPOS DE TEXTO
Existen tres maneras de conseguir que el usuario introduzca texto en el formulario.
Las dos primeras se obtienen por medio de la etiqueta <INPUT>:
<INPUT TYPE=TEXT>
<INPUT TYPE=PASSWORD>
El primero dibujará un cuadro de texto donde permitirá escribir un texto (de una sola
línea). El segundo es equivalente, pero no se verá lo que se teclee en él, más bien los
caracteres se remplazará por un carácter * por ello se conoce como Cuadro de texto
para contraseña. Estos son los atributos para modificarlos:
Parámetro Utilidad
SIZE Tamaño de la caja de texto.
MAXLENGTH Número máximo de caracteres que puede introducir el usuario.
32
VALUE Texto por defecto que contendrá la caja.
Por otro lado, puede que se necesite que el usuario pueda introducir más de una
línea. En ese caso se utilizará el componente conocido como área de texto, para ello
se usa la siguiente etiqueta:
Lo que se incluya entre las dos etiquetas será lo que se muestre por defecto dentro de
la caja. Admite estos parámetros:
Parámetro Utilidad
ROWS Filas que ocupará la caja de texto.
COLS Columnas que ocupará la caja de texto.
OPCIONES
Si lo que se desea es que el usuario decida entre varias opciones se podrá hacer de
dos modos. El primero es asociando a varios botones de opciones un mismo NAME,
como en este caso name="Sexo"
Hombre <input name="Sexo" type="radio" value="H"> <br>
Mujer <input name="Sexo" type="radio" value="M"> Hombre
Mujer
Así según la selección que realice el usuario, será el valor que tomará la variable.
Acepta los siguientes parámetros:
Parámetro Utilidad
VALUE Este es el valor que asignará a la variable.
Si se indica en una de las opciones esta será la que esté activada por
CHECKED
defecto.
La segunda posibilidad que ocupa menos código es usando una Lista/Menú. Para
emplearlas se debe utilizar dos etiquetas, SELECT y OPTION:
<SELECT NAME="Navegador"> Netscape
<OPTION value="Net">Netscape
<OPTION value="Exp">Explorer
<OPTION value="Ope">Opera
<OPTION value="Lin">Lynx
<OPTION value="Otr">Otros
</SELECT>
33
Parámetro Utilidad
El número de opciones que se podrá ver. Si es mayor que 1 se verá una
SIZE
lista de selección y, si no, un menú desplegable.
MULTIPLE Si se indica se podrá elegir más de una opción.
Y OPTION estos:
Parámetro Utilidad
VALUE Este es el valor que asignará a la variable.
SELECTED Si se indica en una de las opciones esta será la seleccionada por defecto.
CASILLA DE VERIFICACIÓN
Puede que se necesite que el usuario sencillamente confirme o niegue algo. Se podrá
conseguir por medio de Casillas de Verificación:
PROMOCIÓN
<input name="promo" type="checkbox" value="1" checked> PROMOCIÓN
CAMPO OCULTO
Existe la posibilidad de que se necesite que, en el formulario, se tenga alguna
variable con un valor previamente asignado para enviárselo a otra página. Por
ejemplo, se podría asignar en forma oculta la clave de un producto a una variable para
verificar este valor en la página receptora.
34
BOTONES MEJORADOS
Una de las cosas que más han mejorado son los botones. Ahora disponen de una
etiqueta propia, de modo que se pueda encerrar con ella todo tipo de elementos
HTML, como gráficos o, incluso, tablas enteras. La etiqueta en cuestión se llama
BUTTON:
<BUTTON TYPE="button"> Soy una tabla
<table border="1">
<tr> que está en un botón
<th>Soy una</th>
<th>tabla</th>
</tr>
<tr>
<td>que está</td>
<td>en un botón</td>
</tr>
</table>
</BUTTON>
Los parámetros de dicha etiqueta son los normales, TYPE, que podrá tomar los valores
SUBMIT (por defecto), RESET y BUTTON, NAME y VALUE.
Se puede declarar un gráfico como un elemento más de entrada. Como un nuevo tipo
dentro del elemento INPUT, este elemento de formulario se conoce como Campo de
Imagen
Este elemento se comportará del mismo modo que un botón de tipo SUBMIT, pero
añadirá como información en el formulario las coordenadas x, y donde el usuario lo
pulsó.
ETIQUETAS
Hasta hora, el texto que acompañaba a los campos de entrada no estaba asociado a los
mismos de ninguna manera. Así, por ejemplo, si se pulsa en el texto que acompañaba
a un control de confirmación, no sucedía nada. Ahora, en cambio, si se sitúa la
etiqueta LABEL, el control cambiará de estado
<LABEL>
PROMOCIÓN PROMOCIÓN
<input name="promo" type="checkbox" value="1" checked>
</LABEL>
35
AGRUPACIÓN DE ELEMENTOS
Una manera de agrupar visualmente varios elementos de un formulario es encerrando
una parte de un formulario dentro de la etiqueta FIELDSET, se mostrará un rectángulo
alrededor de los mismos. Si además, se le pone un título por medio de la etiqueta
LEGEND él formularios quedará más elegante.
LEGEND admite como parámetro ALIGN, que indicará en qué lugar se coloca el título. Por
defecto es TOP (arriba), pudiendo estar también abajo ( BOTTOM), a la izquierda (LEFT) o a
la derecha (RIGHT).
DESACTIVACIÓN DE ELEMENTOS
Todos los controles de un formulario se pueden desactivar, impidiendo así al usuario
que los utilice. Se seguirán mostrando en pantalla, aunque con un aspecto distinto
para indicar su triste estado. Para ello sólo se pone el parámetro disabled:
Clave:
<INPUT TYPE="text" disabled> Clave:
CAMPO DE ARCHIVO
Este elemento se utiliza para transmitir documentos externos desde el disco duro de
un usuario al servidor Web, para ello se utiliza nuevamente la etiqueta input con su
type establecida en file.
Al pulsar cobre el botón el navegador mostrará una caja de diálogos que permitirá al
usuario seleccionar el archivo en el disco duro.
36
Más adelante se mostrarán ejemplos de envió de archivos al servidor completos.
37
<td><input type="checkbox" name="promocion" id="promocion" value="1"
checked> </td>
</tr>
<tr>
<td><input type='submit' name='Aceptar' id='Aceptar'
value='Aceptar'></td>
<td><input type='reset' name='Submit2' value='Restablecer'></td>
</tr>
</table>
</form>
</body>
</html>
REGISTRO DE PRODUCTOS
CLAVE
NOMBRE
IMAGEN
PROMOCION
Aceptar Restablecer
38
avances en tecnología demandan cada vez aplicaciones más rápidas, ligeras y
robustas que permitan utilizar el Web.
Afortunadamente, se tienen herramientas potentes para realizar esto, ya que han
surgido nuevas tecnologías que permiten que el acceso a una base de datos desde el
Web, por ejemplo, sea un mero trámite. El único problema es decidir entre el
conjunto de posibilidades la correcta para cada situación.
El viejo Interfaz de entrada común (CGI) ha cumplido con el propósito de añadir
interactividad a las páginas Web pero sus deficiencias en el desarrollo de aplicaciones
y en la escalabilidad de las mismas ha conducido al desarrollo de aplicaciones
específicos de servidor como Paginas de Servidor Activo (ASP y ASP.NET), Páginas
de Servidor Java (JSP) y PreProcesador de Hipertexto (PHP).
ASP, JSP y PHP son lenguajes ejecutados en el servidor Web y no en el cliente Web,
se encargan de gestionar el acceso y manipulación de la base de datos para
proporcionar el dinamismo requerido en las páginas Web.
Al crear una página Web, se utiliza en primer lugar el lenguaje HTML para marcar
los contenidos, es decir, para designar la función de cada elemento dentro de la
página: párrafo, titular, texto destacado, tabla, etc.
39
Una vez creados los contenidos, se utiliza el lenguaje CSS para definir el aspecto de
cada elemento: color, tamaño y tipo de letra del texto, separación horizontal y vertical
entre elementos, posición de cada elemento dentro de la página, etc.
El ejemplo anterior utiliza la etiqueta <font> con sus atributos color, face y size para
definir el color, la tipografía y el tamaño del texto de cada elemento del documento.
Por otra parte, el diseño de los sitios Web está en constante evolución y es habitual
modificar cada cierto tiempo los colores principales de las páginas o la tipografía
utilizada para el texto. Si se emplea la etiqueta <font>, habría que modificar el valor
de 1.5 millones de atributos para modificar el diseño general del sitio Web.
40
</html>
Utilizando CSS, en esa zona reservada se indica que todas las etiquetas <h1> de la
página se deben ver de color rojo, con un tipo de letra Arial y con un tamaño de letra
grande. Además, las etiquetas <p> de la página se deben ver de color gris, con un tipo
de letra Verdana y con un tamaño de letra medio.
Definiendo los estilos de esta forma, no importa el número de elementos <p> que
existan en la página, ya que todos tendrán el mismo aspecto establecido mediante
CSS. Como se verá a continuación, esta forma de trabajar con CSS no es ideal, ya
que si el sitio Web dispone de 10.000 páginas, habría que definir 10.000 veces el
mismo estilo CSS.
En este caso, todos los estilos CSS se incluyen en un archivo de tipo CSS que las
páginas HTML enlazan mediante la etiqueta <link>. Un archivo de tipo CSS no es
más que un archivo simple de texto cuya extensión es .css Se pueden crear todos los
archivos CSS que sean necesarios y cada página HTML puede enlazar tantos archivos
CSS como necesite.
41
Normalmente, la etiqueta <link> incluye cuatro atributos cuando se enlaza un archivo
CSS:
rel: indica el tipo de relación que tiene el recurso enlazado (en este caso, el
archivo CSS) y la página HTML. Para los archivos CSS, siempre se utiliza el
valor stylesheet
type: indica el tipo de recurso enlazado. Sus valores están estandarizados y
para los archivos CSS su valor siempre es text/css
href: indica la URL del archivo CSS que contiene los estilos. La URL indicada
puede ser relativa o absoluta y puede apuntar a un recurso interno o externo al
sitio Web.
media: indica el medio en el que se van a aplicar los estilos del archivo CSS.
De todas las formas de incluir CSS en las páginas HTML, esta es la más utilizada con
mucha diferencia. La principal ventaja es que se puede incluir un mismo archivo CSS
en multitud de páginas HTML, por lo que se garantiza la aplicación homogénea de
los mismos estilos a todas las páginas que forman un sitio Web.
Con este método, el mantenimiento del sitio Web se simplifica al máximo, ya que un
solo cambio en un solo archivo CSS permite variar de forma instantánea los estilos de
todas las páginas HTML que enlazan ese archivo.
Esta forma de incluir CSS directamente en los elementos HTML solamente se utiliza
en determinadas situaciones en las que se debe incluir un estilo muy específico para
un solo elemento concreto.
CSS define una serie de términos que permiten describir cada una de las partes que
componen los estilos CSS. La siguiente figura muestra las partes que forman un estilo
CSS muy básico:
42
Fig. 1.5.- Partes de una regla básica CSS
Un archivo CSS puede contener infinitas reglas CSS, cada regla puede contener
infinitos selectores y cada declaración puede estar formada por un número infinito de
pares propiedad/valor.
MEDIOS CSS
Una de las características más importantes de las hojas de estilos CSS es que
permiten definir diferentes estilos para diferentes medios o dispositivos: pantallas,
impresoras, móviles, proyectores, etc.
Además, CSS define algunas propiedades específicamente para determinados medios,
como por ejemplo la paginación y los saltos de página para los medios impresos o el
volumen y tipo de voz para los medios de audio. La siguiente tabla muestra el nombre
que CSS utiliza para identificar cada medio y su descripción:
Medio Descripción
all Todos los medios definidos
braille Dispositivos táctiles que emplean el sistema braille
embosed Impresoras braille
handheld Dispositivos de mano: móviles, PDA, etc.
print Impresoras y navegadores en el modo "Vista Previa para Imprimir"
projection Proyectores y dispositivos para presentaciones
screen Pantallas de computadora
speech Sintetizadores para navegadores de voz utilizados por personas discapacitadas
tty Dispositivos textuales limitados como teletipos y terminales de texto
tv Televisores y dispositivos con resolución baja
Los medios más utilizados actualmente son screen (para definir el aspecto de la
página en pantalla) y print (para definir el aspecto de la página cuando se imprime),
seguidos de handheld (que define el aspecto de la página cuando se visualiza
mediante un dispositivo móvil).
43
body { font-size: 10pt }
}
@media screen {
body { font-size: 13px }
}
@media screen, print {
body { line-height: 1.2 }
}
El ejemplo anterior establece que el tamaño de letra de la página cuando se visualiza
en una pantalla debe ser 13 píxel. Sin embargo, cuando se imprimen los contenidos
de la página, su tamaño de letra debe ser de 10 puntos. Por último, tanto cuando la
página se visualiza en una pantalla como cuando se imprimen sus contenidos, el
interlineado del texto debe ser de 1.2 veces el tamaño de letra del texto.
SELECTORES BÁSICOS
Selector universal
Se utiliza para seleccionar todos los elementos de la página. El siguiente ejemplo
elimina el margen y el relleno de todos los elementos HTML:
* {
margin: 0;
padding: 0;
}
p {
...
}
El siguiente ejemplo aplica diferentes estilos a los titulares y a los párrafos de una
página HTML:
h1 {
color: red;
}
h2 {
color: blue;
}
p {
color: black;
}
Si se quiere aplicar los mismos estilos a dos etiquetas diferentes, se pueden encadenar
los selectores. En el siguiente ejemplo, los títulos de sección h1, h2 y h3 comparten
los mismos estilos:
h1, h2, h3 {
44
color: #8A8E27;
font-weight: normal;
font-family: Arial, Helvetica, sans-serif;
}
PROPIEDADES DE BLOQUE
Definen cosas como los márgenes o la colocación de bloques de contenido HTML:
Propiedad Descripción Posibles valores
margin-top, margin- Distancia mínima entre un bloque y Tamaño,
right, margin-bottom,
margin-left, los demás elementos. Tanto margin porcentaje o auto.
margin: top right como margins() se utilizan para Por defecto es
bottom left cambiar todos estos atributos a la vez. cero.
padding-top, padding- Distancia entre el borde y el Tamaño,
right, padding-bottom,
padding-left, contenido de un bloque. porcentaje o auto.
padding: top right Por defecto es
bottom left cero.
border-top-width, Anchura del borde de un bloque. numérico
border-right-width,
border-bottom-width,
border-left-width,
border-width: top right
bottom left
border-style Estilo del borde de un bloque. none, solid o 3D,
por defecto
ninguno (none).
border-color Color del borde de un bloque. cualquier color
width, height Tamaño de un bloque. Su mayor Tamaño,
utilidad está en su aplicación a un porcentaje o auto,
elemento gráfico. automático por
defecto.
float Justificación del contenido de un left, right o none,
bloque. por defecto
ninguna.
clear Permiso para que otro elemento se left, right, both o
pueda colocar a su izquierda o none, por defecto
derecha. ninguno.
45
font- Tipo de letra (que Lista de tipos, ya sean genéricos o no, separados
family
puede ser genérico) por comas.
font-size Tamaño del tipo de xx-small, x-small, small, medium, large, x-
letra. large, xx-large, tamaño relativo o tamaño
absoluto. Por defecto medium.
font- Grosor del tipo de normal, bold, bolder, lighter o 100-900 (donde
weight
letra (negrita). 900 es la negrita más gruesa). Por defecto
normal.
font-style Estilo del tipo de normal, italic, italic small-caps, oblique,
letra (cursiva). oblique small-caps o small-caps. Por defecto
normal.
Cabe recordar que los tipos genéricos son serif, sans-serif, cursive, fantasy y
monospace. Cada uno de estos tipos serán equivalentes a alguno que pueda tener
instalado la computadora del usuario. Así, por ejemplo, en un PC con Windows
instalado serif puede equivaler a Times New Roman y monospace a Courier.
46
Hay que decir que, en la sintaxis en cascada, las direcciones se expresan del siguiente
modo: background: url(fondobonito.gif);
PROPIEDADES DE CLASIFICACIÓN
Hasta ahora habíamos distinguido a la hora de ver las propiedades de un elemento en
si estos eran tratados como bloques o no. Pero el ser bloques o no... ¿no es acaso otra
propiedad? Estas y otras formas de clasificar los elementos se pueden cambiar usando
las siguientes propiedades:
Propiedad Descripción Posibles valores
display Decide si un elemento es interior inline, block, list y none (que
(como <I>), un bloque (<P>) o un 'apaga' el elemento)
elemento de una lista (<LI>).
list-style Estilo de un elemento de una disc, circle, square, decimal,
lista, pudiendo incluir un gráfico lower-roman, upper-roman, lower-
alpha, upper-alpha, none o la
al comienzo del mismo.
dirección de un gráfico
white- Decide como se manejan los normal y pre
space
espacios, si de manera normal o
como sucede dentro de la etiqueta
<PRE>.
47
PREGUNTAS
1. ¿En qué año Internet se convierte en una red pública y que consecuencias trajo
consigo?
2. ¿Qué es Internet?
3. Muestre el modelo de capas del TCP/IP, así como el conjunto de protocolos
4. ¿En que año y que aplicación provoco el incremento de usuarios en Internet?
5. ¿Cuál es el protocolo utilizado para los sitios Web y en qué consiste?
6. ¿Qué es un RFC?
7. Explique el proceso de comunicación entre el navegador y servidor Web
8. ¿Cuál es la sintaxis de una solicitud HTTP?
9. Indique por lo menos 3 comandos de Solicitud HTTP y su descripción
10. Indique por lo menos 5 tipos de encabezados de Solicitud del HTTP y su
descripción
11. ¿Cuál es la sintaxis de una respuesta HTTP?
12. Indique por lo menos 4 tipos de encabezados de Respuesta del HTTP y su
descripción
13. ¿Qué son los códigos de respuesta y de 2 ejemplos?
14. En una arquitectura Web ¿Qué es un motor de base de datos?
15. ¿Cuál es la diferencia entre una aplicación Web estática y una dinámica?
16. ¿Qué es URL?
17. Muestre el formato de una URL y de un ejemplo de su uso
18. Indique por lo menos 3 tipos de servicios que se usan en una URL así como una
breve explicación de cada uno.
19. Al definir una URL ¿Existen diferencias entre mayúsculas y minúsculas?, si, no,
porque.
20. ¿Qué es una cookies?
21. Explique cada uno de los ejemplos planteados donde se utilizaron cookies
22. ¿Quién define el estándar HTML?
23. Defina que es SGML, XML y HTML
24. Muestre con un dibujo la relación entre las siglas de la pregunta anterior.
25. Muestre y explique la estructura general de un programa HTML.
26. ¿Para qué sirve la etiqueta Hx?
27. Muestre por lo menos 5 etiquetas que permiten cambiar el formato del tipo de
letra.
28. ¿Explique que es un marco?
29. ¿Explique cuál es la estructura de una tabla
30. Indique por lo menos 5 atributos de una tabla, así como su descripción
31. Explique cuál es la diferencia entre expresar el valor de una atributo en pixeles y
en porcentaje
32. ¿Qué es un formulario?
48
33. ¿Cuáles son los parámetros de un formulario, así como su descripción?
34. Muestre una lista de los elementos que puede contener un formulario?
35. ¿En qué parámetro se almacena el texto que contiene un cuadro de texto?
36. ¿Cuáles son los dos tipos de botones que existen?
37. ¿Con que parámetro se marca una casilla de verificación?
38. ¿Para qué se utiliza un campo oculto?
39. ¿Para qué se utilizan los lenguajes ASP, JSP y PHP?
40. ¿Cuál es la ventaja de utilizar CSS?
41. Explique las 3 zonas donde se pueden ubicar las Hojas de Estilo en Cascada e
indique cual es la mejor.
42. Indique por lo menos 3 medios o dispositivos a los que se les puede aplicar CSS
43. Explique cómo se le puede aplicar CSS al body de todas las páginas de un sitio
Web.
49
EJERCICIOS PROPUESTOS.
1. Busque en la red el RFC 2616, analice y realice un cuadro sinóptico de su
contenido.
2. Plantee e implemente un ejercicio donde se apliquen una “cookies” (uso de
cookies.htm)
3. Crear una página (index.htm) que incluya la definición de un conjunto de 3
marcos:
un marco superior que ocupe el 20% de la pantalla, se usará como
encabezado, vincular con la página encabezado.html.
En el área restante un marco izquierdo del 30% para un menú de
opciones, vincular con menú.htm
El resto como marco principal, vincular con principal.htm.
Considerando un caso particular de interés del lector, implementar cada una
de las tres páginas de tal manera que encabezado.html contenga el logotipo y
nombre de la empresa, menú.htm las posibles opciones de menú que podría
contener el sistema y finalmente principal.htm información relevante de la
empresa seleccionada.
4. Utilizando tablas (uso de tablas.htm), diseñe e implemente una, aplicando las
propiedades requeridas para lograr una mejor estética de la misma, la tabla
deberá contener las etiquetas necesarias para mostrar los datos de un
Empleado, tales como: RFC, Nombre, Dirección, Estado civil, Fecha de
Ingreso, Puesto.
5. Considerando el ejercicio anterior, complementar, de tal manera que se use un
formulario (empleado.htm), así como los elementos del formularios necesarios
que permitan la captura de los datos del empleado, enviar los datos a la página
empleado2.php
6. Eliminar todas las propiedades de formato aplicados a cada etiqueta del
ejercicio anterior (guardar como empleadoe.htm), crear una hoja de estilo en
cascada externa (estilos.css) y vincularla con empleadoe.htm, definir los estilos
necesarios en la hoja de estilo para lograr que la página se siga viendo igual ó
mejor que empleado.htm.
50
2
51
2.1 ARQUITECTURA DE LAS APLICACIONES WEB.
La capa intermedia es el código que el usuario invoca para recuperar los datos
deseados. La capa de presentación recibe los datos y los formatea para mostrarlos
adecuadamente. Esta división entre la capa de presentación y la de la lógica permite
una gran flexibilidad a la hora de construir aplicaciones, ya que se pueden tener
múltiples interfaces sin cambiar la lógica de la aplicación.
La tercera capa consiste en los datos que gestiona la aplicación. Estos datos pueden
ser cualquier fuente de información como una base de datos o documentos XML.
52
Fig. 2.1.- Arquitectura Multinivel.
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).
Los lenguajes del lado del cliente son aquellos que pueden ser directamente
interpretados por el navegador ó cliente Web y no necesitan la interpretación
del servidor.
Entre los cuales no sólo se encuentra el HTML y CSS sino también los que se
muestran en la siguiente tabla.
53
LENGUAJES DE PROGRAMACIÓN DEL LADO DEL CLIENTE
HTML
CSS
JAVASCRIPT
APPLETS DE JAVA
VISUAL BASIC SCRIPT
FLASH
JAVASCRIPT
Por ser este el lenguaje de programación del lado del cliente más utilizado en el
capítulo 4 se trata con más profundidad.
APPLETS DE JAVA
Es otra manera de incluir código a ejecutar en los clientes que visualizan una
página Web. Se trata de pequeños 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 de Java están programados en Java y precompilados, es por ello que
la manera de trabajar de éstos varía un poco con respecto a los lenguajes de
script como Javascript. Los applets son más difíciles de programar que los
scripts en Javascript y requerirán unos conocimientos básicos o medios del
lenguaje Java.
54
independientes del sistema operativo de la computadora donde se ejecutan.
Además, Java es más potente que Javascript, por lo que el número de
aplicaciones de los applets podrá ser mayor.
Como desventajas en relación con Javascript cabe señalar que los applet s son
más lentos de procesar y que tienen espacio muy delimitado en la página donde
se ejecutan, es decir, no se mezclan con todos los componentes de la página ni
tienen acceso a ellos. Es por ello que con los applets de Java no se puede hacer
directamente cosas como abrir ventanas secundarias, controlar Frames,
formularios, etc.
FLASH
55
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.
CGI
PERL
56
práctico para la extracción e informe. Se trata de un lenguaje fácil de usar y
muy eficiente, que tiene un excelente sistema de procesamiento de texto.
ASP / ASP.NET
A partir del año 2002 Microsoft lanzó al mercado el lenguaje ASP.NET. Este
lenguaje es más ordenado que el ASP, dado que se separa el contenido de un sitio de
su comportamiento dinámico. Por otra parte, una restricción del ASP y del ASP.NET
es que este lenguaje sólo puede ser ejecutado en el sistema operativo Windows.
PHP
El código PHP se incluye dentro del HTML, entre las etiquetas <?php y ?>. Es
una tecnología “del lado del servidor”, ya que éste es el que interpreta y ejecuta
el código PHP de un sitio dinámico. El navegador solamente recibe la
ejecución. Entre sus principales ventajas se puede señalar:
Es un lenguaje que puede ejecutarse en diferentes sistemas operativos
(Linux, Windows y Macintosh) y en los servidores más populares.
Permite programar sitios con contenido dinámico, combinándolo con los
principales servidores de bases de datos, entre ellos MySQL. De esta
manera los sitios desarrollados con PHP presentan no sólo un gran
dinamismo sino también un excelente manejo de datos. Por ello este
lenguaje es ideal para crear sitios Web catálogos.
Es un lenguaje libre y, por ende, accesible a todas las personas.
JSP
57
Con JSP se puede crear aplicaciones Web que se ejecuten en variados
servidores Web, de múltiples plataformas, ya que Java es en esencia un
lenguaje multiplataforma.
DHTML
Cualquier página que responde a las actividades del usuario y realiza efectos y
funcionalidades se puede englobar dentro del DHTML, pero en este caso se
refiere más a efectos en el navegador por los cuales se pueden mostrar y ocultar
elementos de la página, se puede modificar su posición, dimensiones, color, etc.
Para realizar las acciones sobre la página, como modificar la a pariencia de una
capa, se requiere de un lenguaje de programación del lado del cliente como
Javascript o VBScript.
En la actualidad, DHTML también puede englobar la programación en el
servidor.
XML
XML es una tecnología en realidad muy sencilla que tiene a su alrededor otras
tecnologías que la complementan y la hacen mucho más grande y con unas
posibilidades mucho mayores.
XML, con todas las tecnologías relacionadas, representa una manera distinta de
hacer las cosas, más avanzada, cuya principal novedad consiste en permitir
compartir los datos con los que se trabaja a todos los niveles, por todas las
aplicaciones y soportes.
58
2.4 AMBIENTES PARA EL DESARROLLO DE APLICACIONES
WEB.
La utilización de los ambientes de desarrollo Web resultan necesarios pues los sitios
actuales requieren que se terminen en el menor tiempo posible, codificar todo el sitio
en forma rudimentaria prolongaría el tiempo de desarrollo considerablemente, sin
embargo el hecho de utilizar un ambiente para el desarrollo de los sitios Web, no
exoneran al programador de conocer con profundidad cada uno de los lenguajes que
intervienen para construir el sitio, tarde que temprano el programador tiene que
meterle mano al código y para hacerlo se requiere de un dominio en los diferentes
lenguajes, de otra forma su actividad estaría muy limitada, así la herramienta ayudará
en la confección del sitio en las actividades más repetitivas y comunes, sin embargo
en los detalles finos, se realiza desde el código. Ahora también en la codificación la
herramienta proporciona mucha utilidad.
Es muy necesario utilizar ambientes de desarrollo para aplicaciones Web robustas ya
que estos ambientes ayudan a organizar, probar y escribir el código, aumentando así
la productividad y la calidad de la aplicación que se va a producir. Dos programas
para el desarrollo de aplicaciones Web más populares son:
Adobe Dreamweaver.- Es el estándar de la industria debido a su código
limpio y características avanzadas.
59
Fig. 2.3.- Pantalla principal de Dreanweaver cs4
Nvu.- es una herramienta de código abierto que coincide con muchas de las
características de Dreamwaver, y se puede descargar gratuitamente de la
página www.nvu.com.
Los sitios Web se presentan de todas formas y modelos, desde sencillas pagina a
megasitios que gestionan los negocios para empresas a nivel mundial, el proceso de
desarrollar un sitio implica los mismos pasos basicos:
Conceptualizar e investigar
Crear y organizar contenido.
Desarrollar el aspecto visual y comportamiento
Producir un prototipo
Probarlo
Lanzar el sitio
Mantenimiento
Por supuesto, dependiendo de la naturaleza y escala del sitio, estos pasos variaran en
secuencia, proporción y numero de personas necesarias, pero en esencia, son los
aspectos que se deben cubrir en la creacion de un sitio Web.
CONCEPTUALIZAR E INVESTIGAR
Todos los sitios Web empiezan con una idea. Es el resultado de que alguien quiera
tener algo en línea, sea para fines personales o comerciales. Esta primera fase es
emocionante. Se empieza con una idea (“sitio de venta en línea”, “ambiente virtual de
aprendizaje”, “banca en línea”, etc.) y luego realizar una lluvia de ideas sobre cómo
se va a manifestar como sitio Web. Este es el momento de las listas y bocetos,
60
pizarras y cuadernos. ¿Qué va hacer emociónate? ¿Qué va haber en la primera
pagina?
No se debe preocupar por el ambiente de desarrollo Web hasta que se tenga las ideas
y estrategias juntas. Esto implica formular a los clientes (o así mismo) una serie de
preguntas referidas a recursos, objetivos y lo más importante, los usuarios.
Una muestra de las preguntas que se podrían formular a los clientes o a uno mismo,
durante la fase de investigación del diseño pudriera ser:
Estrategias
¿Por qué crea este sitio Web? ¿Qué espera conseguir?
¿Qué ofrece a los usuarios?
¿Qué quiere que los usuarios hagan en su sitio Web? ¿Después de que se
hayan marchado?
¿Qué hace volver a sus visitantes?
Audiencia objetivo
¿Quién es su principal audiencia?
¿Tiene experiencia con internet y conocimientos técnicos?
¿Puede haber previsiones de la velocidad de conexión de un usuario medio?
¿plataforma? ¿tamaño de monitor? ¿navegador?
¿Cada cuanto se espera que visiten el sitio? ¿Cuánto tiempo permanecerá
durante una visita media?
Contenido
¿Quién es responsable de generar el contenido original?
¿Cómo se enviara el contenido?
61
Recursos
¿Qué recursos se ha dedicado al sitio (presupuesto, personal, tiempo)?
¿Requiere el sitio un sistema de gestión de contenido?
¿El mantenimiento se puede gestionar por personal del cliente?
¿Tiene un servidor para su sitio?
¿Ha registrado un nombre de dominio para su sitio?
Aspecto grafico
¿Tiene en mente un aspecto para el sitio?
¿Tiene ya estándares existentes, como logos y colores, que se tengan que
incorporar
¿Forma el sitio parte de un sitio más grande o grupos de sitios con estándares
de diseño con lo que tiene que coincidir?
¿Qué aspecto tiene otros sitios Web? ¿Qué le gusta de ellos? ¿Qué sitios no le
gustan?
Para los sitios Web dinámicos, se requiere del diseño de la base de datos que
almacenará la información que se procese, siendo necesario después de la
investigación diseñar los modelos para su representación como lo es un modelo
Entidad-Relación.
62
factura (id_fac, fecha)
ventas (id_clie, id_pro, id_fac, cantc, pu)
administradores (id_ad, nom, dir, tel)
Creación de contenido
Cuando se crea un sitio Web para un cliente, se necesita establecer inmediatamente
quien será responsable de generar el contenido que va en el sitio. Idealmente, el
cliente es responsable de generar su propio contenido y destinara los recursos
apropiados para hacerlo.
Diseño de la información
Una vez que se tiene el contenido o al menos una idea clara del contenido que tendrá
el siguiente paso es organizar el contenido para que sea accesible de forma fácil e
intuitiva para su audiencia. Nuevamente, este es el momento para las listas y bocetos.
Se debe tener todo lo que necesita en el sitio en una mesa. Organizarlo por
importancia, categoría, etc. Decidir lo que va en la página principal y lo que se divide
en apartados. Pensar en cómo los usuarios esperarían encontrar la información en su
sitio y diseñar en base a sus necesidades y suposiciones en mente.
63
El mapa del sitio proporciona a los diseñadores una idea de la escala del sitio y como
se relacionan las secciones y ayudas en el diseño de navegación.
Página
Principal
Seleccionar Detalle de
Producto Facturas
No hay nada mejor que lápiz y papel cuando llega al momento de poner en marcha y
documentar el proceso creativo. Antes de implementar cualquier cosa no hay mejor
forma de expresar las ideas rápidamente que en un bloc de notas, en una servilletas o
pizarra, o cualquier superficie que se encuentre disponible. Se trata de creatividad.
64
En algunos casos puede ser necesario crear una página principal prototipo en HTML
para mostrar la interactividad y las características animadas.
En la fase de dirección artística es para explorar el aspecto que tendrá el sitio, por lo
que los bocetos gráficos planos son normalmente adecuados.
De forma ideal, se debe contar con una lista de elementos que cada página debe
contener, incluidas imágenes obligatorias, elementos de navegación y un manuscrito
para el texto. Puede incluso haber un diagrama de la funcionalidad.
Después de revisar los bocetos, el cliente elige uno, a menudo con una lista de
cambios, solicitando una nueva ronda de diseño hasta que el diseño final esté
aprobado.
65
PRODUCIR UN PROTOTIPO
Una vez que el diseño esta aprobado y el documento están listos, el sitio entra en la
fase de producción se puede realizar por una persona. Es más común en el diseño
Web comercial contar con un equipo de personas que trabajan en tareas
especializadas.
El departamento de arte utiliza sus herramientas graficas para crear todos los gráficos
necesarios para el sitio. El departamento de producción codifica el contenido con
HTML y demás lenguajes requeridos, formatea el texto con hojas de estilo. Pueden
crear las hojas finales o simplemente plantillas que se rellenan con el contenido en el
momento. Los programadores escriben los scripts y aplicaciones del lado del servidor
necesarias para que el sitio funcione según lo esperado. Puede haber también
elementos multimedia como videos o películas flash. Es decir, todas las partes del
sitio se tienen que crear.
PROBARLO
Todos los sitios Web se tienen que probar antes de que estén listos para el público.
Los desarrolladores Web profesionales dedican tiempo y recursos al calendario de
producción para realizar pruebas. Tanto formalmente como informalmente, los sitios
se deberían probar para funcionalidad básica, rendimiento en diferentes entornos de
navegación y facilidad de uso.
El sitio se puede probar localmente (en el disco duro) antes de subirse a su lugar
definitivo en el servidor Web. También es de utilidad establecer un sitio de pruebas
oculto en el servidor de modo que los problemas se puedan resolver en su entorno
natural antes de hacerlo público.
66
¿Está todo el contenido?: asegúrese de que no falta ningún contenido.
¿Existen errores tipográficos o errores gramaticales?: la importancia de revisar
un texto a veces se pasa por alto, pero los errores en la copia pueden dañar
seriamente la credibilidad percibida del sitio.
¿Funcionan todos los vínculos?: es fácil dejar vínculos sin vincular durante el
proceso de producción. También es posible que algunos archivos se hayan
movido de sitio y que los vínculos no estén actualizados. Antes de salir a la
Web, se debe comprobar que todos los vínculos en las páginas son correctos.
¿Se muestran todas las imágenes?: Confirmar que todos los archivos gráficos
están en el directorio adecuado y que la ruta de acceso correcta se utiliza en
los elementos para evitar que falten imágenes.
¿Funcionan adecuadamente todos los scripts y aplicaciones?: Ejecutar las
paginas en algunos escenarios típicos de usuario (completando formularios,
comprando un producto, o cualquier otra interacción que tenga sentido para el
sitio) para asegurarse de que todo funciona como debería.
67
Merece la pena ver el sitio bajo condiciones mínimas para ver si puede
realizar alguna modificación para mejorar la experiencia.
¿Es el sitio útil con los gráficos desactivados?: Algunos usuarios con
conexiones más lentas pueden navegar por la Web con gráficos desactivados
en el navegador para agilizar la visualización del contenido. Algunos
navegadores muestran el texto alternativo para cada elemento de imagen pero
otros no. ¿Ha tenido en cuenta a esos usuarios?
¿Qué sucede si el usuario no puede ver los elementos multimedia?: Sería
estupendo si el usuario tuviera los plugins necesarios para ver la multimedia
como las películas flash o Windows media, pero desafortunadamente, este no
es el caso. ¿Proporciona ayuda para obtener los plugins que necesita? ¿Existen
versiones alternativas de su contenido para aquellos que no puedan ver la
multimedia?.
¿Qué aspecto tiene el sitio en una conexión de modem por línea telefónica?:
existen todavía una importante cantidad de usuarios que acceden a la Web con
conexiones lentas. ¿Hay algo que puede hacer para que sus páginas se carguen
rápidamente?
Pruebas de usuario
Otro tipo de pruebas que es importante realizar son las pruebas de usuario. Este
proceso implica sentar a gente en el sitio y ver lo sencillo que les es encontrar
información o completar tareas. Las pruebas de usuario se llevan a cabo pronto en el
proceso de desarrollo para que el diseño del sitio se pueda ajustar antes de que
empiece la producción seria. No es raro realizar pruebas adicionales de usabilidad en
intervalos regulares durante el proceso de producción e incluso después de que se
haya lanzado el sitio, para que el sitio se pueda modificar para atender mejor las
necesidades de los visitantes.
Existen compañías que se puede contratar para que realicen pruebas controladas, pero
el precio normalmente es elevado, siendo una opción solamente para sitios Web
comerciales con importantes presupuestos. Sin embargo, es posible llevar a cabo una
prueba de usuario informal con los miembros de la familia, compañeros de trabajo,
amigos y cualquier otra persona que consiga que se siente delante de la computadora
y conteste algunas preguntas.
En las pruebas orientadas a tareas, a los usuarios se les proporciona una serie de
tareas de dificultad variada a realizar en el sitio como “averiguar quien ofrece las
videocámaras a mejor precio”. Un observador toma notas de cómo se completa la
tarea, al igual que lo vínculos que sigue el usuario en el proceso de completar la tarea.
Algunas preguntas que le gustaría contestar por medio de las pruebas de usuarios son:
68
¿Pueden los usuarios decir a primera vista de que se trata un sitio?
¿Existen obstáculos en la forma de alcanzar los objetivos? ¿Pueden encontrar
fácilmente información crítica o realizar una compra?
¿Disfrutan las personas utilizando el sitio?
¿Existe una tarea determinada o característica en el sitio al que pare que
tropiezan múltiples usuarios?
LANZAR EL SITIO
Una vez que se tiene todos los detalles resueltos para el sitio, es el momento de
enviarlo al servidor final, y ponerlo disponible al mundo.
Es una buena idea realizar una última ronda de pruebas para asegurarse que todo sea
transferido con éxito y que las páginas funcionan adecuadamente bajo la
configuración del servidor final. Esto puede parecer trabajo adicional, pero esto es la
reputación del negocio o la del cliente la que va en el éxito del sitio Web, por lo que
prestar atención a los detalles es esencial.
MANTENER EL SITIO
Un sitio Web nunca está del todo terminado. De hecho la posibilidad de realizar
actualización y mantener el contenido actualizado es una de las ventajas del medio
Web. Es importante tener una estrategia para lo que ocurriría con el sitio después de
su lanzamiento inicial.
También se debería considerar la vida útil del sitio. Si es un sitio que proporciona un
evento especifico, ¿Qué sucederá con el sitio cuando el evento termina? Incluso en
los sitios diseñados para estar en funcionamiento un tiempo requerirán normalmente
un rediseño después de unos años para mantenerse al tanto de los cambios de
contenido y las practicas actuales de publicaciones.
69
Entre los aspectos de seguridad están:
Importancia de la información
Amenazas contra seguridad
Equilibrio entre usabilidad, rendimiento, costes y seguridad
Crear una política de seguridad
Principios de autentificación
Fundamentos de la criptografía
Criptografía de la clave publica
Firmas digitales
Certificados digitales
Servidores Web seguros
Auditorias y registros
Cortafuegos
Copia de seguridad de datos
Seguridad física
IMPORTANCIA DE LA INFORMACIÓN
Al analizar el tema de la seguridad, lo primero que se debe valorar es la importancia
de los datos que se está protegiendo, tanto para el propietario como para los posibles
atacantes.
Puede resultar tentador creer que siempre debería aplicarse el nivel más alto
seguridad a todos los sitios, pero la protección tiene un coste. Antes de decidir el
esfuerzo o los gastos que se desean invertir en el sistema de seguridad, es necesario
determinar el valor de la información.
El valor de la información almacenada en el equipo de un usuario que lo utilice para
divertirse, el de una empresa, el de un banco y el de una organización militar es
diferente, al igual que varían los esfuerzos que invertirá un atacante para obtener
acceso a dicha información. Se debe determinar el valor que tiene los contenidos
almacenados en los equipos para un visitante mal intencionado.
Los usuarios que utilizan la computadora como pasatiempo dispondrán de tiempo
limitado para profundizar en el tema de la seguridad de sus sistemas o en aumentarla.
Como la información que almacenaran en sus equipos es poco probable que interese a
otros usuarios, los ataques serán poco frecuentes y el esfuerzo invertido en ellos será
limitado. Sin embargo, todos los usuarios de equipos con conexión a la red deberían
tomar una serie de precauciones ya que incluso los equipos con los datos menos
interesantes pueden utilizarse como plataformas para lanzar ataques a otros sistemas.
Los equipos militares son un objetivo obvio tanto para individuos como para
gobiernos extranjeros. Para atacar a los gobiernos es necesario disponer de muchos
medios, por lo que resulta aconsejable invertir en personal y otro tipo de recursos
para garantizar la aplicación de todas las precauciones posibles.
70
AMENAZAS CONTRA LA SEGURIDAD.
Las amenazas variaran en función del tipo de sitio Web pero se pueden citar las
siguientes:
Exposición de datos confidenciales
Perdida o destrucción de datos
Modificar datos
Denegación de servicio
Errores en el software
Repudio
Los datos también corren el riesgo de exposición en sus trayectos por la red. Las
redes TCP/IP incorporan una gran cantidad de funciones que han contribuido a
convertirlas en el estándar de facto para la conexión de diversas redes como internet.
Sin embargo, la seguridad no se incluye entre ellas. Los protocolos TCP/IP dividen
los datos en paquetes y los reenvían de equipo en equipo hasta que alcanza su destino.
71
Por lo tanto, los datos pasan a través de una gran cantidad de computadoras hasta
llegar a su destinatario, como se ilustra en la figura 2.8, y cualquiera de ellas puede
ver los datos en su tránsito.
Los datos enviados a través de internet recorren una gran cantidad de equipos
potencialmente inseguros.
Existen comandos y aplicaciones de software para ver la ruta que siguen los datos
desde un equipo origen hasta el equipo de destino. Si los datos van dirigidos a un
equipo de un mismo país, podrían atravesar una decena de equipos diferentes. Si
fueran destinados a un equipo situado fuera del país, el número de intermediarios
podría supera los veinte. Si una organización es de gran tamaño y consta de una red
compleja, los datos podrían recorrer hasta cinco equipos antes de abandonar el
edificio. Para proteger la información confidencial, se pueden cifrar los datos antes de
enviarlos a través de una red y descifrarlos en el otro extremo. Los servidores Web
suelen utilizar el sistema SSL (Secure Socket Layer), desarrollando por Netscape
para realizar esta tarea mientras los datos navegan entre los servidores Web y los
navegadores.
Se trata de una forma bastante barata en términos de costes y de esfuerzos de proteger
las transmisiones, pero como el servidor necesita cifrar y descifrar los datos en lugar
de enviarlos y recibirlos simplemente, el número de visitantes por segundo al que
puede dar servicio el equipo se reduce drásticamente, debido al tiempo que requiere
este proceso.
72
Un pirata informático podría colarse en el sistema y formatear el disco duro. También
podría ocurrir que un programador o un administrador poco atento eliminen el disco
sin querer o que un disco se estropee. Los discos duros en ocasiones fallan.
Se pueden adoptar varias medidas para reducir la probabilidad de perder datos.
Proteger los servidores contra ataques informáticos. Reducir al mínimo los empleados
con acceso al equipo. Contratar únicamente personal competente y atento. Comprar
discos duros de calidad.
Independientemente del causante de las pérdidas de datos, solo hay una forma de
protección real: las copias de seguridad. La realización de copias de seguridad es una
función vital. Asegúrese de volcar sus datos de manera periódica y de almacenar las
copias de seguridad lejos de los equipos habituales. Aunque es poco probable que los
locales de su empresa se quemen o sufran alguna otra catástrofe, el almacenamiento
de una copia de seguridad fuera de ellos es una medida de seguridad barata y eficaz.
Modificar datos
Aunque la pérdida de datos puede causar muchos daños, su modificación puede
resultar aun peor. La eliminación completa de los datos no tardaría mucho tiempo en
detectarse sin embargo detectar una modificación de datos requeriría de mucho más.
Entre las formas de modificación se incluyen cambios en los archivos de datos
ejecutables. La intención de un pirata informático puede ser modificar el aspecto de la
Web u obtener beneficios fraudulentos. Mediante la sustitución de archivos
ejecutables con versiones saboteadas, un pirata informático que haya logrado entrar
una vez en el sistema podría crear una puerta trasera secreta para futuras visitas.
Se puede proteger los datos contra su modificación al viajar por la red mediante una
firma. Esta técnica no impide la modificación de los datos pero, si el receptor
comprueba que la firma coincide al recibir los archivos, sabrá que el archivo no se ha
modificado. Si cifra los datos para proteger contra la visualización no autorizada,
resultaran muy difíciles de modificar durante el trayecto sin su detección.
La protección de los archivos almacenados en un servidor frente a su modificación
exige el uso de las funciones de permisos de acceso a archivos que incorpore el
sistema operativo y protege el sistema de acceso no autorizado. La aplicación de
permiso de archivo permite autorizar el uso de sistema, pero no modificar los
archivos del sistema ni de otros usuarios.
73
instalación, y permite utilizarla en un momento posterior para verificar si los archivos
han variado.
Negación de servicio
Una de las amenazas más difíciles de evitar es lo que se denominado Negación de
servicio (DoS en Ingles). Se produce cuando alguien impide a los usuarios acceder a
un servicio o retrasa el acceso a un servicio en el que el tiempo es crucial.
A principio de 2000, se produjo una oleada de ataques DoS distribuidos a importantes
sitios Web. Entre las víctimas se encontraba yahoo!, eBay, Amazon, ETrade y
Buy.com. Estos sitios están acostumbrados a niveles de trafico que solo se puede
concebir en sueños, pero siguen siendo vulnerables a este tipo de ataques. Aunque los
atacantes no ganan nada con conseguirlo colapsar un sitio, el propietario del mismo
puede perder ingreso, tiempo y reputación.
Algunos sitios esperan concentrar sus transacciones en determinadas horas. Algunos
sitios de apuestas en línea experimentan una mayor demanda antes de un evento
deportivo importante.
Una de las razones de la dificultad de evitar este tipo de ataques es que se pueden
introducir de diferentes formas. Se puede instalar un programa en el equipo de la
victima que utilice el tiempo del procesador del sistema, el envió inverso de correo
basura o recurrir a una herramienta automatizada. El correo basura inverso envía
correo basura en el que se incluye el destinatario como emisor. De esta forma, el
destinatario recibirá miles de respuestas de usuario enfadados.
Protegerse de ataques DoS es una difícil tarea. Si se realiza una búsqueda, se pueden
descubrir los puertos predeterminados que utilizan las herramientas DoS habituales y
cerrarlos. Puede que el enrutador cuente con un mecanismo para limitar el porcentaje
de tráfico que utiliza determinados protocolos como por ejemplo ICMP. Resulta más
sencillo detectar los host de una red utilizada para atacar a otros que proteger los
equipos de posibles ataques. Si todos los administradores de redes se comprometieran
a vigilar su propia red, los ataques DoS no serian un problema. Como existen tantos
métodos de ataque, la única defensa realmente eficaz consiste en controlar el
comportamiento del tráfico normal y contar con una serie de expertos para que
adopten las medidas oportunas en caso de que se produzca alguna situación fuera de
lo normal.
Errores en el software
Es posible que el software que se haya comprado, obtenido o escrito incluya errores
graves. Dados los cortos plazos de desarrollo asignado a los proyectos Web, es muy
74
probable que el software incluya errores. Todas las iniciativas comerciales basadas en
procesos informáticos resultaran vulnerables a software con errores.
Los errores en el software pueden causar todo tipo de compartimientos impredecibles
incluida la indisponibilidad del servicio, lagunas de seguridad, pérdidas financieras y
servicios deficientes. Entre las causad habituales de los errores se pueden citar las
malas especificaciones técnicas, suposiciones erróneas realizadas por los
desarrolladores y pruebas incompletas.
Pruebas incompletas
Resulta prácticamente imposible verificar todas las posibles entradas de los usuarios
en todos dispositivos de hardware existentes, con todos los sistemas operativos
posibles y utilizando todos los parámetros de usuarios disponibles.
Es necesario implementar un plan de pruebas bien diseñado que verifique todas las
funciones del software en un conjunto representativo de equipos. Un conjunto de
pruebas bien planteado debería probar todas las líneas de código del proyecto al
menos una vez. De manera ideal, estas pruebas deberían automatizarse para poder
ejecutarlas en los equipos seleccionados con muy poco esfuerzo.
75
El problema más importante de esta operación es que se trata de un trabajo repetitivo
muy poco atractivo. Aunque hay gente a la que le gusta romper cosas, hay muy pocas
a las que le guste romper la misma cosa una y otra vez. Es importante que en este
proceso participen otras personas además de los desarrolladores originales. Uno de
los objetivos principales de las pruebas es detectar las suposiciones erróneas
realizadas por los desarrolladores. Es probable que una persona no implicada realice
suposiciones diferentes. Además, los profesionales no suelen mostrarse muy
implicados a buscar errores dentro de su trabajo.
Repudio
El ultimo riesgo que considerar es el repudio. El repudio tiene lugar cuando una parte
implicada en una transacción niega haber tomado parte en ella. En el comercio
electrónico puede tratarse de una persona que realice un pedido a través del sitio Web
y que rehace la autorización para realizar el cargo sobre su tarjeta de crédito, o una
persona que acepte algo procedente del correo electrónico y que después afirme que
alguien falsifico dicho correo.
De manera ideal, las transacciones financieras deberían garantizar la seguridad de que
ninguna de las partes las repudiara. Ninguna parte podría denegar su participación en
una transacción o, para ser más exacto, ambas partes podrían demostrar de manera
terminante las acciones realizadas por la otra parte ante un tercero, como por ejemplo
un tribunal. En la práctica, esto no suele ocurrir. La autenticación ofrece ciertas
ganancias sobre la parte con la que se está tratando. Los certificados digitales de
autenticación emitidos por una organización de confianza brindan una gran fiabilidad.
También deberían poder certificarse los contenidos de los mensajes enviados por
cualquiera de las partes.
Para las transacciones entre las partes con una relación ya establecida, los certificados
digitales y el uso de comunicaciones cifradas o firmadas proporcionan una forma
efectiva de limitar el repudio. Si las transacciones son aisladas, como el contacto
inicial entre un sitio de comercio electrónico y un usuario que utilice una tarjeta de
crédito, esta opción no resulta tan práctica.
Por su propia naturaleza, la Web es un lugar peligroso. Este medio está diseñado para
permitir que numerosos usuarios soliciten servicios desde sus equipos. La mayor
parte de estas peticiones realizan peticiones de páginas Web perfectamente legítimas,
pero al conectar sus equipos a internet también existe la posibilidad de que la gente
realice otros tipos de conexiones.
76
Aunque resulta tentador asumir que es apropiado establecer el nivel de seguridad,
más alto, no suele ser así. Si se desea estar completamente protegido, tendrá que
colocar todos los equipos en una caja fuerte sin conexión a la red. Para que los
equipos resulten accesibles se puedan utilizar, es necesario rebajar el nivel de
seguridad de alguna manera.
Se debe buscar el equilibrio entre la seguridad, la usabilidad, el coste y el
rendimiento. Si se aumenta la seguridad de un servicio se puede reducir su capacidad
de uso, por ejemplo, al limitar lo que puede hacer la gente o pedir que se identifiquen.
El incremento de la seguridad también puede reducir el nivel de rendimiento de los
equipos. La ejecución de software para lograr que el sistema resulte más seguro
(como sistemas de encriptación y detección de intrusos, escáneres de virus y
operaciones de registros de usuario) absorbe recursos. Se necesita mucho más
potencial de procesamiento para suministrar una sesión cifrada, como una conexión
SSL a un sitio Web, que una sesión normal. La pérdida de rendimiento se puede
compensar con la adquisición de equipos o hardware más rápido que este
especialmente diseñado para operaciones de encriptación.
El rendimiento, la usabilidad, el coste y la seguridad se pueden considerar como
objetivos contrapuestos. Se deberán examinar los pros y los contras de cada opción y
tomar una decisión que logre un compromiso en función del valor de la información,
del presupuesto, de la cantidad de visitas esperadas y de los obstáculos que considere
que aceptaran los usuarios legítimos.
PRINCIPIO DE AUTENTICACIÓN
77
de seguridad, cuanto más seguro son los métodos más problemáticos resultan de
utilizar.
Otra opción consiste en mostrar a los usuarios como seleccionar mejores contraseñas
pero de todas maneras el 25% de ellos seguirán utilizando contraseñas sencillas de
adivinar. Se pueden implementar políticas de contraseñas que impidan a los usuarios
seleccionar combinaciones fáciles comparando las contraseñas introducidas con un
diccionario de letras en mayúsculas y minúsculas. El peligro de una política de este
tipo es que los usuarios legítimos no logren recordar las contraseñas escogidas. Las
contraseñas difíciles de recordar aumentan la probabilidad de que los usuarios
realicen una acción poco segura como escribirlas en una nota y pegarla en sus
monitores. Es necesario educar a los usuarios para que no escriban sus contraseñas ni
las comuniquen por teléfono a alguien que afirme estar trabando en el sistema.
Las contraseñas solo deberían capturarse electrónicamente. Mediante el uso de
programas para capturar pulsaciones del teclado en una terminal o la información que
circula por la red, los piratas informáticos pueden capturar pares de nombres de
usuarios y contraseñas. Puede limitar las oportunidades de capturar contraseñas
cifrando el tráfico de red.
A pesar de sus defectos potenciales, las contraseñas son una forma sencilla y
relativamente efectiva de autentificar usuarios. Puede que el nivel de anonimato no
78
resulte adecuado para la seguridad nacional, pero son una solución perfecta para
comprobar el estado del pedido de un cliente.
FUNDAMENTOS DE LA ENCRIPTACIÓN
Un algoritmo de encriptación es un proceso matemático que transforma información
en una cadena aparentemente aleatoria de datos.
Los datos de los que se parte son textos sin procesar, aun que no es importante para el
proceso lo que represente la información (que se trate de texto o de otro tipo de
datos). La información cifrada se conoce como texto encriptado, aunque se parezca
poco a un texto en la mayor parte de los casos. El texto que se desea cifrar se
introduce en un motor de encriptación, que podría ser un programa informático. El
motor devuelve el texto encriptado.
La criptografía tiene unos 4000 años de antigüedad, pero alcanzo la mayoría de edad
en la segunda guerra mundial. Su crecimiento desde entonces ha seguido de cerca al
desarrollo de las redes de computadoras. En un principio solo era utilizada por las
instituciones militares y organizaciones financieras. En los años 70 se extendió su uso
y en los años 90 se hizo omnipresente. En los últimos años, la encriptación ha pasado
79
de ser un concepto que solo la gente conocía por las películas de espías y de la
segunda guerra mundial a convertirse en algo de lo que se habla en los periódicos y se
utiliza cada vez que se compra algo a través de navegadores Web.
La ventaja de este sistema es que la clave pública, como su nombre indica, se puede
distribuir públicamente. Todo el mundo al que se le entregue la clave pública puede
enviar un mensaje seguro al receptor, mientras se tenga en secreto la clave privada,
solo el receptor podrá descifrar el mensaje.
80
El algoritmo de clave pública más utilizada es el RSA. Desarrollado por Rivest,
Shamir y Adelman en MIT y publicado en 1978. RSA era un sistema propietario poro
la patente venció en septiembre de 2000.
La capacidad para transmitir una clave publica de forma abierta y sin necesidad de
preocuparse por que resulte visible para una tercera parte supone una gran ventaja.
Un sistema de clave pública se utiliza para transmitir la clave para un sistema de
clave secreta que se utiliza durante el resto de una comunicación de sesión. Esta
complejidad añadida resulta tolerable por que los sistemas de clave secreta son unas
1000 veces más rápidos que los sistemas de clave pública.
FIRMAS DIGITALES
Las firmas digitales están relacionadas con la criptografía de clave pública, pero
invierten los papeles de las claves públicas y privadas. Un remitente puede cifrar y
firmar digitalmente un mensaje con su clave secreta. Cuando se recibe el mensaje, el
receptor puede descifrarlo con la clave secreta del remitente. Como el remitente es la
única persona con acceso a la clave secreta, el receptor puede estar bastante seguro de
la procedencia del mensaje y de que no se ha alterado.
Las firmas digitales resultan muy útiles. Garantizan la procedencia de los mensajes y
dificultan el rechazo del envió por parte del remitente. De todos modos, es importante
tener en cuenta, que aunque el mensaje se ha cifrado, cualquier persona que tenga la
clave publica puede leerlo. Si bien se utilizan las mismas técnicas y claves, la
finalidad de uso de la encriptación en este caso es impedir la modificación de los
mensajes y su repudio, no su lectura.
Como el cifrado de clave publica resulta bastante lento en el caso de mensajes de
gran tamaño, se suele utilizar otro tipo de algoritmo, llamado función hash, para
mejorar la eficacia. La función hash calcula un mensaje o valor hash para cualquier
mensaje que se le indique. El valor generado por el algoritmo no es importante. Lo
importante es que el resultado sea fijo, es decir, que sea el mismo cada vez que se
utiliza una entrada dada, que sea pequeño y que el algoritmo sea rápido.
Las funciones hash más habituales son MD5 y SHA. Una función hash genera un
mensaje implícito que coincide con un mensaje dado. Si se dispone de ambos
mensajes, se podrá verificar si el texto se ha variado, siempre y cuando se esté seguro
de que no se ha tocado el mensaje implícito. La forma más habitual de crear una
firma digital consiste en crear un mensaje implícito para todo el mensaje utilizando
una función hash rápida y, a continuación, cifrar únicamente el mensaje implícito
utilizando un algoritmo de clave pública. Seguidamente se puede enviar la firma con
el mensaje a través de cualquier método normal no seguro.
Cuando se recibe un mensaje, se puede realizar su comprobación, la firma se descifra
utilizando la clave pública de remitente. Se genera un valor hash para el mensaje
utilizando el mismo método utilizado por el remitente. Si el valor hash descifrado
coincide con el valor hash generado, se pode estar seguro de que el mensaje procede
del remitente y no se ha alterado.
81
CERTIFICADOS DIGITALES
La posibilidad de verificar que un mensaje no se ha alterado y que procede de un
usuario o de un equipo dado es un gran avance. Para las interacciones comerciales,
resultaría incluso mejor disponer de la posibilidad de vincular a dicho usuario o
servidor a una entidad legal real como una persona o compañía.
Un certificado digital combina una clave pública con los detalles de una organización
o individuo en un formato digital. En un certificado, se tiene la clave pública de otra
parte, por si se quiere enviar un mensaje cifrado y tener los detalles de la otra parte
que podrá estar seguro de que no se ha alterado.
82
Se puede comenzar a utilizar SSL de forma inmediata si genera certificados propios.
Para poder utilizar SSL con eficiencia, necesitara un certificado publicado por una
autoridad de certificación.
El proceso exacto para lograrlo varía según la autoridad de certificación, pero por
regla general se deberá demostrar que la empresa está reconocida legalmente, que
consta de una dirección física y que es el titular del nombre de dominio pertinente.
AUDITORIAS Y REGISTROS
El sistema operativo permitirá registrar todo tipo de evento. Los eventos en los que se
puede estar interesado desde el punto de vista de la seguridad incluyen errores de red,
acceso a archivos de datos, etc.
83
determinar cómo tuvo lugar un problema o una intrusión si se examina tras observar
problemas. Los archivos de registro presentan dos problemas principales: el tamaño y
la veracidad.
CORTAFUEGOS
El objetivo de los cortafuegos es alejar una red del mundo exterior. De la misma
forma que los cortafuegos de un edificio o de un coche impiden que el fuego se
extienda a otros compartimientos, los cortafuegos de red impiden que el caos se
extienda por una red.
Los cortafuegos están diseñados para proteger los equipos de una red del mundo
exterior. Filtran y rechazan el tráfico que no cumple las reglas establecidas en ellos.
Restringe las actividades de la gente y los equipos situados fuera de los cortafuegos.
En ocasiones, los cortafuegos también se pueden utilizar para restringir las
actividades de los equipos incluidos en su interior. Uno cortafuegos puede limitar los
protocolos de red que se pueden utilizar, los host a los que se pueden conectar o
forzar el uso de un servidor proxy para reducir costes en términos de ancho de banda.
84
COPIA DE SEGURIDAD DE LOS DATOS
No se puede subestimar la importancia de las copias de seguridad en ningún plan de
recuperación de desastres. El hardware y los inmuebles se pueden asegurar y sustituir,
o los sitios alojados en cualquier host, pero si el software Web personal desaparece,
ninguna entidad aseguradora podrá sustituirlo.
Se deben hacer copias de seguridad periódicas de todos los componentes del sitio
Web (páginas estáticas, secuencias de comandos y bases de datos). La frecuencia
depende del dinamismo del sitio. Si se trata de un sitio completamente estático,
bastara con hacer una copia cuando se modifique. Sin embargo, el tipo de sitio que se
está tratando es probable que cambie con frecuencia, en especial si se reciben pedidos
en línea. La mayor parte de los sitios con un tamaño razonable deben alojarse en un
servidor con un sistema RAID (del ingles Redundant Array of Inexpensive Disk,
Matriz redundante de discos independientes) que admite funciones de réplica. De esta
forma, queda cubierta la probabilidad de que ocurra un fallo en el disco duro. sin
embargo, se debe considerar que ocurriría en una situación que afecta a la matriz, al
equipo a al edificio entero.
La frecuencia con la que se deben realizarlas está en función con el volumen de
actualización. Estas copias de seguridad deberían almacenarse en un lugar diferente y
a ser posible en un lugar distinto y seguro contra incendios, robos o desastres
naturales.
SEGURIDAD FISICA
Las amenazas de seguridad consideradas hasta el momento hacen referencia a
elementos intangibles como el software, pero no se debería descuidar la seguridad
física de un sistema. Se debe prever un sistema de aire acondicionado y sistemas de
protección contra el fuego, personas (torpes o criminales), fallos en el suministro
eléctrico y fallos en la red.
El sistema debería estar protegido bajo llave en un lugar seguro. El lugar concreto
dependerá de cada caso pero puede ser una habitación, una jaula o un armario. Solo
se debería conceder permiso de acceso a esta habitación al personal pertinente. El
personal no autorizado podría, voluntaria o involuntariamente, desconectar los cables
o intentar eludir los mecanismos de seguridad utilizando un disco de reinicio.
Los rociadores de agua pueden causar tanto daño a los componentes electrónicos
como el fuego. Los sistemas para la extinción de incendios deben utilizar alternativas
poco dañinas como el gas argón o el dióxido de carbono.
Al igual que los fallos de suministro eléctrico, los fallos de red pueden durar minutos
o hasta horas, Si el mantenimiento de la red es vital, es aconsejable contratar los
servicios de varios proveedores de servicios. El coste será superior, pero en caso de
fallo, el sitio seguirá estando activo, aunque se vea afectada su capacidad.
85
PREGUNTAS
1. ¿En qué consiste una arquitectura de aplicaciones de dos niveles?
2. ¿En qué consiste una arquitectura de aplicaciones de tres niveles?
3. ¿Qué elementos intervienen en el primer nivel de una aplicación Web?
4. ¿Qué son los lenguajes de programación del lado del cliente?
5. ¿Entre que etiquetas se escribe el código de Javascript?
6. ¿Cuál es la principal ventaja de los Applets de java?
7. ¿Cuál es la desventaja de Visual Basic Script?
8. ¿Flash es un lenguaje, si, no, porque?
9. ¿Qué son los lenguajes de programación del lado del servidor?
10. ¿Cuáles son los lenguajes del lado del servidor más utilizados?
11. ¿Cuáles son las razones por los que los CGI se encuentran desfasados?
12. El lenguaje PERT ¿se parece más a Javascript o a un applet de java?, ¿Por qué?
13. ¿Qué servidor Web y que sistema operativo utiliza el ASP.NET?
14. ¿Entre que etiquetas se incluye el código de PHP?
15. Menciones tres ventajas de PHP
16. ¿A quién se parece más JSP, a ASP.NET o a PHP?, ¿Por qué?
17. ¿Cuáles son los lenguajes considerados como por el lado del cliente como por el
lado del servidor?
18. Explique, ¿Por qué se requieren los ambientes para el desarrollo de aplicaciones
Web?
19. De dos ejemplos de ambientes para el desarrollo de aplicaciones Web
20. ¿Cuáles son los pasos básicos para el desarrollo de una aplicación Web?
21. ¿Cómo se empieza un sitio Web?
22. ¿En qué etapa del desarrollo Web se realiza el modelo entidad – relación?
23. ¿Para qué sirve el mapa de un sitio Web?
24. ¿Cuál es la finalidad de presentar las propuestas de bocetos del sitio al cliente?
25. ¿En qué consiste la fase de producción del prototipo?
26. ¿En qué consiste la prueba de funcionalidad básica del sitio?
27. ¿En qué consisten las pruebas del entorno de navegación?
28. ¿En qué consisten los dos tipos de pruebas de usuario?
29. En qué consiste el lanzamiento de un sitio?
30. ¿En qué consiste el mantenimiento del sitio?
31. ¿Muestre por lo menos una lista de 8 aspectos de seguridad para un sitio Web?
32. ¿Se debería aplicar el nivel más alto de seguridad a un sitio Web? Si, no.
¿Porque?
33. ¿Cómo evitar la exposición de datos confidenciales de un sitio Web?
34. ¿Es más costosa la exposición de datos confidenciales, la perdida de datos o la
modificación de los mismos?, ¿Por qué?
35. ¿Cómo se puede verificar la modificación de datos?
36. ¿Cómo protegerse de la denegación de servicio?
37. ¿Qué comportamientos pueden causar los errores en el software?
38. Explique que es el repudio
39. ¿Cuáles son las formas efectivas de limitar el repudio?
40. Si aumenta el nivel de seguridad, ¿qué pasa con el nivel de usabilidad y el
rendimiento del sitio?, aumenta, disminuye, ¿porque?
86
41. ¿Qué describe una política de seguridad?
42. ¿Qué es la autenticación?
43. ¿Cuáles son las técnicas de autenticación?
44. ¿Qué es la encriptación?
45. ¿Explique cómo funciona la función sha1()?
46. ¿En qué consiste la encriptación de clave privada?
47. ¿En qué consiste la encriptación de clave pública?
48. ¿Cuál es la función de una Autoridad de Certificación?
49. ¿Cómo se utilizan los SSL?
50. ¿Por qué no se deben utilizar los Certificados digitales propios?
51. ¿De qué forma los cortafuegos protegen la red?
52. ¿Con que frecuencia se deben realizar las copias de seguridad de datos?
53. ¿Cuáles son los elementos que se consideran en la seguridad física de un sistema?
87
EJERCICIOS PROPUESTOS.
1. Instalar un servidor Web en ambiente Windows, describir el procedimiento y
probar su funcionalidad.
2. Instalar un servidor Web en ambiente Unix , describir el procedimiento y probar
su funcionalidad.
3. Siguiendo la metodología para el desarrollo de aplicaciones Web, seleccionar un
caso de estudio y presentar:
Una descripción general de la aplicación
El modelo Entidad – Relación
Tablas Normalizadas
Descripción de tablas y diccionario de datos
Un mapa del sitio propuesto
Tres propuestas de bocetos de la página principal del sitio.
88
3
89
3.1 PROCESAMIENTO DEL LADO DEL SERVIDOR.
En este capítulo se aborda la programación del lado del servidor, es decir el lenguaje
de programación que se procesan solo en el servidor. Los lenguajes del lado del
servidor son invisibles para los clientes. Las páginas que utilicen scripts de este tipo
contienen el código entre etiquetas parecidas a las de HTML, pero éstas desaparecen
cuando el cliente recibe la página.
Los lenguajes del lado del servidor necesitan un motor (un programa) que interprete
el código según el lenguaje de programación que se esté utilizando. El procesamiento
realizado cuando se use PHP como lenguaje de acceso a base de datos se muestra en
la figura 3.1.
Un sencillo ejemplo donde se utiliza código de PHP sin acceso a una base de datos se
muestra a continuación:
90
El siguiente listado es el archivo original que reside en el servidor Web, contiene
además de código HTML código de PHP, mismo se encuentra entre las etiquetas
<?php … ?>, todo los que se encuentre entre estas etiquetas es considerado como
código de PHP; la primera línea hallada entre estas etiquetas defines una variable y la
segunda línea muestra la variable como un mensaje.
Una forma de verificar que el código anterior solo se puede ejecutar en el servidor, es
tratando de ejecutar la pagina basico en el servidor.php directamente en el
navegador, por supuesto que esto no se podrá llevar a cabo, a diferencia de aquellas
páginas que contienen código de lenguajes por el lado del cliente solamente, como
son HTML y Java Script.
Así como en este caso se usa código de PHP, también se puede usar código de un
lenguaje distinto como son JSP, ASP.NET; de ser así cambiarían las etiquetas que
definen el lenguaje en la pagina, así como en el servidor Web se tendría que instalar
el interprete correspondiente.
91
poderoso, capaz de interactuar con cualquier manejador de base de datos y además
gratuito.
Para poder utilizar un lenguaje por el lado del servidor se requiere de una plataforma
de trabajo, en primer lugar la instalación del servidor web, la habilitación del motor
de acceso a la base de datos, así como el servidor de bases de datos propiamente
dicho, estos son los tres programas para poder iniciar con las tareas de programación,
pero además de una herramienta que nos facilite el desarrollo del sitio web.
En este libro se trabajará con Apache como servidor Web, PHP como motor de
acceso a base de datos y MySQL como servidor de base de datos.
Otro programador podría optar por IIS de Microsoft como servidor Web, ASP.NET
como motor para acceso a base de datos y SQL Server como servidor de base de
datos.
En cualquiera de los dos casos se podría optar por la misma herramienta de desarrollo
de aplicaciones Web o escoger uno distinto, según convenga a cada programador.
SERVIDOR APLICACIÓN
WEB APACHE
BASE DE DATOS MySQL
MOTOR PHP PHP
Tabla 3.1.- Servicios requeridos para desarrollo Web
Cada una de las aplicaciones se pueden descargar por separado en sus sitios oficiales
de forma gratuita, donde se encontrarán las últimas versiones o también se pueden
utilizar programas que se encuentran en Internet que integran todos los servicios en
un solo paquete, Uno de estos programas se conoce como “Wamp Server” su sitio
oficial es: http://www.wampserver.com/ de donde se puede descargar la versión más
reciente que en estos momentos es 2.0.
La ventaja de usar un solo programa que contenga todos los servicios es que el
proceso de instalación y configuración es mucho más fácil y rápido, mientras que
usar por separado cada uno de los servicios requiere de mayor experiencia, ya que se
deben configurar adecuadamente para que interactúen entre sí.
92
Al usar Wamp Server 2.0 por ejemplo, instala en el equipo los servicios y versiones
indicados en la tabla 3.2
CONFIGURACIÓN DE APACHE
El archivo que contiene la configuración del servidor web se llama “httpd.conf”.
Este archivo contiene un conjunto de parámetros que configuran el servidor cada vez
que inicia, este archivo se puede editar para cambiar algún parámetro desde la barra
de tarea directamente en el icono que identifica al programa “wamp” y después de
hacerlo se tendrían que reiniciar los servicios para que surta efecto.
Las líneas que inicien con el carácter # en el archivo “httpd.conf” son considerados
como comentarios, por lo que no tienen efecto en la configuración del servidor. Por
mencionar alguno de los parámetros y sus funciones se muestra la tabla 3.3
PARAMETRO SIGNIFICADO
DocumentRoot "C:/wamp/www" Especifica la ruta donde ubicara el sitio
web
DirectoryIndex index.php index.php3 Indica el orden de prioridad a evaluar de
index.html index.htm index.html.var la página de inicio
Listen 80 Indica el número de puerto con el cual
funcionara el servidor Web
LoadModule php5_module Carga el modulo de PHP, para ligarlo
"c:/wamp/php/php5apache2_2.dll" con el servidor apache
Tabla 3.4.- Parámetros de configuración de Apache
CONFIGURACIÓN DE PHP.
PHP también se puede configurar editando su archivo de configuración llamado
“php.ini” funciona de una forma similar al archivo de configuración de apache, solo
que aquí las líneas con punto y como se consideran como comentarios. Algunos de
los parámetros contenidos en este archivo se muestran en la tabla 3.5
93
PARAMETRO SIGNIFICADO
register_globals = Off Habilita o deshabilita el manejo de
variables globales en el código de
php
extension_dir = "c:/wamp/php/ext/" Especifica el directorio de los
archivos de librería dinámica usados
por php
extension=php_mysql.dll Agrega la librería MySQL en php
session.save_path = "c:/wamp/tmp" Directorio donde se guardan los
registros de sesiones de php
display_errors = On Habilita o deshabilita el despliegue
de errores al ejecutarse el código de
php
session.auto_start=1 Habilita el manejo de sesiones
automáticamente
session.cache_expire = 180 Define la duración de las páginas de
session en cache, en minutos.
Tabla 3.5.- Parámetros de configuración de PHP
CONFIGURACIÓN DE MySQL.
MySQL también se puede configurar editando su archivo de configuración llamado
“my.ini” funciona de una forma similar al archivo de configuración de apache.
Algunos de los parámetros contenidos en este archivo se muestran en la tabla 3.6
PARAMETRO SIGNIFICADO
Basedir = Especifica la ruta donde ubicará el
c:/wamp/bin/mysql/mysql5.0.51b servidor MySQL
Datadir = Especifica la ruta donde ubicará las
c:/wamp/bin/mysql/mysql5.0.51b/data bases de datos creados en MySQL
Port 3306 Indica el número de puerto con el cual
funcionara el servidor de base de datos
Tabla 3.6.- Parámetros de configuración de MySQL
Tan solo con instalar el Wamp Server, todos los servicios quedan configurados y
listos para ser usados por el programador, sin embargo en ocasiones existe la
necesidad de algún ajuste en los archivos de configuración para crear una
personalización en el funcionamiento de cada uno de los servicios.
94
tanto el cliente (Navegador) como el servidor (Apache) y además que puedan
interactuar entre sí, como se muestra en la figura 3.2
Una vez que todos los servicios están activos es momento de empezar a programar,
pero antes se debe tener conocimientos básicos del lenguaje de programación del lado
del servidor, que a continuación se aborda en PHP.
3.3 OPERADORES.
Los operadores son símbolos que se pueden utilizar para manipular valores y
variables realizando una operación sobre ellos. Se pueden agrupar como:
De asignación.
Unario.
Aritméticos.
De comparación.
Lógicos.
Ternario.
Bit a bit.
Incremento/Decremento.
Supresión de errores.
El más básico es el símbolo de asignación “=”, utilizado para dar valores a las
variables que usamos en el código
95
<?php $variable = 50.10;
$variable2 = "alumnos";
?>
Las variables que están a la izquierda del operador toman el valor que se encuentra en
la expresión de la derecha
OPERADOR UNARIO
El signo menos (-) se utiliza delante de un número o variable numérica. Este operador
tiene la propiedad de hacer a los números, negativos o positivos, dependiendo del
signo actual.
<?php $entero = 5;
$entero_negativo = -$entero; // El valor es ahora -5
$entero2 = -$entero__negativo; // El valor cambia ahora a 5
?>
Para definir un comentario en línea se hace con la doble diagonal “//” y si se trata de
un comentario de bloque entre los signos /* --------*/
OPERADORES ARITMÉTICOS
Este tipo de operadores forman parte de la aritmética básica. Resultará familiar porque
son símbolos muy utilizados en el aprendizaje de las matemáticas.
Ejemplo Nombre
$a + $b Suma
$a - $b Resta
Sa * $b Multiplicación
$a / $b División
$a % $b Módulo
Tabla 3.7. Operadores Aritméticos
OPERADORES DE COMPARACIÓN
Los operadores de comparación permiten comparar dos variables o expresiones,
usados frecuentemente en sentencias de control como el if else.
96
Ejemplo Nombre
$a == $b Igualdad
$a === $b Identidad
$a != $b Distinto
$a <> $b Distinto
$a < $b Menor que
$a > $b Mayor que
$a <= $b Menor o igual
$a >= $b Mayor o igual
Tabla 3.8. Operadores de comparación
Ejemplo:
<?php $a=5;
$b=7;
if ($a>$b)
Echo ‛$a es mayor que $b ‛;
else
Echo ‛$a no es mayor que $b ‛;
?>
OPERADORES LÓGICOS
Los operadores lógicos permiten unir varias comparaciones entre sí, cuyo resultado
dependerá de la tabla de verdad del operador lógico que se aplique.
Ejemplo Nombre
$a and $b Y
$a or $b O
$a xor $b O exclusiva
! $a Negación
$a && $b Y
$a || $b O
Tabla 3.9. Operadores de lógicos
Ejemplo:
<?php $a=5;
$b=4;
$c=3;
if ($a>$b)&&( ($a>$c)
Echo ‛$a es mayor que $b y $c ‛;
?>
97
OPERADOR TERNARIO
Los operadores que se han visto hasta ahora son capaces de manejar un operando
(Unarios) o dos operandos (binarios). El operador ternario, o de comparación, evalúa
un operando y, dependiendo de si es falso o verdadero, evalúa el segundo operando o
el tercero.
La expresión que se quiere evaluar se escribe delante de un símbolo (?), después la
expresión que tiene que ejecutarse si la evaluación anterior es true, seguida del
símbolo (:) con la expresión que debe ejecutarse si es false.
<?php $a=5;
$b=7;
$a>$b ? $mensaje = "A mayor que B": $mensaje = "A No mayor a B";
Echo $mensaje;
?>
Ejemplo:
<?php
$a =127; // Valor binario 01111111
$b =129; // Valor binario 10000001
$c =$a & $b; // El valor de c 00000001
echo "A:$a B: $b C:$c";
?>
El operador binario Y (símbolo &) compara bit a bit las variables $a y $b. Si los bits
de una misma posición son true (tienen el valor 1), el bit resultado es 1. En este caso,
sólo existe un bits que es igual a true (sus dos valores son 1), por lo tanto el valor de
la variable $c es 1 (en binario 00000001)
98
OPERADORES DE INCREMENTO/DECREMENTO
PHP soporta los operadores de predecremento y post incremento al estilo de C.
Ejemplo:
<?php
$archivo1 = fopen("prueba.txt","r"); //Muestra un error en el navegador
$archivo2 = @fopen("prueba.txt","r"); //Aquí no se muestra el mensaje de error
echo ("El programa sigue ejecutándose");
?>
PRECEDENCIA DE OPERADORES
La precedencia de operadores especifica cómo se agrupan las expresiones, por
ejemplo:
<?php
$Res=4+3*3; // El resultado es 13
$Res2=(4+3)*3; // El resultado es 21
echo "$Res $Res2";
?>
En la primera expresión primero se multiplica 3*3 y luego se le suma 4 de tal forma
que $Res toma el valor de 13, debido a que la multiplicación tiene mayor precedencia
que la suma, en el segundo caso al existir los paréntesis primero se lleva a cabo la
suma de 4+3 y luego se multiplica, debido precisamente a que ahora los paréntesis
tienen mayor precedencia que la multiplicación. En la tabla 3.12 se muestra la de
precedencia de operadores-
99
new Instancia de objeto N/A
[] array Derecha
! NO lógico Derecha
Signo menos Derecha
++ - Incremento, decremento Derecha
@ Supresión de errores Derecha
*/% Multiplicación, división y módulo Izquierda
+. Suma, resta, concatenación Izquierda
<< >> Desplazamiento izquierda y derecha Izquierda
<<=>>= Menor que, menor o igual, N/A
mayor que, mayor o igual
== != Igual, no igual N/A
& Y izquierda
A
O exclusivo Izquierda
| O Izquierda
&& Y lógico Izquierda
|| O lógico Izquierda
?: condicional Derecha
= += .= *= /= Asignación Derecha
= %= &= !=
-= <<= >>=
and Y lógico Izquierda
xor O exclusivo lógico Izquierda
or O lógico Izquierda
Tabla 3.12. Precedencia de Operadores
3.4 SENTENCIAS.
Una sentencia puede ser una asignación, una llamada a función, un bucle, una
sentencia condicional e incluso una sentencia que no haga nada (una sentencia vacía).
Las sentencias normalmente acaban con punto y coma. Además, las sentencias se
pueden agrupar en grupos de sentencias encapsulando un grupo de sentencias con
llaves. Un grupo de sentencias es también una sentencia.
Para controlar que secciones de código se ejecutan y cuáles no, se pueden utilizar:
if
else
elseif
switch
100
while
do..while
for
foreach
if
Esta instrucción ejecuta una línea o un bloque de código dependiendo de si se cumple
o no una o varias condiciones. La sintaxis básica para ejecutar una sola línea de
código es la siguiente:
if(expresion)
codigo php
Si se van ejecutar varias líneas se requieren las llaves para delimitar el código:
if(expresion)
{
código php...
código php...
}
Ejemplo:
<?php
$registros=0;
if (!$registros) //Si no $rgistros
{
echo "ERROR AL GUARDAR LOS DATOS";
exit();
}
?>
El ejemplo anterior se usa típicamente después de efectuar una consulta a una tabla o
un conjunto de tablas de una base de datos, cuando se lleva a cabo con éxito toma un
valor diferente de 0 y en caso contrario toma el valor de 0, para omitir los detalles se
asigno a la variable $registro= 0, por lo tanto la expresión si no $registro retornará
un valor true y el mensaje se mostrará. La función exit() se usa para producir la
terminación abrupta de una página.
else
Si no se cumple una condición del if, se puede utilizar esta instrucción para ejecutar
una línea o un bloque de código. La sintaxis es la siguiente:
if(expresion)
{
código php
}
else
{
código php
}
101
Ejemplo:
<?php
$promocion=10;
if($promocion)
$pro="SI";
else
$pro="NO";
echo $pro;
?>
elseif
Aunque se pueden anidar varios if y else, se puede utilizar el elseif para mejorar la
legibilidad del código. La sintaxis básica para ejecutar una sola línea de código es la
siguiente:
if(expresion1)
código php
elseif(epxresion2)
código php
elseif(epxresionN)
código php
else
código php
Ejemplo:
<?php
//Determina el número de $opcion
$opcion=2;
if ($opcion==1)
echo"OPCIÓN UGUAL A UNO";
elseif($opcion==2)
echo"OPCIÓN UGUAL A DOS";
elseif($opcion==3)
echo"OPCIÓN UGUAL A TRES";
else
echo"OPCIÓN NO ES UNO, DOS NI TRES";
?>
Si las tres primeras condiciones no son verdaderas se ejecuta la última sentencia else
102
switch
Cuando se tiene una lista larga de if..elseif..else el código se puede volver difícil
de mantener y leer, switch puede ser una mejor opción.
switch(expresion)
{
case 0:
código php...
break;
case 1:
código php...
break;
case N:
código php...
break;
default:
código php...
}
break sirve para detener la ejecución del código una vez que se cumple la condición.
El valor de cada case debe ser un numero o string, no se recomienda utilizar
expresiones ya que puede marcar errores de sintaxis o bien es mejor utilizar un if.
El siguiente ejemplo hace exactamente lo mismo que el ejemplo anterior solo que
ahora con la sentencia switch.
<?php
//Determina el número de $opcion
$opcion=2;
switch($opcion)
{
case 1:
echo"OPCIÓN UGUAL A UNO";
break;
case 2:
echo"OPCIÓN UGUAL A DOS";
break;
case 3:
echo"OPCIÓN UGUAL A TRES";
break;
default:
echo"OPCIÓN NO ES UNO, DOS NI TRES";
}
?>
while
Esta sentencia ejecuta una línea o un bloque de código repetidamente hasta que se
cumple una condición. La sintaxis es la siguiente:
while(expresion)
{
código php
}
103
Ejemplo:
Muestra una tabla con 2 columnas, una contiene los números del 1 al 10 y la otra la
multiplicación de ese número por 5.
<!-- while.php-->
<head>
<title>Uso de while</title>
</head>
<body>
<table border="1" >
<tr>
<td>No.</td>
<td><p>Mult. por 5</p> </td>
</tr>
<?php
$x=1;
while($x<=10) {
$r=$x*5; //Multiplica por 5 en cada iteración
echo"<tr>
<td>$x</td>
<td>$r</td>
</tr>";
$x++;
}
?>
</table>
</body>
</html>
En primer lugar se usa HTML para definir la tabla y visualizar su primera fila, la fila
de encabezado de columna, posteriormente cada fila se muestra usando código de
php, marcado en negrita, la iteración se llevará a cabo mientras la condición sea
verdadera $x<10, por lo que se actúan un total de 10 ciclos, en cada ciclo se muestra
el valor de $x, así como el producto de $x*5, que conforma la tabla de multiplicar por
5. Se puede observar en este ejemplo la forma de usar la función echo de php para
imprimir cada fila de una tabla del html.
do...while
A diferencia del while, esta sentencia verifica la condición al final del ciclo en lugar
de al inicio.
do
{
código php
} while (expresión);
Ejemplo: El mismo que while.php solo que ahora con la sentencia do while
<!-- do while.php--><head>
<title>Uso de do while</title>
</head>
<body>
<table border="1" >
<tr>
104
<td>No.</td>
<td><p>Mult. por 5</p> </td>
</tr>
<?php
$x=1;
do {
$r=$x*5; //Multiplica por 5 en cada iteración
echo"<tr>
<td>$x</td>
<td>$r</td>
</tr>";
$x++;
}
while($x<=10)
?>
</table>
</body>
</html>
while(expresion)
{
código php
if(expresion)
{
continue;
}
código php
}
Ejemplo:
Imprime los números del 0 al 40 que sean múltiplos de 4.
<!-- do while continue.php--><head>
<title>Uso de do while y continue</title>
</head>
<body>
<?php
$x=0;
do {
$x++;
if ($x % 4) //Cualquier valor diferente de cero es verdadero
continue;
echo"$x ";
}
while ($x<=40)
?>
</body>
</html>
La salida es: 4 8 12 16 20 24 28 32 36 40
105
También se puede detener la ejecución del ciclo en cualquier momento con break,
ejemplo.
while(expresion)
{
código php
if(expresion)
{
break;
}
código php
}
Ejemplo:
Genera números aleatorios en el intervalo de 1 a 20 en un ciclo infinito, se interrumpe
cuando se genera el número 5.
for
Se utiliza frecuentemente para ejecutar un bloque de código un número definido de
veces, los criterios que utiliza para lo anterior comúnmente son variables numéricas.
La sintaxis de este comando es:
expresion1 se ejecuta solo al inicio del ciclo, expresion2 se evalúa en cada ciclo y si
evalúa a true se ejecuta el código. expresion3 se ejecuta en cada ciclo.
106
Ejemplo:
En un formulario, llena una lista/menú de números del 1 al 4
<!-- for.php-->
<head>
<title>Uso de for</title>
</head>
<body>
<form name="form1" method="post" action="">
<select name="select">
<?php
for ($x=1;$x<5;$x++)
echo"<option value='$x'>$x</option>";
?>
</select>
</form>
</body>
</html>
foreach
3.5 ARREGLOS.
Un arreglo es una colección de valores con un único nombre. Para acceder a los
distintos valores de la variable se utiliza un índice numérico o alfanumérico.
En PHP los arreglos no tienen que definirse de una forma concreta, sino que pueden
tomar distintos tipos de valores: enteros, caracteres, objetos, etcétera. En PHP no se
necesita saber de antemano el número de valores máximo que podrá tomar el
arreglo., ya que se podrá ir creando valores nuevos a medida que se vayan
necesitando, además el índice para acceder a los valores distintos puede ser numérico
o alfanumérico.
107
$arreglo[] = 15; //Empieza con el indice 0
$arreglo[] = 10; //Indice 1
En lugar de usar la función for para mostrar el contenido del arreglo se puede usar la
sentencia foreach que es más especializado para este fin. Quedando de la siguiente
manera:
$num=array(10,20,30,40,50,60); //Crea un arreglo de 6 elementos
foreach ($num as $valor) //se usa foreach
echo "$valor "; //Muestra 10 20 30 40 50 60
El código con foreach es mucho más compacto y claro, además de que no se requiere
especificar el número de iteraciones, este finaliza al terminar los elementos hallados
en el arreglo.
Para recorrer el arreglo, nuevamente se puede usar la sentencia foreach, solo que
ahora además de acceder al valor del arreglo, también se puede acceder al índice
correspondiente, ejemplo:
foreach ($personal as $indice=>$valor)
echo "$indice = $valor "; //muestra:nctrl = 272 nombre = GASTON DEHESA VALENCIA
Mostraría:
272 GASTON DEHESA VALENCIA
285 JUAN TOLEDO GARCIA
301 MARIA CARRASCO FUENTES
108
El primer índice del arreglo se indexa con la variable que controla el ciclo for y el
segundo índice con el nombre asignado en la definición del array.
Por ejemplo, la función range() devuelve un array con valores numéricos, que van
desde un número de inicio hasta un número final con un incremento
Ejemplo:
Así como existe la función range(), existen otras que crean o manipulan arreglos.
109
{
echo $numero1 * $numero2; // 100
}
function multiplica3()
{
echo 100 * 100; // 10000
}
?>
ARGUMENTOS POR VALOR
Por default, los argumentos que utiliza una función los recibe por valor, esto es,
recibe una copia del valor original. De esta manera si la función altera el valor de la
copia, el original no se ve afectado.
<?php
$valor1 = 5;
$valor2 = 5;
echo $valor1; // 5
echo $valor2; // 5
$valor3 = multiplica($valor1, $valor2);
echo $valor3; // 100
echo $valor1; // 5
echo $valor2; // 5
function multiplica($valor1,$valor2)
{
$valor1 += 5;
$valor2 += 5;
return $valor1 * $valor2;
}
?>
110
PHP permite asignar un valor defautl a un argumento al momento que se declara. La
utilidad de este valor default es que si se omite el valor al mandar llamar la función
automáticamente se le asigna el valor default al argumento.
<?php
$valor1 = 5;
$valor2 = 5;
$valor3 = multiplica($valor1);
echo $valor1; // 5
echo $valor2; // 5
echo $valor3; // 25
function multiplica($valor1, $valor2 = 5)
{
return $valor1 * $valor2;
}
?>
Si se van a asignar valores default a uno o varios argumentos primero se deben
declarar los argumentos que no tienen valores default, y posteriormente los que si
tienen.
<?php
// Correcto
function multiplica($valor1, $valor2 = 5)
{
return $valor1 * $valor2;
}
// Incorrecto
function multiplica($valor2 = 5, $valor1)
{
return $valor1 * $valor2;
}
?>
function multiplica()
{
/* Se crean nuevas variables $valor1 y $valor2 con alcance local.
Las variables globales no se ven afectadas. */
$valor1 += 5;
$valor2 += 5;
return $valor1 * $valor2;
}
?>
111
Hay dos maneras de referenciar las variables globales en las funciones: con la palabra
reservada global y con el arreglo $GLOBALS[].
function multiplica2()
{
global $valor1, $valor2;
$valor1 += 5;
$valor2 += 5;
return $valor1 * $valor2;
}
function multiplica3()
{
$GLOBALS["valor1"] += 5;
$GLOBALS["valor2"] += 5;
return $GLOBALS["valor1"] * $GLOBALS["valor2"];
}
Al escriber las tres funciones en un solo archivo, se puede modificar la línea marcada
en negrita del primer listado para llamar a cada una de las dos últimas funciones. Se
podrá observar que al llamar a la función multiplica2() ó multiplica3(), el resultado
será el mismo, en estos casos, en el interior de estas funciones se puede modificar a
las variables globales.
VARIABLES ESTÁTICAS
Otro concepto que maneja PHP es de las variables estáticas, las cuales se manejan
solo dentro de una función. Las variables normales pierden su valor una vez que se
termina de ejecutar la función, las variables estáticas conservan su valor.
Para utilizar una variable estática se utiliza la palabra reservada static.
Ejemplo:
<?php
function incrementa()
{
static $valor2 = 0;
++$valor1;
++$valor2;
echo "\$valor1 = $valor1<br>";
echo "\$valor2 = $valor2<br><br>";
}
?>
112
Además de las funciones creados por el usuario para su uso personal, PHP cuenta con
una gran cantidad de funciones predefinidas o de librerías, mismas que se pueden
clasificar de la siguiente manera:
Manejo de cadenas
Matemáticas
Fecha y Hora
Archivo
Directorio
Manipulación de MySQL
Manipulación de Microsoft SQL Server
Manipulación de una base de datos con ODBC
Manejo de Sesiones
PDF
Funciones Matemáticas
FUNCION DESCRIPCION
abs (num) Devuelve el valor absoluto de un número.
acos (arg) Devuelve el arco coseno de arg en radianes.
asin (arg) Devuelve el arco seno de arg en radianes
atan2 (y,x) Devuelve el arco tangente de las dos variables x e y. Es similar a el cálculo de la
arco tangente de y / x, excepto que los signos de ambos argumentos son usados
para determinar el cuadrante del resultado
atan (arg) Devuelve la arco tangente de arg en radianes
bindec ( Devuelve el equivalente decimal del número binario representado por el
binario) argumento binario
cos (arg) Devuelve el coseno de arg en radianes
decbin (num) Devuelve una cadena conteniendo la representación en binario de el número dado
en el argumento
113
dechex (num) Devuelve una cadena conteniendo la representación hexadecimal del número
dado en el argumento
exp (arg) Devuelve el número e elevado a la potencia de arg.
log10 (arg) Devuelve el logaritmo en base-10 de arg.
log (arg) Devuelve el logaritmo de arg.
mt_rand (min, genera un valor aleatorio mejorado entre de un valor mínimo a un máximo
max)
pi (void) Devuelve una aproximación de pi
pow (base, Devuelve base elevado a la potencia de exp.
exp)
rand (min, genera un valor aleatorio entre de un valor mínimo a un máximo
max)
sin (arg) Devuelve el seno de arg en radianes.
sqrt (arg) Devuelve la raíz cuadrada de arg.
srand ( Inicializa la semilla del generador de números aleatorios
semilla)
tan (arg) Devuelve la tangente de arg en radianes.
Tabla 3.14. Funciones Matemática
114
Funciones de Directorio
FUNCION DESCRIPCION
chdir cambia de directorio
dir Crea un objeto de la clase directorio
closedir Cierra el manejador de directorios
getcwd Devuelve el directorio actual
opendir Abre el manejador de directorios
readdir Lee las entradas del manejador de directorios
rewinddir Rebobinar el manejador de directorios
Tabla 3.17.- Funciones de Directorios
115
mysql_list_fields Lista los campos del resultado de MySQL
mysql_list_processes Lista los procesos MySQL
mysql_list_tables Lista las tablas en una base de datos MySQL
mysql_num_fields Obtiene el número de campos de la consulta
mysql_num_rows Obtiene el número de filas de la consulta
mysql_pconnect Abre una conexión persistente al servidor MySQL
mysql_ping Prueba la conexión con el servidor o lo conecta si no esta
establecido
mysql_query Ejecuta una sentencia SQL a MySQL
mysql_real_escape_string Escapa caracteres especiales de una cadena para su uso en una
sentencia SQL
mysql_result Devuelve datos de un resultado
mysql_select_db Pone en uso un base de datos MySQL
mysql_stat Devuelve el status actual del servidor
mysql_tablename Devuelve el nombre de la tabla de un campo
mysql_thread_id Regresa el identificador del hilo para la conexión actual
mysql_unbuffered_query Envía una consulta SQL a MySQL, sin recuperar ni colocar en
búfer las filas de resultado
Tabla 3.18 Funciones para Acceso a MySQL
En la tabla 3.18 se muestran las funciones utilizadas para acceder y manipular una
base de datos con el manejador MySQL, mismos que se presentarán en el tema 3.10
en detalle.
Así como existe un repertorio de funciones para MySQL, también se encuentran para
otros manejadores de bases de datos como Microsoft SQL Server, dBase, Oracle,
Informix, Interbase, Ingres, etc. También se pueden acceder a las bases de datos
usando funciones de PHP para ODBC (Conectividad abierta de base de datos), este
tiene la ventaja de poder conectarse con cualquier manejador de base de datos, tan
solo con contar con el manejador ODBC correspondiente, aunque por el hecho de
agregar un intermediario en el proceso de acceso a la base de datos trae consigo un
coste de rendimiento. En la tabla 3.19 se muestra el repertorio de funciones para
manipular una base de datos con Microsoft SQL Server.
FUNCION DESCRIPCION
mssql_bind Adds a parameter to a stored procedure or a remote stored
procedure
mssql_close Cierra una conexión con MS SQL Server
mssql_connect abre una conexión con MS SQL server
mssql_data_seek mueve el puntero interno de las filas
mssql_execute Ejecuta un procedimiento almacenado en la de base de datos
MS SQL server
mssql_fetch_array Extrae la fila de resultado como una matriz asociativa
mssql_fetch_assoc Devuelve una matriz asociativa que corresponde a la fila
recuperada y mueve el apuntador de datos interno hacia adelante
mssql_fetch_batch Retorna el siguiente registro secualcialcialmente
mssql_fetch_field Extrae la información de una columna y la devuelve como un
objeto
mssql_fetch_object Extrae una fila de resultado como un objeto
mssql_fetch_row Devuelve una fila de resultado como matriz
116
mssql_field_length Devuelve la longitud del campo especificado
mssql_field_name Devuelve el nombre del campo especificado en un resultado
mssql_field_seek Asigna el puntero del resultado al offset del campo especificado
mssql_field_type Devuelve el tipo del campo especificado en un resultado
mssql_free_result libera de la memoria el resultado de una consulta
mssql_get_last_message Retorna mensajes del servidor (En casos de error)
mssql_guid_string Convierte un numero de 16 bits a cadena
mssql_init Inicializa un procedimiento almacenado ó procedimiento
almacenado remoto
mssql_min_error_severity Define un nivel de error bajo
mssql_min_message_severity Define un nivel de mensajes de error a bajo
mssql_next_result Mueve el resultado interno del apuntador al siguiente resultado
mssql_num_fields Obtiene el número de campos de la consulta
mssql_num_rows Obtiene el número de filas de la consulta
mssql_pconnect Abre una conexión persistente con MS SQL
mssql_query Ejecuta una sentencia SQL a MS SQL
mssql_result Devuelve datos de un resultado
mssql_rows_affected Devuelveel numero de registros afectados por una sentencia
SQL
mssql_select_db Pone en uso una base de datos de MS SQL
Tabla 3.19 Funciones para Acceso a Microsoft SQL server
Tabla 3.20 Palabras de inicio de funciones para Acceso a diferentes bases de datos
117
Funciones de manipulación de una base de datos con ODBC
FUNCION DESCRIPCION
odbc_close_all Cierra todas las conexiones ODBC
odbc_close Cierra una conexión ODBC
odbc_commit Entrega una transacción ODBC
odbc_connect Conecta a una fuente de datos
odbc_cursor Toma un nombre de cursor
odbc_data_source Retorna información de la conexión actual
odbc_exec Ejecuta una sentencia SQL
odbc_execute ejecuta una declaración preparada
odbc_fetch_array Extrae la fila de resultado como una matriz asociativa
odbc_fetch_object Extrae una fila de resultado como un objeto
odbc_fetch_row Devuelve una fila de resultado como matriz
odbc_field_len Devuelve la longitud del campo especificado
odbc_field_name Devuelve el nombre del campo especificado en un resultado
odbc_field_num Devuelve el numero de campo
odbc_field_type Devuelve el tipo del campo especificado en un resultado
odbc_free_result Recursos libres asociados con un resultado
odbc_longreadlen Manejo de LONGITUD de columnas
odbc_next_result Mueve el resultado interno del apuntador al siguiente resultado
odbc_num_fields Obtiene el número de campos de la consulta
odbc_num_rows Obtiene el número de filas de la consulta
odbc_pconnect Abre una conexión persistente de base de datos
odbc_prepare Prepara una declaración para su ejecución
odbc_procedures Retorna la lista de procedimientos almacenados
odbc_result Devuelve datos de un resultado
odbc_rollback Volver a pasar una transacción
odbc_setoption Ajusta la configuración de ODBC. Devuelve FALSE en caso de error, en
otro caso TRUE
odbc_tableprivileges Lista las tablas y sus privilegios asociados con cualquier
odbc_tables Retorna la lista de las tablas almacenadas en una fuente de datos.
Tabla 3.21 Funciones para Acceso a una base de datos con ODBC
FUNCION DESCRIPCION
session_cache_expire Devuelve la caducidad actual del caché
session_cache_limiter Lee y/o cambia el limitador del caché actual
session_decode Decodifica los datos de una sesión a partir de una cadena
session_destroy Destruye todos los datos guardados en una sesión
session_encode Codifica los datos de la sesión actual en una cadena
session_get_cookie_params Obtiene los parámetros de la cookie de la sesión
session_id Lee y/o cambia el session id actual
session_is_registered Comprueba si una variable está registrada en la sesión
session_module_name Lee y/o cambia el módulo de la sesión actual
session_name Lee y/o cambia el nombre de la sesión actual
session_readonly Inicia una sesión - reinicializa las variables, pero sin guardar los
cambios al terminar
session_register Registra una o más variables con la session actual.
session_save_path Lee y/o cambia la ruta donde se guardan los datos de la sesión actual
session_set_cookie_params Cambia los parámetros de la cookie de la sesión
session_set_save_handler Establece unas funciones para el almacenamiento de los datos de la
118
sesión a nivel de usuario
session_start Inicializar los datos de una sesión
session_unregister Elimina una o más variable de la sesión actual
session_unset Elimina todas las variables de la sesión
session_write_close Escribe los datos de la sesión y la finaliza
Tabla 3.22 Funciones de PHP para el manejo de Sesiones.
FUNCION DESCRIPCION
AddPage Añade una nueva página
Cell Imprime un celda
TCPDF Constructor
Image Imprime una imagen
Line Dibuja una línea
Ln Salto de línea
MultiCell Imprime texto con saltos de línea
Output Guarda o envía el documento
Rect Dibuja un rectángulo
SetAuthor Establece el autor del documento
SetAutoPageBreak Establece el modo de salto de pagina automático
SetCreator Establece el creador del documento
SetDrawColor Establece el color de graficación
SetFillColor Establece el color de relleno
SetFont Establece la fuente
SetFontSize Establece el tamaño de la fuente
SetKeywords Asocia las palabras claves con el documento
119
SetLineWidth Establece el ancho de la línea
SetMargins Establece los márgenes
SetSubject Establece el tema del documento
SetTextColor Establece el color del texto
SetTitle Establece el título del documento
Text Imprime una cadena
Write Imprime un texto
writeHTML Imprime texto en formato HTML
Tabla 3.23 Funciones para creación de PDF con la librería TCPDF.
GET:
Si no importa que los parámetros se vean en la URL.
Si se desea transferir los datos de la manera más rápida posible.
Si el formulario HTML va a transferir variables de poco tamaño.
Si el usuario puede cambiar el contenido de la web a través de los parámetros de la URL.
POST:
Si no se deseas que las variables se muestren en la URL.
Si el formulario transfiere mucha información, o variables que tengan un tamaño
considerable.
Si las variables contienen caracteres que no son ASCII.
Existen dos formas de enviar datos por “GET”: Mediante URL y mediante
formulario:
<!—get_url.php -->
120
<html>
<head>
<title>Uso de get con url</title>
</head>
<body>
<?php
$clave="DD120G";
$des="DISCO DURO DE 120 GBYTES";
$precio=650.50;
echo "<a href='get2.php? c=$clave & d=$des &p=$precio'>VER DATOS DEL
PRODUCTO</a>"; //Muestra
?>
</body> VER DATOS DEL PRODUCTO
</html>
121
<td ><input name='clv' type='text' id='clvp2' size='10' maxlength='10'></td>
</tr>
<tr>
<td>NOMBRE</td>
<td><input name='nom' type='text' id='nom' size='30' maxlength='30'></td>
</tr>
<tr>
<td>PRECIO</td>
<td><input name='preve' type='text' id='preve'></td>
</tr>
<tr>
<td>EXISTENCIA</td>
<td><input name='exist' type='text' id='existencia2' size='10'
maxlength='10'></td>
</tr>
<tr>
<td><input name='Aceptar' type='submit' id='Aceptar' value='Aceptar'></td>
<td><input type='reset' name='Submit2' value='Restablecer'></td>
</tr>
</table>
</form>
</body>
</html>
http://192.168.1.107/libro_programacion_web/3/get_formulario.php?clv=MOP&nom=MOUSE+
OPTICO&preve=60&exist=5&Aceptar=Aceptar
Se puede observar claramente que todas las variables y valores están visibles para el
usuario, por tal razón se dice que este método no es seguro, puesto que puede ser
invocado desde sitios distintos a una aplicación Web desarrollado por el
programador, causando en algunos casos efectos perjudiciales para los sistemas de
información y en particular cuando los datos se insertan o modifican una base de
datos.
122
Para leer los datos provenientes del formulario, nuevamente se usa la variable súper
global GET[] . En el ejemplo los datos solo se muestran usando el echo, como una
forma de simplificar el código, por lo regular, estos datos se insertan en una tabla de
una base de datos o como parámetros para realizar una consulta.
USO DE POST
Con el uso de POST los datos provenientes de un formulario no quedan expuestas
ante la vista del usuario, es por ello que este es el método más usado para pasar datos
de un formulario a otra página, como muestra el siguiente ejemplo:
123
Al pulsar sobre el botón Aceptar en la barra de direcciones del navegador no se
muestras las variables ni los valores, estos se ocultan internamente. El archivo que
recibe los datos provenientes del formulario es el siguiente:
3.9 SESIONES.
Una sesión es un período de tiempo durante el cual, un usuario ve una secuencia de
páginas en un sitio Web. Desde que entra al sitio, hasta que lo abandona, para ello se
crea un identificador único que se asigna a cada una de estas sesiones de navegación.
A este identificador de sesión se le denomina, comúnmente, como la sesión.
Para que las sesiones funcionen, todas las paginas por las que se desee que se ejecute
deben tener la extensión .php, si se ejecuta por otra página que no sea .php las
sesiones se perderán al abandonar el archivo php.
124
1.- session_start()
Esta función, lo que hace es comprobar si existe alguna sesión abierta, y si no hay
ninguna, se abrirá una. Es una buena idea incluir esta línea en cada script de cada
página ya que si la sesión ya existe no abrirá otra nueva, sino que se limitará a abrir
toda la información asociada a dicha sesión. Una manera de evitar incluir esta función
en todas las paginas es inicializar la variable session.auto_start = 1 en el archivo de
configuración php.ini
2.- session_register()
Esta función sirve para registrar una variable de sesión:
Ejemplo:
$us=dehesa;
$_SESSION['usuario'] = $us;
if (isset($_SESSION['usuario']))
echo "SESION ABIERTA";
else
echo "SESION CERARADA";
4.- Para cerrar una sesión implica dos etapas: des registrar la variable de sesión y
destruir los datos asociados.
Ejemplo:
unset($_SESSION['usuario']); //Eliminar la variable de sesión registrada
session_destroy(); //Destruye los datos asociados a la sesión
125
?>
</body>
</html>
<body>
<?php
if (isset($_SESSION['usuario'])) //Comprueba si la variable existe
{
unset($_SESSION['usuario']); //4.- Eliminar la variable de sesión registrada
session_destroy(); //Destruye los datos asociados a la sesión
echo "SESION AHORA CERRADA";
}
?>
</body>
</html>
Se puede observar que la variable de sesión, se registra únicamente en el archivo
sesion_php_abrir.php sin embargo este se detecta en los tres archivos, debido a que
se usa la variable super global $_SESSION[]. La variable $us=dehesa, es la que se
registra, en una aplicación real, el valor asignado a la variable puede provenir de un
campo de una tabla de una base de datos, que identifique al nombre del usuario que
inicie la sesión, este caso se presentará más adelante.
126
3.10 CONECTIVIDAD ENTRE EL SERVIDOR WEB Y EL
SERVIDOR DE BASE DE DATOS.
Para conectarse a un servidor de base de datos desde el servidor Web, en primer
lugar ambos deben estar instalados y en ejecución. Al instalar WAMP Server ambos
servicios quedan listos para operar. Se puede utilizar el cliente MySQL para verificar
que este en correcta operación, para ello se puede crear un acceso directo en el
escritorio de la interfaz de comandos del DOS y definir que inicie en la ruta donde se
encuentra el archivo ejecutable del cliente MySQL, accediendo a su ficha
propiedades, como muestra la siguiente figura:
Tras definir la ruta de inicio del cliente MySQL, con solo pulsar doble click sobre el
acceso directo la interfaz de comando inicia donde se encuentra el archivo ejecutable.
Cuando el servidor de MySQL está recién instalado, la cuenta de usuario que lo
administra conocido como superusario root, no tiene contraseña, por lo que se puede
invocar como muestra la figura 3.4
127
Tras escribir en la interfaz de comandos: mysql –uroot, y obtener el shell de MySQL
(mysql>), significa que el servidor de base de datos está respondiendo correctamente y
se está ya en posibilidad de acceder al servidor de base de datos desde el código de
PHP
Desde el Shell de MySQL se puede utilizar el conjunto de sentencias del Lenguaje
Estructurado de Consulta (SQL) para: Mostrar base de datos, tablas, poner en uso una
base de datos, crear bases de datos, tablas, insertar, eliminar y actualizar registros, etc.
Para poder realizar operaciones con bases de datos se requiere por lo tanto que
el lector previamente haya estudiado el SQL, de no ser así es el momento de
hacerlo. Existen gran cantidad de bibliografías al respecto, en este libro se anexa
información al respecto en la carpeta: /Curso de SQL
Ejemplo:
El siguiente archivo (ventas.sql) está escrito en lenguaje SQL y corresponde a la base
de datos del modelo entidad relación mostrada en la figura 2.5
128
primary key (id_clie)
);
129
insert administradores values('AD1',sha1('iti'),'PEDRO TOLEDO GARCIA','GPE.
VICTORIA','9717114526');
insert administradores values('AD2',sha1('iti'),'JOSE TOLEDO FUENTES','GPE.
VICTORIA','9717114526');
Si no aparece ningún error, significa que ahora la base de datos ya está construida y
puede ser accedida desde el código PHP.
//Parámetros de conexión
$servidor="localhost";
$usuario="alumnos";
$contasena="iti";
$bd="ventas";
//Función de conexión al servidor mysql
$conexion = mysql_connect($servidor, $usuario, $contasena);
if (!$conexion)
{
echo "ERROR DE CONEXION CON EL SERVIDOR MYSQL";
exit();
}
$cbd=mysql_select_db($bd, $conexion);
130
if (!$cbd)
{
echo "ERROR DE CONEXION CON LA BASE DE DATOS";
exit();
}
El código para la conexión con una base de datos en una aplicación Web, es un
código que se usa frecuentemente en diferentes paginas que conforman el sitio, por
ello se recomienda tenerla como función en un archivo.
Ejemplo:
131
?>
</body>
</html>
include ("conexion.php");
$conexion=conectar();
Para demostrar cada una de ellas se usará la tabla de clientes del archivo ventas.sql
INSERSION
En el siguiente ejemplo se realiza la inserción de registros en la tabla clientes, se usan
dos archivos, el primero contiene un formulario donde el usuario introduce los datos
de cada cliente como son: Clave, nombre, contraseña, dirección y teléfono. Estos
datos son enviados al segundo archivo usando el método POST, se conecta a la base
de datos, usando la función conectar() del archivo conexion.php, inserta el registro en
la tabla de clientes y finalmente muestra los datos introducidos en una tabla HTML.
He aquí el primer archivo:
132
<tr>
<td>CLAVE</td>
<td width="49%"><input name="clv" type="text" id="clv" size="10"
maxlength="10"></td>
</tr>
<tr>
<td>NOMBRE</td>
<td><input name="nom" type="text" id="nom" size="30" maxlength="30"></td>
</tr>
<tr>
<td>CONTRASEÑA</td>
<td><input name="contrasena" type="password" id="contrasena" size="30"
maxlength="30"></td>
</tr>
<tr>
<td>DIRECCION</td>
<td><input name="direccion" type="text" id="precioc2"></td>
</tr>
<tr>
<td>TELEFONO</td>
<td><input name="tel" type="text" id="tel"></td>
</tr>
<tr>
<td colspan='2'><p align='center'><input name='Aceptar' ' type='submit'
id='Aceptar' value='Aceptar'>
</p></td>
</tr>
</table>
</form>
</body>
</html>
El archivo encargado de procesar los datos una vez que se pulsa el botón Aceptar es el
siguiente:
<!-- clientes_alta.php -->
<html>
<head>
<title>Alta de clientes</title>
</head>
<body>
<?php
//Datos recibidos del formulario
$clv= strtoupper($_POST[clv]); //Convierte a mayúscula
133
$no= strtoupper($_POST[nom]);
$dir=strtoupper($_POST[direccion]);
$cont= $_POST[contrasena];
$tel=$_POST[tel];
134
CONSULTA
Para realizar una consulta en la tabla de clientes, basta con un archivo .php, al igual
que el proceso de inserción primeramente se conecta al servidor de base de datos
MySQL así como a la base de datos ventas, se efectúa posteriormente la consulta con
la sentencia SQL correspondiente, el resultado de la consulta se muestra se muestra
en una tabla HTML
<!-- clientes_consulta.php -->
<html>
<head>
<title>Consulta de Clientes</title>
</head>
<body>
<?php
//Conecta al servidor Mysql y a la base de datos ventas
include ("conexion.php");
$conexion=conectar();
//Sentencia de consulta SQL
$sql="select * from clientes";
$registros = mysql_query($sql, $conexion); //Ejecuta la sentencia SQL
//Muestra los datos de la consulta en una tabla HTML
echo "<table border='1' align='center'>
<tr>
<td>No</td>
<td>CLAVE</td>
<td>NOMBRE</td>
<td>DIRECCION</td>
<td>TELEFONO</td>
</tr>";
$x=1; //Contador de registros
while ($reg = mysql_fetch_object($registros))
{
echo"<tr>
<td>$x</td>
<td>$reg->id_clie</td>
<td>$reg->nom </td>
<td>$reg->dir</td>
<td>$reg->tel</td>
</tr>";
$x++;
}
echo"</table>";
?>
</body>
</html>
Los registros retornados por la consulta SQL, se extraen como objetos con la función
mysql_fetch_object(), por cada iteración que se efectúa con la sentencia while, gracias
a eso se puede acceder a cada uno de los campos del registro como una propiedad del
objeto $reg, para mostrarse en la columna adecuada en la tabla HTML. Como el
archivo ventas.sql ya tenía 3 registros en la tabla de clientes, tras agregar uno más, su
contenido se vería así:
135
ELIMINACIÓN
Para la eliminación de un registro en la tabla de clientes, es similar al proceso de
inserción, también se utilizan dos páginas, la primera pagina consiste en un
formulario donde el usuario escribe la clave de cliente que se desea eliminar y la
segunda, recibe este parámetro con el método POST, y efectúa el proceso de
eliminación en la tabla. El primer archivo es el siguiente:
<!-- clientes_eliminar.htm -->
<html>
<head>
<title>Eliminación de Clientes</title>
</head>
<body>
<form name="form1" method="post" action="clientes_eliminar.php">
<table border="1" align="center">
<tr>
<td align="center" colspan="2">ELIMINAR REGISTRO </td>
</tr>
<tr>
<td>CLAVE</td>
<td><input name="clv" type="text" id="clv"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" name="Submit"
value="Enviar"></td>
</tr>
</table>
</form>
</body>
</html>
136
$clv=$_POST[clv];
//Conecta al servidor Mysql y a la base de datos ventas
include ("conexion.php");
$conexion=conectar();
//Sentencia de consulta SQL
$sql="delete from clientes where id_clie='$clv'";
$registros = mysql_query($sql, $conexion); //Ejecuta la sentencia SQL
if ($registros==0)
{
echo "<H2 align='center'>ERROR AL BORRAR EL REGISTRO</H2>";
exit();
}
else
echo "<H2 align='center'>!REGISTRO BORRADO!</H2>";
?>
</body>
</html>
Una vez que se ejecuta la página y el registro se elimina con éxito se muestra en el
navegador el siguiente mensaje:
ACTUALIZACIÓN
Para ejemplificar este caso, se plantea un ejemplo aún más largo que los anteriores,
por eso se encuentra al final de los otros tres casos, consiste en tres páginas. La
primera contiene un formulario donde el usuario escribe la clave del cliente que desee
actualizar sus datos, la segunda página, recibe la clave y realiza una consulta en la
tabla de clientes para obtener todos los demás campos del registro, muestra cada
campo en una tabla HTML y permite que el usuario pueda modificarlos, excepto la
llave que tiene el atributo de solo lectura, por último, según las modificación
efectuadas por el usuario se envían a la tercera página, quien realmente realiza la
actualización en la tabla de clientes.
Este es la primera página:
137
</form>
</body>
</html>
Muestra:
138
</table>
</form>";
?>
</body>
</html>
Con la clave del cliente recibido muestra cada uno de sus demás campos:
Al pulsar el botón Aceptar se llama la tercera página quien realiza las modificaciones
en la tabla.
<!-- clientes_actualizar2.php -->
<html>
<head>
<title>Actualizar Cliente</title>
</head>
<body>
<?php
//Parámetros recibidos del formulario
$clv= strtoupper($_POST[clv]);
$no= strtoupper($_POST[nom]);
$dir= strtoupper($_POST[dire]);
$cont= $_POST[cont];
$tel= $_POST[tel];
if(empty($clv)||empty($no)) //valida que la clave y el nombre no esten vacíos
{
echo "DATOS INSUFICIENTES <BR>";
exit();
}
//Conecta al servidor Mysql y a la base de datos ventas
include ("conexion.php");
$conexion=conectar();
//Sentencia de actualización SQL
$sql="update clientes set clave='$cont',nom='$no',dir='$dir',
tel='$tel' where id_clie='$clv'";
$registros = mysql_query($sql, $conexion); //Ejecuta la sentencia SQL
if (!$registros)
{
echo "ERROR AL MODIFICAR LOS DATOS";
exit();
}
echo "<h3 align='center'>DATOS ACTUALIZADOS</H3>";
?>
</body>
</html>
139
En conclusión para realizar las cuatro operaciones más frecuentes en una tabla de una
base de datos, como son: Inserción, consulta, eliminación y actualización se usaron
las siguientes sentencias SQL para la tabla de clientes:
Operación Sentencia
Inserción insert clientes values('$clv','$cont','$no','$dir','$tel'
Consulta select * from clientes
Eliminación delete from clientes where id_clie='$clv'
Actualización update clientes set clave='$cont',nom='$no',dir='$dir', tel='$tel'
where id_clie='$clv'
Tabla 3.24.- Sentencias SQL aplicados a la tabla de clientes.
Para aplicar las mismas operaciones sobre otra tabla, basta con sustituir el nombre de
la tabla, así como cada uno de los campos que lo componen en las sentencias de la
tabla 3.24. También es importante adecuar los mensajes, formularios y tablas HTML
que se vayan a utilizar para que sean apropiadas a cada caso.
Existen, en PHP, un conjunto muy numeroso de funciones como los mostrados en las
tablas 3.16 y 3.17, que permiten manejar archivos de diferentes formas, para:
Abrir el archivo para su lectura / escritura.
Leer el archivo.
Escribir en el archivo.
Cerrar el archivo
Sintaxis Descripción
'r' Sólo lectura
'r+' Lectura y escritura
'w' Sólo escritura
'w+' Lectura y escritura. Suprime el contenido anterior si se escribe. El archivo es creado si no
existe.
'a' Sólo escritura. El archivo es creado si no existe y el puntero se coloca al final.
'a+' Lectura y escritura. El archivo es creado si no existe y el puntero se coloca al final.
Tabla 3.25 Modos de apertura de archivos
140
si se trata con archivos binarios se debe colocar una b delante del modo (Ejemplo.
ba, bw+,...)
Leer el archivo.
La función fgets() se encarga de leer línea a línea el contenido de un archivo texto
por lo que su utilización debe ser incluida dentro de una sentencia de ciclo:
Ejemplo:
<!-- lee_archivo.php -->
<?php
function marcar($archivo,$cadena)
{
$texto = ""; //Se inicializa la variable
$fp = fopen($archivo,"r"); //se abre el archivo en modo lectura
//Se lee línea por línea el contenido del archivo
while ($linea= fgets($fp,1024))
{ //Se sustituyen las ocurrencias de la cadena de busqueda
$linea = str_replace($cadena,"<u>$cadena</u>",$linea);
//Se añade a la línea de texto agregando cambio de línea
$texto .= $linea."<br>";
}
return $texto;
}
//Aqui inicia la ejecución
$archivo="lee_archivo.php"; //Puede probar con otro archivo
$cadena = "archivo"; //puede probar con otra cadena
$texto = marcar ($archivo,$cadena); //se llama a la funcion
echo $texto; //Se muestra el texto del archivo
?>
En el ejemplo se lee secuencial en un archivo de texto para localizar dentro del texto
una cadena, a la que a continuación, se le cambia el formato para ponerla en
subrayado por medio de la etiqueta <u>. Esto puede resultar útil si se lleva a cabo
búsquedas internas en el sitio y se desea resaltar la cadena de búsqueda en el texto de
la página encontrada.
Escribir en el archivo.
Las funciones para escribir archivos son tan sencillas de utilizar como las de lectura.
La función principal fwrite() escribe en un archivo, apuntado por un descriptor, una
cadena de caracteres. Es imprescindible que el archivo esté abierto en uno de los
modos de escritura para que no dé error.
El siguiente ejemplo muestra el número de veces que se visita la página, Este número
lo almacena en un archivo de texto (contador.txt). Cuando se muestra la pagina por
primera vez, el archivo no existe por lo que el proceso de apertura en modo de lectura
falla retornando un nulo, el proceso de apertura en modo de escritura crea el archivo y
gurda el valor del contador, en actualizaciones posteriores de la pagina, la apertura
del archivo en modo de lectura se enecarga de leer el valor del contador y el proceso
de apertura en modo de escritura de actualizarlo usando la función fwrite()
incrementando el contador.
141
function contador($archivo)
{ $contador = 0; //Se inicializa el número de actualizaciones
$fp = fopen($archivo,"r"); //Se abre el archivo para lectura
if ($fp) //Si se pudo leer el archivo
{
$contador = fgets($fp, 26); //se lee el contador
fclose($fp); //Se cierra el archivo
}
++$contador; //Se incrementa el contador
//Se actualiza el archivo con el nuevo valor
$fp = fopen($archivo,"w+");
fwrite($fp, $contador, 26);
fclose($fp);
echo "Este script ha sido ejecutado $contador veces";
}
contador("contador.txt"); //Se llama a la función
?>
Es importante que el atributo method tenga el valor "post" y que el atributo enctype
tenga el valor ="multipart/form-data"
142
$_FILES['nombre_archivo_cliente']['error']: código de error (en su caso)
3.12 SEGURIDAD.
Los aspectos de la seguridad desde el punto de vista teórico fueron tratados en el
tema 2.6, en este tema, se aborda desde el punto de la programación, los aspectos que
ayudan a mejorar el nivel de seguridad en un sitio Web, son:
Autenticación
Encriptación
Sesiones
Usuarios del sitio Web
AUTENTICACIÓN
La autenticación es un mecanismo para verificar que el usuario que entra al sitio Web
es quien dice ser, para ellos se le puede solicitar antes de poder realizar alguna
operación con el sitio un nombre de usuario y contraseña.
Para el caso de la base de datos de estudio (ventas) en la tabla de clientes se
encuentran los campos id_clie y clave, que pueden servir como nombre y contraseña
respectivamente, para autenticar a los clientes que entran al sitio.
Ejemplo:
143
Este ejemplo consta de dos páginas, la primera consiste en una tabla HTML que
contiene un formulario, donde el usuario introduce su nombre de usuario y
contraseña, estos están inicializados con ‚MLF‛ e ‚iti‛ respectivamente ya que en la
tabla de clientes existe un registro con estos datos. La segunda página, recibe con el
método POST el nombre de usuario y contraseña y busca en la tabla de clientes si
este usuario existe, si es así, muestra un mensaje de bienvenida con el nombre
completo del usuario, en otro caso, muestra un mensaje indicando que el usuario no
está registrado.
Este es la primera página:
<!-- autenticacion.php -->
<html>
<head>
<title>Autenticación</title>
</head>
<body >
<?php
echo"<table align='center' width='40%' border='1'>
<tr>
<td><div align='center'>Datos de tu cuenta</div></td>
</tr>
<tr>
<td><form name='form1' method='post' action='Autenticacion2.php'>
<table width='90%' border='0' align='center'>
<tr>
<td>USUARIO</td>
<td><input name='usuario' type='text' id='usuario' value='MLF'></td>
</tr>
<tr>
<td>CONTRASEÑA</td>
<td><input name='clave' type='password' id='clave' value='iti'></td>
</tr>
<tr>
<td colspan='2'><p align='center'><input type='submit' name='Submit'
value='Aceptar'></p></td>
</tr>
</table>
</form></td>
</tr>
</table>";
?>
</body>
</html>
144
$r= mysql_fetch_object($reg);
$n=mysql_num_rows($reg); //Número de registros de la consulta
if ($n==1) //Se encontró al cliente
echo"<h2 align='center'>BIENVENIDO $r->nom</h2>";
else //No se encontró al cliente
echo"<h2 align='center'>USUARIO NO REGISTRADO</h2>";
?>
</body>
</html>
ENCRIPTACIÓN
PHP, cuenta con diferentes funciones de encriptación, entre los que se pueden
mencionar el MD5() y el sha1(),siendo este último el más seguro, ambos son
algoritmos no reversibles, es decir encriptan una cadena de caracteres pero no pueden
reconstruir la cadena original, es por ello que el mecanismo utilizado para probar la
autenticidad de la cadena original, es mediante la aplicación nuevamente de la
función, y compararla con la encriptada que puede estar almacenado en un campo de
una tabla de una base de datos. sha1() producen una salida resumen de 160 bits (40
caracteres hexadecimales) de un mensaje que puede tener un tamaño máximo de 2 64
bits. El nivel de seguridad del algoritmo sha1 es bueno, aunque en el 2005, un equipo
de investigadores chinos demostraron que son capaces de romperlo a los 269
operaciones, lo cual significa que aún en estas circunstancias no está nada mal.
La función sha1(), se puede aplicar para encriptar la contraseña del usuario, durante
la autenticación, de tal manera que un usuario que se encuentre monitoreando la red
no pueda interpretar la contraseña del algún usuario y poderla usar para autenticarse
posteriormente.
Se puede observar como los registros que tienen asignados a su campo id_clie “DGV‛
y “JTL‛ respectivamente, tienen la función sha1() aplicado al campo clave ó
contraseña, esto significa que la cadena que se almacena en el campo clave de la
tabla de clientes no es “iti‛, sino una secuencia de 40 caracteres en hexadecimal
producidos pos la función de encripatación. Para probar lo anterior, se puede realizar
la siguiente consulta en el servidor MySQL, y obtener su correspondiente resultado.
145
mysql> select id_clie,clave,nom from clientes;
Así se puede observar que dos registros tienen una cadena encriptado, mientras que
una está en texto normal.
SESIONES
Un complemento perfecto para mejorar la seguridad en un sitio Web en el proceso de
autenticación con contraseña, es que se utilice además como el inicio de sesión del
usuario que se está autenticando, para ello es necesario una vez que se compruebe que
el usuario es una usuario registrado se registre su nombre de usuario en la variable de
sesión y este se mantenga mientras navega en el sitio Web hasta que decida cerrar la
sesión.
El siguiente ejemplo implementa la autenticación con encriptación de la contraseña
del usuario, así como el manejo de sesiones, es una modificación de las paginas
autenticación.php y autenticacion2.php, dando lugar a las paginas:
autenticacion_encriptacion_sesion.php y autenticacion_encriptacion_sesion2.php con
otras dos páginas para cerrar la sesión que se inicie, implementadas en las páginas:
cerrar sesion.php y cerrar sesion2.php, por obviedad solo se muestra la página más
importante, sin embargo se puede cargar en el navegador la página
autenticacion_encriptacion_sesion.php para verificar la funcionalidad en conjunto
146
$us= $_POST[usuario];
$clave= $_POST[clave];
include "conexion.php";
$conexion=conectar();
//Busca el cliente en la tabla de clientes
$sql="select * from clientes where id_clie='$us' and clave=sha1('$clave')";
$reg = mysql_query($sql, $conexion);
$r= mysql_fetch_object($reg);
$n=mysql_num_rows($reg); //Número de registros de la consulta
if ($n==1) //Se encontro al cliente
{
echo"<h2 align='center'>BIENVENIDO $r->nom</h2>";
echo"<p align='center'><a href='../2/plantilla1.htm'>Entrar al
sistema</a></p>";
$_SESSION['usuario'] = $us; //Registra la variable de sesión
}
else //No se encontro al cliente
echo"<h2 align='center'>USUARIO NO REGISTRADO</h2>";
?>
</body>
</html>
Al inicio del código de php, se comprueba si la sesión esta iniciada, si es así se llama
a la función cerrar(), para cerrarla, en caso contrario se realiza la consulta SQL para
verificar que el usuario, con la contraseña correspondiente exista en la tabla de
clientes, de ser así se muestra el mensaje de bienvenida, se muestra el vinculo para
acceder a otra página que representaría las opciones accesibles para este usuario y
finalmente registra en la variable de sesión el usuario autenticado, con lo cual se da
por iniciado la sesión.
Se recomienda como medida de seguridad que en todas las páginas accesibles para el
usuario una vez autenticado, se verifique si ya inicio sesión, para mostrársela, en caso
contrario, impedirlo indicándole con el mensaje apropiado.
Ejemplo:
if (!isset($_SESSION['usuario']))
{
echo "Debe iniciar sesión";
exit();
}
Este código puede insertarse al inicio de cada página, para cuidar que otros usuarios
no puedan accederla sin haber antes iniciado una sesión.
147
de un cliente mostrarle la pagina que contenga las opciones que pueda realizar y si se
trata de una administrador una página distinta que a su vez le permita otro nivel de
privilegio.
148
</body>
</html>
149
PREGUNTAS
1. ¿Existe la posibilidad de que en una petición de un cliente Web reciba código
PHP,JSP ó ASP.NET?, si, no, por que
2. ¿Cuáles son los pasos que sigue el navegador cuando realiza una petición?
3. Explique cómo se prueba una página que contiene código de php
4. Mencione los programas que se pueden utilizar como plataforma de trabajo
Web
5. ¿Cómo se llaman los archivos de configuración de: apache, php y MySQL?
6. Mencione por lo menos tres parámetros de configuración de apache y para qué
sirven
7. Mencione por lo menos tres parámetros de configuración de php y para qué
sirven
8. Como se prueban los servicios Web para verificar si están funcionando
correctamente
9. Muestre una tabla de los operadores aritméticos
10. Muestre una tabla de los operadores de comparación
11. Muestre una tabla de los operadores lógicos
12. Muestre una tabla de los operadores bit a bit
13. Muestre una tabla de los operadores de incremento/decremento
14. ¿Qué es la precedencia de operadores?
15. ¿Cuáles son las sentencias que se pueden utilizar para efectuar ciclos?
16. ¿Cuáles son las sentencias de control?
17. ¿Qué es un arreglo?
18. ¿Qué es una función definida por el usuario?
19. Indique las diferencias entre un argumento por valor y por referencia
20. ¿Cuál es el alcance de una variable global?
21. ¿Qué son las variables estáticas?
22. ¿Qué son las funciones de librerías?
23. ¿Qué son las librerías externas? de un ejemplo
24. ¿Qué métodos se pueden usar para procesar formularios?
25. ¿Cuándo se recomienda el uso del método GET
26. ¿Cuándo se recomienda el uso del método POST
27. ¿Qué es una sesión?
28. ¿Cuáles son los pasos para el manejo de sesiones?
29. ¿Explique cómo se prueba le servidor de base de datos MySQL?
30. ¿Cuáles son las operaciones más frecuentes en una tabla de una base de datos?
Especifique las sentencias SQL que se utilizan para cada caso.
31. ¿Cuáles son las operaciones que se realizan en un archivo?
32. Muestre la función con los modificadores adecuados para abrir el archivo
”nuevo.bin” de tipo binario para lectura y escritura
150
33. ¿Cómo se define el directorio donde se guardan los archivos que se cargan
temporalmente en el servidor?
34. ¿Cómo se determina el tamaño de un archivo cargado en el servidor?
35. ¿Porque se requiere copiar el archivo cargado en el directorio temporal del
servidor a otro directorio?
36. ¿En qué consiste la autenticación?
37. ¿En qué consiste la Encriptación?
38. ¿En qué consiste el manejo de sesiones?
39. ¿En qué consiste el manejo de usuarios de un sitio Web?
151
EJERCICIOS PROPUESTOS
152
4
153
4.1. LENGUAJE SCRIPT DEL CLIENTE.
El primer lenguaje de script que vió la luz fue el JavaScript de Netscape. Nacido con
la versión 2.0 de este navegador y basado en la sintaxis de Java, su utilidad y el casi
absoluto monopolio que entonces ejercía Netscape en el mercado de navegadores
permitieron que se popularizara y extendiera su uso.
154
<SCRIPT LANGUAGE=‚JavaScript‛>
Código del script
</SCRIPT>
Veamos un ejemplo muy básico de una página HTML que contiene un script de
Javascript:
<!-- basico.htm -->
<HTML>
<head>
<title>Java script</title>
</head>
<BODY>
<h3>Esto es HTML</h3>
<SCRIPT LANGUAGE="JavaScript">
document.write("Esto es JavaScript")
</SCRIPT>
<h3>Esto vuelve a ser HTML</h3>
</BODY>
</HTML>
Esto es HTML
El resultado es: Esto es JavaScript
Esto vuelve a ser HTML
}
</script>
</head>
<body>
<form name="form1" method="post" action="clientes_alta.php">
<table border="1" align="center">
155
<tr>
<td colspan='2'><p align='center'>REGISTRO DE CLIENTES</p> </td>
</tr>
<tr>
<td>CLAVE</td>
<td width="49%"><input name="clv" type="text" id="clv" size="10"
maxlength="10"></td>
</tr>
<tr>
<td>NOMBRE</td>
<td><input name="nom" type="text" id="nom" size="30" maxlength="30"></td>
</tr>
<tr>
<td>CONTRASEÑA</td>
<td><input name="contrasena" type="password" id="contrasena" size="30"
maxlength="30"></td>
</tr>
<tr>
<td>DIRECCION</td>
<td><input name="direccion" type="text" id="precioc2"></td>
</tr>
<tr>
<td>TELEFONO</td>
<td><input name="tel" type="text" id="tel"></td>
</tr>
<tr>
<td colspan='2'><p align='center'><input name='Aceptar' onClick="validar();"
' type='button' id='Aceptar' value='Aceptar'>
</p></td>
</tr>
</table>
</form>
</body>
</html>
En este ejemplo cada vez que el usuario pulsa sobre el botón Aceptar se ejecuta su
evento onClick(). A este evento se le asigna la función validar(), La función
validar() se encuentra implementado en la parte superior del código entre las
etiquetas <script> y </script>. El código de esta función, verifica si el valor de los
cuadros de texto “clv” y “nom” no están vacíos para llamar a la pagina
clientes_alta.php invocando a la función sumit(). Si el usuario no introduce la clave
en el formulario y se pulsa sobre el botón Aceptar se muestra el mensaje: “FALTA
LA CLAVE”, de manera similar ocurre si se introduce una clave pero no el nombre.
La sintaxis del lenguaje JavaScript es prácticamente igual que la de Java (es decir, igual
que la de C). Así, tanto los operadores como las estructuras de control son exactamente
iguales a C.
156
Antes de comenzar a desarrollar programas y utilidades con JavaScript, es necesario
conocer los elementos básicos con los que se construyen las aplicaciones.
VARIABLES
Las variables en JavaScript se crean mediante la palabra reservada var, una de las
características de JavaSript al igual que PHP es que tampoco es necesario declarar las
variables mediante la palabra reservada var
var x = 20;
var y = 25;
z = x+y;
La variable z no está declarada, por lo que JavaScript crea una variable y le asigna el
valor correspondiente, El nombre de una variable debe cumplir las siguientes reglas:
Sólo puede estar formado por letras, números y los símbolos $ y _ .
El primer carácter no puede ser un número.
Tipos de variables
En JavaScript el tipo de variable se define dependiendo del valor que se le asigne,
ejemplos:
var Edad = 20; // variable tipo entero
var PI = 3.1416; // variable tipo real
var Nombre = "JUAN PEREZ"; // Variable de tipo texto
var Calif = [100, 80, 100, 80]; //Variable de tipo arreglo de enteros
var Promocion = true; //Variable de tipo booleano
OPERADORES
Los operadores se utilizan para manipular variables: ejecutan cálculos, buscan
igualdades, realizan asignaciones. En la siguiente tabla se presentan los de uso más
común.
157
|| OR Lógico if (x||0xFF) OPERADORES A NIVEL DE BITS
NOT Lógico If (Soltero) & AND a nivel de bits C=A&B;
OPERADORES RELACIONALES | OR a nivel de bits
== Igual que if (x==y) XOR a nivel de bits C=AB;
= Diferente que << Desp. a la izquierda B=A<<3;
< Menor que >> Desp. a la derecha C=A>>2;
> Mayor que ~ NOT a nivel de bits A=~D;
<= Menor o igual que OPERADORES DE APUNTADORES
>= Mayor o igual que * Indirección Int *Ap;
OTROS & Dirección x=&Ap;
++ Incremento x++;
-- Decremento x--;
SENTENCIAS.
Las sentencias de control de flujo tales como: if ,else, elseif, switch; así como las
sentencias de de iteración: while, do..while, for, soportadas por JavaScript, tienen las
mismas reglas de sintaxis las soportadas por PHP, planteados en el tema 3.4, esto se
debe a que ambos lenguajes están derivados del lenguaje C.
window.alert("FALTA LA CLAVE");
158
Si bien no se conoce como funciona internamente la función alert(), se sabe que
se trata de una función del objeto window. A estas funciones se las llama
métodos, y a las variables propiedades. Tanto los métodos como las propiedades
siempre se representan de la siguiente manera:
nombre_objeto.nombre_método(argumentos)
nombre_objeto.nombre_propiedad
159
A continuación se describen las propiedades y métodos de algunos de los objetos más
importantes de la jerarquía de objetos de JavScript
Objeto windows
Se trata del objeto más alto en la jerarquía del navegador (navigator es un objeto
independiente de todos en la jerarquía), pues todos los componentes de una página
Web están situados dentro de una ventana. El objeto window hace referencia a la
ventana actual. A continuación se presentan sus propiedades y métodos.
Propiedades
closed. Es un booleano que indica si la ventana está cerrada ( closed = true )
o no ( closed = false ).
defaultStatus. Cadena que contiene el texto por defecto que aparece en la
barra de estado (status bar) del navegador.
frames. Es un array: cada elemento de este array ( frames[0], frames[1],
...) es uno de los frames que contiene la ventana. Su orden se asigna según se
definen en el documento HTML.
history. Se trata de un array que representa las URLS visitadas por la ventana
(están almacenadas en su historial).
length. Variable que nos indica cuántos frames tiene la ventana actual.
location. Cadena con la URL de la barra de dirección.
name. Contiene el nombre de la ventana, o del frame actual.
opener. Es una referencia al objeto window que lo abrió, si la ventana fue
abierta usando el método open()
parent. Referencia al objeto window que contiene el frameset.
self. Es un nombre alternativo del window actual.
status. String con el mensaje que tiene la barra de estado.
top. Nombre alternativo de la ventana del nivel superior.
window. Igual que self: nombre alternativo del objeto window actual.
Métodos
alert(mensaje). Muestra el mensaje 'mensaje' en un cuadro de diálogo
blur(). Elimina el foco del objeto window actual.
clearInterval(id). Elimina el intervalo referenciado por 'id' (ver el
método setInterval(), también del objeto window).
clearTimeout(nombre). Cancela el intervalo referenciado por 'nombre'
(ver el método setTimeout(), también del objeto window).
close(). Cierra el objeto window actual.
confirm(mensaje). Muestra un cuadro de diálogo con el mensaje 'mensaje'
y dos botones, uno de aceptar y otro de cancelar. Devuelve true si se pulsa
aceptar y devuelve false si se pulsa cancelar.
focus(). Captura el foco del ratón sobre el objeto window actual.
moveBy(x,y). Mueve el objeto window actual el número de pixels
especificados por (x,y).
moveTo(x,y). Mueve el objeto window actual a las coordenadas (x,y).
open(URL,nombre,caracteristicas). Abre la URL que le pasemos como
primer parámetro en una ventana de nombre 'nombre'. Si esta ventana no
160
existe, abrirá una ventana nueva en la que mostrará el contenido con las
características especificadas. Las características que se pueden elegir para la
ventana que se desea abrir son las siguientes:
toolbar = [yes|no|1|0]. Indica si la ventana tendrá barra de
herramientas (yes,1) o no la tendrá (no,0).
location = [yes|no|1|0]. Indica si la ventana tendrá campo de
localización o no.
directories = [yes|no|1|0]. Indica si la nueva ventana tendrá botones
de dirección o no.
status = [yes|no|1|0]. Indica si la nueva ventana tendrá barra de estado
o no.
menubar = [yes|no|1|0]. Indica si la nueva ventana tendrá barra de
menús o no.
scrollbars = [yes|no|1|0]. Indica si la nueva ventana tendrá barras de
desplazamiento o no.
resizable = [yes|no|1|0]. Indica si la nueva ventana podrá ser
cambiada de tamaño (con el ratón) o no.
width = px. Indica el ancho de la ventana en pixels.
height = px. Indica el alto de la ventana en pixels.
outerWidth = px. Indica el ancho *total* de la ventana en pixels.
outerHeight = px. Indica el alto *total* de la ventana el pixels
left = px. Indica la distancia en pixels desde el lado izquierdo de la
pantalla a la que se debe colocar la ventana.
top = px. Indica la distancia en pixels desde el lado superior de la
pantalla a la que se debe colocar la ventana.
prompt(mensaje,respuesta_por_defecto). Muestra un cuadro de diálogo que
contiene una caja de texto en la cual se puede escribir una respuesta a lo que
se pregunte en 'mensaje'. El parámetro 'respuesta_por_defecto' es
opcional, y mostrará la respuesta por defecto indicada al abrirse el cuadro de
diálogo. El método retorna una cadena de caracteres con la respuesta
introducida.
scroll(x,y). Desplaza el objeto window actual a las coordenadas
especificadas por (x,y).
scrollBy(x,y). Desplaza el objeto window actual el número de pixels
especificado por (x,y).
scrollTo(x,y). Desplaza el objeto window actual a las coordenadas
especificadas por (x,y).
setInterval(expresion,tiempo). Evalua la expresión especificada después
de que hayan pasado el número de milisegundos especificados en tiempo.
Devuelve un valor que puede ser usado como identificado por
clearInterval().
setTimeout(expresion,tiempo). Evalúa la expresión especificada después de
que hayan pasado el número de milisegundos especificados en tiempo.
Devuelve un valor que puede ser usado como identificador por
clearTimeout().
161
El siguiente ejemplo mueve 20 veces una ventana en la pantalla cada cierto intervalo
de tiempo al final se cierra.
<!-- windows.htm -->
<HTML>
<HEAD>
<title>Uso del objeto windows con JavaScript</title>
<script LANGUAGE="JavaScript">
<!--
function moverVentana()
{
mi_ventana.moveBy(10,5); //Mueve la ventana de su posición actual 10,5 pixeles
más
i++;
if (i<20) //Se repite mientras i<20
setTimeout('moverVentana()',100); //Se llama a la misma función
else
mi_ventana.close(); //Cierra la ventana después de los desplazamientos
}
//-->
</script>
</HEAD>
<BODY>
<script LANGUAGE="JavaScript">
<!--
var opciones="left=100,top=100,width=400,height=150", i= 0;
Objeto document
El objeto document es el que tiene el contenido de toda la página que se está
visualizando. Esto incluye el texto, imágenes, enlaces, formularios, etc. Gracias a este
objeto se puede añadir dinámicamente contenido a la página, o hacer cambios, según
convenga.
Propiedades
alinkColor. Esta propiedad tiene almacenado el color de los enlaces activos
anchors. Se trata de un array con los enlaces internos existentes en el
documento
applets. Es un array con los applets existentes en el documento
bgColor. Propiedad que almacena el color de fondo del documento
cookie. Es una cadena con los valores de las cookies del documento actual
domain. Guarda el nombre del servidor que ha servido el documento
embeds. Es un array con todos los EMBED del documento
fgColor. En esta propiedad se tiene el color del primer plano
162
forms. Se trata de un array con todos los formularios del documento. Los
formularios tienen a su vez elementos (cajas de texto, botones, etc) que tienen
sus propias propiedades y métodos.
images. Array con todas las imágenes del documento
lastModified. Es una cadena con la fecha de la última modificación del
documento
linkColor. Propiedad que almacena el color de los enlaces
links. Es un array con los enlaces externos
location. Cadena con la URL del documento actual
referrer. Cadena con la URL del documento que llamó al actual, en caso de
usar un enlace.
title. Cadena con el título del documento actual
vlinkColor. Propiedad en la que se guarda el color de los enlaces visitados
Métodos
clear(). Limpia la ventana del documento
open(). Abre la escritura sobre un documento.
close(). Cierra la escritura sobre el documento actual
write(). Escribe texto en el documento.
writeln(). Escribe texto en el documento, y además lo finaliza con un salto
de línea
163
//-->
</script>
</BODY>
</HTML>
Objeto location
Este objeto contiene la URL actual así como algunos datos de interés respecto a esta
URL. Su finalidad principal es, por una parte, modificar el objeto location para cambiar
a una nueva URL, y extraer los componentes de dicha URL de forma separada para
poder trabajar con ellos de forma individual si es el caso. La sintaxis es:
Protocolo://maquina_host[:puerto]/ruta_al_recurso
Propiedades
hash. Cadena que contiene el nombre del enlace, dentro de la URL.
host. Cadena que contiene el nombre del servidor y el número del puerto,
dentro de la URL.
hostname. Cadena que contiene el nombre de dominio del servidor (o la
dirección IP), dentro de la URL.
href. Cadena que contiene la URL completa.
pathname. Cadena que contiene el camino al recurso, dentro de la URL.
port. Cadena que contiene el número de puerto del servidor, dentro de la URL.
protocol. Cadena que contiene el protocolo utilizado (incluyendo los dos
puntos), dentro de la URL.
search. Cadena que contiene la información pasada en una llamada a un
script, dentro de la URL.
Métodos
reload(). Vuelve a cargar la URL especificada en la propiedad href del objeto
location.
replace(cadenaURL). Reemplaza el historial actual mientras carga la URL
especificada en cadena URL.
<!—location.htm-->
<HTML>
<HEAD>
<title>Objeto location</title>
</HEAD>
<BODY>
<script LANGUAGE="JavaScript">
<!-- //Muestra algunas propiedades del objeto location
document.write("Location <b>href</b>: " + location.href + "<br>");
document.write("Location <b>host</b>: " + location.host + "<br>");
document.write("Location <b>hostname</b>: " + location.hostname + "<br>");
document.write("Location <b>pathname</b>: " + location.pathname + "<br>");
document.write("Location <b>port</b>: " + location.port + "<br>");
document.write("Location <b>protocol</b>: " + location.protocol + "<br>");
//-->
</script>
</BODY>
</HTML>
164
Objeto history
Este objeto se encarga de almacenar una lista con los sitios por los que se ha estado
navegando, es decir, guarda las referencias de los lugares visitados. Se utiliza, sobre
todo, para moverse hacia delante o hacia atrás en dicha lista.
Propiedades
current. Cadena que contiene la URL completa de la entrada actual en el
historial.
next. Cadena que contiene la URL completa de la siguiente entrada en el
historial.
length. Entero que contiene el número de entradas del historial (i.e., cuántas
direcciones han sido visitadas).
previous. Cadena que contiene la URL completa de la anterior entrada en el
historial.
Métodos
back(). Vuelve a cargar la URL del documento anterior dentro del historial.
forward(). Vuelve a cargar la URL del documento siguiente dentro del
historial.
go(posicion). Vuelve a cargar la URL del documento especificado por
posicion dentro del historial. posicion puede ser un entero, en cuyo caso
indica la posición relativa del documento dentro del historial; o puede ser una
cadena de caracteres, en cuyo caso representa toda o parte de una URL que esté
en el historial.
Objeto form
Este objeto es el contenedor de todos los elementos del formulario. Los
formularios se agrupan en un array dentro de document. Cada elemento de este array
es un objeto de tipo form.
Propiedades
action. Es una cadena que contiene la URL del parámetro ACTION del form, es
decir, la dirección en la que los datos del formulario serán procesados.
elements. Es un array que contiene todos los elementos del formulario, en el
mismo orden en el que se definen en el documento HTML. Por ejemplo, si en
el formulario se ha puesto, en este orden, una caja de texto, una casilla de
verificación y una lista de selección, la caja de texto será elements[0], la
casilla de verificación será elements[1] y la lista de selección será
elements[2].
encoding. Es una cadena que tiene la codificación mime especificada en el
parámetro ENCTYPE del form.
method. Es una cadena que tiene el nombre del método con el que se va a
recibir/procesar la información del formulario ( GET/POST).
Métodos
reset(). Resetea el formulario: tiene el mismo efecto que si se pulsa un botón
de tipo RESET dispuesto en el form.
submit(). Envía el formulario: tiene el mismo efecto que si pulsáramos un
botón de tipo SUBMIT dispuesto en el form.
165
Uan vez que se conocen las propiedades y métodos de los objetos de JavaScrit, es
momento de analizar un poco la función validar() de la pagina
clientes_alta_valida.htm presentado en un ejercicio anterior donde se acceden a
propiedades y metodos del objeto document y un metodo del objeto windows
}
</script>
Una lista de los eventos más comunes, cuando se producen y sobre qué etiquetas
pueden actuar se presenta en la tabla 4.2.
166
Tabla 4.2.- Eventos definidos por JavaScript
Los eventos más utilizados en las aplicaciones Web tradicionales son onload para
esperar a que se cargue la página por completo, los eventos onclick, onmouseover,
onmouseout para controlar el ratón y onsubmit para controlar el envío de los
formularios.
167
Las acciones típicas que realiza un usuario en una página Web pueden dar lugar a una
sucesión de eventos. Al pulsar por ejemplo sobre un botón de tipo <input
type=‛submit‛> se desencadenan los eventos onmousedown, onclick, onmouseup y
onsubmit de forma consecutiva.
Para que los eventos resulten útiles, se deben asociar funciones o código JavaScript a
cada evento. De esta forma, cuando se produce un evento se ejecuta el código
indicado, por lo que la aplicación puede responder ante cualquier evento que se
produzca durante su ejecución
En este ejemplo se utiliza el evento onLoad que ejecuta la función confirma(), este
muestra un cuadro donde se puede pulsar el botón Aceptar o Cancelar.
168
}
</script>
</head>
<body>
Evento: OnClick
<form>
<input type="radio" name="radio" onClick="mensaje('botón de opción 1')">Opcion
1<br>
<input type="radio" name="radio" onClick="mensaje('botón de opción 2')">Opcion
2<br>
<input type="checkbox" onClick="mensaje('Casilla de verificicación')">Check-
Button<br>
<input type="submit" value="Enviar" onClick="mensaje('botón de envío')">
<input type="reset" value="Restablecer" onClick="mensaje('botón restablecer')">
</form>
</body>
</html>
function mod_propiedades(){
window.status=document.forms[0].cajatexto1.value;
document.title=document.forms[0].cajatexto1.value;
}
</script>
</head>
<body>
Eventos: OnChange en selector y OnKeyUp en caja de texto
<form>
<select name="selector1" onChange="cambio();">
<option selected value='1'>Opc1</option>
<option value='2'>Opc2</option>
</select>
<input type="text" name="cajatexto1" onKeyUp="mod_propiedades();">
</form>
</body>
</html>
Así como en los ejemplos anteriores se utilizaron los eventos onLoad, onClick,
onChange y onKeyUp se pueden también aplicar de forma creativa los demás eventos
a los componentes HTML que los soporten, según la tabla 4.2.
169
4.5. VALIDACIÓN DE ENTRADA DE DATOS DEL LADO DEL
CLIENTE.
Una de las grandes aportaciones de JavaScript a la creación de interfaces Web es
la posibilidad de acceder al contenido de los campos de los formularios para
realizar acciones sobre los valores introducidos por el usuario, modificarlos y, en
última instancia, validarlos. La validación de los datos de un formulario mediante
scripts JavaScript no sustituye a la validación que debe realizarse, por motivos de
seguridad, en la aplicación del servidor que recibe la información. Sin embargo, al
añadir una validación local con JavaScript, la experiencia del usuario mejora
notablemente, al no ser necesario enviar los datos al servidor y esperar su
respuesta para obtener sólo un mensaje informando de la incorrección de la
información suministrada.
Estas son algunas de las validaciones típicas:
Comprobar que se han suministrado todos los campos obligatorios
Comprobar que el formato de un campo es el esperado (fechas, teléfonos, etc.)
Comprobar la validez (sintáctica) de las direcciones de correo y URLs
Comprobar que no se sobrepasa la longitud, número de líneas o tamaño de la
entrada
Evento onSubmit
La validación de campos de formulario se basa en interceptar el momento en que el
usuario realiza el envío de los datos del formulario (es decir, al pulsar sobre el botón
de enviar). Como es sabido, el botón de envío de datos se codifica con HTML
mediante un tipo especial de objeto de formulario, llamado submit.
Este ejemplo valida que no este vacío el cuadro de texto de un formulario y no tenga
solo espacios en blanco
<!-- valida cadena.htm -->
<html>
<head>
<title>Valida una cadena de un formulario</title>
<script language="javascript" type="text⁄javascript">
function vacio(q) {
for ( i = 0; i < q.length; i++ ) {
if ( q.charAt(i) != " " ) {
return true
}
}
return false
}
170
function valida(Obj) {
if( vacio(Obj.nombre.value) == false )
alert("Introduzca un cadena de texto.")
else
Obj.submit();
}
</script>
</head>
<body>
<form action="xxx.php" method="post" name="nomgre" id="nomgre">
Nombre
<input name="nombre" type="text" id="nombre">
<input type="button" name="Submit" value="Enviar"
onClick="valida(this.form);">
</form>
</body>
</html>
function validaF() {
Cadena=document.form1.fecha.value;
var Fecha= new String(Cadena) // Crea una cadena
var RealFecha= new Date() // Para sacar la fecha de hoy
// Cadena Año
var Ano= new String(Fecha.substring(Fecha.lastIndexOf("-")+1,Fecha.length))
// Cadena Mes
var Mes= new String(Fecha.substring(Fecha.indexOf("-
")+1,Fecha.lastIndexOf("-")))
// Cadena Día
var Dia= new String(Fecha.substring(0,Fecha.indexOf("-")))
// Valida el año
if (isNaN(Ano) || Ano.length<4 || parseFloat(Ano)<1900){
alert('Año inválido')
return false
}
// Valida el Mes
if (isNaN(Mes) || parseFloat(Mes)<1 || parseFloat(Mes)>12){
alert('Mes inválido')
return false
}
// Valida el Dia
if (isNaN(Dia) || parseInt(Dia, 10)<1 || parseInt(Dia, 10)>31){
alert('Día inválido')
return false
}
if (Mes==4 || Mes==6 || Mes==9 || Mes==11 || Mes==2) {
if (Mes==2 && Dia > 28 || Dia>30) {
alert('Día inválido')
return false
}
}
171
document.form1.submit(); //Fecha correcta, se llama a la página
}
</script>
</head>
<body>
<form action="xxx.php" method="post" name="form1" id="form1">
Fecha dd-mm-aaaa
<input name="fecha" type="text" id="fecha">
<input type="button" name="Submit" value="Enviar" onClick="validaF();">
</form>
</body>
</html>
if( !isNaN(valor) ) {
return false;
}
return true; //La fecha es correcta
}
La función Date(ano, mes, dia) es una función interna de JavaScript que permite
construir fechas a partir del año, el mes y el día de la fecha. Es muy importante tener
en cuenta que el número de mes se indica de 0 a 11, siendo 0 el mes de Enero y 11 el
mes de Diciembre. Los días del mes siguen una numeración diferente, ya que el
mínimo permitido es 1 y el máximo 31.
La validación consiste en intentar construir una fecha con los datos proporcionados
por el usuario. Si los datos del usuario no son correctos, la fecha no se puede
construir correctamente y por tanto la validación del formulario no será correcta.
172
alert('Campo CORREO no válido.')
return false //no submit
}
if(!er_cp.test(form.cp.value)) {
alert('Campo CODIGO POSTAL no válido.')
return false
}
alert('Todo bien'); //Todos los campos estan validados
}
El siguiente ejemplo valida si un botón de opción esta marcado y almenos una casilla
de verificación.
function deshabilita(form)
{
for (i=0;i<form.intereses.length;i++)
form.intereses[i].disabled = true;
}
function validaCB(form)
{ ban=false;
if (form.boletin[0].checked){ // Si esta marcado la suscripción
173
for (i=0;i<form.intereses.length;i++)
if(form.intereses[i].checked)
ban=true; //La bandera se activa si almenos se marca una casilla
if (!ban){
alert('Marque almenos una casilla');
return(0);
}
}
form.submit(); //Todo bien
}
</script>
</head>
<body>
<form action="xxx.php" method="post" name="form1" id="form1">
¿Desea suscribirse a nuestro boletín de novedades? <br>
<input type="radio" name="boletin" value="si" checked
onClick="habilita(this.form)"> SI, quiero suscribirme.
<input type="radio" name="boletin" value="no" onClick="deshabilita(this.form)"> No,
gracias.
<br><br>
Seleccione los temas de su interés:<br>
<input type="checkbox" name="intereses" value="Arte y Cultura"> Arte y Cultura<br>
<input type="checkbox" name="intereses" value="Ciencia">Ciencia<br>
<input type="checkbox" name="intereses" value="Música">Música<br>
<input type="button" name="Submit" value="Botón"
onClick="validaCB(this.form);">
</form>
</body>
</html>
Un desarrollador Web cada día debe lidiar, para hacer compatibles sus aplicaciones,
con los diferentes navegadores que hay actualmente en Internet, con las diferentes
versiones de cada uno de los navegadores y además con las diferentes versiones de
las tecnologías que usa, como Javascript
174
Javascript 1.1: Es la versión de JavaScript que se diseñó con la
llegada de Netscape 3.0. Implementaba poco más que su anterior versión,
como por ejemplo el tratamiento de imágenes dinámicamente y la creación de
arrays.
Javascript 1.2: Se diseñó con la llegada de Netscape 4.0. Esta tiene como
desventaja que es un poco distinta en plataformas Microsoft y Netscape, ya que
ambos navegadores crecieron de distinto modo y estaban en plena lucha por el
mercado.
Javascript 1.3: introducida en la versión 4.07 del Netscape Navigator. Esta versión
es una pequeña revisión de la 1.2 creada para ajustarse al estándar internacional
“European Computer Manufacturers' Association” (ECMA) que regula el lenguaje
JavaScript.
175
PREGUNTAS
1. ¿Se necesita de un servidor WEB para ejecutar código por el lado del
cliente?, si, no, porque
2. De al menos tres casos de aplicación de la programación por el lado del
cliente
3. ¿En que secciones de una pagina WEB se puede incrustar código de
JavaScript?
4. ¿Como se define una variable en JavaScript?
5. ¿Como se define el tipo de una variable en JavaScript?
6. ¿De que lenguaje esta derivado JavaScript?
7. ¿Que es DOM?
8. Muestre una figura de la jerarquía de objetos de JavaScript
9. Describa por lo menos 5 propiedades del objeto Windows
10. Describa por lo menos 5 métodos del objeto windows
11. Describa por lo menos 5 propiedades del objeto document
12. Describa por lo menos 5 métodos del objeto document
13. Describa por lo menos 5 propiedades del objeto location
14. Describa por lo menos 2 métodos del objeto location
15. Describa por lo menos 3 propiedades del objeto history
16. Describa por lo menos 3 métodos del objeto history
17. Describa por lo menos 3 propiedades del objeto form
18. Describa por lo menos 2 métodos del objeto form
19. ¿Qué es un evento?
20. Describa por lo menos 6 eventos de JavaScript
21. Explique como se lleva a cabo el proceso de validación de un formulario con
JavaScript
22. ¿Qué navegadores soportan JavaScript?
23. De una reseña de las versiones de JavaScript
176
EJERCICIOS PROPUESTOS
177
5
178
5.1 VISIÓN GENERAL DE SERVICIOS WEB XML.
179
Todo documento XML debe comenzar indicando
<?xml version="1.0" encoding="UTF- que es un documento XML, la versión del mismo
8"?> y su codificación. Es por eso que se utiliza la
etiqueta <?xml .... ?> . Todos los elementos a
partir de aquí son definidos por el usuario.
Luego se indica una etiqueta raiz <productos>) el
cual contendrá a los demás elementos. Es como
<productos> en HTML la etiqueta <HTML> .. </HTML>, que
dentro de el se encuentran las demás etiquetas. Se
lo conoce generalmente como raiz del
documento.
Luego se define una etiqueta <producto> el cual
<producto>
contendrá un producto en particular (en este caso
solo incorpore 3 características de un producto:
id_producto, nombre, y precio).
<id_pro>DD40G</id_pro> Se definen 3 etiquetas (<id_pro>, <nombre>, y
<nombre>DISCO DURO </nombre> <precio>), los cuales contienen los datos para un
<precio>500</precio>
producto en particular.
<productos>
<producto> En el documento se puede apreciar que todas las
<id_pro>DD40G</id_pro>
<nombre>DISCO</nombre>
etiquetas que son abiertos <id_pro>deben ser
<precio>500</precio> cerrados </id_pro>. Esto es una exigencia del
</producto> XML.
</productos>
El XML provee muchas otras posibilidades como puede ser que las etiquetas tengan
atributos <producto color=‛azul‛> .. </producto> ), pero no nos detendremos en ellas
ya que la idea es simplemente ofrecer los conceptos básicos para conocer de que se
trata el mundo de los Web.
180
5.2.1 SOAP
Se conoce como Protocolo Simple de Acceso a Objetos, es un protocolo estándar
propuesto por Microsoft, IBM y otros al Consorcio WWW (W3C) que permite la
comunicación y la interoperabilidad entre diversas aplicaciones Web desarrolladas
bajo tecnologías diferentes, como HTML y XML.
El protocolo SOAP esta construido sobre XML y solo describe el formato de los
mensajes dejando abierta la posibilidad de usar varios transportes, aunque
actualmente el transporte usado es HTTP. La elección de HTTP como transporte se
debe a que es el transporte más usado, y si una organización de cualquier tipo provee
una sola salida o conexión con el mundo exterior (Internet) lo más probable es que
sea HTTP
Para poder utilizar SOAP en un lenguaje de programación por el lado del servidor se
debe usar alguna librería disponible que implemente el estándar.
SOAP en PHP
Para usar el estándar SOAP en php se puede realizar de dos formas:
Utilizando la librería NuSOAP
Utilizando las funciones nativas de PHP5
El siguiente ejemplo usa la librería NuSOAP, para implementar un cliente SOAP para
Google; hace uso del servicio de búsqueda provisto por Google a través de sus APIs
SOAP. Son muy básicos justamente para mostrar lo sencillo que es empezar a usar
esta tecnología, se pueden crear programas que realicen las búsquedas periódicamente
en lugar de hacerlas de forma manual.
181
<!--buscar.php-->
<html>
<head>
<title>Cliente SOAP para Google</title>
</head>
<body>
<?php
require_once('nusoap/nusoap.php');
$parametros = array(
'key' => $key,
'q' => $buscar,
'start' => $PaginaInicio,
'maxResults' => 5,
'filter' => false,
'restrict' => '',
'safeSearch' => false,
'lr' => '',
'ie' => '',
'oe' => ''
);
Para poder probar este ejemplo se requiere haber descargado la librería NuSOAP y
ubicarla en la carpeta “nusoap/” como lo indica la línea de código
require_once('nusoap/nusoap.php'); Google requiere que cada usuario de su servicio
Web tenga una cuenta en su sitio para tal fin, esta cuenta tiene una clave como la que
se muestra en la línea de código $key = 'iwnUXUtHj3bteg5FWfBJDwui3SPeB+iy'; y esta
limitada a 1000 consultas por día, por lo que el acceso puede no ser permitido si se
rebasa el limite.
182
El cliente Web del código anterior recibe una variable de un formulario que contendrá
la cadena de búsqueda, inicializa los parámetros del servicio ofrecido por Google y
realiza la búsqueda, guardando el resultado en la variable $Resultado, posteriormente
este es procesado para mostrar los resultados retornados por Google tal y como se
muestra si la variable $buscar = "Servicios Web":
Servicios Web
1 Servicio web - Wikipedia, la enciclopedia libre
Servicio web - Wikipedia, la enciclopedia libre
Un servicio web (en inglés, Web service) es un conjunto de protocolos y
estándares que sirven para intercambiar datos entre aplicaciones. ...
2 Web service - Wikipedia, the free encyclopedia
Web service - Wikipedia, the free encyclopedia
A Web Service (also Webservice) is defined by the W3C as "a software system
designed to support interoperable machine-to-machine interaction over a network.
...
3 SERVICIOWEB - NOTICIAS
SERVICIOWEB - NOTICIAS
portal de noticias, revista entretenida con Cocina Chilena, Efemérides, juegos
online, maps, turismo Mapas de las Regiones de Chile,Canciones, ...
Para poder utilizar las funciones SOAP nativas de PHP se debe habilitar la extensión
extension=php_soap.dll en el archivo php.ini, solo verificar que no tenga el punto y
coma al inicio de la línea.
Con el uso de las funciones SOAP nativas de PHP se consigue máxima transparencia
para el programador en el momento de crear los servicios y clientes Web. En la
siguiente tabla se muestran las funciones de la extensión SOAP de php.
183
SoapClient Constructor
SoapClient->__construct() Construye un nuevo objeto SoapClient
Métodos
SoapClient->__call() Llama una función SOAP (obsoleto)
SoapClient->__doRequest() Realiza una petición SOAP
SoapClient->__getFunctions() Devuelve una lista de funciones SOAP
SoapClient->__getLastRequest() Devuelve la última petición SOAP
SoapClient->__getLastRequestHeaders() Devuelve las cabeceras de la última petición SOAP
SoapClient->__getLastResponse() Devuelve la última respuesta SOAP
SoapClient->__getLastResponseHeaders() Devuelve las cabeceras de la última respuesta
SOAP
SoapClient->__getTypes() Devuelve la lista de tipos SOAP
SoapClient->__setCookie() Define la cookie que será enviada con la petición
SOAP
SoapClient->__soapCall() Llama una función SOAP
SoapFault Constructor
SoapFault->__construct() Construir un nuevo objeto SoapFault
SoapHeader
SoapHeader->__construct() Construir un nuevo objeto SoapHeader
SoapServer Constructor
SoapServer->__construct() Construir un nuevo objeto SoapServer
Métodos
SoapServer->addFunction() Agrega una o varias funciones para manejar
peticiones SOAP
SoapServer->getFunctions() Devuelve la lista de funciones definidas
SoapServer->handle() Maneja una petición SOAP
SoapServer->setClass() Define una clase que manejará peticiones SOAP
SoapServer->setPersistence() Define el modo de persistencia de SoapServer
Tabla 5.1.- Funciones SOAP de PHP 5
El siguiente ejemplo utiliza las funciones SOAP nativas de php para implementar un
servicio SOAP mediante el uso de la función hola($nombre) para mostrar un saludo a
un nombre que reciba como parámetro.
184
Iniciando el código de PHP, se crea el objeto $servidor utilizando el constructor de la
librería SOAP de PHP, pasándole como parámetro el nombre del archivo WSDL, se
debe considerar que el constructor cuenta con otras formas de instanciarse, la función
hola() es muy simple, pero ilustrativa; recibe como parámetro la variable $nombre y
retorna la cadena “Hola” concatenado con la variable que recibió como parámetro,
finalmente se pone en funcionamiento el servicio con el método handle(). Así de fácil
es ofrecer un servicio Web. En un caso práctico la función debería ser más compleja
como buscar información de una base de datos y retornarla al cliente que la solicite.
Así mismo el servicio Web en lugar de contar con solamente una función podría
contar con varias.
El cliente Web que use el servicio Web anterior podría usar un código parecido al
siguiente:
<?php
$cliente = new new SoapClient("iti.wsdl");
$resultado=$cliente->__soapCall("hola", array('nombre' => 'Maria'));
print_r($resultado);
?>
5.2.2 WSDL
Es el lenguaje de definición de servicios Web, Es un protocolo basado en XML que
describe los accesos al Servicio Web. Es decir, es el manual de operación del Servicio
Web, porque indica cuales son las interfaces que provee el Servicio Web y los tipos
de datos necesarios para la utilización del mismo.
El servidor que pretenda ofrecer servicios Web requiere de un archivo WSDL, este
archivo, en formato XML, indica a la computadora que lo consulta, qué servicios
dispone en su sitio. No sólo indica cuales dispone, sino que además da una referencia
precisa sobre ellos, para poder invocarlos usando los parámetros adecuados.
5.2.3 UDDI
Es un modelo de directorios para Servicios Web. Es una especificación para mantener
directorios estandarizados de información acerca de los Servicios Web, sus
capacidades, ubicación, y requerimientos en un formato reconocido universalmente.
UDDI utiliza WSDL para describir las interfaces de los Web Services.
185
En la siguiente figura se muestra su relación con SOAP y WSDL.
Al igual que en la Web se tienen buscadores como Google, que nos llevan a las
páginas que nos interesan, existe el concepto equivalente a nivel de Servicios Web,
que es UDDI (Universal Description Discovery Integration) cerca de 7000 empresas
se han registrado en el directorio UDDI. UDDI es un Servicio Web en línea que se
puede utilizar desde las aplicaciones para descubrir de forma dinámica otros servicios
en línea, todos ellos perfectamente integrados en una interfaz XML simple. En pocas
palabras, el UDDI es una especificación para un registro distribuido de información
sobre servicios Web, el sitio oficial de UDDI es http://uddi.xml.org/
186
Búsqueda de temas nuevos en portales conocidos como buscadores
Conocer en tiempo real el estado del tiempo de nuestra cuidad
Conocer en tiempo real algunas variables económicas, como tipo de cambio
Obtener regalías por concepto de venta de productos o artículos cuando el
usuario los adquiera desde nuestro portal
Extraer datos de una base de datos de un sitio externo.
Cuando existe la razón para consumir servicios Web, el siguiente paso es investigar
quien lo ofrece para poder utilizarlo, extrayendo del sitio el archivo WSDL que
permita conocer en detalle la interfaz del servicio, finalmente se procede a la
programación del cliente Web utilizando la librería que se tenga disponible o que más
convenga, tal y como se mostró en el tema 5.2.1.
187
PREGUNTAS
EJERCICIOS PROPUESTOS
1. Según el caso de estudio en desarrollo, buscar que servicio Web cliente podría
consumir de algún otro sitio externo y programarlo utilizando SOAP
2. Según el caso de estudio en desarrollo, programar con SOAP un servicio
Web Servidor que retorne una porción de datos de su base de datos para los
clientes Web que lo requieran, además escribir el archivo WSDL.
3. Implementar el cliente Web SOAP que demuestre la funcionalidad del
servicio Web servidor implementado en la pregunta anterior.
188
Anexo A.- Programación de un caso de estudio
VENTAS EN LINEA
Es una pequeña aplicación Web dinámica de venta de productos de computación en
línea creado para ilustrar los conocimientos que se adquieren durante un curso de
Programación Web, entre los que se pueden mencionar, programación con HTML,
manejo de formularios y objetos de formulario, envío de datos a formularios con los
métodos POST y GET, validación de los datos del formulario usando eventos de
Java Script, programación en PHP con acceso a base de datos, reportes con PDF, etc.
Consta de una página de bienvenida accesible por cualquier usuario, donde se pueden
conocer los productos que se encuentran en promoción, o filtrarlos en función de la
categoría a la cual pertenecen
189
Para poder utilizar el manejo de sesiones se deberá fijar la variable session.auto_start
= 1 hallado en el archivo php.ini
Diccionario de datos:
categoria
CAMPO TIPO LONGITUD DESCRIPCION LLAVE
Id_cat V 10 Clave de la categoría *
Descripcion V 30 Descripcion de la categoría
producto
CAMPO TIPO LONGITUD DESCRIPCION LLAVE
190
Id_pro V 10 Clave del producto *
nombre V 30 Descripcion del producto
precio F Precio de compra
existencia S Existencia
preciov F Precio de venta
Id_cat V 10 Clave de la categoría
Jpg V 30 Archivo JPG
promocion T Indica si esta en promosión
clientes
CAMPO TIPO LONGITUD DESCRIPCION LLAVE
id_clie V 13 Clave del cliente *
clave V 40 Contraseña de acceso
nom V 40 Nombre del proveedor
dir V 30 Dirección del proveedor
tel V 15 Teléfono del proveedor
factura
campo Tipo Longitud Descripcion Llave
id_fac I Num. de la fact.de comp. *
fecha D Fecha expedicion de fac.
ventas
administradores
CAMPO TIPO LONGITUD DESCRIPCION LLAVE
id_ad V 13 Clave del cliente *
clave V 40 Contraseña de acceso
nom V 40 Nombre del proveedor
dir V 30 Dirección del proveedor
tel V 15 Teléfono del proveedor
Donde:
V=varchar I=int S=smallint T=tinyint F=float D=date
191
Script MySQL:
DROP DATABASE IF EXISTS ventas;
192
tel varchar(15),
primary key (id_ad)
);
193
insert administradores values('AD2',sha1('iti'),'JOSE TOLEDO FUENTES','GPE.
VICTORIA','9717114526');
Estructura de directorios
La aplicación Web esta programado y organizando de tal forma que las paginas
Web sean facilmentelas localizados y analizados según la siguiente estructura de
directorios.
194
Para usuarios no registrados
195