You are on page 1of 11

Tutorial ASP Ejemplo de una aplicacin de Foros

Una aplicacin de foros sencilla


Antes de liarte con el ejemplo, puedes darte una vuelta por Los foros de la cueva para que te hagas una idea del funcionamiento de la aplicacin. Este ejercicio, sin ser complicado, si requiere de una base minima de formacin en HTML y ASP-ADO, asi que no te lies con l antes de haber echado un vistazo a TODOS los ejemplos anteriores. La base de datos sobre la que esta elaborado es ACCESS y utiliza la alocacin directa del Driver sin usar DSN (esta es la forma de declaracin a la que te obligan la mayoria de los servidores gratuitos al no dejarte definir DSN's de sistema)

Definicin de la base de datos


Nombre de la Base de Datos: Consta de 3 tablas: Tabla

PyR.mdb

FOROS

Tabla

PREGUNTAS

Tabla

RESPUESTAS

Relaciones entre las tablas:

Modulos y paginas estaticas de la aplicacin


La aplicacin consta de 8 paginas asp y 1 html estatico. Se podria reducir el numero de modulos reutilizando parte del codigo de estos, pero por claridad he preferido plantearlo de esta forma.

addforo.asp addpregunta.asp addrespuesta.asp foros.asp insertarforo.htm insertarpregunta.asp

Modulo de inclusin de un nuevo foro en la tabla Foros Modulo de inclusin de una nueva pregunta en la tabla Preguntas Modulo de inclusin de una nueva respuesta en la tabla Respuestas Modulo de presentacin, listado de todos los foros Formulario de insercin de un nuevo foro Formulario para insertar una nueva pregunta

pyr.asp responder.asp vr.asp

Modulo de visualizacin de todas las preguntas de un determinado foro Formulario para insertar una respuesta a una pregunta Modulo de visualizacin de todas las respuestas a una determinada pregunta.

addforo.asp
<% Const adOpenForwardOnly = 0 Const adOpenKeyset = 1 Const adOpenDynamic = 2 Const adOpenStatic = 3 Const adLockReadOnly = 1 Const adLockPessimistic = 2 Const adLockOptimistic = 3 Const adLockBatchOptimistic = 4%> <%foro=request.form("foro") if foro="" then %> <html> <head> <title>Error al insertar pregunta</title> </head> <body bgcolor="#CCFFCC"> <p align="center"><img border="0" src="images/titulo.jpg"></p> <p align="center">Ningun campo puede estar en blanco, <a href="insertarforo.htm"> intntalo otra vez</a></p> </body> </html> <%else Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\ewebcity\db\pyr.mdb")) set rs=createobject("ADODB.Recordset") rs.CursorType = adOpenKeyset rs.LockType = adLockOptimistic rs.open "foros",conn rs.addnew rs("foro")=foro rs.update rs.close response.redirect "foros.asp" end if%>

addpregunta.asp
<%

Const adOpenForwardOnly = 0 Const adOpenKeyset = 1 Const adOpenDynamic = 2 Const adOpenStatic = 3 Const adLockReadOnly = 1 Const adLockPessimistic = 2 Const adLockOptimistic = 3 Const adLockBatchOptimistic = 4%> <%autor=request.form("autor") nforo=request.form("nforo") pregunta=request.form("pregunta") if autor="" or pregunta="" or nforo="" then %> <html> <head> <title>Error al insertar pregunta</title> </head> <body bgcolor="#CCFFCC"> <p align="center"><img border="0" src="images/titulo.jpg"></p> <p align="center">Ningun campo puede estar en blanco, <a href="insertarpregunta.asp?nforo=<%=nforo%>"> intntalo otra vez</a></p> </body> </html> <%else Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\ewebcity\db\pyr.mdb")) set rs=createobject("ADODB.Recordset") rs.CursorType = adOpenKeyset rs.LockType = adLockOptimistic rs.open "preguntas",conn rs.addnew rs("foro")=nforo rs("autor")=autor rs("fecha")=now() rs("pregunta")=pregunta rs.update rs.close donde="pyr.asp?nforo="&nforo response.redirect donde end if%>

addrespuesta.asp <%
Const adOpenForwardOnly = 0 Const adOpenKeyset = 1 Const adOpenDynamic = 2 Const adOpenStatic = 3 Const adLockReadOnly = 1 Const adLockPessimistic = 2 Const adLockOptimistic = 3 Const adLockBatchOptimistic = 4%> <%nombre=request.form("nombre") nforo=request.form("nforo") respuesta=request.form("respuesta") numero=request.form("numero") if nombre="" or respuesta="" or numero="" or nforo="" then %>

<html> <head> <title>Error al insertar pregunta</title> </head> <body bgcolor="#CCFFCC"> <p align="center"><img border="0" src="images/titulo.jpg"></p> <p align="center">Ningun campo puede estar en blanco, <a href="responder.asp?numero=<%=numero%>&nforo=<%=nforo%>"> intntalo otra vez</a></p> </body> </html> <%else Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\ewebcity\db\pyr.mdb")) set rs=createobject("ADODB.Recordset") rs.CursorType = adOpenKeyset rs.LockType = adLockOptimistic rs.open "respuestas",conn rs.addnew rs("numero")=numero rs("autor")=nombre rs("fecha")=now() rs("respuesta")=respuesta rs.update rs.close donde="vr.asp?numero="&numero&"&nforo="&nforo response.redirect donde end if%>

foros.asp
<html> <%sqltxt="select * from foros order by foro" Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\ewebcity\db\pyr.mdb")) set rs=createobject("ADODB.Recordset") set rsr=createobject("ADODB.Recordset") rs.open sqltxt,conn%> <head> <title>La Cueva de Smaug Foros</title> </head> <body bgcolor="#CCFFCC">

<p align="center"><img border="0" src="images/titulo.jpg"></p> <p align="center">&nbsp;</p> <div align="center"> <center> <table border="0" width="575"> <tr>

<td colspan="2" align="center" bordercolor="#008000" bgcolor="#008000" width="565"><font face="Verdana" color="#FFFFFF" size="2">Los Foros de la Cueva TEMAS LIBRES</font></td> </tr> <%if rs.eof then%> <tr><td colspan="2" width="565" bgcolor="#FFCCCC">No hay foros disponibles</td></tr> <%else do while not rs.eof%> <tr> <td width="470" bgcolor="#FFCCCC"><font face="Verdana" size="1"><%=rs("foro") %></font></td> <td width="89" bgcolor="#FFCCCC"> <p align="center"><font face="Verdana" size="1"><a href="pyr.asp?nforo=<%=rs("codigof") %>"><img border="0" src="images/ir.gif" WIDTH="13" HEIGHT="13"></a></font></p> </td> <%rs.movenext loop rs.close end if%> </table> </center> </div> <br> <div align="center"> <center> <table border="0" width="50%" bgcolor="#FFFFFF"> <tr> <td width="30%" align="center"><font face="Verdana" size="1"><a href="insertarforo.htm">Crear un nuevo Foro</a></font></td> </tr> </table> </center> </div> </body> </html>

Insertarforo.htm
<html> <head> <title>Crear un Nuevo Foro</title> </head> <body bgcolor="#CCFFCC"> <p align="center"><img border="0" src="images/titulo.jpg" width="450" height="75"></p> <p align="center"><font face="Verdana">Crear un nuevo Foro</font></p> <form method="POST" action="addforo.asp"> <table border="1" width="100%"> <tr> <td width="100%" bgcolor="#008000"><font color="#FFFFFF">Nombre del Foro</font></td> </tr> <tr> <td width="100%"> <p align="center"><input type="text" name="foro" size="50"> </p> </td> </tr>

</table> <p align="center"><input type="hidden" name="nforo" value="<%=nforo%>"> <input type="submit" value="Enviar" name="B1"><input type="reset" value="Restablecer" name="B2"></p> </form> </body> </html>

Insertarpregunta.asp
<%nforo=request.querystring("nforo")%> <html> <head> <title>Insertar una pregunta</title> </head> <body bgcolor="#CCFFCC"> <p align="center"><img border="0" src="images/titulo.jpg"></p> <p align="center"><font face="Verdana">Insertar una pregunta</font></p> <form method="POST" action="addpregunta.asp"> <table border="1" width="100%"> <tr> <td width="100%" bgcolor="#008000"><font face="Verdana" size="2" color="#FFFFFF">Pregunta</font></td> </tr> <tr> <td width="100%">Pregunta insertada por: <input type="text" name="autor" size="20"> </td> </tr> <tr> <td width="100%"> <p align="center"><textarea rows="5" name="pregunta" cols="50"></textarea></td> </tr> </table> <p align="center"><input type="hidden" name="nforo" value="<%=nforo%>"> <input type="submit" value="Enviar" name="B1"><input type="reset" value="Restablecer" name="B2"></p> </form> </body> </html>

pyr.asp
<%nforo=request.querystring("nforo") if nforo="" then response.redirect "foros.asp" end if sqltxt="select * from foros where codigof="&nforo Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\ewebcity\db\pyr.mdb")) set rs=createobject("ADODB.Recordset")

set rsr=createobject("ADODB.Recordset") rs.open sqltxt,conn if rs.eof then response.redirect "foros.asp" 'evitamos el error de foro borrado end if nombredelforo=rs("foro") rs.close sqltxt="select * from preguntas where foro="&nforo rs.open sqltxt,conn%> <html> <head> <title>La Cueva de Smaug&nbsp; (Foros)</title> </head> <body bgcolor="#CCFFCC">

<p align="center"><img border="0" src="images/titulo.jpg"></p>

<p align="center"><font face="Verdana"><font size="4">Foro: </font>&nbsp;<%=nombredelforo %> <div align="center"> <center> <table border="0" width="575"> <tr> <td width="62" align="center" bordercolor="#008000" bgcolor="#008000"><font face="Verdana" size="1" color="#FFFFFF">Fecha</font></td> <td width="254" align="center" bordercolor="#008000" bgcolor="#008000"><font face="Verdana" size="1" color="#FFFFFF">Pregunta</font></td> <td align="center" bordercolor="#008000" bgcolor="#008000" width="82"><font face="Verdana" size="1" color="#FFFFFF">Numero de Respuestas</font></td> <td width="94" align="center" bordercolor="#008000" bgcolor="#008000"> <p align="center"><font face="Verdana" size="1" color="#FFFFFF">Ver Respuestas</font></td> <td width="49" align="center" bordercolor="#008000" bgcolor="#008000"> <p align="center"><font face="Verdana" size="1" color="#FFFFFF">Responder</font></p> </td> </tr> <%if rs.eof then%> <tr><td colspan=5 width="565" bgcolor="#FFCCCC">No hay preguntas</td></tr> <%else do while not rs.eof%> <tr> <td width="62" bgcolor="#FFCCCC"><font face="Verdana" size="1">< %=formatdatetime(rs("fecha"),2)%></font></td> <td width="254" bgcolor="#FFCCCC" valign="middle"> <font face="Verdana" size="1"><%=rs("pregunta")%></font></td> <%sqltxt2="select count(*) from respuestas where numero ="&rs("numero") rsr.open sqltxt2,conn %> <td width="82" bgcolor="#FFCCCC"> <p align="center"><font face="Verdana" size="1"><%=rsr(0)%></font></td> <td width="94" valign="middle" align="center" bgcolor="#FFCCCC"> <%if rsr(0)<> 0 then%> <a href="vr.asp?numero=<%=rs("numero")%>&nforo=<%=nforo%>"><font face="Verdana" size="1"><img border="0" src="images/ir.gif" width="13" height="13"></font></a> <font face="Verdana" size="1"> <%else%> &nbsp; <%end if rsr.close%> </font> </td> <td width="49" align="center" bgcolor="#FFCCCC">

<p align="center"><font face="Verdana" size="1"><a href="responder.asp?numero=< %=rs("numero")%>&amp;nforo=<%=nforo%>"><img border="0" src="images/ir.gif" width="13" height="13"></a></font></p> </td> </tr> <%rs.movenext loop rs.close end if%> </table> </center> </div> <p align="center">&nbsp;</p> <div align="center"> <center> <table border="0" width="50%" bgcolor="#FFFFFF"> <tr> <td width="30%" align="center"><font face="Verdana" size="1"><a href="insertarpregunta.asp? nforo=<%=nforo%>">Insertar una pregunta</a></font></td> </tr> </table> </center> </div> <br> <div align="center"> <center> <table border="0" width="50%" bgcolor="#FFFFFF"> <tr> <td width="30%" align="center"><font face="Verdana" size="1"><a href="foros.asp">Volver a Foros</a></font></td> </tr> </table> </center> </div> </body></html>

responder.asp
<%numero=request.querystring("numero") nforo=request.querystring("nforo") if numero="" or nforo="" then response.redirect "pyr.asp" end if sqltxt="select * from preguntas where numero="&numero Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\ewebcity\db\pyr.mdb")) set rs=createobject("ADODB.Recordset") rs.open sqltxt,conn%> <html> <head> <title>Responder a una pregunta</title> </head> <body bgcolor="#CCFFCC"> <p align="center"><img border="0" src="images/titulo.jpg"></p> <p align="center"><font face="Verdana">Responder a una pregunta</font></p> <table border="0" width="100%">

<tr> <td width="100%" bgcolor="#008000"><font face="Verdana" color="#FFFFFF" size="2">Pregunta realizada por <%=rs("autor")%> el dia <%=formatdatetime(rs("fecha"),2)%></font></td> </tr> <tr> <td width="100%" bgcolor="#FFFFFF"><%=rs("pregunta")%></td> <%rs.close%> </tr> </table> <p>&nbsp;</p> <form method="POST" action="addrespuesta.asp?nforo=<%=nforo%>"> <table border="1" width="100%"> <tr> <td width="100%" bgcolor="#008000"><font face="Verdana" size="2" color="#FFFFFF">Respuesta</font></td> </tr> <tr> <td width="100%">Respuesta elaborada por: <input type="text" name="nombre" size="20"> </td> </tr> <tr> <td width="100%"> <p align="center"><textarea rows="5" name="respuesta" cols="50"></textarea></td> </tr> </table> <p align="center"><input type="hidden" name="numero" value="<%=numero%>"> <input type="hidden" name="nforo" value="<%=nforo%>"> <input type="submit" value="Enviar" name="B1"><input type="reset" value="Restablecer" name="B2"></p> </form> </body> </html>

vr.asp
<%numero=request.querystring("numero") nforo=request.querystring("nforo") if numero="" then response.redirect "pyr.asp" end if sqltxt="select * from preguntas where numero="&numero sqltxt2="select * from respuestas where numero="&numero Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\ewebcity\db\pyr.mdb")) set rs=createobject("ADODB.Recordset") rs.open sqltxt,conn%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <meta name="GENERATOR" content="Microsoft FrontPage 4.0"> <meta name="ProgId" content="FrontPage.Editor.Document"> <title>Respuestas a una pregunta</title> </head> <body bgcolor="#CCFFCC"> <p align="center"><img border="0" src="images/titulo.jpg"></p> <%if rs.eof then response.write "no hay respuestas para esta pregunta"

else%>

<table border="1" width="100%"> <tr> <td width="100%" bgcolor="#008000"><font face="Verdana" color="#FFFFFF" size="2">Pregunta realizada por</font><font face="Verdana" color="#00FFFF" size="2"> <%=rs("autor")%> </font><font face="Verdana" color="#FFFFFF" size="2">el dia</font><font face="Verdana" color="#00FFFF" size="2"> <%=formatdatetime(rs("fecha"),2)%></font></td> </tr> <tr> <td width="100%" bgcolor="#FFFFFF"><%=rs("pregunta")%></td> <%rs.close%> </tr> </table> <%rs.open sqltxt2,conn%> <%if not rs.EOF then nrespu=0%> <p>&nbsp;</p> <table border="0" width="100%" cellspacing="0" cellpadding="0"> <%do while not rs.EOF nrespu=nrespu+1%> <tr> <td width="25%" bgcolor="#008000"><font face="Verdana" size="2"><font color="#FFFFFF">Respuesta n </font><font color="#FFFF00"><%=nrespu %></font></font></td> <td width="42%" bgcolor="#008000"><font face="Verdana" size="2"><font color="#FFFFFF">autor&nbsp; </font><font color="#FFFF00"><%=rs("autor") %></font></font></td> <td width="33%" bgcolor="#008000"><font face="Verdana" size="2"><font color="#FFFFFF">el dia </font><font color="#FFFF00"><%=formatdatetime(rs("fecha"),2)%></font></font></td> </tr> <tr> <td width="100%" bgcolor="#FFFFFF" colspan="3"><%=rs("respuesta")%> </td> </tr> <%rs.movenext loop end if%> </table> <p>&nbsp;</p> <div align="center"> <center> <table border="0" width="61%"> <tr> <td width="50%" bgcolor="#FFFFFF"> <p align="center"><a href="responder.asp?numero=<%=numero%>&nforo=<%=nforo%>"><font face="Verdana" size="1">Insertar Respuesta</font></a></td> <td width="50%" bgcolor="#FFFFFF"> <p align="center"><font face="Verdana" size="1"><a href="pyr.asp?nforo=<%=nforo%>">Volver al Foro</a></font></td> </tr> </table> </center> </div> <%end if%> </body></html>

You might also like