You are on page 1of 36

Principios básicos de ASP

En este capítulo veremos los conceptos básicos que le harán falta para comenzar a
programar páginas ASP

• Al concluir este capítulo usted deberá saber programar una simple página en ASP

Bloques de código ASP


Al igual que el lenguaje Html, los códigos ASP tiene un tag de inicio y fin de
una página.

En Html se utiliza <tag> para abrir, y </tag> para cerrar, mientras que en ASP
se utiliza <% y %>, de la siguiente forma:

<% ... %>

Declaración del lenguaje


Como ocurre en otros lenguajes de programación, se suele declarar el lenguaje
a utilizar. Aunque esta sentencia es opcional en ASP muchos programadores
suelen utilizarla:

<% LANGUAJE="VBScript"%>

Esta declaración se escribe al principio del archivo a utilizar, antes de cualquier


otra expresión.

Uso de los comentarios


Al igual que otros lenguajes, es posible comentar el código:

<% ' Esto es un comentario

rem Esto es un comentario %>

Un comentario dentro del código ASP se señala con una ' (comilla simple)
antes del comentario, también se suele cambiar la ' por la palabra rem. De esta
forma, toda la línea que contenga un comentario, el interprete de asp del
servidor no lo leerá ni lo ejecutará

Los comentarios son muy útiles cuando tenemos cientos o miles de líneas de
código y luego queremos hacer alguna modificación, poniendo diferentes
comentarios pueden ayudarnos mucho.
Una página ASP por dentro
El aspecto interno de una página ASP es el siguiente:

<%

' Referencia del lenguaje

' Declaración de variables

' etc. %>

Por ejemplo:

<html>

<title> Manual de ASP</title>

<body>

<%

' Conexión bases de datos

' Cálculos, etc.

%>

</body>

</html>

Como se puede observar, se trata de lenguaje Html común y corriente con


agregados de scripts de código ASP.

Declaración de variables
En una página ASP no hay que señalar de que tipo de variable se trata, todas
son del tipo Variant.

La declaración de las variables es opcional, pero es recomendable hacerlo ya


que evita posibles errores y facilita la lectura del código.
Las variables se declaran con el comando Dim. Para forzar a que se declaren
todas las variables de una página se utiliza la función "Option Explicit".
Ejemplo:

<%

Option Explicit

' Declaramos las variables y las cargamos

Dim nombre, apellido, email

nombre = "Francisco José"

apellido = "Calvo"

email = "i72cafef@uco.es"

%>

<html>

<head></head>

<body>

Los datos son:

<br>

Nombre: <%=nombre%>

<br>

Apellido: <%=apellido%>

<br>

Email: <%=email%>

<br>

</body>

</html>

En este ejemplo se declaran tres variables y se cargan con los datos


correspondientes, y luego se imprimen en medio del código html

Instrucciones SQL
A través de estas instrucciones, podemos determinar que tipo de operación vamos a
realizar sobre la tabla de la base de datos, pudiendo ser seleccionar (select), borrar
(delete), agregar (insert), entre otros. Para ejecutarla hay que crear primero el objeto del
RecordSet, y tras la instrucción SQL escribir:
set rs=oConn.Execute(SQL) .

• Al concluir este capítulo usted deberá conocer las sentencias del lenguaje de
manipulación de bases de datos SQL.

Sentencia Select
Recupera registros de una tabla.

Sintaxis:

