Seminario web - ASP IIIIII.. A AS SP P 11.. P PR RIIM ME ER RO OS SC CO ON NC CE EP PTTO OS S El lenguaje ASP (Active Server Pages) o Páginas Activas de Servidor es una tecnología desarrollada por Microsoft Corporation. Quizá una de las funciones principales sea el acceso a Bases de Datos de forma sencilla e intuitiva. Tener en cuenta que: - Se trata de una Estructura Cliente-Servidor. Esto es: el usuario de Internet (CLIENTE) pide un recurso (SERVIDOR) y este le devuelve una página html con las especificaciones elegidas por el usuario (desde colores de pantalla, registros de usuarios, consultas....). - Diseñado para el funcionamiento bajo Windows NT Server e Internet Information Server 3.0, aunque ya hay clientes para Linux y Unix, el funcionamiento no es tan eficaz como se esperaba. - Soporta multitud de Fuentes de Datos ODBC (Bases de Datos) como Access, SQL, DBASE, FoxPro... - Soporta HTML, JavaScript, DHtml, Css, VBScript, JAVA... - Una página Web ASP puede visualizarse por cualquier navegador, ya que el cliente lo que recibe es esa página ASP "ejecutada" en formato html. - Si queremos trabajar en nuestro puesto de trabajo o en casa y diseñar páginas ASP deberemos tener NT e IIServer, o si disponemos de Windows 95/98 tendremos que instalar el Microsoft Personal Web Server con el fin de poder simular la ejecución de la página ASP en un Servidor (aunque esté en modo local). 22.. E EM MP PE EZZA AR RA AE ES SC CR RIIB BIIR RA AS SP P Estructura: - La extensión del fichero es: .ASP - Al igual que en Html hay que abrir y cerrar sentencias: <% Sentencias_ ASP %> - Escribimos los comentarios poniendo al comienzo de la línea comilla simple: ‘ - En el código ASP las comillas son importantes, por lo que hay que saber muy bien cuándo usarlas. Por lo mismo, cuando nos referimos a un valor Html o a valores de campos, el resultado puede fallar si ese valor incluye comillas. En caso de ser necesario poner comillas, las sustituiremos por comillas simples. - Al comienzo del documento, escribiremos lo siguiente: <%@Language=VBScript%> establecemos el tipo de lenguaje que escribiremos. <%Option Explicit%> obligamos a declarar todas las variables, que aunque en VBS no es obligatorio, sí es recomendable para evitar errores. A continuación, podemos crear el documento como si fuera un Html normal. Y en cualquier momento podemos interrumpirlo escribiendo entre <% %> el código que nos interese. Lo normal es poner el código principal (conexión con bases de datos, definición de variables, funciones) en la cabecera, entre el </title> y </head>. Y dentro del <body> también podremos escribir, en cualquier momento, otras sentencias de ASP. Comandos: Response: Le indica al servidor que es un proceso que debe ejecutar y devolver al cliente. Por ejemplo: response.write "Prueba" Request: Le indica al servidor que es un proceso que el cliente solicita del servidor. Por ejemplo: request.form ("usuario") Dim: Definimos Variables. Set: Definimos objetos. 1 Seminario web - ASP 33.. IIN NTTR RO OD DU UC CC CIIÓ ÓN NA ALL C CÓ ÓD DIIG GO O.. S SIIN NTTA AX XIIS S VARIABLES <% Dim nombre,apellido nombre = "Maria" apellido = "Olmedo" Response.write ("La profe se llama " & nombre & " " & apellido & "<p>") %> ESCRIBIR CADENAS <% Dim numero, suma, suma2 numero = 20 suma = numero+numero suma2 = numero&numero Response.write ("<br>" & suma) Response.write ("<br>" & suma2) %> ESCRIBIR CÓDIGO HTML Si queremos incluir código Html dentro del código ASP, lo haremos uniéndolo con asp & "html" & asp <% Dim Variable Variable = Pepe Response.write ("Nombre: <b>" & Variable & "<b><br>") %> BUCLES: "for" Desde un valor inicial a uno final. <% for variable=inicial to final instrucciones a ejecutar next %> Ejemplo: "while" Mientras se cumpla una condición, se repetirá el bucle. <% while condición instrucciones a ejecutar wend %> Ejemplo: <% Dim num For num=0 to 5 Response.write ("línea" & num & "<br>") next %> <% Dim nume nume=2 while (nume<20) nume = nume+3 Response.write (nume & "<br>") Wend %> CONDICIONALES: "if ... then" Ejemplo: Ejecuta ciertas instrucciones según si se cumple una <% Dim valor, valor1 condición. Valor = 3 <% Valor1 = 5 if condición then If valor < valor1 then instrucciones a ejecutar Response.write (Valor1 & " es mayor.") else Else instrucciones si no se cumple nada Response.write (Valor & " es mayor.") End if end if %> %> "select ... case" Ejecuta distintas instrucciones según el valor de una variable 2 Seminario web - ASP 44.. C CO ON NE EX XIIÓ ÓN NA AU UN NA AB BA AS SE ED DE ED DA ATTO OS S Podemos hacer establecer una conexión con la base de datos directamente desde la página .asp: dbConn.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& Server.MapPath("../ruta/datos.mdb") O bien hacerlo a través del ODBC, creando un DSN de Sistema: dbConn.open NombreODBC,"","" 1º Crear una conexión ODBC: En el ordenador servidor (donde está la b.d. y se ejecutará el ASP): Panel de control – Herramientas administrativas – Origenes de datos ODBC DSN de sistema Agregar Driver de Microsoft Access (mdb) Configuración: Nombre de Origen de datos: Intentar seguir un criterio para dar los nombres: Nombre_dominio_o_web.Nombre_que_identifique_la_b.d. Comentarios: lo que queramos Seleccionar abrimos la base de datos que queremos conectar. Podemos darle un nombre de usuario y contraseña para poder establecer la conexión. Ejemplo: en el servidor Win2000, tenemos creada la conexión IntraLink.Clientes, que llama a la base de datos D:\Data\Clientes.mdb 2º Crear la conexión en ASP: En la cabecera establecemos la conexión con la b.d. y con alguna de sus tablas o consultas: <% ‘ declaramos las variables Dim dbConn, cSQL, dbRS 'establecemos la conexión ODBC Set dbConn= Server.CreateObject("ADODB.Connection") dbConn.Open "Intralink.Clientes","","" ‘definimos la consulta (a una tabla o consulta) y la ejecutamos cSQL = "SELECT * FROM ConsultaTodo" Set dbRS = dbConn.Execute(cSQL) %> Si en el <body> escribimos: <% While (not dbRS.EOF) Response.write dbRS("NombreRestaurante") dbRS.MoveNext wend %> Escribirá el valor del campo NombreRestaurante, de la tabla ConsultaTodo, de todos los registros de la base de datos hasta el último registro. Importante: si no ponemos el While EOF (End Of File) entrará en un bucle interminable. Escribir código Html dentro del ASP: Response.write ("McDonald's " & dbRS("NombreRestaurante") & "<br>") Lo pondremos entre dobles comillas, unido al código ASP por &. Al final del documento es conveniente cerrar la conexión y dejar los valores de las variables vacíos: <% dbConn.close Set dbRS = nothing Set cSQL = nothing %> 3 Seminario web - ASP 44..11.. C CO ON NS SU ULLTTA AA AU UN NA A TTA AB BLLA A 1º LISTADO DE TODOS LOS REGISTROS DE UNA TABLA Ejemplo: LISTAMENSAJES.ASP Muestra la lista de registros de la tabla Mensajes <head> ' Definimos la conexión con la base de datos <% Dim dbConn,dbRS,cSQL Set dbConn = Server.CreateObject("ADODB.Connection") dbConn.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& Server.MapPath("../data/foro.mdb") ' Seleccionamos algunos campos de la tabla a mostrar, y definimos el orden cSQL = "SELECT Remitente,Titulo,Id FROM Mensajes ORDER BY Fecha DESC" Set dbRS = dbConn.Execute(cSQL) %> </head> <body> <table border="1"> <tr> <th>Remitente</th> <th>Titulo</th> <th>Leer</th> <th>Editar</th></tr> <% ' Inserta una línea por cada registro while not(dbRS.EOF) Response.Write ("<tr><td>" & dbRS("Remitente") & "</td>") Response.Write ("<td>" & dbRS("Titulo") & "</td>") ' Vínculo con filtro Response.Write ("<td><a href=3_bd_leer.asp?Id=" & dbRS("Id") & ">leer</a></td>") Response.Write ("<td><a href=7_bd_editar.asp?Id=" & dbRS("Id") & ">editar</a></td>") Response.Write ("</tr>") dbRS.MoveNext wend %> </table> </body> 2º FILTRO DE UNA TABLA PARA CONSULTAR UN ÚNICO REGISTRO Ejemplo: LEER.ASP Busca el mensaje cuyo Id coincide con el elegido en la página anterior. <head> ' Definimos la conexión con la base de datos <% Dim dbConn,dbRS,cSQL Set dbConn = Server.CreateObject("ADODB.Connection") dbConn.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& Server.MapPath("../data/foro.mdb") ' Hacemos una consulta, filtrando los datos cSQL = "SELECT * FROM Mensajes WHERE Id ="& Request.Querystring("Id") Set dbRS = dbConn.Execute(cSQL) %> </head> <body> ' Muestra los datos, en forma de tabla <% Response.write Response.write Response.write Response.write %> </body> ("<b>Fecha:</b>" & dbRS("Fecha") & "<br>") ("<b>Remitente:</b>" & dbRS("Remitente") & "<br>") ("<b>T&iacute;tulo:</b>" & dbRS("Titulo") & "<br>") ("<b>Mensaje:</b>" & dbRS("Mensaje") & "<br>") 4 Seminario web - ASP 44..22.. C CR RE EA AR RN NU UE EV VO OR RE EG GIIS STTR RO O 1. FORMULARIO PARA INTRODUCIR LA INFORMACIÓN Ejemplo: NUEVO.ASP Un simple formulario, sin absolutamente nada de código. Aquí no tenemos que meter nada de código ASP, pero es importante dar a los elementos del formulario un nombre al que luego nos referiremos al actualizar la tabla. Y en la acción del formulario haremos una llamada al fichero ASP con las instrucciones de actualización. <body> <form method="POST" name="NuevoMensaje" action="5_bd_guardar.asp"> Fecha:<br> <input type="text" name="Fecha" size="20" value="<%Now()%>"><p> Remitente:<br> <input type="text" name="Remitente" size="20"><p> Mensaje:<br> <input type="text" name="Mensaje" size="20"><p> <input type="submit" value="Guardar" name="botform"> </form> </body> 2. INSTRUCCIONES PARA INSERTAR UN NUEVO REGISTRO EN LA TABLA Ejemplo: GUARDAR.ASP Añade un nuevo registro a la tabla con los datos del formulario CSQL = "INSERT INTO tabla (campo1, campo2) VALUES (campoF1,campoF2)" DbConn.Execute(cSQL) Conectamos con la base de datos y la tabla <% Dim dbConn,dbRS,cSQL Set dbConn = Server.CreateObject("ADODB.Connection") dbConn.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& Server.MapPath("../data/foro.mdb") %> Podemos asignar unas variables para trabajar cómodamente con los campos del formulario. <% Dim cFecha,cRemitente,cMensaje '--cFecha = Now() cRemitente = Request.Form("Remitente") cMensaje= Request.Form("Mensaje") '--if Len(cRemitente)=0 then cRemitente= " " if Len(cMensaje)=0 then cMensaje = "(sin texto)" '--- Insertamos los datos en la tabla (nuevo registro) cSQL = "INSERT INTO Mensajes" cSQL =cSQL+" (Fecha,Remitente, Mensaje)" cSQL =cSQL+" VALUES ('" & cFecha & "','" & cRemitente & "','" & cMensaje & "')" dbConn.Execute(cSQL) %> Después podemos darle instrucciones para que nos redirija a otra página (sin que tengamos que pulsar ningún vínculo): <% Response.Redirect "lista.asp" %> ¡Recordar siempre cerrar la conexión con la base de datos y con el registro! 5 Seminario web - ASP 44..33.. M MO OD DIIFFIIC CA AR RR RE EG GIIS STTR RO O 1. FORMULARIO PARA INTRODUCIR INFORMACIÓN (CON VALORES POR DEFECTO) Ejemplo: EDITAR.ASP Un formulario, en el que los valores por defecto de sus campos son los del registro consultado. En este caso sí hacemos una consulta a la base de datos, filtrando el registro según el Id traído de la página anterior (igual que hacíamos en el Leer.asp): <% Dim dbConn,dbRS,cSQL Set dbConn = Server.CreateObject("ADODB.Connection") dbConn.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../data/foro.mdb") cSQL = "SELECT * FROM Mensajes WHERE Id =" & Request.Querystring("Id") Set dbRS = dbConn.Execute(cSQL) %> Después creamos el formulario exactamente igual, pero añadimos en las etiquetas (tags) de los campos un valor predeterminado que es el valor del campo en ese registro (¡atención al "=" antes del campo!): <input type="text" name="Remitente" size="20" value="<%=dbRS("Remitente")%>"> 2. INSTRUCCIONES PARA ACTUALIZAR UN REGISTRO EN LA TABLA Ejemplo: ACTUALIZAR.ASP Busca el registro cuyo Id coincide con el del formulario y lo actualiza. El formulario llamará a un fichero, encargado de actualizar la tabla. En realidad podríamos usar un único fichero para Crear/Actualizar, pero para entender bien el código, hemos optado por crear distintos ficheros. cSQL = "UPDATE tabla SET campoT= '" & Request.Form("campoF") & "', campoT2= Request.Form("campoF2") WHERE campoTid = Request.Form("campoFid")" DbConn.Execute(cSQL) Definimos la connexion con la base de datos. <% Dim dbConn,dbRS,cSQL Set dbConn = Server.CreateObject("ADODB.Connection") dbConn.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& Server.MapPath("../data/foro.mdb") %> Después daremos las instrucciones para actualizar la tabla. Podemos hacerlo refiriéndonos directamente a los campos del formulario: <% cSQL="UPDATE Mensajes" cSQL=cSQL+" SET Mensaje='"+ Request.Form("Mensaje") +"'",Remitente='" +Request.Form("Remitente")+"'" cSQL=cSQL+" WHERE Id=" & Request.Form("Id") dbConn.Execute(cSQL) %> O podemos definir unas variables para trabajar con ellas mejor y no tener que poner código tan largo: <% cSQL="UPDATE Mensajes" cSQL=cSQL+" SET Remitente='"+cRemitente+"',Mensaje='"+cMensaje+"'" cSQL=cSQL+" WHERE Id=" & cId dbConn.Execute(cSQL) %> Después sería útil comprobar el resultado viendo la ficha del registro (leer.asp). Para ello podemos redigirnos a esta página: <% Response.Redirect "3_bd_leer.asp?Id=" & cId %> 6 Seminario web - ASP 44..44.. B BO OR RR RA AR RU UN NR RE EG GIIS STTR RO O Ejemplo: BORRAR.ASP Elimina el registro cuyo Id coincide con el dato indicado en la url. Igual que hicimos un vínculo para Editar un registro, filtrando por su Id, haremos un vínculo a la página con las instrucciones de borrar. DELETE FROM tabla WHERE condición DbConn.Execute(cSQL) <% Dim dbConn,dbRS,cSQL '--Set dbConn = Server.CreateObject("ADODB.Connection") dbConn.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="& Server.MapPath("../data/foro.mdb") Y en la consulta, daremos las instrucciones para eliminar ese registro: cSQL = "DELETE FROM Mensajes WHERE Id =" & Request.QueryString("Id") dbConn.Execute(cSQL) %> <% Response.write ("El mensaje nº <b>" & Request.QueryString("Id") & "</b> ya ha sido eliminado.") dbConn.Close Set dbConn = nothing %> 7 Seminario web - ASP 55.. O OTTR RA AS SU UTTIILLIID DA AD DE ES SD DE E LLO OS S FFIIC CH HE ER RO OS SA AS SP P IInncclluuddeedd Imaginemos que tenemos que repetir un bloque de texto o código en muchas páginas. Para evitarlo, podemos crear ficheros included (.inc), a los que haremos un vínculo en nuestra página .ASP, en el sitio exacto donde queramos que el contenido de ese fichero se coloque. También podemos incluir ficheros .asp (esto nos permitiría aprovechar para varias páginas funciones definidas en una única página). Ejemplo: en la IntraLink: Departamentos – Operaciones, cada departamento está repetido por centro, y en cada página encontramos el mismo encabezado y los mismos hipervínculos. Grabaremos todo ese código repetitivo en un fichero aparte con extensión .inc. Y en el lugar donde hubiera estado este código en cada página, colocaremos la etiqueta: <!--#include file="fichero.inc"--> En realidad no hay ningún código ASP, pero si no cambiamos la extensión del fichero .htm, este vínculo no se ejecutará. Y como el ASP se ejecuta en el servidor, el cliente recibirá una página Html aparentemente entera. 66.. A ALLG GO OS SO OB BR RE E JJA AV VA AS SC CR RIIP PTT - El JavaScript, a diferencia del ASP, se ejecuta en el cliente. Eso quiere decir que se ejecutará cuando el navegador del cliente interprete el código de la página Html (no hay que cambiar la extensión del fichero). - Podemos colocar el código en cualquier lugar de la página, entre las etiquetas <script language="JavaScript"></script>. - Los comentarios se ponen iniciando la línea con // - A menudo encontramos el código JS entre los signos de comentario de Html (<!—y -->). Eso evita que, si el navegador no es capaz de interpretar el JS (por versión...), devuelva el contenido del código JS como si fuera parte del texto Html. - Podemos comprobar si funciona desde la propia vista previa del programa editor (no hace falta tener publicada la página en el servidor web, como ocurre con ASP). Un ejemplo sencillo de JavaScript: Mensajes emergentes: En la cabecera escribimos una función: <script language="JavaScript"> function Frase() { alert ('Mensaje emergente') } </script> Y en el cuerpo asignamos un evento a una de las etiquetas Html: <p onclick=Frase() style="cursor:hand">Mensaje emergente</p> Para ver más ejemplos dentro de la IntraLink: varios/work/EjCodigo/ 8