Hola desconocido

Hora internet: @ 996

Una encuesta en ASP bien fácil

Para realizar una encuesta y llevar el cuento de votos necesitaremos 1 tabla de Access. Ademas usaremos dos página ASP. En la primera mostraremos la pregunta con el formulario o botones, y en la segunda mostraremos los resultados.
No es nada dificil, pero hay que prestarle antención al código.
Una tabla igual a esta es la que deberian usar con este script:

La primer pagina es un formulario en HTML puro:

Archivo: encu.asp

<FORM METHOD="post" ACTION="encu2.asp">
¿Qué programa usas para escribir tus scripts?<BR><BR>
Notepad: <INPUT NAME="mismo" TYPE="Radio" VALUE="1"><BR>
HomeSite: <INPUT NAME="mismo" TYPE="Radio" VALUE="2"><BR>
Visual Interdev: <INPUT NAME="mismo" TYPE="Radio" VALUE="3"><BR>
DreamWeaber: <INPUT NAME="mismo" TYPE="Radio" VALUE="4"><BR><BR>
<INPUT TYPE="Submit" VALUE="Votar!">
</FORM>

La segunda página contiene todo el código ASP. Verifica si votamos, ingresa el voto y muestra el gráfico de barras.

Archivo: encu2.asp

<%@ Language=VBScript%>
<%
'Verificamos que efectivamente alguien haya votado.
If Request.Form="" then
'Si no votó y redireccionamos a encu.asp
Response.Redirect "encu.asp"
%>

<HTML>
<HEAD>
<TITLE>Encuesta con ASP</TITLE>
</HEAD>
<BODY>
<%
Else
'guardamos en voto la info del formulario.
voto = Request.Form("mismo")
'Conectamos a la BD.
Set oConn = Server.CreateObject ("ADODB.Connection")
Set RS = Server.CreateObject ("ADODB.RecordSet")
oConn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=D:\tucarpeta\bd\basebd.mdb"
'Con una sentencia SQL pedimos toda la BD.
sql = "SELECT * FROM encuesta"
RS.Open sql, oConn, 2, 2
'Si es el primer voto de todos, creamos el registro para que los UPDATES funcionen.
'Este IF solo se cumplirá una vez. La primera.
If RS.EOF = True Then
   oConn.Execute "INSERT INTO encuesta(Dato1, Dato2, Dato3, Dato4) VALUES (0,0,0,0)"
   RS.Requery
End If
'Comenzamos el chequeo de datos. Para todos igual
If voto = "1" then
   'Si se cumple el IF, sumamos uno al campo correspondiente.
   oConn.Execute "UPDATE encuesta SET Dato1="&RS.Fields("Dato1")+1&""
   'La siguiente linea hace un Refresh en la Tabla, para tener los datos recientes.
   RS.Requery
   Response.Write "<BR>Voto sumado a NotePad<BR>"
ElseIf voto = "2" then
   oConn.Execute "UPDATE encuesta SET Dato2="&RS.Fields("Dato2")+1&""
   RS.Requery
   Response.Write "<BR>Voto sumado a HomeSite<BR>"
ElseIf voto = "3" then
   oConn.Execute "UPDATE encuesta SET Dato3="&RS.Fields("Dato3")+1&""
   RS.Requery
   Response.Write "<BR>Voto sumado a Visual Interdev<BR>"
ElseIf voto = "4" then
   oConn.Execute "UPDATE encuesta SET Dato4="&RS.Fields("Dato4")+1&""
   RS.Requery
   Response.Write "<BR>Voto sumado a DreamWeaber<BR>"
End If
'Sumamos todos los votos y los guardamos en una variable.
total = CInt(RS("Dato1"))+CInt(RS("Dato2"))+CInt(RS("Dato3"))+CInt(RS("Dato4"))
'Mostrar el gráfico.
%>
<TABLE ALIGN="center" WIDTH="90%" BORDER="1" CELLPADDING="0" CELLSPACING="0"><TR><TD>
<IMG HEIGHT="25" SRC="" BORDER="1" WIDTH="<%= CInt(RS("Dato1")*100/total)%>%"><BR>
<IMG HEIGHT="25" SRC="" BORDER="1" WIDTH="<%= CInt(RS("Dato2")*100/total)%>%"><BR>
<IMG HEIGHT="25" SRC="" BORDER="1" WIDTH="<%= CInt(RS("Dato3")*100/total)%>%"><BR>
<IMG HEIGHT="25" SRC="" BORDER="1" WIDTH="<%= CInt(RS("Dato4")*100/total)%>%"><BR>
</TD></TR></TABLE>
<%
'Limpiamos y cerramos todo.
RS.Close
oConn.Close
Set Rs = Nothing
Set oConn = Nothing
End If
%>

</BODY>
</HTML>

Ver que la cuenta que se hace para mostrar las barras es mutiplicar por 100 y luego dividir por el total de votos. Eso nos da el porcentaje
En el SRC de la tabla que muestra el gráfico no puse ninguna imagen, pero uds podrían poner una imagen de 1x1 de colores diferentes y quedaran barras de colores. ;)
Pueden bajar la encuesta entera, junto con un archivo .mdb (BD de Access 2000) en formato ZIP. Bajar Encuesta




© SoloASP.com.ar - 2001 / 2005. Todos los derechos reservados. soloasp@soloasp.com.ar
Buenos Aires - Argentina. Diseño web y programación por Guido Laghi