SELECT [ALL | DISTINCT] lista_selecccion [INTO [nueva_tabla]] [FROM


{tabla | consulat} [[, {tabla2 | consulta2} [..., {tabla16 | consulta16}]] [WHERE
criterio] [GROUP BY criterio] [HAVING criterio] [ORDER BY criterio]

[COMPUTE criterior] [FOR BROWSE]

Ejemplos:

· Select:

SELECT * FROM TABLA

Selecciona todos los registros de Tabla

SELECT nombre, apellido FROM TABLA

Selecciona los registros nombre y apellido de Tabla

SELECT * FROM TABLA WHERE nombre="Fran"

Selecciona los registros donde nombre sea igual a Fran

SELECT * FRTOM TABLA ORDER BY apellido

Selecciona todos los registros y los ordena por el apellido

Sentencia Delete
Elimina un registro de una tabla.

DELETE [FROM] {tabla| consulta} [WHERE criterio]


• Algunos ejemplos simples:

DELETE FROM TABLA WHERE id=55

Elimina el registro con el ID 55

DELETE FROM TABLA WHERE nombre="Fran"

Elimina todos los registros en donde el nombre sea igual a Fran

Sentencia Insert
Agrega registros a una tabla

INSERT [INTO] {tabla| consulta [(columnas)] {DEFAULT VALUES | valores


| instruccion_select}
• Ejemplo:

INSERT TABLA (nombre, apellido, email) VALUES


('Fran','Calvo','i72cafef@uco.es')

Inserta los datos en los campos correspondientes

Sentencia Update
Actualiza los registros de una tabla

UPDATE {tabla | consulta} SET [{tabla | consulta}] { columnas | variables |


variables_y_columnas} [, {columnas2 |

variables2 | variables_y_columnas2} ... [, {columnasN | variablesN |


variables_y_columnasN}]] [WHERE criterio]

Ejemplo:

UPDATE TABLA SET nombre='Fran' WHERE nombre='Juan'

Modifica los registros que contengan como nombre Fran por Juan.

• Ejemplo sencillo de consulta:

<%

' Creamos los objetos de conexión y recordset

set con=Server.CreateObject("ADODB.Connection")
set rs=Server.CreateObject("ADODB.Recordset")

' Conexión por OLEDB

con.Open "Provider=Microsoft.Jet.OLEDB.4.0;

Data Source="&Server.MapPath("basededatos.mdb")&";"

sql="select * from Alumnos order by nombre"

rs=con.Execute(SQL)

' Hacemos un listado simple de los registros

Response.Write "- "&rs.fields("apellido")&","&rs.fields("nombre")&".


"&rs.fields("edad")&" años.<br>"

' Cerramos la conexión y el recordset

rs.Close con.Close set rs=nothing set con=nothing

%>

Objeto integrado Response


ASP integra una serie de objetos, que proporcionan distintas funcionalidades, a
continuación se expondrán los más utilizados; comenzaremos con el objeto Response.

• Al concluir este capítulo usted deberá saber manejar aquellos objetos integrados más
populares de ASP.

El objeto Response es uno de los mas utilizados en las paginas ASP, ya que dispone de
la comunicación entre el cliente y el servidor. Se utiliza para controlar la información
que se envía al usuario. Esto incluye el envío de información directamente al
explorador, la redirección del explorador a otra dirección URL o el establecimiento de
valores de las cookies.
• Sintaxis general:
Response.metodo [valor]

Entre los métodos mas interesantes del objeto Response estan los siguientes:

Método Write
El método Write escribe una cadena de resultado en el navegador cliente
(Nota: cuando se usa la sintaxis <%=variable%> estamos usando
implícitamente el método Response.Write).

Ejemplo:
<% response.write "<center>Hola mundo</center>" %>

obtenemos “Hola mundo” en el navegador.

Método Redirect
El método Redirect hace que el explorador se conecte con una dirección URL
diferente.

Nota: debemos usar este metodo antes de enviar cualquier resultado al


navegador cliente (antes de los tags HTML), en caso contrario produce un
error.

Ejemplo:

<% response.redirect "www.renfe.es" %>

El navegador se dirigirá a la URL especificada

Método Cookie
Sirve para almacenar una cookie en el ordenador del cliente:

Ejemplo:

<% Response.Cookie("nombre") "Francisco" Response.Cookie("edad") "22"


%>

En la cookie nombre se guardará la palabra Francisco, y en edad 22.


Cuestiones sobre la sección
• Enumere los métodos del objeto Response e indique su utilidad
• Cree una página ASP que plante una cookie en el ordenador cliente
• Haga una página ASP que al abrirla le redirija a http://www.uco.es

Objeto Request
El Objeto Request recupera los valores que el cliente pasa al servidor durante una
petición HTTP.

Dependiendo de la forma en que enviemos los datos al servidor tendremos que utilizar
una u otra de las diversas colecciones del objeto Request. Las mas típicas son:

· FORM recupera datos enviados desde un formulario mediante el método POST.

· QUERYSTRING recupera datos enviados como cadena de consulta HTTP.


· COOKIES recupera los valores de las Cookies.

Sintaxis General:

Request.coleccion(elemento)

Método Form
Supongamos que enviamos la información desde el siguiente formulario:

<form method="POST" action="recibir.asp" >

<p>Nombre: <input type="text" name="Nombre" size="20"></p>

<p>Nacionalidad: <input type="text" name="Nacionalidad" size="20"></p>

<p><input type="submit" value="Enviar" name="Enviar"></p>

</form>

En nuestra página "recibir.asp" podriamos usar la siguiente secuencia:

Hola Sr/a <%=request.form("nombre")%> <br>

Asi que usted es de nacionalidad <%=request.form("nacionalidad")%>

Con lo que el resultado seria:

Hola Sr/a Julian

Asi que usted es de nacionalidad francesa

Método QueryString
Supongamos que enviamos la información en forma de cadena de consulta
(una cadena de consulta HTTP está especificada por las parejas de valores que
siguen al signo "?"):

<a href="recibir.asp?nombre=Julian&nacionalidad=francesa">

En nuestra página "recibir.asp" podriamos usar la siguiente secuencia:

Hola Sr/a <%=request.querystring("nombre")%> <br>

Asi que usted es de nacionalidad <%=request.querystring("nacionalidad")%>

Con lo que el resultado sería:


Hola Sr/a Julian

Asi que usted es de nacionalidad francesa

Método Cookies
Un ejemplo para utilizarlo, es crear un formulario que pida un nombre, y luego
guardar ese valor en una cookie, para que cuando nos vuelta a visitar lo
reconozcamos y lo saludemos:

Manual de Introducción al ASP (Active Server Pages)

<% nombre=Request.Cookies("nombre") Response.Write "Hola, " &nombre&


"." %>

Cuestiones sobre la sección


• Enumere los métodos del objeto Request e indique su utilidad
• Cree una página ASP que recupere la información de la cookie creada en el
ejercicio de la sección anterior

Objeto Server
El objeto Server nos proporciona acceso a métodos y propiedades del servidor.

Método ScriptTimeout
Especifica la cantidad maxima de tiempo que puede tardar la ejecución de una
secuencia de comandos (tiempo maximo que puede tardar en ejecutarse una
página dada).

Sintaxis:

Server.ScriptTimeout= nº de segundos

Ejemplo:

<% Server.ScriptTimeout=120 %>

La página puede ejecutarse durante 120 segundos antes de que el servidor la


termine.

Método CreateObject
Crea una instancia de un componente ActiveX en el servidor.

Sintaxis:
Server.CreateObject (IdProg)

IdProg es el identificativo del tipo de componente que queremos crear, nos


viene

suministrado por el fabricante del componente.

Ejemplo:

<% set Mitabla = CreateObject("ADODB.Recordset") %>

Instancia un objeto de tipo recordset y lo asigna a la variable "Mitabla".

Cuestiones sobre la sección


• Enumere los métodos del objeto Server e indique su utilidad

Objeto Session
El objeto Session permite almacenar la información necesaria para una sesión de
usuario contra nuestra aplicación ASP. Las variables que almacenemos en el objeto
Session no se pierden al cambiar de página, si no que se mantienen hasta que el cliente
sea eliminado por el servidor. Las variables de Session de un cliente solo pueden ser
accedidas por ese cliente. El servidor crea automáticamente el objeto Session cuando un
usuario que no tenga actualmente una sesión solicita una pagina Web de la aplicación.
Nota: el servidor elimina un cliente bien cuando desde una pagina ASP se invoca el
método Abandon (session.abandon) o bien cuando este cliente lleva 20 minutos sin
actividad en nuestra aplicación.

• Al concluir este capítulo usted deberá saber cómo crear variables y matrices para una
sesión de usuario.

Creación de una variable


Sintaxis

Sesion("Nomvariable") = valor

Ejemplo:

<% Session("Color")="Rojo" %>

Para recuperar ese valor:

<% ColorFavorito=Session("Color") %>

Esto nos almacenaría el valor "rojo" en la variable "ColorFavorito"


Matrices
Nota Importante:

En el objeto Session pueden almacenarse matrices, pero estas son almacenadas


como un

objeto, es decir, no podemos almacenar o recuperar un solo elemento de la


matriz, si no

que cargaremos o recuperaremos la variable con la matriz completa

Ejemplo:

<%Dim cestacompra(2)

cestacompra(0) = 1

cestacompra(1) = 8

cestacompra(2) = 22

Session("Cesta") =cestacompra%>

con estas instrucciones almacenaríamos TODA la matriz en la variable de


sesión "Cesta"

Cuestiones sobre la sección


• Enumere los métodos del objeto Session e indique su utilidad
• Cree cuatro variable y una matriz 2x2. En cada casilla o posición de la
matriz inserte cada una de las variables anteriormente creadas

Objeto Application
Este objeto se utiliza para compartir información entre todos los usuarios de una
aplicación. Como varios usuarios pueden compartir este objeto, se utilizan los métodos
Lock y Unlock para no permitir que dos o mas usuarios puedan al mismo tiempo
modificar la propiedad.

• Al concluir este capítulo usted deberá haber saber cómo compartir la información
entre los usuarios

Método Lock
Asegura que solo un usuario pueda modificar el objeto Application a la vez.
<% Application.Lock%>

Método Unlock
Desbloquea al objeto previamente bloqueado, para poder ser modificado por
otro usuario después de haberlo bloqueado mediante el método Lock. Si no se
desbloquea el objeto Application, el servidor lo hace automáticamente cuando
la página .asp termina o transcurre el tiempo de espera.

<% Application.UnLock%>

Ejemplo que calcula el número de visitantes a nuestra web:

<% Application.Lock

Application("visitas") = Application("visitas")+1

Application.Unlock %>

Eres el visitante Nº <%=Application("visitas")%>

Cuestiones sobre la sección


• Enumere los métodos del objeto Application e indique su utilidad
• Cree un contador de texto para su página web

Ver solución

El archivo "GLOBAL.ASA"
El archivo Global.asa es un fichero de texto situado en el directorio raiz de nuestro
servidor Web, es decir, en el directorio de comienzo de nuestras páginas. Es un archivo
de comandos que nos permite la automatización de los cuatro eventos básicos de
nuestro servidor.

• Al concluir este capítulo usted deberá haber comprendido como realizar tareas de
forma automatizada.

Estructura
La estructura es siempre la misma:

<SCRIPT LANGUAGE="VBScript" RUNAT="Server">

Sub Application_OnStart

........
End Sub

Sub Application_OnEnd

........

End Sub

Sub Session_OnStart

........

End Sub

Sub Session_OnEnd

........

End Sub

</SCRIPT>

Eventos
Application_OnStart
El evento Application_OnStart se ejecuta antes de que se cree la primera nueva
sesión; es decir justo cuando el primer cliente pide una pagina de nuestro
servidor.

Application_OnEnd
El evento Application_OnEnd se ejecuta cuando la aplicación termina.

Session_OnStart
El evento Session_OnStart se ejecuta cuando el servidor crea una nueva sesión;
esta secuencia de comandos es ejecutada antes de enviar la página solicitada al
cliente...

Session_OnEnd
El evento Session_OnEnd se ejecuta cuando se abandona o se supera el tiempo
de espera de una sesión.
Ejemplo de un archivo "GLOBAL.ASA"
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">

Sub Application_OnStart

dim mitabla()

redim mitabla(9)

application("tabla")=mitabla

End Sub

Sub Application_OnEnd

End Sub

Sub Session_OnStart

paginaInicio="/ appl/index.html"

response.redirect paginaInicio

End Sub

Sub Session_OnEnd

End Sub

</SCRIPT>.

Cuestiones sobre la sección


• Indique la utilidad del archivo "global.asa"
• Haga que al parar el servidor web llegue un mensaje a todos los usuarios
conectados a dicho servidor, en el que se indique que va a dejar de estar activo

Componente ADRotator
Los componentes ActiveX se han diseñado para que se ejecuten en el servidor Web
como parte de las aplicaciones Web, proporcionan funcionalidad a las aplicaciones,
como el acceso a ficheros, Bases de datos, etcétera.
Existen componentes ActiveX para tareas muy diversas, en esta páginas mostraremos
como operar con algunos de los que se incluyen por defecto en la instalación de ASP.

Adrotator Inserción de publicidad rotatoria

FileSystemObject Acceso a ficheros en el servidor

TextStream Acceso a ficheros en el servidor

ActiveX Data Object Acceso a bases de datos.

El componente ADRotator automatiza la rotación de imágenes de anuncio en una


página

Web. Cada vez que un cliente abre o recarga la página este componente presenta una
nueva imagen según las definiciones especificadas en un archivo.

Los archivos necesarios son:

· Archivo Rotator Schedule: es un archivo de texto que contiene la agenda de


presentación de los anuncios.

· Archivo de redirección: es un archivo .asp que implementa la redirección a la URL


anunciante.

• Creación del objeto AdRotator

<% Set Rotacion=Server.CreateObject("MSWC.AdRotator") %>

Propiedades:

Border: Permite especificar si los anuncios se presentan enmarcados.

<% objeto.border=tamaño %>

Clickable: Permite especificar si los anuncios se presentan como hipervinculos.

<% objeto.clickable= True o False %>

TargetFrame: Permite especificar el marco de destino del hipervinculo.

<% objeto. TargetFrame= nombre del marco destino %>


• Al concluir este capítulo usted deberá saber cómo automatizar la rotación de
imágenes de anuncio en una página Web, muy útil si piensa crear una web con fines
comerciales

Método GetAdvertisement
Sintaxis:

Objeto.GetAdvertisement (url del fichero Shedule).

• Estructura del fichero Schedule:

El fichero Schedule esta dividido en 2 secciones separadas por un asterisco


"*". La primera sección es la especifica los parámetros comunes para todas las
imágenes que se muestren; la segunda los ficheros , localizaciones y
parametros propios de cada una de las imagenes.

Sintaxis de la primera sección:

REDIRECT Especifica la url que se encargara de hacer la redirección,


generalmente una página .asp.

WIDTH Ancho en píxel del anuncio

HEIGHT Alto en píxel del anuncio

BORDER Ancho en píxel del borde del anuncio

Sintaxis de la segunda sección:

Url de la imagen a mostrar

Url de la pagina a redireccionar

Texto alternativo de la imagen

Ponderación de apariciones del anuncio con respecto del total

Ejemplo:

REDIRECT /util/redirect.asp

WIDTH 300

HEIGHT 50

BORDER 2

/imagenes/logo1.gif

http://www.transcontinental.com

El viaje de tus sueños


20

/imagenes/logo5.jpg

http://www.pastelito.fr

Dulces de calidad

30

Ejemplo de fichero de redirección

<% response.redirect (request.querystring("url")) %>

Ejemplo de una página completa:

<html>

<head><title>Uso de AdRotator</title></head>

<body><h2>Uso de AdRotator</h2>

<% Set Rotacion=Server.CreateObject("MSWC.AdRotator") %>

<=% Rotacion.GetAdvertisement("adrot.txt") %>

</ body>

</html>

Componente FileSystemObject
El componente FSO nos permite abrir y crear ficheros de texto en el servidor. Este
componente consta de 22 métodos, de los cuales podemos seleccionar 2 que son los que
nos van a permitir leer o escribir en archivos de texto existentes en el servidor o crear
dichos archivos.

Para crear un objeto FSO, la sintaxis es la misma que para cualquier otro componente
ActiveX:

<% Set MiFSO=Server.CreateObject("Scripting.FileSystemObject") %>

Cuando abrimos o creamos un fichero de texto mediante FSO este nos devuelve una
instancia del objeto TextStream que es la que representa el archivo físico y con la cual
trabajaremos.
• Al concluir este capítulo usted deberá saber crear y abrir ficheros de texto en el
servidor
Método CreateTextFile
CreateTextFile: Crea un archivo físico y devuelve la instancia de TextStream
con la cual trabajaremos.

• Sintaxis

<% Set MiFichero=MiFSO.CreateTextFile("Nombre Fichero",Sobreescribir")


%>

Nombre Fichero: Nombre del fichero a crear.

Sobreescribir: Admite los valores TRUE o FALSE, si el fichero ya existe y el


valor dado es TRUE se crea de nuevo, si no , devuelve un error.

Método OpenTextFile
OpenTextFile: Abre un archivo físico y devuelve la instancia de TextStream
con la cual trabajaremos.

Sintaxis:

<% Set MiFichero=MiFSO.OpenTextFile("Nombre Fichero",modo,crear") %>

Nombre Fichero Nombre del fichero a abrir.

Modo Indica si queremos abrir el fichero para lectura (1) , para escritura (2) o
para

escribir nuevos registros al final del fichero(8)

Crear Admite los valores TRUE o FALSE, si el fichero no existe y el valor


dado es

TRUE se crea.

Ejemplo:

Apertura de fichero para lectura:

<% Set MiFichero=MiFSO.OpenTextFile("c:\Fichero_nuevo.txt",1,true")


%>

Cuestiones sobre la sección


• ¿Cual es la utilidad de FSO?
• Describa los pasos a seguir para crear y acceder al contenido de un fichero
desde ASP.
• Guarde en un fichero situado en un servidor ASP un listado de sus últimas
webs visitadas y mediante OpenTextFile, muéstrelas en una página ASP.

Componente TextStream
Al concluir este capítulo deberá conocer que el objeto TextStream nos sirve para
manejar ficheros de texto en el servidor. La creación de este objeto se realiza a partir de
un objeto FileSystemObject y gracias a alguno de sus métodos.

Una vez creado, disponemos de un objeto TextStream que representa un archivo físico
abierto, ya sea para lectura o escritura. Este objeto dispone de 9 métodos:

1. Close: Cierra el archivo.

Sintaxis:

<% MiFichero.close%>

2. Read: Lee y devuelve un numero especifico de caracteres.

Sintaxis:

<% MiFichero.read(numero de caracteres) %>

3. ReadAll: Lee y devuelve un archivo completo.

Sintaxis:

<% MiFichero.ReadAll %>

4. ReadLine: Lee y devuelve una línea completa de un archivo de texto.

Sintaxis:

<% MiFichero.ReadLine%>

5. Skip: Salta un numero determinado de caracteres al leer un archivo.

Sintaxis
<% MiFichero.Skip(numero de caracteres) %>

6. SkipLine: Salta una línea al leer un archivo.

Sintaxis

<% MiFichero.SkipLine %>

7. Write: Escribe una cadena de caracteres en un archivo.

Sintaxis

<% MiFichero.Write("texto_entre_comillas") %>

8. WriteLine: Escribe una cadena de caracteres en un archivo añadiendo al final un


carácter de fin de linea.

Sintaxis

<% MiFichero.WriteLine("texto_entre_comillas") %>

9. WriteBlankLines: Escribe un numero especifico de caracteres de nueva línea.

Sintaxis

<% MiFichero.WriteBlankLines(numero_de_lineas) %>

Ejemplo de escritura en un archivo:

<HTML>

<HEAD><TITLE>Ejemplo de FSO y TextStream</TITLE></HEAD>

<BODY>

<%

Set Mfso=Server.CreateObject("Scripting.FileSystemObject")
Set MArchivo=Mfso.OpenTextFile("c:\fecha.txt",2,true)

MArchivo.writeline "Hola Mundo, hoy es:"

MArchivo.write date()

MArchivo.close

%>

Creado archivo en C:\fecha.txt con la fecha de hoy

</BODY>

</HTML>

Creación de un foro en ASP


Para realizar un foro necesitas:

• Una conexión con bases de datos. Esta conexión puede realizarse de dos
formas.
• Directamente, (tal y como se explica en el manual Paginas ASP).
• Utilizando una DSN solicitándola al servidor que te provee de servicios
de internet, (en este caso uso esta opción).

Estructura de la base de datos: Tabla MiTabla

1. Autor
2. Email del Autor
3. Fecha de alta en el foro
4. Titulo de la cuestión
5. Cuerpo de la cuestión
6. ID de la pregunta, (uso interno)
7. QoR. Pregunta o Respuesta

Un ejemplo de tabla seria:


El campo QoR :

El campo QoR determina si el registro pertenece a :

- P: Una pregunta.

- R: Una respuesta a una pregunta.

- X: El único registro de la tabla con este valor en el campo QoR. El valor del
campo IDPregunta de este registro es el que mantiene el contador de dicho campo.
Almacena el valor de IDPregunta del última consulta entrada en el foro.

El campo con QoR = X ha de ser entrado manualmente en el momento de la


inauguración del foro.

El campo IDPregunta.

Al dar de alta un nuevo comentario en el foro; este viene identificado con un


numero que es asignado por el valor del campo IDPregunta del registro que posee
X en el campo QoR, (registro de indice).

Todas las respuestas que se lancen a ese comentario irán identificadas por ese
mismo valor en sus respectivos campos IDPregunta.

Nombres especiales.

Los nombres como la DSN de acceso a datos. El nombre de la base de datos y de la


tabla. Y las claves de acceso estan referidas en el código que se adjunta en este
manual como : MiDSN, MiBase, MiTabla y MiClave. Substituir dichas cadenas por las
que se determinen para vuestro foro personalizado.

Todos estos datos son importantes para el funcionamiento del foro. La DSN os la
proporciona el servidor que os provee de servicios de internet, (si no es así usad el
metodo de acceso directo que se comenta en el código). La base de datos y la tabla
es la que creeis vosotros, (por ejemplo en ms.Access). Las claves de acceso son las
que vosotros qu

Proveedor de servicios de internet. Debeis aseguraros que el proveedor de


servicios de internet que habeis contratado os proporcione los recursos necesarios
para ejecutar páginas ASP y acceder a bases de datos. Muchos proveedores no
proporcionan estos servicios y, simplemente, no podreis hacer nada con ASP.
Debereis cambiar de proveedor.
Inicio del código.

Declaración de las bases de datos que se van a utilizar.

<%@ LANGUAGE="VBScript" %>

<%

' Declaramos el objeto de conexión a la base de datos

Set ConexionBD = Server.CreateObject("ADOdb.Connection")

' Abrimos el objeto con el driver específico

ConexionBD.Open "DSN=MiDNS"

%>

Si queremos atacar directamente a la base de datos utilizar esta otra técnica.

ConexionBD.Open "DRIVER={Microsoft Access Driver (*.mdb)}; " & "DBQ=" &


Server.Mappath("MiBase.mdb")

QueryString

QueryString recupera los valores de los parámetros entrados al llamar al ASP desde
la URL.

' Recupera los parámetros de la linea de comandos.

comando=request.querystring("comando")

' Datos para la eliminación.

passw=request.querystring("passw")

ID=request.querystring("ID")

' Datos para una nueva alta.

QoR=request.querystring("qor")

IDPregunta=request.querystring("IDPregunta")

fecha=request.querystring("fecha")

Titulo=request.querystring("Titulo")

Cuerpo=request.querystring("Cuerpo")

Autor=request.querystring("Autor")

Opciones del foro

<html>
<head>
<title>El Foro</title></head>
<body>
<H2>Opciones</H2>

<UL>
<LI><A HRef="qor.asp?comando=anadir">
Lanzar un nuevo comentario al foro.
</A></LI> <LI>
<A HRef="qor.asp?comando=ver">
Ver Todo, (refrescar).
</A></LI></UL>

Añadir una nueva pregunta al foro.

La siguiente rutina consta de 2 fases

1 Petición de datos a añadir, (comando=añadir)

<%

If comando="anadir" Then

' Añadir una nueva entrada.

%>

<H1>A&ntilde;adir un nuevo comentario al foro.</H1>

<FORM Method="GET" Action="qor.asp">

<INPUT Type="hidden" Name="fecha" Value="<%= Year(Date) & "/" & Month(Date) & "/" &
Day(Date) %>">

<INPUT Type="hidden" Name="QoR" Value="P" Size=0>

<%

Set RS = ConexionBD.Execute("SELECT * FROM MiTabla WHERE QoR='X'")

RS.MoveFirst

%>

<INPUT Type="hidden" Name="IDPregunta" Value=<%= RS("IDPregunta") + 1 %>>

<INPUT Type="hidden" Name="comando" Value="adiccion" Size=0>

Autor :<BR>

<UL>

<INPUT Type="text" Name="Autor" Size=50></UL>

e-mail, (si tienes) :<BR>

<UL>

<INPUT Type="text" Name="email">

</UL>

Titulo, (obligado) :
<UL>

<INPUT Type="text" Name="titulo" Size=50>

</UL>

Cuerpo del comentario que deseas lanzar al foro :

<UL>

<TEXTAREA Rows="10" Cols="50" Name="Cuerpo"></TEXTAREA>

</UL>

<INPUT Type="SUBMIT" Value="Enviar">

<INPUT Type="RESET" Value="Reestablecer">

</FORM>

<%

2 Alta en la base de datos, (comando=adiccion)


ElseIf comando="adiccion" Then

' Añade a la base de datos.

Error=False

MsjError=""

If Autor="" Then

Autor="-no firma-"

End If

If email="" Then

email=" "

End If

If Titulo="" Then

Error=True

MsjError = MsjError + "- Se necesita un t&iacute;tulo para su comentario.<BR>"

End If

If Cuerpo="" Then

Error=True

MsjError = MsjError + "- Se necesita un cuerpo del mensaje para incluirlo en el


foro.<BR>"

End If

' Añade el nuevo comentario al foro.


Set RS = ConexionBD.Execute("INSERT INTO MiTabla (QoR, IDPregunta, Fecha, Autor, email,
Titulo, Cuerpo) VALUES ('" & QoR & "', " & IDPregunta & ", #"& Fecha & "#, '" & Autor &
"', '" & email & "', '" & Titulo & "', '" & Cuerpo & "')")

'Si es una nueva pregunta, aumenta el contador.

If QoR="P" Then

Set RS = ConexionBD.Execute("UPDATE MiTabla SET IDPregunta = " & IDPregunta & " WHERE
QoR='X'")

End If

Response.Write("<BR><BR><B>Se ha dado de alta tu colaboraci&oacute;n al foro


:</B><BR><BR>")

Response.Write("<UL>")

Response.Write("Fecha : " & Fecha & "<BR>")

Response.Write("Autor : " & Autor & "<BR>")

Response.Write("e-mail : " & email & "<BR>")

Response.Write("Titulo : " & Titulo & "<BR>")

Response.Write("Cuerpo : " & Cuerpo & "<BR>")

Response.Write("</UL>")

Response.Write("Gracias por colaborar en el foro de Acervo Visual")

Ver las preguntas abiertas en el foro.

Esta sección se comporta de 2 formas. Si Comando=ver o no tiene valor, mostrará


el contenido de todo el foro.

Si Comando=explosion se mostrará sólo la pregunta, (y todas sus respuestas), dada


por el parámetro IDPregunta.

' Visualizar FORO.

ElseIf comando="ver" or comando="explosion" or comando="" Then

' Visualizar FORO.

%>

<BR><BR>

<CENTER>

<TABLE Border=2 Width="90%">

<TR>
<TH BGColor='#03A7CF' Align='Left'>

<%

' Ver el libro de visitas completo.

If Comando="explosion" Then

Set RS = ConexionBD.Execute("SELECT * FROM MiTabla WHERE IDPregunta=" & IDPregunta & "
ORDER BY IDPregunta DESC, QoR, Fecha DESC")

Response.Write("Comentarios abiertos referentes a : <B>" & RS("Titulo") & "</B>")

Else

Set RS = ConexionBD.Execute("SELECT * FROM MiTabla WHERE QoR<>'X' ORDER BY IDPregunta


DESC, QoR, Fecha DESC")

Response.Write("Comentarios abiertos en el foro.")

End If

%>

</TH>

</TR>

<%

Do while not RS.EOF

'Escribimos en la salida los datos que nos interesa

%><tr>

<td><%

' Indenta si es respuesta.

If RS("QoR")="R" Then

Response.Write("<UL>")

End If

' Fecha.

If IsNull(RS("Fecha")) Then

Else

Response.Write("(" & FormatDateTime(CDate(RS("Fecha")), 2) & ") ")

End If

' ID.

Response.Write(" - (" & RS("ID") & ") ")

' Título.
If IsNull(RS("Titulo")) Then

Response.Write(" <BR>")

Else

If Comando="explosion" Then

Response.Write("<B>" & RS("Titulo") & "</B><BR><BR>")

Else

Response.Write("<A HRef='qor.asp?comando=explosion&IDPregunta="& RS("IDPregunta") & "'>"


& RS("Titulo") & "</A><BR>")

End If

End If

' Autor y e-mail.

If Comando="explosion" Then

Response.Write("<B>Autor : </B>")

If IsNull(RS("Autor")) Then

Else

Response.Write((RS("Autor"))

End If

If IsNull(RS("email")) Then

Response.Write(" <BR>")

Else

Response.Write(" (<A HRef='mailto:" & RS("email") & "?subject=Foro Acervo Visual'>" &
RS("email") & "</A>)<BR>")

End If

Response.Write("<BR><B>Cuerpo del comentario : </B><UL>")

Response.Write(RS("Cuerpo") & "</UL>")

'Botón de respuesta.

If RS("QoR")="P" Then

%>

<FORM Method="GET" Action=" qor.asp">

<INPUT Type="hidden" Name="comando" Value="Responder" Size=0>

<INPUT Type="hidden" Name="fecha" Value="<%= Date %>" Size=0>

<INPUT Type="hidden" Name="IDPregunta" Value=<%= RS("IDPregunta") %> Size=0>


<%

Tit = RS("Titulo")

Tit = Replace(Tit, " ", "+")

%>

<INPUT Type="hidden" Name="Titulo" Value=<%= Tit %> Size=0>

<INPUT Type="hidden" Name="QoR" Value="R" Size=0>

<INPUT Type="SUBMIT" Value="Responder">

</FORM>

<%

End If

End If

'Quita la indentación si es una respuesta.

If RS("QoR")="R" Then

Response.Write("</UL>")

End If

%>

</td>

</tr><%

RS.MoveNext

Loop

%>

</TABLE>

</CENTER>

</UL>

<%

Responder una consulta abierta en el foro.

Al pulsar sobre el botón Responder en una de las consultas abiertas en el foro; Se


pasa como Comando=Responder y la pregunta a responder en el parámetro
IDPregunta.

' Responder una questión abierta en el foro.

ElseIf comando="Responder" Then

' Responder a un comentario existente.


TituloResp = Titulo

%>

<H1>A&ntilde;adir un nuevo comentario al foro.</H1>

<FORM Method="GET" Action=" qor.asp">

<INPUT Type="hidden" Name="fecha" Value="<%= Year(Fecha) & "/" & Month(Fecha) & "/" &
Day(Fecha) %>" Size=0>

<INPUT Type="hidden" Name="QoR" Value=<%= QoR %> Size=0>

<INPUT Type="hidden" Name="IDPregunta" Value=<%= IDPregunta %>>

<INPUT Type="hidden" Name="comando" Value="adiccion" Size=0>

<H3>Respuesta al comentario :</H3>

<UL>

<%

TituloResp = Replace(TituloResp, "+", " ")

%>

<H4><%= TituloResp %></H4>

</UL>

Autor :<BR>

<UL>

<INPUT Type="text" Name="Autor" Size=50>

</UL>

e-mail, (si tienes) :<BR>

<UL>

<INPUT Type="text" Name="email">

</UL>

Titulo, (obligado) :

<UL>

<%

TituloResp = "Resp : " & TituloResp

%>

<INPUT Type="text" Name="titulo" Value="<%= TituloResp %>" Size=50>

</UL>

Cuerpo del comentario que deseas lanzar al foro :


<UL>

<TEXTAREA Rows="10" Cols="50" Name="Cuerpo"></TEXTAREA>

</UL>

<INPUT Type="SUBMIT" Value="Enviar">

<INPUT Type="RESET" Value="Reestablecer">

</FORM>

<%

Funciones de uso interno.

Eliminar una pregunta o respuesta del foro.

Con esta opción, (Comando=Eliminar), eliminamos un registro de la base de datos.


Es conveniente que esta clase de opciones requieran contraseña.

ElseIf Comando="Eliminar" Then

%>

<H1>Eliminar un comentario del foro.</H1>

<FORM Method="GET" Action=" qor.asp">

<INPUT Type="Hidden" Name="Comando" Value="Eliminacion">

Password :

<INPUT Type="Password" Name="passw"><BR>

ID de pregunta a eliminar :

<INPUT Type="Text" Name="IDPregunta">

<INPUT Type="SUBMIT" Value="Enviar">

<INPUT Type="RESET" Value="Reestablecer">

</FORM>

<%

ElseIf Comando="Eliminacion" Then

'Elimina la pregunta solicitada.

If passw = MiClave Then

Set RS = ConexionBD.Execute("DELETE * FROM MiTabla WHERE IDPregunta = " & IDPregunta & "
AND QoR<>'X'")

Response.Write("<H2>Ok.</H2>")

Else Password erroneo.

Response.Write(<H2>Password erroneo.</H2>)
End If

End If

%>

Fin del código

</body>

</html>

Ejercicios prácticos y reales sobre ASP


A continuación se expondrán unos ejemplos de los usos más comunes de ASP (aparte
de las conexiones a las bases de datos, claro), con su código fuente.

• Al concluir este capítulo usted sabrá manejarse con toda soltura con ASP y será capaz
de resolver cualquier problemas que se le presente en ASP.

Envío de datos desde un formulario a una dirección de correo


Muchas veces necesitamos en nuestro sitio web, un formulario que capture
datos de nuestros visitantes y deseamos recibir esos datos en nuestra
casilla de correo. Para ello utilizaremos un componente denominado
CDONT y es parte del servicio SMTP de Internet Information Server 4.

Este componente nos permite mediante unas pocas líneas de ASP, enviar y
recibir mail. Manos a la obra:

Necesitamos una página con el formulario, a la cual llamaremos


form.html:

<html>
<head>
</head>
<body>
<form method="post" action="mail.asp">
<p>Nombre:
<input type="text" name="nom">
</p>
<p>Empresa:
<input type="text" name="emp">
</p>
<p>Sugerencias:
<textarea name="sug" cols="35"></textarea>
</p>
<p>
<input type="submit" name="Submit" value="Enviar">
<input type="reset" name="Submit2" value="Limpiar">
</p>
</form>
</body>
</html>

Por otro lado tendremos una página a la que llamaremos mail.asp.


El código es el siguiente:

<%
'Creación de variables para almacenar los campos del formulario

Nombre= Request.Form("nom")
Empresa= Request.Form("emp")
Sugerencias= Request.Form("sug")

strTo = "direccion@tudominio.com" ' Esta es una dirección que


corresponda a
nuestro servidor
strSubject = "Envio de sugerencias de: " & Nombre

strBody = "<html><body>"
strBody = strBody & "Este es un mensaje generado por el formulario:" &
"<br><br>"
strBody = strBody & "Nombre: "& Nombre &"<br>"
strBody = strBody & "Empresa: "& Empresa &"<br>"
strBody = strBody & "Sugerencias: "& Sugerencias &"<br>"
strBody = strBody & "</body></html>"

Set objCDOMail = Server.CreateObject("CDONTS.NewMail") 'Creación del


objeto

objCDOMail.From = "direccion@tudominio.com" 'No hay problema en que


sea la
misma que la anterior.
objCDOMail.To = strTo
objCDOMail.Subject = strSubject

objCDOMail.BodyFormat=0 'Estas dos línes


objCDOMail.MailFormat=0 'permiten formatear mejor el mensaje

objCDOMail.Body = strBody
objCDOMail.Send 'Envía el mail
Set objCDOMail = Nothing
Response.redirect "gracias.html"
' O bien podemos ahorrar una página y escribir algo como
' Response.write "Gracias por enviarnos sus sugerencias"
%>

Por último debemos generar una página con un mensaje de


agradecimiento, o bien redireccionar al visitante hacia otra página de
nuestro sitio.

Cómo mostrar la cantidad de usuarios activos en nuestro sitio


Algo que puede llegar a ser muy interesante, es saber cuanto usuarios hay
visitando nuestro sitio al mismo tiempo, ya sea como un servicio más del
sitio o bien para realizar algunas estadísticas, que nos permitan conocer
mejor las visitas de los usuarios.
Para realizar este ejemplo, vamos a utilizar el archivo Global.asa y cuatro
eventos, para manejar las rutinas.

Application_OnStart
Application_OnEnd
Session_OnStart
Session_OnEnd

El archivo Global.asa debe quedar asi:

<SCRIPT LANGUAGE=VBScript RUNAT=Server>


Sub Application_OnStart
Application("visitas") = 0
Application("Active") = 0
End Sub

Sub Application_OnEnd
End Sub

Sub Session_OnStart
Session.Timeout = 20
Session("Start") = Now
Application.lock
Application("visitas") = Application("visitas") + 1
intTotal_visitas = Application("visitas")
Application.unlock
Session("VisitorID") = intTotal_visitas

Application.lock
Application("Active") = Application("Active") + 1
Application.unlock
End Sub

Sub Session_OnEnd
Application.lock
Application("Active") = Application("Active") - 1
Application.unlock
End Sub
</SCRIPT>

Ahora sólo nos falta crear el archivo mostrarvisitas.asp y listo.

<html>
<head>
<title>Mostrando la cantidad de usuarios activos</title>
</head>
<body>
Vos sos uno, de <%=Application("Active")%> visitantes en este
momento.
</body>
</html>
Implementando un sistema de Banners Rotativos
Uno de los componentes más útiles que se pueden emplear en ASP es el
llamado Ad Rotator, este componente permite mostrar distintos banners en
una página ASP, pudiendo calcular mediante porcentajes, la cantidad de veces
que queremos mostrar los banners e incluso controlar las veces en que el
usuario hace click en alguno de los banners.

El componente ad Rotator es incluído con el Windows NT Option Pack,


cuando instales el Internet Informatión Server, el componente debería
instalarse automáticamente en la carpeta,
C:\Winnt\system32\inetsrv\ADROT.dll.

Vamos a crear para el ejemplo los archivos necesarios banners.asp,


banners.txt adredir.asp.

banners.asp
<HTML>
<HEAD><TITLE> Mostrando Banners</TITLE></HEAD>

<BODY>
<CENTER><H1>Mostrando Distintos Banners!</H1></CENTER>

<HR>
<%
Set MyAd=Server.CreateObject("MSWC.AdRotator")
MyAd.TargetFrame= "TARGET=""blank"""
%>

<CENTER><%= MyAd.GetAdvertisement("banners.txt") %></CENTER>


</BODY>
</HTML>

En esta página es en donde vamos a mostrar los distintos banners, y para


ello necesitamos crear 2 archivos más.

banners.txt
REDIRECT adredir.asp
WIDTH 468
HEIGHT 60
BORDER 0
*
banner1.gif
http://www.lavariable.com
El Portal de Programación en Internet
60
banner2.gif
http://www.webklan.com.ar
WebKlan
20
banner3.gif
http://www.neolatina.com
Neolatina
20

Tenemos algunas propiedades para explicar.

Redirect: Especifica la dirección en donde el usuario que clickea en el


banner es enviado.

Width: Especifíca el largo que tendran el o los banners que mostremos, el


tamaño estandar que se utiliza habitualmente es de 468 pixels.

Height: Especifíca el alto que tendran el o los banners que mostremos, el


tamaño estandar que se utiliza habitualmente es de 60 pixels.

Border: Este es el valor que le damos al borde del banner, lo habitual es


no usar borde, por lo tanto tenemos que colocar un 0 en esta propiedad.

adredir.asp

<%
Response.AppendToLog Request.QueryString("url")
Response.Redirect Request.QueryString("url")
%>

Alojamiento ASP
En la actualidad están apareciendo muchos servidores que dan servicio gratuito de
hosting con soporte de ASP y bases de datos Access, con la única condición de que
aparezcan sus banners o ventanas con publicidad.

· Websamba (http://www.websamba.com): Ofrece 30mb, soporta ASP y conexiones a


bases de datos Access sin limitaciones, y la posibilidad de subir nuestras páginas por
FTP. El único inconveniente que encontramos en este servidor son sus continuas caídas,
quedando a veces varias horas sin funcionar. No pone publicidad.

· Brinkster (http://www.brinkster.com): Al igual que Websamba, ofrece 30mb de


espacio, soporte asp y bases de datos access. No incluye publicidad en las páginas, pero
nos vemos obligados a subir los archivos a través de un File Manager desde su sitio.

· http://www.webexperto.com/directorio/default.asp?catid=43&cattitle=Web+Hosting

Aquí encontrarán un listado de servicios gratuitos de hosting con y sin soporte de ASP.

Si tenemos dinero para invertir, es recomendable contratar un servicio de hosting, ya


que son muchísimos más rápidos y además, brindan soporte técnico especializado.

You might also like