Professional Documents
Culture Documents
Introduccin o Presentacin o Creando las BD o Obtener un DSN o Instalando Personal Web Server y Sambar Server o Instalando Perl, JSP y1 PHP3 o El directorio cgi-bin o Creando las aplicaciones: Ejemplos
Introduccin
Presentacin
En estas pginas vamos a intentar dar una pequea introduccin sobre como acceder desde nuestra pgina web a una base de datos utilizando diferentes tecnologas, (todas ellas para servidores en Windows 9x, aunque algunas tambin para Unix, Linux...) para que cada uno compare y elija la que mas le guste. Mi Nombre es Alejandro Garca, soy estudiante de Ingeniera Tcnica de Informtica de Gestin por la Universidad de Granada (Spain). Este tutorial nace debido a la realizacin de una practica de la asignatura Sistemas de Informacin Empresarial en el mes de Abril del ao 2000. Espero que le sirva a de ayuda. Cualquier duda o comentario por favor envemelo a Mail me . Gracias.
Creando las BD
El primer paso es crear las bases de datos que vamos a usar en nuestros ejemplos, lo cual no es muy difcil ni para usuarios poco avanzados. Vamos a probar los ejemplos usando dos bases de datos relacionales en distinto formato para demostrar que no influye el tipo de servidor de bases de datos que usemos, si los conectamos mediante el ODBC de Windows 9x. Las dos base de datos tendrn las mismas tablas que son las siguientes: Tabla de clientes:
Nombre de la fila Tipo de la fila Nombre de la fila Tipo de la fila dni Texto (8), Primary Key Nombre Texto (20) Apellido1 Texto (20) Apellido2 Texto (20)
Tabla de proveedores:
Nombre de la fila Tipo de la fila Nombre de la fila Tipo de la fila cif Texto (9), Primary Key Empresa Texto (20)
Obtener un DSN
DSN: Data Source Name. Es un identificador nico de la base de datos en el sistema. Al definir un
DSN hay que especificar tanto la ruta completa del archivo de base de datos como el controlador adecuado a la misma (MSAccess, FoxPro, DBase etc). Una vez creado, es todo lo que necesitamos saber acerca de la base de datos para poder abrirla, consultarla, modificarla, etc. Una vez que tenga preparado su archivo de bases de datos (por ejemplo ejemplo1.mdb) colquelo en el directorio Data de su dominio. Despus vaya al panel de control de su dominio y obtenga un DSN para dicho archivo. El DSN ser el identificador con el que podr conectar con su base de datos. Esto se hace as: Abrimos Panel de Control y abrimos ODBC. El icono debe ser algo parecido a esto:
Selecciona la pestaa System DSN. Aparecer vaca si no se ha definido antes ningn otro DNS de sistema. Pulsa el botn Add . Veras una ventana parecida a la de la imagen:
Escoge el driver para Microsoft Access ( en este caso ) y pulsa el botn finish. Ahora debers ver la siguiente ventana:
En la etiqueta Data Source Name, introduce el nombre con el cual llamaras a tu base de datos. Para el ejemplo debes introducir Ejemplo1. Finalmente, pulsa el botn Select y busca el nombre y path completo de la base de datos que habamos creado (Data/Ejemplo1.mdb). Y esto es todo. Ya esta accesible tu base de datos mediante ODBC.
de CD-ROM. Haga clic en Aceptar. Siga las instrucciones de Personal Web Server Setup.
Si tienes suerte y todo va bien ya tienes instalado el PWS y al reiniciar el equipo tendrs en la barra de tareas el icono de PWS. Si lo pulsas dos veces vers una pantalla parecida a esta:
Pulsando en Avanzada crear tus directorios y darles los permisos de ejecucin para poder guardar en el los scripts o bien utilizar el directorio que l crea por defecto. Tambin vamos a instalar otro servidor Web para que veis como hacerlo y las diferencias entre uno y otro.Este otro servidor es el Sambar web Server que podis bajaros gratuitamente desde http://www.winfiles.com/ .Personalmente me gusta ms que PWS porque es ms fcil de configurar y de instalar pero lo malo es que no ejecuta los script ASP ( por lo menos la version que yo tengo ). Una vez que tengis el fichero .zip de Sambar server lo descomprimes en un directorio tmp y ejecutas el setup.exe, Ya est , nada ms que hacer, aunque tiene muchas ms posibilidades pero para nuestros propsitos no nos interesa en este momento. Si lo lanzas debes ver algo parecido a esto:
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/W3Svc/Parameters/Script Map
Ve al men Edicin y pulsa Nuevo->Valor de la cadena. En Nombre debes poner las extensiones asociadas a tus scripts php. Por ejemplo '.php3' Haciendo Doble click en el nuevo valor introduce el path del ejecutable php.exe, por ejemplo: 'c:\php3\php.exe %s %s'. Los '%s %s son muy importantes, si ellos php no funcionaria. Repite 1)-4) para cada extensin que quieras asociar con PHP.Los ms comunes son .php3 y .phtml Ve a HKEY_CLASSES_ROOT Ve al men Edicin y pulsa Nuevo->Clave El nombre de la clave es la extensin que quieres asociar con php ( '.php3' ) Pulsa la nueva clave y en el panel derecho haz doble click en el valor por defecto y escribe 'phpfile' Repite 5) - 8) para cada extensin que quieras asociar con php. Ve al men Edicin y pulsa Nuevo->Clave. El nombre de la clave debe ser 'phpfile' Pulsa la nueva clave y en el panel derecho haz doble click en el valor por defecto y escribe 'PHP Script' Ahora crea una nueva clave hija de 'phpfile' y llmala 'Shell' Ahora crea una nueva clave hija de 'Shell' y llmala 'open' Ahora crea una nueva clave hija de 'open' y llmala 'command' Pulsa la clave command y en el panel derecho haz doble click en el valor por defecto y escribe:'c:\php3\php.exe -q %1' Sal de Regedit
Si todo ha ido bien ya tienes tu PWS funcionando con PHP3. PERL No es tan difcil como PHP3. Lo primero que debes hacer es bajarte la versin de Perl 5 de http://www.perl.com/ o desde http://www.shareware.com/ y descomprime el .zip que te has bajado en un directorio de tu servidor. Por ejemplo c:\perl5. Para terminar slo debes aadir el directorio bin de perl a tu variable PATH dentro del autoexec.bat JSP Debes instalar el JDK que puedes encontrar en http://www.javasoft.com/ , yo te recomiendo la versin 1.2 o posterior. Esto es fcil, slo tienes que descomprimirla y ejecutar el programa de instalacin y aadir la variable CLASSPATH a tu autoexec.bat. Esta debe valer algo parecido a :
SET CLASSPATH=C:\JDK1.2\LIB\TOOLS.ZIP
Nosotros vamos a usar JSP que es algo parecido a ASP. Puedes buscarlo en http://www.javasoft.com/products/jdbc/index.html. Te bajas el JSWDK ( Java Server Development Kit for Windows ) junto con la documentacin. Se instala descomprimiendo el .zip en el directorio JDK1.2 Cuando hayas instalado el JSWDK tienes que configurar el servidor que trae para poder ejecutar los JSP.( Casi no hay que tocarlo funciona por defecto en el puerto 8080 ). Lo que s tienes que hacer es aadir otra variable de entorno a tu autoexec.bat algo parecido a " Set JAVA_HOME=c:\JDK1.2" Para Lanzar el servidor tienes que llamar a desde una ventana de MS-DOS a la macro Startserver.com. Una ayuda:esta macro define cantidad de variables de entorno y lo mas seguro es que no te funcione. ( Da un error de " sin espacio de entorno "). Solucin: imprime el fichero startserver.bat y ve definiendo una a una las variables de entorno y luego ejecuta start java .... tal y como dice la macro. Si todo va bien se abrir otra ventana de ms-dos donde estar corriendo el nuevo servidor. Se accede a l con una llamada del tipo http://127.1.1.1:8080
El directorio cgi-bin
Sea cual sea nuestro servidor necesitamos que los script y los cgi estn en un directorio que tenga permiso de ejecucin. Lo ms frecuente es que este directorio se llame cgi-bin.(otros como Apache o Sambar no permiten otro directorio que no sea cgi-bin). PWS crea el directorio /SCRIPTS. Yo particularmente, he creado en mi servidor varios directorios ( uno para cada tecnologa ) y les he dado permiso de ejecucin. Esto se hace con el PWS en la opcin AVANZADAS. Debes ver algo como:
ASP
o o o
o o
Connection Propiedades y mtodos ms relevantes Recordset Propiedades y mtodos ms importantes Command Nuestro Ejemplo
ASP
Introduccin
El sistema de acceso a bases datos a travs de la web utilizando la tecnologa Microsoft, se denomina ADO (ActiveX Data Objects). Aqu se expone una introduccin comprensiva en castellano. Para ver una completa referencia acerca de todo el sistema de bases de datos de Microsoft, consulte en www.microsoft.com/data. La referencia completa de mtodos y propiedades de los objetos est tambin en la biblioteca online de MSDN (msdn.microsoft.com). Ah ver mltiples ejemplos en los que comprobar la flexibilidad del sistema ADO (al mismo resultado se puede llegar por vas distintas). Por motivos pedaggicos, aqu se expone una utilizacin ms rgida.
Terminologa
ADO: ActiveX Data Objects. Es una familia de objetos componentes dedicados a facilitar el
acceso a bases de datos. El ProgID de cada uno de ellos se forma combinando ADODB. con el nombre del objeto (por ejemplo ADODB.Recordset, ADODB.Connection, ADODB.Command, etc). Por tanto, en VBScript los objetos se crean con sentencias tipo Set mirst = Server.CreateObject("ADODB.Recordset"), etc
<!--#INCLUDE FILE="adovbs.inc"-->
Para que esta inclusin funcione el archivo adovbs.inc debe estar en el mismo directorio que la pgina ASP que lo incluye.
Connection
Representa una conexin a una base de datos. Este es el primer objeto que debemos crear para poder conectar con la base de datos. Tanto el objeto ADO que nos permite acceder a los datos (Recordset) como el que nos permite realizar consultas (Command) disponen de una propiedad llamada ActiveConnection que es una referencia al objeto connection que enlaza con la base de datos a la que queremos atacar. De ah que el primer paso sea crear la conexin.
Set miconexion = Server.CreateObject("ADODB.Connection") miconexion.ConnectionString = "DSN=midsn" miconexion.Open ' ....... '........ miconexion.Close %>
Recordset
Este es el objeto ADO ms importante ya que es con el que accederemos directamente a los datos de las tablas, tanto para leerlos como para modificarlos. Un objeto Recordset representa una tabla, que puede ser una tabla fsica de la base de datos o bien una obtenida mediante una operacin como un filtrado o sentencia SQL. En cualquier caso, el objeto representa a la tabla con todos sus registros, aunque slo uno de ellos es el activo. El registro activo es en el que podemos leer o modificar los valores de los campos. Tambin se le llama cursor.
adLockOptimistic que permite editar la base de datos o aadir registros realizando un bloqueo
optimista (slo cuando sea estrictamente necesario). CursorType El tipo de cursor que se utiliza para recorrer los registros de un recordset. Por defecto toma el valor adOpenForwardOnly que como su nombre indica slo permite moverse hacia adelante. Por ello si queremos utilizar libremente todos los mtodos de movimiento de un recordset (MoveFirst, MoveTo, MoveNext, MovePrevious, etc) tendremos que cambiar el cursor por uno ms potente. Esto puede hacerse asignando a esta propiedad el valor adOpenKeyset Ejemplo Aqu creamos en primer lugar un objeto Connection y luego un Recordset al que se asigna dicho objeto. Este ejemplo es una especie de esqueleto para los dems que sigan: Se supone que debe hacerse algo parecido a esto para abrir el Recordset. Es decir, en los restantes ejemplos escribimos slo el cdigo que ira en el lugar de los puntos suspensivos de este script (NOTA: Recuerde que si hay que aadir registros es necesario cambiar el LockType antes de inicializar el recordset).
<% Set miconexion = Server.CreateObject("ADODB.Connection") miconexion.ConnectionString = "DSN=midsn" miconexion.Open Set mirecordset = Server.CreateObject("ADODB.Recordset") mirecordset.ActiveConnection = miconexion mirecordset.Source = "Clientes" mirecordset.Open ........ ' Operaciones con los datos ........' de la tabla Clientes. mirecordset.Close miconexion.Close %>
Propiedades que hacen referencia al nmero de registros: RecordCount Nmero de registros de la tabla a la que representa el objeto recordset. Ejemplo:
<h3> Tenemos <%= rstClientes.RecordCount%> clientes registrados en nuestra base de datos </h3>
EOF Acrnimo de End Of File. Vale TRUE si estamos en el ltimo registro y FALSE si no. Se usa mucho como condicin en bucles while, los cuales se ejecutan hasta llegar al ltimo registro. BOF Acrnimo de Begin Of File. Vale TRUE si estamos en el primer registro y FALSE si no. Mtodos para mover el cursor (registro activo): Estos mtodos pueden funcionar todos o no dependiendo del tipo de cursor creado. El tipo de cursor se asigna en la propiedad CursorType. Por ejemplo, para asignar un cursor adOpenKeySet que permita moverse hacia adelante o hacia atrs:
<% Set miconexion = Server.CreateObject("ADODB.Connection") miconexion.ConnectionString = "DSN=midsn" miconexion.Open Set mirecordset = Server.CreateObject("ADODB.Recordset") mirecordset.ActiveConnection = miconexion mirecordset.Source = "Clientes" mirecordset.CursorType = adOpenKeySet mirecordset.Open
........ ' Operaciones con los datos ........' de la tabla Clientes. mirecordset.Close miconexion.Close %>
Ntese que la asignacin de propiedades al recordset debe hacerse antes de invocar el mtodo open que es el que lo inicializa con registros. MoveFirst Mueve el cursor al primer registro de la tabla MoveLast Mueve el cursor al ltimo registro de la tabla MoveNext Mueve el cursor al siguiente registro. MovePrevious Mueve el cursor al registro anterior. Ejemplo de un bucle que recorre todos los registros de una tabla
<% mirecordset.MoveFirst do while not mirecordset.EOF ..... ' Tratamiento ..... ' de datos mirecordset.MoveNext loop %> mirecordset("Domicilio")
Lectura y modificacin de los campos del registro activo La sintaxis para acceder a los datos de un campo del registro activo de un recordset es: Esto se usa tanto para leer como asignar valores. En nuestro ejemplo, el objeto mirecordset representa a una tabla uno de cuyos campos tiene el nombre "Domicilio". As, con la expresin
dom = mirecordset("Domicilio")
Leemos el valor del campo domicilio del registro activo y se lo asignamos a la variable dom. Con la expresin
asignamos un valor al campo Domicilio del registro activo. Tras la edicin del registro, es necesario llamar al mtodo Update. El motivo es que los cambios en el registro activo se realizan sobre un buffer (espacio de almacenamiento intermedio) y no sobre el registro propiamente dicho. Ejemplo: El recordset rstClientes representa a nuestra tabla de clientes que, entre otros, tiene los campos Provincia e IVA . El siguiente bucle recorre todos los clientes, comprueba su provincia y le asigna el IVA correspondiente: 0 para Canarias y 16 para los dems
<%
rstClientes.MoveFirst do while not rstClientes.EOF if rstClientes("Provincia") = "Las Palmas" or rstClientes("Provincia") = "Tenerife" Then rstClientes("IVA") = 0 else rstClientes("IVA") = 16 end if rstClientes.Update rstClientes.MoveNext
loop %>
Mtodos para agregar o eliminar registros de la tabla Delete Eliminar el registro activo es muy fcil. Basta con invocar este mtodo. Por ejemplo, este bucle elimina todos los clientes morosos de nuestra base de datos:
<% rstClientes.MoveFirst do while not rstClientes.EOF if rstClientes("Deuda") > 0 Then rstClientes.Delete end if rstClientes.MoveNext loop %>
AddNew y Update Crear un nuevo registro involucra dos mtodos: Primero AddNew crea un nuevo registro en blanco. Despus asignamos valores a los distintos campos del registro. Por ltimo invocamos el mtodo Update para que se haga efectiva la incorporacin del nuevo registro con los valores asignados. En este ejemplo incorporamos un nuevo cliente a nuestra base de datos
<% rstClientes.AddNew rstClientes("Nombre") = "Pepe Gotera" rstClientes("Direccion") = "Rue del Percebe, 13" rstClientes("Localidad") = "Sildavia" rstClientes("Profesion") = "Chapuzas a domicilio" rsClientes.Update %>
Recuerde que para que esto funcione hay que asignar un tipo de bloqueo que permita la edicin de la base de datos. Esto se hace asignando a la propiedad LockType del recordset uno de estos valores: adLockOptimistic, adLockPessimistic o adLockBatchOptimistic.
Command
Este objeto es la representacin de un comando que se enva a la base de datos. Este comando puede ser una de estas 3 cosas: Llamada a un procedimiento guardado en la base de datos. El texto de una sentencia SQL. El nombre de una tabla. ActiveConnection Es una referencia al objeto connection que enlaza con la base de datos. es imprescindible asignar esta propiedad antes de invocar el mtodo command.execute para ejecutar el comando. CommandText Este es el texto del comando. Si se trata de una consulta SQL (lo habitual), esta propiedad es simplemente una cadena con el texto de la consulta. Execute El mtodo que ejecuta la consulta. El resultado de la ejecucin del comando normalmente ser un recordset. En el ejemplo, obtenemos un recorset con un filtrado de la tabla Clientes en el que se toma slo aquellos clientes cuya provincia es Navarra.
<%
Set miconexion = Server.CreateObject("ADODB.Connection") miconexion.ConnectionString = "DSN=midsn" miconexion.Open Set SqlCommand = Server.CreateObject("ADODB.Command") SqlCommand.ActiveConnection = miconexion SqlCommand.CommandText = "SELECT * FROM Clientes WHERE Provincia = 'Navarra'" Set rstNavarros = SqlCommand.execute ' ....... '........ miconexion.Close %>
Nuestro Ejemplo
En nuestro ejemplo vamos a usar el script bd.asp, PWS y la base de datos Ejemplo1 en formato Access. Como casi todos los script que vamos a desarrollar en este turorial, primero nos presenta el estado actual de la tabla Clientes y un formulario para aadir un nuevo registro en la BD. Tambin hemos explicado en este captulo como borrar y moverse por el recordset, pero en el ejemplo no lo usamos porque la mayora de las veces el cliente slo debe poder ver y aadir registros a la base de datos, y no modificarlos y / o borrarlos. Llamando al scripts desde el browser cliente con http://127.1.1.1/sie/asp/bd.asp debe aparecernos algo parecido a esto:
PHP3
o o o o o
PHP3
Introduccin
El PHP3 es otro lenguaje de script que nos permite programar aplicaciones que se ejecutarn en nuestro servidor. Es uno de los lenguajes ms utilizados en el mundo Unix con el servidor Apache aunque tambin se puede ejecutar bajo Windows.
Qu utilizamos?
Ya tenamos instalado PHP3 como vimos en el captulo anterior . En este caso vamos a utilizar la base de datos en formato Access de nuevo junto con el PWS. Por aquello de ir alternando uno y otro.
El Lenguaje PHP3
Lo primero que le indicamos al browser es que vamos a ejecutar cdigo PHP3. Esto lo hacemos con la directiva <?php para que sepa cmo interpretarlo. Lo dems es bastante parecido a perl o a asp. Se trabaja con objetos. Primero creamos el objeto conexin:
$cnx = odbc_connect( 'Ejemplo1' , 'Alejandro', 'pasword' ); if (!$cnx) { Error_handler( "Error al conectar odbc" , $cnx ); }
Despus definimos la sentencia sql: Lo ejecutamos:
$SQL_Exec_String = "select * from Clientes"; $cur= odbc_exec( $cnx, $SQL_Exec_String ); if (!$cur) { Error_handler( "Error en odbc_exec( ) " , $cnx ); }
Obtenemos los resultados en un objeto cursor y se los mandamos al cliente en una tabla.
echo "<table border=1><tr><th>Dni</th><th>Nombre</th>". "<th>Apellido1</th><th>Apellido2</th></tr>\n"; $nbrow=0; //Variable local para contar el n de filas while( odbc_fetch_row( $cur ) ) { $nbrow++; $Dni= odbc_result( $cur, 1 ); $Nombre= odbc_result( $cur, 2 ); $Apellido1= odbc_result( $cur, 3 ); $Apellido2= odbc_result( $cur, 4 ); echo "<tr><td>$Dni</td><td>$Nombre</td>". "<td>$Apellido1</td><td>$Apellido2</td></tr>\n"; } echo "<tr><td colspan=2>$nbrow entradas en la bd </td></tr></table>";
Cerramos la conexin.
odbc_close( $cnx);
Como veis es bastante sencillo y parecido a todos los dems lenguajes scripts.
Insertar, borrar...
Para las dems opciones de la base de datos ( insertar, Borrar, modificar ...) tan slo tenemos que modificar le sentencia sql y volver a hacer un select * para devolver la nueva tabla al usuario, como se ve en el ejemplo:
function Enter_New_Entry($Dni,$Nombre,$Apellido1,$Apellido2) { $cnx = odbc_connect( 'Ejemplo1' , 'Alejandro', 'Password' ); if (!$cnx) { Error_handler( "Error en odbc_connect" , $cnx ); } $SQL_Exec_String = "Insert Into Clientes (dni, Nombre, Apellido1, Apellido2) Values ('$Dni', '$Nombre', '$Apellido1', '$Apellido2')"; $cur= odbc_exec( $cnx, $SQL_Exec_String ); if (!$cur) { Error_handler( "Error en odbc_exec( ) " , $cnx ); } } odbc_close( $cnx);
Ejecutando el CGI
Hemos Creado dos ficheros php3 uno es el que nos ensea el estado actual de la base de datos y nos presenta un formulario por si queremos aadir un registro a ella. Este es el fichero: FormInput.php3. El segundo fichero es la respuesta a la insercin que hemos realizado y nos presenta el estado de la BD antes de insertar y despus. El fichero es: DataAccess.php3 Debes copiar los dos en un directorio de tu servidor con permiso de ejecucin. Yo los he copiado en /sie/php3 tal y como vimos al principio del tutorial. Primero llamas desde tu navegador a FormInput.php3 y debes ver algo como esto:
5.- Elegir 'instalacion minima' (minimum instalation) y deja todas las opciones como estan. 6.- Ya que termine la instalacion del PWS y se haya reiniciado la computadora, aparecera un Icono cerca del reloj en la barra de tareas. 7.- Doble click sobre este Icono para abrir el 'Personal Web Manager' desde donde podras configurar el PWS. 8.- Una vez abierto el Personal Web Manager veras el cuadro de dialogo principal donde mostrara tu pagina de inicio (home page) y el directorio de inicio (home directory) y sus valores. Donde la pagina de inicio se muestra abajo como 'http://My_Computer', que viene siendo http:// seguido del nombre de la computadora. Dando click sobre cualquiera de estos valores abrira tu pagina en el navegador predeterminado o el directorio en el explorador de Windows.
9.- Para ver tu sitio en el navegador teclea 'http://My_Computer', substituye 'My_Computer' por el nombre de tu computadora, en la barra de direccion del navegador. Si no estas seguro del nombre de tu computadora da click sobre 'Entorno de red' en el 'panel de control' y click sobre la pestaa de 'Identificacion de red'. 10.- Hasta que pongas tu sitio en el directorio predeterminado del PWS, veras la documentacion del PWS. 11.- Para poner tu sitio en lugar de la documentacion del PWS, recomendamos leerla antes de reemplazarla, necesitas poner tu sitio en el directorio 'c:\inetpub\wwwroot' asegurandote que la pagina de inicio de tu sitio se llame default.htm o default.asp,
ahora cuando se teclea 'http:// seguido del nombre de tu computadora', en el navegador veras tu sitio.
Como veis, la base de datos es muy sencilla, solo contiene una tabla denominada "postales" y tres campos
id url tema Campo autonumrico que nos hace de identificador de cada imagen Nombre fsico de la imagen (mariposa.gif, avion.jpg,...) El campo tema nos servir para agrupar todas las imgenes de un mismo tipo (paisajes, infantil, ...)
Hasta aqu sencillo verdad?, bueno, pues como veris ahora el cdigo tampoco es complejo. Mdulos de la aplicacin Como dijimos al principio, la aplicacin consta de 3 mdulos:
default.asp Ser la pgina de inicio de nuestro sistema de postales. Cumplir una doble funcin, nos va a servir tanto para elegir el tema de la postal (si se entra en ella sin parmetros) como para que el usuario confeccione la postal una vez elegido el tema En este modulo comprobaremos que el usuario ha introducido todos los datos necesarios para el envo, y si es as le mostraremos una previsualizacin de la postal y le daremos la oportunidad de enviarla o volver atrs para corregirla. En este modulo llamaremos a ASPEmail y confeccionaremos y enviaremos la postal
confirmapostal.asp
enviarpostal.asp
18,388
veces
directorios que contienen nuestras imgenes CONFIRMAPOSTAL.ASP En este modulo comprobamos que ninguna de las variables recibidas desde default.asp esta vaca, si alguna lo esta, emitimos un mensaje de error y no mostramos la previsualizacin de la postal. Utilizamos la funcin comentarios=replace(request.form("comentarios"),chr(10),"<br>") para sustituir los saltos de lnea de teclado por etiquetas <br>
Defaul.asp
<html> <head> <title>Envio de E-Postales</title> </head> <body> <%urlfoto="images/" urlminiatura="images/miniaturas/" tema=request.form("tema")%> <center> <div align="center"> <center> <table border="0" width="80%"> <tr> <td width="100%" align="center"><font color="#0000FF" size="5"> Envi de E-Postales</font> <p> </p> </td></tr> <tr> <td width="100%" align="center" bgcolor="#D9F8FF"> <%Set Conna = Server.CreateObject("ADODB.Connection") 'nota: la cadena de conexin debe de ir en una sola lnea, aqui esta cortada por diseo Conna.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\TudirBd\postales.mdb")) set rs=createobject("ADODB.Recordset") if tema="" then sqltxt="SELECT distinct tema from postales" rs.open sqltxt,conna%> <p align="left">Elige un tema para tu postal:</p> <form method="POST" action="default.asp"> <p align="center"><select size="1" name="tema"> <%do while not rs.eof %> <option><%=rs("tema")%></option> <%rs.movenext loop rs.close set rs=nothing%> </select><input type="submit" value="Seleccionar" name="B1"></p> </form> <p><br> <%else sqltxt="SELECT * from postales where tema like '%"&tema&"%' order by id" rs.open sqltxt,conna%>
</p> <p align="left"><font color="#0000FF">Tema:</font><font color="#00FFFF"> </font> <%=tema%></p> <p align="left">Elige una imagen para tu postal:</p> <form method="POST" action="confirmapostal.asp"> <table border="0" width="100%" bgcolor="#55B5F1"><tr> <%contador=0 do while not rs.eof contador = contador+1 if contador >3 then contador=1%> </tr><tr> <%end if %> <td width="33%" align="center"> <p align="center"><img border="0" src="<%=urlminiatura%><%=rs("url")%>" > <input type="radio" value="<%=rs("id")%>" name="id" checked></td> <%rs.movenext loop rs.close set rs=nothing%> </tr> </table> <p align="left"> </p> <table border="1" width="100%" bgcolor="#C0C0C0" bordercolor="#FFFFFF"> <tr> <td width="30%"><font color="#0000FF" size="2">Tu nombre:</font></td> <td width="70%"><input type="text" name="nombre" size="45"></td> </tr> <tr> <td width="30%"><font color="#0000FF" size="2">Tu email:</font></td> <td width="70%"><input type="text" name="email" size="45"></td> </tr> <tr> <td width="30%"><font color="#0000FF" size="2">Nombre de tu amigo:</font></td> <td width="70%"><input type="text" name="amigo" size="45"></td> </tr> <tr> <td width="30%"><font color="#0000FF" size="2">Email de tu amigo:</font></td> <td width="70%"><input type="text" name="emailamigo" size="45"></td> </tr> </table> <p align="left">Que le contamos:</p> <p align="center"><textarea rows="2" name="comentarios" cols="53"></textarea></p> <p align="center"><input type="submit" value="continuar ->" name="B1"></p> </form> <%end if%> </td> </tr> <tr> <td width="100%" align="center"> </center> </center> <p align="right"><font size="1"> Cdigo proporcionado por : <a href="http://www.asptutor.com"> <img border="0" src="http://www.asptutor.com/images/asptutor88x31.gif"></a></font></td> </tr> </table> </div> </body> </html>
Confirmapostal.asp
<%if request.form("id")="" then response.redirect "default.asp" end if urlfoto="images/" urlminiatura="images/miniaturas/"%> <html> <head> <title>Envio de E-Postales</title> </head> <body> <div align="center"> <center> <table border="0" width="80%" bgcolor="#D9F8FF"> <tr> <td width="100%"> <%for each v_entrada in request.form for indice=1 to request.form(v_entrada).count if request.form(v_entrada)(indice) = "" then mal=1%> <font color="#FF00FF">El campo <%=v_entrada%> no puede estar vacio</font><br> <%end if next next if mal <> 1 then Set Conna = Server.CreateObject("ADODB.Connection") 'nota: la cadena de conexin debe de ir en una sola lnea, aqui esta cortada por diseo Conna.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\TudirBd\postales.mdb")) set rs=createobject("ADODB.Recordset") sqltxt="SELECT * from postales where id="&request.form("id") rs.open sqltxt,conna url=rs("url") rs.close set rs=nothing %> <h3 align="center"><font color="#FF0000">Esta es la postal que vas a enviar</font></h3> <div align="center"> <center> <table border="0" width="500" background="images/rayasgrises.gif"> <tr> <td width="642" colspan="2"> </td> </tr> <tr> <td width="93" bgcolor="#66CCFF"> </td> <td width="543"> <table border="0" width="100%" cellspacing="5" bgcolor="#FFFFFF"> <tr> <td><img border="0" src="<%=urlfoto%><%=url%>" align="left"></td> <%'cambiamos los saltos de carro por <br> comentarios=replace(request.form("comentarios"),chr(10),"<br>") 'Ponemos la primera letra en mayusculas inicial=ucase(mid(request.form("comentarios"),1,1)) 'Asignamos a la variable comentarios el resto de la cadena comentarios=mid(comentarios,2) %> <td valign="top"> <i> <font color="#FF00FF" size="7"> <%=inicial%></font></i><%=comentarios%></td> </tr> <tr> <td width="100%" colspan="2"><font color="#FF0000">De:</font>
<a href="mailto:<%=request.form("email")%>"><%=request.form("nombre")%></a><br> <font color="#FF0000">Para:</font> <%=request.form("amigo")%> (<%=request.form("emailamigo")%>)</td> </tr> </table> <p> </p> </td> </tr> </table> </center> </div> <div align="center"> <center> <table border="0" width="50%"> <tr> <td width="50%" valign="top"> <p align="center">No me gusta, quiero corregirla</td> <td width="50%" valign="top"> <p align="center">Me gusta,<br> envala</td> </tr> <tr> <td width="50%" valign="top" align="center"> <a href="javascript:window.history.back()"> <img border="0" src="../images/atras.gif"></a></td> <td width="50%" valign="top" align="center"> <form method="POST" action="enviarpostal.asp"> <input type="hidden" name="comentarios" size="20" value="<%=request.form("comentarios")%>"> <input type="hidden" name="nombre" size="20" value="<%=request.form("nombre")%>"> <input type="hidden" name="email" size="20" value="<%=request.form("email")%>"> <input type="hidden" name="amigo" size="20" value="<%=request.form("amigo")%>"> <input type="hidden" name="emailamigo" size="20" value="<%=request.form("emailamigo")%>"> <input type="hidden" name="url" size="20" value="<%=url%>"> <input type="hidden" name="id" size="20" value="<%=request.form("id")%>">
<p><input border="0" src="../images/adelante.gif" name="I1" type="image"></p> </form> </td> </tr> </table> </center> </div> <%else%> <p align="center"><a href="javascript:window.history.back()"> <img border="0" src="../images/atras.gif"></a></p> <%end if%></td> </tr> <tr> <td width="100%"> <p align="right"> <font size="1">Cdigo proporcionado por : <a href="http://www.asptutor.com"> <img border="0" src="http://www.asptutor.com/images/asptutor88x31.gif"></a> </font></td> </tr> </table> </center> </div> </body> </html>
Mdulos de la aplicacin Apuntes sobre el cdigo: ENVIARPOSTAL.ASP En las variables urlfoto y urlminiatura guardamos la direccin ABSOLUTA de los directorios que contienen nuestras imgenes. Tener en cuenta que cuando alguien reciba la postal, todas las referencias a objetos de la red (URL's, tanto de imgenes como hipervinculos) que se incluyan en esta debern ser en ABSOLUTO (http://www.tuweb.com/....) , de otra forma no podra visualizarlas Tendris que configurar las variables de ASPEmail con los datos de vuestro servidor.
Enviarpostal.asp
<% id=request.form("id") if id = "" then response.redirect "default.asp" end if urlfoto="http://www.tuweb.com/postales/images/" urlminiatura="http://www.tuweb.com/postales/images/miniaturas/" 'cambiamos los saltos de carro por <br> comentarios=replace(request.form("comentarios"),chr(10),"<br>") 'Ponemos la primera letra en mayusculas inicial=ucase(mid(request.form("comentarios"),1,1)) 'Asignamos a la variable comentarios el resto de la cadena comentarios=mid(comentarios,2) strHost = "mail.tuweb.com" Set Mail = Server.CreateObject("Persits.MailSender") Mail.Host = strHost Mail.From = "webmaster@tuweb.com" Mail.FromName = request.form("nombre") Mail.AddReplyTo request.form("email") Mail.AddAddress request.form("emailamigo") titulo=Request.form("Nombre")&" te envia una e-postal" Mail.Subject = titulo Mail.IsHTML = True mensaje="<html><head>" mensaje=mensaje & "<title>Una E-postal para ti</title>"&vbcrlf mensaje=mensaje & " </head><body><div align=center>"&vbcrlf mensaje=mensaje & "<center> "&vbcrlf mensaje=mensaje & "<table border=0 width=652 " mensaje=mensaje & " background=http://www.tuweb.com/images/rayasgrises.gif> "&vbcrlf mensaje=mensaje & " <tr>"&vbcrlf mensaje=mensaje & " <td width=93 bgcolor=#66CCFF> </td>"&vbcrlf mensaje=mensaje & " <td width=543> "&vbcrlf mensaje=mensaje & " <table border=0 cellspacing=5 bgcolor=#FFFFFF>"&vbcrlf mensaje=mensaje & " <tr> <td ><img border=0 src="&urlfoto&request.form("url")&">"&vbcrlf mensaje=mensaje & " <td valign=top>"&vbcrlf mensaje=mensaje & " <i><font color=#FF00FF size=7>" mensaje=mensaje & inicial&"</font></i>"&comentarios&vbcrlf mensaje=mensaje & "</td> </tr>"&vbcrlf mensaje=mensaje & " <tr>"&vbcrlf mensaje=mensaje & "<td colspan=2> "&vbcrlf mensaje=mensaje & " <font color=#FF0000>De:</font>"&vbcrlf mensaje=mensaje & " <a href=mailto:"& request.form("email")&">" mensaje=mensaje & request.form("nombre")&" </a><br>"&vbcrlf mensaje=mensaje & "<font color=#FF0000>Para:</font> "&vbcrlf
<title>Envio de E-Postales</title> </head> <body> <p align="center"> </p> <h3 align="center"><font color="#FF0000">Postal enviada correctamente</font></h3> <p align="center"><a href="default.asp">Enviar otra</a></p> <p align="center"> <font size="1">Cdigo proporcionado por : <a href="http://www.asptutor.com"> <img border="0" src="http://www.asptutor.com/images/asptutor88x31.gif"></a> </font> </body> </html>
18,389
veces
Defaul.asp
<html> <head> <title>Envio de E-Postales</title> </head> <body> <%urlfoto="images/" urlminiatura="images/miniaturas/" tema=request.form("tema")%> <center> <div align="center"> <center> <table border="0" width="80%"> <tr> <td width="100%" align="center"><font color="#0000FF" size="5"> Envi de E-Postales</font> <p> </p> </td></tr> <tr> <td width="100%" align="center" bgcolor="#D9F8FF"> <%Set Conna = Server.CreateObject("ADODB.Connection") 'nota: la cadena de conexin debe de ir en una sola lnea, aqui esta cortada por diseo Conna.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\TudirBd\postales.mdb")) set rs=createobject("ADODB.Recordset") if tema="" then sqltxt="SELECT distinct tema from postales" rs.open sqltxt,conna%> <p align="left">Elige un tema para tu postal:</p> <form method="POST" action="default.asp"> <p align="center"><select size="1" name="tema"> <%do while not rs.eof %> <option><%=rs("tema")%></option> <%rs.movenext loop rs.close set rs=nothing%> </select><input type="submit" value="Seleccionar" name="B1"></p> </form> <p><br> <%else sqltxt="SELECT * from postales where tema like '%"&tema&"%' order by id" rs.open sqltxt,conna%> </p> <p align="left"><font color="#0000FF">Tema:</font><font color="#00FFFF"> </font> <%=tema%></p> <p align="left">Elige una imagen para tu postal:</p> <form method="POST" action="confirmapostal.asp"> <table border="0" width="100%" bgcolor="#55B5F1"><tr> <%contador=0 do while not rs.eof contador = contador+1 if contador >3 then contador=1%> </tr><tr> <%end if %> <td width="33%" align="center"> <p align="center"><img border="0" src="<%=urlminiatura%><%=rs("url")%>" >
<input type="radio" value="<%=rs("id")%>" name="id" checked></td> <%rs.movenext loop rs.close set rs=nothing%> </tr> </table> <p align="left"> </p> <table border="1" width="100%" bgcolor="#C0C0C0" bordercolor="#FFFFFF"> <tr> <td width="30%"><font color="#0000FF" size="2">Tu nombre:</font></td> <td width="70%"><input type="text" name="nombre" size="45"></td> </tr> <tr> <td width="30%"><font color="#0000FF" size="2">Tu email:</font></td> <td width="70%"><input type="text" name="email" size="45"></td> </tr> <tr> <td width="30%"><font color="#0000FF" size="2">Nombre de tu amigo:</font></td> <td width="70%"><input type="text" name="amigo" size="45"></td> </tr> <tr> <td width="30%"><font color="#0000FF" size="2">Email de tu amigo:</font></td> <td width="70%"><input type="text" name="emailamigo" size="45"></td> </tr> </table> <p align="left">Que le contamos:</p> <p align="center"><textarea rows="2" name="comentarios" cols="53"></textarea></p> <p align="center"><input type="submit" value="continuar ->" name="B1"></p> </form> <%end if%> </td> </tr> <tr> <td width="100%" align="center"> </center> </center> <p align="right"><font size="1"> Cdigo proporcionado por : <a href="http://www.asptutor.com"> <img border="0" src="http://www.asptutor.com/images/asptutor88x31.gif"></a></font></td> </tr> </table> </div> </body> </html>
Confirmapostal.asp
<%if request.form("id")="" then response.redirect "default.asp" end if urlfoto="images/" urlminiatura="images/miniaturas/"%> <html> <head> <title>Envio de E-Postales</title> </head> <body> <div align="center"> <center> <table border="0" width="80%" bgcolor="#D9F8FF"> <tr> <td width="100%">
<%for each v_entrada in request.form for indice=1 to request.form(v_entrada).count if request.form(v_entrada)(indice) = "" then mal=1%> <font color="#FF00FF">El campo <%=v_entrada%> no puede estar vacio</font><br> <%end if next next if mal <> 1 then Set Conna = Server.CreateObject("ADODB.Connection") 'nota: la cadena de conexin debe de ir en una sola lnea, aqui esta cortada por diseo Conna.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\TudirBd\postales.mdb")) set rs=createobject("ADODB.Recordset") sqltxt="SELECT * from postales where id="&request.form("id") rs.open sqltxt,conna url=rs("url") rs.close set rs=nothing %> <h3 align="center"><font color="#FF0000">Esta es la postal que vas a enviar</font></h3> <div align="center"> <center> <table border="0" width="500" background="images/rayasgrises.gif"> <tr> <td width="642" colspan="2"> </td> </tr> <tr> <td width="93" bgcolor="#66CCFF"> </td> <td width="543"> <table border="0" width="100%" cellspacing="5" bgcolor="#FFFFFF"> <tr> <td><img border="0" src="<%=urlfoto%><%=url%>" align="left"></td> <%'cambiamos los saltos de carro por <br> comentarios=replace(request.form("comentarios"),chr(10),"<br>") 'Ponemos la primera letra en mayusculas inicial=ucase(mid(request.form("comentarios"),1,1)) 'Asignamos a la variable comentarios el resto de la cadena comentarios=mid(comentarios,2) %> <td valign="top"> <i> <font color="#FF00FF" size="7"> <%=inicial%></font></i><%=comentarios%></td> </tr> <tr> <td width="100%" colspan="2"><font color="#FF0000">De:</font> <a href="mailto:<%=request.form("email")%>"><%=request.form("nombre")%></a><br> <font color="#FF0000">Para:</font> <%=request.form("amigo")%> (<%=request.form("emailamigo")%>)</td> </tr> </table> <p> </p> </td> </tr> </table> </center> </div> <div align="center"> <center> <table border="0" width="50%"> <tr>
<td width="50%" valign="top"> <p align="center">No me gusta, quiero corregirla</td> <td width="50%" valign="top"> <p align="center">Me gusta,<br> envala</td> </tr> <tr> <td width="50%" valign="top" align="center"> <a href="javascript:window.history.back()"> <img border="0" src="../images/atras.gif"></a></td> <td width="50%" valign="top" align="center"> <form method="POST" action="enviarpostal.asp"> <input type="hidden" name="comentarios" size="20" value="<%=request.form("comentarios")%>"> <input type="hidden" name="nombre" size="20" value="<%=request.form("nombre")%>"> <input type="hidden" name="email" size="20" value="<%=request.form("email")%>"> <input type="hidden" name="amigo" size="20" value="<%=request.form("amigo")%>"> <input type="hidden" name="emailamigo" size="20" value="<%=request.form("emailamigo")%>"> <input type="hidden" name="url" size="20" value="<%=url%>"> <input type="hidden" name="id" size="20" value="<%=request.form("id")%>">
<p><input border="0" src="../images/adelante.gif" name="I1" type="image"></p> </form> </td> </tr> </table> </center> </div> <%else%> <p align="center"><a href="javascript:window.history.back()"> <img border="0" src="../images/atras.gif"></a></p> <%end if%></td> </tr> <tr> <td width="100%"> <p align="right"> <font size="1">Cdigo proporcionado por : <a href="http://www.asptutor.com"> <img border="0" src="http://www.asptutor.com/images/asptutor88x31.gif"></a> </font></td> </tr> </table> </center> </div> </body> </html>
17,694
veces
Tendris que configurar las variables de ASPEmail con los datos de vuestro servidor.
Enviarpostal.asp
<% id=request.form("id") if id = "" then response.redirect "default.asp" end if urlfoto="http://www.tuweb.com/postales/images/" urlminiatura="http://www.tuweb.com/postales/images/miniaturas/" 'cambiamos los saltos de carro por <br> comentarios=replace(request.form("comentarios"),chr(10),"<br>") 'Ponemos la primera letra en mayusculas inicial=ucase(mid(request.form("comentarios"),1,1)) 'Asignamos a la variable comentarios el resto de la cadena comentarios=mid(comentarios,2) strHost = "mail.tuweb.com" Set Mail = Server.CreateObject("Persits.MailSender") Mail.Host = strHost Mail.From = "webmaster@tuweb.com" Mail.FromName = request.form("nombre") Mail.AddReplyTo request.form("email") Mail.AddAddress request.form("emailamigo") titulo=Request.form("Nombre")&" te envia una e-postal" Mail.Subject = titulo Mail.IsHTML = True mensaje="<html><head>" mensaje=mensaje & "<title>Una E-postal para ti</title>"&vbcrlf mensaje=mensaje & " </head><body><div align=center>"&vbcrlf mensaje=mensaje & "<center> "&vbcrlf mensaje=mensaje & "<table border=0 width=652 " mensaje=mensaje & " background=http://www.tuweb.com/images/rayasgrises.gif> "&vbcrlf mensaje=mensaje & " <tr>"&vbcrlf mensaje=mensaje & " <td width=93 bgcolor=#66CCFF> </td>"&vbcrlf mensaje=mensaje & " <td width=543> "&vbcrlf mensaje=mensaje & " <table border=0 cellspacing=5 bgcolor=#FFFFFF>"&vbcrlf mensaje=mensaje & " <tr> <td ><img border=0 src="&urlfoto&request.form("url")&">"&vbcrlf mensaje=mensaje & " <td valign=top>"&vbcrlf mensaje=mensaje & " <i><font color=#FF00FF size=7>" mensaje=mensaje & inicial&"</font></i>"&comentarios&vbcrlf mensaje=mensaje & "</td> </tr>"&vbcrlf mensaje=mensaje & " <tr>"&vbcrlf mensaje=mensaje & "<td colspan=2> "&vbcrlf mensaje=mensaje & " <font color=#FF0000>De:</font>"&vbcrlf mensaje=mensaje & " <a href=mailto:"& request.form("email")&">" mensaje=mensaje & request.form("nombre")&" </a><br>"&vbcrlf mensaje=mensaje & "<font color=#FF0000>Para:</font> "&vbcrlf mensaje=mensaje & request.form("amigo")&"("&request.form("emailamigo")&")"&vbcrlf mensaje=mensaje & " </td> </tr></table><p> </p> </td></tr>"&vbcrlf mensaje=mensaje & " </table>"&vbcrlf mensaje=mensaje & " </center>"&vbcrlf Mail.Body = mensaje Mail.Send
<p align="center"> </p> <h3 align="center"><font color="#FF0000">Postal enviada correctamente</font></h3> <p align="center"><a href="default.asp">Enviar otra</a></p> <p align="center"> <font size="1">Cdigo proporcionado por : <a href="http://www.asptutor.com"> <img border="0" src="http://www.asptutor.com/images/asptutor88x31.gif"></a> </font> </body> </html>