> Manuales > Taller de ASP

Este ejemplo muestra como montar un sistemas de encuestas en nuestra web en asp.

Lo basamos en una bd que contendrá la pregunta y las posibles respuestas a estas, esto nos evitar tocar el código html cada vez que variemos la encuesta. Mantendremos un registro por cada encuesta y un campo en dicho registro indicara cual es la encuesta activa en ese momento.

La estructura de la tabla encuestas en la BD Tencuestas es :


Nuestra aplicación consta de 2 módulos principales( encuesta.asp y verencuesta.asp) mas un modulo de visualización de todas las encuestas (historico.asp).

Además he incluido el código de 2 módulos de mantenimiento, que nos servirán para incluir nuevas encuestas desde la web (crearencuesta.htm y crearencuesta.asp). El uso de estos módulos implica la creación en la bd de una nueva tabla para el almacenamiento de la clave de creación de encuestas.

Estructura de la tabla clave en la BD Tencuestas


Para mostrar la encuesta en una página lo haremos con un include

#include file="encuesta.asp"

Lo que nos permite mostrar la encuesta en cualquier página con solo una línea de código. el aspecto seria el que podeis ver en la página principal de www.asptutor.com

Módulos básicos del sistema

encuesta.asp

<%Set Connae = Server.CreateObject("ADODB.Connection")
Connae.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/xxxxx/Tencuestas.mdb"))

set rse=createobject("ADODB.Recordset")
sqltxt="SELECT * from encuestas where activa=true"
rse.open sqltxt,connae
if not rse.EOF then
%>

<div align="center">
<center>
<table border="1" width="150" bgcolor="#C0C0C0" bordercolor="#0000FF">
<tr>
<td width="100%">
<form method="POST" action="encuestas/verencuesta.asp" target="_blank">
<table border="0" width="100%">
<tr>
<td width="100%" bgcolor="#0000FF">
<p align="center"><font face="Verdana" size="1" color="#00FFFF"><b><i>Encuesta
del mes</i></b></font></td>
</tr>
<tr>
<td width="100%">
<p align="center"><font face="Verdana" size="1"><b><%=rse("pregunta")%></b></font></td>
;</tr>
<%for i = 0 to rse("nopciones")-1 step 1 %>
<tr>
td width="100%"><input type="radio" value="<%=i%>" name="opcion" checked>
<font face="Verdana" size="1"><%=rse(i)%></font></td>
</tr>
<%next
rse.close%>
</table>
<p align="center">
<input border="0" src="../images/opinar.gif" name="I1" type="image"></p>
  </form>
</center>
<p align="center"><a href="encuestas/historico.asp" target="_blank"><img border="0" src="images/ir.gif" alt="Historico de encuestas"></a></p>
</td>
</tr>
</table>
</div>
<%else
rse.close
end if
connae.close
set connae=nothing
%>

verencuesta.asp

<% @LCID = 1034 %>
<%response.expires=-1000%>

<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/xxxxx/Tencuestas.mdb"))

if request.form("opcion")<>"" then

select case true

case request.form("opcion")=0
    campo="r1"
case request.form("opcion")=1
   campo="r2"
case request.form("opcion")=2
   campo="r3"
case request.form("opcion")=3
   campo="r4"
end select

sqltxt="update encuestas set "&campo&" = "&campo&"+1 where activa=True"

conn.execute sqltxt
end if
%>

<html>

<head>

<title>Las encuestas de AspTutor</title>
</head>

<body>
<%if request.form("opcion")<>"" then%>
<p align="center"><font color="#FF0000"><b><font face="Verdana" size="1" color="#FF0000">Muchas gracias por participar en la
encuesta</font><br>
</b></font><br>

<%end if
dim colores(3)
colores(0)="red"
colores(1)="blue"
colores(2)="green"
colores(3)="black"
tamatabla=400 'tamaño de la tabla

set rs=createobject("ADODB.Recordset")
sqltxt="SELECT * from encuestas where activa=true"
rs.open sqltxt,conn
if not rs.EOF then
%>

<div align="center">
<center>
<table border="1" width="<%=tamatabla%>" bgcolor="#C0C0C0" bordercolor="#0000FF">
<tr>
<td width="<%=tamatabla%>" bgcolor="#0000FF">
<p align="center"><font color="#FFFFFF" face="Verdana" size="1"><b><%=rs("pregunta")%></b></font></td>
</tr>
<tr>
<td width="<%=tamatabla%>">

