Para realizar un foro necesitas:
* Una conexión con bases de datos. Esta conexión puede realizarse de dos formas.
* Directamente, (tal y como se explica en el manual Paginas ASP).
* Utilizando una DSN solicitándola al servidor que te provee de servicios de internet, (en este caso uso esta opción).
Estructura de la base de datos: Tabla MiTabla
1. Autor
2. Email del Autor
3. Fecha de alta en el foro
4. Titulo de la cuestión
5. Cuerpo de la cuestión
6. ID de la pregunta, (uso interno)
7. QoR. Pregunta o Respuesta
Un ejemplo de tabla seria:

El campo QoR :
El campo QoR determina si el registro pertenece a :
- P: Una pregunta.
- R: Una respuesta a una pregunta.
- X: El único registro de la tabla con este valor en el campo QoR. El valor del campo IDPregunta de este registro es el que mantiene el contador de dicho campo. Almacena el valor de IDPregunta del última consulta entrada en el foro.
El campo con QoR = X ha de ser entrado manualmente en el momento de la inauguración del foro.
El campo IDPregunta.
Al dar de alta un nuevo comentario en el foro; este viene identificado con un numero que es asignado por el valor del campo IDPregunta del registro que posee X en el campo QoR, (registro de indice).
Todas las respuestas que se lancen a ese comentario irán identificadas por ese mismo valor en sus respectivos campos IDPregunta.
Nombres especiales.
Los nombres como la DSN de acceso a datos. El nombre de la base de datos y de la tabla. Y las claves de acceso estan referidas en el código que se adjunta en este manual como : MiDSN, MiBase, MiTabla y MiClave. Substituir dichas cadenas por las que se determinen para vuestro foro personalizado.
Todos estos datos son importantes para el funcionamiento del foro. La DSN os la proporciona el servidor que os provee de servicios de internet, (si no es así usad el metodo de acceso directo que se comenta en el código). La base de datos y la tabla es la que creeis vosotros, (por ejemplo en ms.Access). Las claves de acceso son las que vosotros qu
Proveedor de servicios de internet. Debeis aseguraros que el proveedor de servicios de internet que habeis contratado os proporcione los recursos necesarios para ejecutar páginas ASP y acceder a bases de datos. Muchos proveedores no proporcionan estos servicios y, simplemente, no podreis hacer nada con ASP. Debereis cambiar de proveedor.
Inicio del código.
Declaración de las bases de datos que se van a utilizar.
<%@ LANGUAGE="VBScript" %>
<%
' Declaramos el objeto de conexión a la base de datos
Set ConexionBD = Server.CreateO
bject("ADOdb.Connecti
on")
' Abrimos el objeto con el driver específico
ConexionBD.Ope
n "DSN=MiDNS"
%>
Si queremos atacar directamente a la base de datos utilizar esta otra técnica.
ConexionBD.Ope
n "DRIVER={Microsoft Access Driver (*.mdb)}; " & "DBQ=" & Server.Mappath("MiBase.mdb")
QueryString
QueryString recupera los valores de los parámetros entrados al llamar al ASP desde la URL.
' Recupera los parámetros de la linea de comandos.
comando=request.querystring("comando")
' Datos para la eliminación.
passw=request.querystring("passw")
ID=request.querystring("ID")
' Datos para una nueva alta.
QoR=request.querystring("qor")
IDPregunta=request.querystring("IDPregunta")
fecha=request.querystring("fecha")
Titulo=request.querystring("Titulo")
Cuerpo=request.querystring("Cuerpo")
Autor=request.querystring("Autor")
Opciones del foro
<html>
<head>
<title>El Foro</title></head>
<body>
<H2>Opciones</H2>
<UL>
<LI><A HRef="qor.asp?comando=anadir">
Lanzar un nuevo comentario al foro.
[/url]</LI> <LI>
<A HRef="qor.asp?comando=ver">
Ver Todo, (refrescar).
[/url]</LI></UL>
Añadir una nueva pregunta al foro.
La siguiente rutina consta de 2 fases
1 Petición de datos a añadir, (comando=añadir)
<%
If comando="anadir" Then
' Añadir una nueva entrada.
%>
<H1>Añadir un nuevo comentario al foro.</H1>
<FORM Method="GET" Action="qor.asp">
<INPUT Type="hidden" Name="fecha" Value="<%= Year(Date) & "/" & Month(Date) & "/" & Day(Date) %>">
<INPUT Type="hidden" Name="QoR" Value="P" Size=0>
<%
Set RS = ConexionBD.Exe
cute("SELECT * FROM MiTabla WHERE QoR='X'")
RS.MoveFirst
%>
<INPUT Type="hidden" Name="IDPregunta" Value=<%= RS("IDPregunta") + 1 %>>
<INPUT Type="hidden" Name="comando" Value="adiccion" Size=0>
Autor :<BR>
<UL>
<INPUT Type="text" Name="Autor" Size=50></UL>
e-mail, (si tienes) :<BR>
<UL>
<INPUT Type="text" Name="email">
</UL>
Titulo, (obligado) :
<UL>
<INPUT Type="text" Name="titulo" Size=50>
</UL>
Cuerpo del comentario que deseas lanzar al foro :
<UL>
<TEXTAREA Rows="10" Cols="50" Name="Cuerpo"></TEXTAREA>
</UL>
<INPUT Type="SUBMIT" Value="Enviar">
<INPUT Type="RESET" Value="Reestablecer">
</FORM>
<%
2 Alta en la base de datos, (comando=adiccion)
ElseIf comando="adiccion" Then
' Añade a la base de datos.
Error=False
MsjError=""
If Autor="" Then
Autor="-no firma-"
End If
If email="" Then
email=" "
End If
If Titulo="" Then
Error=True
MsjError = MsjError + "- Se necesita un título para su comentario.<BR>"
End If
If Cuerpo="" Then
Error=True
MsjError = MsjError + "- Se necesita un cuerpo del mensaje para incluirlo en el foro.<BR>"
End If
' Añade el nuevo comentario al foro.
Set RS = ConexionBD.Exe
cute("INSERT INTO MiTabla (QoR, IDPregunta, Fecha, Autor, email, Titulo, Cuerpo) VALUES ('" & QoR & "', " & IDPregunta & ", #"& Fecha & "#, '" & Autor & "', '" & email & "', '" & Titulo & "', '" & Cuerpo & "')")
'Si es una nueva pregunta, aumenta el contador.
If QoR="P" Then
Set RS = ConexionBD.Exe
cute("UPDATE MiTabla SET IDPregunta = " & IDPregunta & " WHERE QoR='X'")
End If
Response.Write("<BR><BR><B>Se ha dado de alta tu colaboración al foro :</B><BR><BR>")
Response.Write("<UL>")
Response.Write("Fecha : " & Fecha & "<BR>")
Response.Write("Autor : " & Autor & "<BR>")
Response.Write("e-mail : " & email & "<BR>")
Response.Write("Titulo : " & Titulo & "<BR>")
Response.Write("Cuerpo : " & Cuerpo & "<BR>")
Response.Write("</UL>")
Response.Write("Gracias por colaborar en el foro de Acervo Visual")
Ver las preguntas abiertas en el foro.
Esta sección se comporta de 2 formas. Si Comando=ver o no tiene valor, mostrará el contenido de todo el foro.
Si Comando=explosion se mostrará sólo la pregunta, (y todas sus respuestas), dada por el parámetro IDPregunta.
' Visualizar FORO.
ElseIf comando="ver" or comando="explosion" or comando="" Then
' Visualizar FORO.
%>
<BR><BR>
<CENTER>
<TABLE Border=2 Width="90%">
<TR>
<TH BGColor='#03A7CF' Align='Left'>
<%
' Ver el libro de visitas completo.
If Comando="explosion" Then
Set RS = ConexionBD.Exe
cute("SELECT * FROM MiTabla WHERE IDPregunta=" & IDPregunta & " ORDER BY IDPregunta DESC, QoR, Fecha DESC")
Response.Write("Comentarios abiertos referentes a : <B>" & RS("Titulo") & "</B>")
Else
Set RS = ConexionBD.Exe
cute("SELECT * FROM MiTabla WHERE QoR<>'X' ORDER BY IDPregunta DESC, QoR, Fecha DESC")
Response.Write("Comentarios abiertos en el foro.")
End If
%>
</TH>
</TR>
<%
Do while not RS.EOF
'Escribimos en la salida los datos que nos interesa
%><tr>
<td><%
' Indenta si es respuesta.
If RS("QoR")="R" Then
Response.Write("<UL>")
End If
' Fecha.
If IsNull(RS("Fecha")) Then
Else
Response.Write("(" & FormatDateTime(CDate(RS("Fecha")), 2) & ") ")
End If
' ID.
Response.Write(" - (" & RS("ID") & ") ")
' Título.
If IsNull(RS("Titulo")) Then
Response.Write(" <BR>")
Else
If Comando="explosion" Then
Response.Write("<B>" & RS("Titulo") & "</B><BR><BR>")
Else
Response.Write("<A HRef='qor.asp?comando=explosion&IDPregunta="& RS("IDPregunta") & "'>" & RS("Titulo") & "[/url]<BR>")
End If
End If
' Autor y e-mail.
If Comando="explosion" Then
Response.Write("<B>Autor : </B>")
If IsNull(RS("Autor")) Then
Else
Response.Write((RS("Autor"))
End If
If IsNull(RS("email")) Then
Response.Write(" <BR>")
Else
Response.Write(" (<A HRef='mailto:" & RS("email") & "?subject=Foro Acervo Visual'>" & RS("email") & "[/url])<BR>")
End If
Response.Write("<BR><B>Cuerpo del comentario : </B><UL>")
Response.Write(RS("Cuerpo") & "</UL>")
'Botón de respuesta.
If RS("QoR")="P" Then
%>
<FORM Method="GET" Action=" qor.asp">
<INPUT Type="hidden" Name="comando" Value="Responder" Size=0>
<INPUT Type="hidden" Name="fecha" Value="<%= Date %>" Size=0>
<INPUT Type="hidden" Name="IDPregunta" Value=<%= RS("IDPregunta") %> Size=0>
<%
Tit = RS("Titulo")
Tit = Replace(Tit, " ", "+")
%>
<INPUT Type="hidden" Name="Titulo" Value=<%= Tit %> Size=0>
<INPUT Type="hidden" Name="QoR" Value="R" Size=0>
<INPUT Type="SUBMIT" Value="Responder">
</FORM>
<%
End If
End If
'Quita la indentación si es una respuesta.
If RS("QoR")="R" Then
Response.Write("</UL>")
End If
%>
</td>
</tr><%
RS.MoveNext
Loop
%>
</TABLE>
</CENTER>
</UL>
<%
Responder una consulta abierta en el foro.
Al pulsar sobre el botón Responder en una de las consultas abiertas en el foro; Se pasa como Comando=Responder y la pregunta a responder en el parámetro IDPregunta.
' Responder una questión abierta en el foro.
ElseIf comando="Responder" Then
' Responder a un comentario existente.
TituloResp = Titulo
%>
<H1>Añadir un nuevo comentario al foro.</H1>
<FORM Method="GET" Action=" qor.asp">
<INPUT Type="hidden" Name="fecha" Value="<%= Year(Fecha) & "/" & Month(Fecha) & "/" & Day(Fecha) %>" Size=0>
<INPUT Type="hidden" Name="QoR" Value=<%= QoR %> Size=0>
<INPUT Type="hidden" Name="IDPregunta" Value=<%= IDPregunta %>>
<INPUT Type="hidden" Name="comando" Value="adiccion" Size=0>
<H3>Respuesta al comentario :</H3>
<UL>
<%
TituloResp = Replace(TituloResp, "+", " ")
%>
<H4><%= TituloResp %></H4>
</UL>
Autor :<BR>
<UL>
<INPUT Type="text" Name="Autor" Size=50>
</UL>
e-mail, (si tienes) :<BR>
<UL>
<INPUT Type="text" Name="email">
</UL>
Titulo, (obligado) :
<UL>
<%
TituloResp = "Resp : " & TituloResp
%>
<INPUT Type="text" Name="titulo" Value="<%= TituloResp %>" Size=50>
</UL>
Cuerpo del comentario que deseas lanzar al foro :
<UL>
<TEXTAREA Rows="10" Cols="50" Name="Cuerpo"></TEXTAREA>
</UL>
<INPUT Type="SUBMIT" Value="Enviar">
<INPUT Type="RESET" Value="Reestablecer">
</FORM>
<%
Funciones de uso interno.
Eliminar una pregunta o respuesta del foro.
Con esta opción, (Comando=Eliminar), eliminamos un registro de la base de datos. Es conveniente que esta clase de opciones requieran contraseña.
ElseIf Comando="Eliminar" Then
%>
<H1>Eliminar un comentario del foro.</H1>
<FORM Method="GET" Action=" qor.asp">
<INPUT Type="Hidden" Name="Comando" Value="Eliminacion">
Password :
<INPUT Type="Password" Name="passw"><BR>
ID de pregunta a eliminar :
<INPUT Type="Text" Name="IDPregunta">
<INPUT Type="SUBMIT" Value="Enviar">
<INPUT Type="RESET" Value="Reestablecer">
</FORM>
<%
ElseIf Comando="Eliminacion" Then
'Elimina la pregunta solicitada.
If passw = MiClave Then
Set RS = ConexionBD.Exe
cute("DELETE * FROM MiTabla WHERE IDPregunta = " & IDPregunta & " AND QoR<>'X'")
Response.Write("<H2>Ok.</H2>")
Else Password erroneo.
Response.Write(<H2>Password erroneo.</H2>)
End If
End If
%>
Fin del código
</body>
</html>