<table border="0" width="<%=tamatabla%>">
<%totvotos=rs("r1")+rs("r2")+rs("r3")+rs("r4")
if totvotos< 1 then totvotos=1
for i = 0 to rs("nopciones")-1 step 1 %>
<%porcentaje=formatnumber(rs(i+4)*100/totvotos,2)%>
<tr>
<td width="<%=tamatabla*30/100%>" valign="top"><font face="Verdana" size="1"><b><%=rs(i)%></b></font><br>
<font face="Verdana" color="#FFFFFF" size="1"><b><%=porcentaje%>%</b></font></td>

<td width="<%=tamatabla*70/100%>">

<table border="0" width="<%=round(porcentaje)%>%" bgcolor="<%=colores(i)%>">
<tr>
<td width="100%">
</td>
</tr>
</table>
</td>
</tr>
<%next

%>
</table>

</td>
</tr>
<tr>
<td width="300">
<p align="center"><font face="Verdana" size="1"><b>Total de votos: <font color="#FF0000"><%=totvotos%></font> </b></font></p>
</td>
</tr>
<%if rs("inicio")<>"" then%>

<tr>
<td width="300">
<font face="Verdana" size="1">Fecha de inicio: <%=rs("inicio")%></font>
</td>
</tr><%end if%>

<%if rs("fin")<>"" then%>
<tr>
<td width="300">
<font face="Verdana" size="1">Fecha de cierre: <%=formatdatetime(rs("fin"),2)%></font>
</td>
</tr>
<%end if%>
</table>
</center>
</div>
<%rs.close
set conn = nothing
end if%>
<p align="center"><font face="Verdana" size="1"><a href="javascript:close();">Cerrar
ventana</a></font></p>
<p align="center"><font face="Verdana" size="1"><a href="historico.asp">Ver todas las encuestas</a></font></p>

<p align="right"><font face="Verdana" size="1">Sistema de encuestas de <a href="http://www.asptutor.com" target="_blank"><img border="0" src="http://www.asptutor.com/images/asptutor88x31.gif" align="center"></a></font></p>

</body>

</html>

historico.asp

<html>

<head>

<title>Historico de encuestas</title>
</head>

<body>
<font face="Verdana, Arial, Helvetica, sans-serif" size="2"><h3

style="background-color: rgb(0,255,255)"><b>Histórico de encuestas</b> </h3>
</font>
<br>

<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/xxxxx/Tencuestas.mdb"))
dim colores(3)
colores(0)="red"
colores(1)="blue"
colores(2)="green"
colores(3)="black"
tamatabla=400 'tamaño de la tabla

set rs=createobject("ADODB.Recordset")
sqltxt="SELECT * from encuestas order by idencuesta desc"
rs.open sqltxt,conn
do while not rs.EOF%>

<div align="center">
<center>
<table border="1" width="<%=tamatabla%>" bgcolor="#C0C0C0" bordercolor="#0000FF">
<tr>
<td width="<%=tamatabla%>" bgcolor="#0000FF">
<p align="center"><font color="#FFFFFF" face="Verdana" size="1"><b><%=rs("pregunta")%></b></font></td>
</tr>
<tr>
<td width="<%=tamatabla%>">

<table border="0" width="<%=tamatabla%>">
<%totvotos=rs("r1")+rs("r2")+rs("r3")+rs("r4")
if totvotos< 1 then totvotos=1
for i = 0 to rs("nopciones")-1 step 1 %>
<%porcentaje=formatnumber(rs(i+4)*100/totvotos,2)%>
<tr>
<td width="<%=tamatabla*30/100%>" valign="top"><font face="Verdana" size="1"><b><%=rs(i)%></b></font><br>
<font face="Verdana" color="#FFFFFF" size="1"><b><%=porcentaje%>%</b></font></td>

<td width="<%=tamatabla*70/100%>">

<table border="0" width="<%=round(porcentaje)%>%" bgcolor="<%=colores(i)%>">
<tr>
<td width="100%">
</td>
</tr>
</table>
</td>
</tr>
<%next

%>
</table>

</td>
</tr>
<tr>
<td width="300">
<p align="center"><font face="Verdana" size="1"><b>Total de votos: <font color="#FF0000"><%=totvotos%></font> </b></font></p>
</td>
</tr><%if rs("inicio")<>"" then%>

<tr>
<td width="300">
<font face="Verdana" size="1">Fecha de inicio: <%=rs("inicio")%></font>
</td>
</tr><%end if%>

<%if rs("fin")<>"" then%>
<tr>
<td width="300">
<font face="Verdana" size="1">Fecha de cierre: <%=formatdatetime(rs("fin"),2)%></font>
</td>
</tr>
<%end if%>
</table>
</center>
</div>
<br>
<%rs.movenext
loop
rs.close
set rs=nothing
conn.close
set conn=nothing

%>

<p align="right"><font face="Verdana" size="1">Sistema de encuestas de <a href="http://www.asptutor.com" target="_blank"><img border="0" src="http://www.asptutor.com/images/asptutor88x31.gif" align="center"></a></font></p>

</body>

</html>

Módulos de mantenimiento

crearencuesta.htm

<html>

<head>

<title>Crear una nueva encuesta</title>
</head>

<body>

<div align="center">
<center>
<table border="0" width="80%">
<tr>
<td width="100%" bgcolor="#0000FF">

<p align="center"><font color="#FFFFFF">Crear una nueva encuesta</font></p>
</td>
</tr>
<tr>
<td width="100%" bgcolor="#C0C0C0">
<p align="center"><font face="Verdana" size="1">Sistema de encuestas de <a href="http://www.asptutor.com" target="_blank"><img border="0" src="http://www.asptutor.com/images/asptutor88x31.gif" align="center"></a></font></p>

<form method="POST" action="crearencuesta.asp">
<div align="center">
<center>
<table border="0" width="90%">
<tr>
<td width="34%" bgcolor="#0000FF"><font color="#FFFFFF">Pregunta</font></td>
<td width="66%" align="center"><input type="text" name="pregunta" size="40"></td>
</tr>
<tr>
<td width="34%" bgcolor="#0000FF"><font color="#FFFFFF">Respuesta 1</font></td>
<td width="66%" align="center"><input type="text" name="tr1" size="40"></td>
</tr>
<tr>
<td width="34%" bgcolor="#0000FF"><font color="#FFFFFF">Respuesta 2</font></td>
<td width="66%" align="center"><input type="text" name="tr2" size="40"></td>
</tr>
<tr>
<td width="34%" bgcolor="#0000FF"><font color="#FFFFFF">Respuesta 3</font></td>
<td width="66%" align="center"><input type="text" name="tr3" size="40"></td>
</tr>
<tr>
<td width="34%" bgcolor="#0000FF"><font color="#FFFFFF">Respuesta 4</font></td>
<td width="66%" align="center"><input type="text" name="tr4" size="40"></td>
</tr>
<tr>
<td width="34%"> </td>
<td width="66%" align="center"> </td>
</tr>
<tr>
<td width="34%" bgcolor="#0000FF"><font color="#FFFFFF">Clave de creación</font></td>
<td width="66%" align="center"><input type="password" name="clave" size="40"></td>
</tr>
</table>
</center>
</div>
<p align="center"><input type="checkbox" name="activar" value="ON">
Activar la encuesta una vez insertada</p>
<p align="center"><input type="submit" value="Enviar" name="B1"><input type="reset" value="Restablecer" name="B2"><br>
</p>
</form>
</td>
</tr>
</table>
</center>
</div>

</body>

</html>


crearencuesta.asp

<html>

<head>

<title>Creacion de encuestas</title>
</head>

<body>
<%Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/xxxxx/Tencuestas.mdb"))

set rs=createobject("ADODB.Recordset")
if request.form("activar")="ON" then
fin=month(date)&"/"&day(date)&"/"&year(date)

sqltxt="update encuestas set fin=#"&fin&"# where activa=True"
'response.write sqltxt
conn.execute sqltxt

sqltxt="update encuestas set activa=False where activa=True"
conn.execute sqltxt

end if

sqltxt="select * from clave"
rs.open sqltxt,conn
if rs("clave")<> request.form("clave") then
rs.close
%>
<div align="center">
<center>
<table border="0" width="50%">
<tr>
<td width="100%">
<table border="10" width="100%" bgcolor="#FF0000" bordercolor="#000000">
<tr>
<td width="100%">
<p align="center"><font color="#FFFFFF">Clave ERRONEA</font></td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="100%">
<p align="center"><a href="javascript:window.history.back()">Intentalo de nuevo</a>
</td>
</tr>
</table>
</center>
</div>
<%else
rs.close
pregunta=trim(request.form("pregunta"))
tr1=trim(request.form("tr1"))
tr2=trim(request.form("tr2"))
tr3=trim(request.form("tr3"))
tr4=trim(request.form("tr4"))
if request.form("activar")="ON" then
activar=True
else
activar=false
end if

if tr1="" or tr2="" or pregunta="" then%>
<div align="center">
<center>
<table border="0" width="50%">
<tr>
<td width="100%">
<table border="10" width="100%" bgcolor="#FF0000" bordercolor="#000000">
<tr>
<td width="100%">
<p align="center"><font color="#FFFFFF">Al menos se deben ofrecer una pregunta y las alternativas 1 y 2 </font></td>
</tr>
</table>
</td>
</tr>
<tr>
<td width="100%">
<p align="center"><a href="javascript:window.history.back()">Intentalo de nuevo</a>
</td>
</tr>
</table>
</center>
</div>

<%
else
nopciones=2
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
rs.open "encuestas",conn
rs.addnew
rs("pregunta")=pregunta
rs("tr1")=tr1
rs("r1")=0
rs("tr2")=tr2
rs("r2")=0
if tr3 <> "" then
nopciones=3
rs("tr3")=tr3
rs("r3")=0
if tr4 <> "" then
nopciones=4
rs("tr4")=tr4
rs("r4")=0
end if
end if
rs("nopciones")=nopciones
rs("activa")=activar
if request.form("activar")="ON" then
rs("inicio")=date
end if
rs.update%>
<div align="center">
<center>
<table border="0" width="90%" cellpadding="2" bgcolor="#C0C0C0">
<tr>
<td width="100%" bgcolor="#0000FF">
<p align="center"><font color="#FFFFFF">Nueva Encuesta creada</font>
</td>
</tr>
<tr>
<td width="100%"><br><div align="center">
<center>
<table border="0" width="80%">
<tr>
<td width="21%" bgcolor="#0000FF"><font color="#FFFFFF">identificador </font></td>
<td width="79%" bgcolor="#FFFFFF"><%=rs("idencuesta")%></td>
</tr>
<tr>
<td width="21%" bgcolor="#0000FF"><font color="#FFFFFF">Pregunta</font></td>
<td width="79%" bgcolor="#FFFFFF"><%=rs("pregunta")%></td>
</tr>
<tr>
<td width="21%" bgcolor="#0000FF"><font color="#FFFFFF">Opción 1</font></td>
<td width="79%" bgcolor="#FFFFFF"><%=rs("tr1")%></td>
</tr>
<tr>
<td width="21%" bgcolor="#0000FF"><font color="#FFFFFF">Opción 2</font></td>
<td width="79%" bgcolor="#FFFFFF"><%=rs("tr2")%></td>
</tr>
<tr>
<td width="21%" bgcolor="#0000FF"><font color="#FFFFFF">Opción 3</font></td>
<td width="79%" bgcolor="#FFFFFF"><%=rs("tr3")%></td>
</tr>
<tr>
<td width="21%" bgcolor="#0000FF"><font color="#FFFFFF">Opción 4</font></td>
<td width="79%" bgcolor="#FFFFFF"><%=rs("tr4")%></td>
</tr>
<tr>
<td width="21%" bgcolor="#0000FF"><font color="#FFFFFF">Activacion</font></td>
<td width="79%" bgcolor="#FFFFFF"><%=activar%></td>
</tr>
</table>

</center>
</div>

<br>
</td>
</tr>
</table>
</center>
</div>
<p> </p>

<%rs.close
conn.close
end if
end if%>

<p align="right"><font face="Verdana" size="1">Sistema de encuestas de <a href="http://www.asptutor.com" target="_blank"><img border="0" src="http://www.asptutor.com/images/asptutor88x31.gif" align="center"></a></font></p>

</body>

</html>


Nota: podéis usar y modificar este código a vuestro antojo, pero en el caso de su uso en Internet, deberá mantener una referencia a www.asptutor.com

Pedro Rufo Martín

Webmaster de www.asptutor.com

Manual