Logo del Tutorial

Página de Inicio

Introducción a ASP

  • Introducción
  • Instalación
  • Principios básicos
  • Objetos Integrados de ASP

  • Response
  • Request
  • Server
  • Session
  • Application
  • Automatización de Eventos

  • Archivo Global.asa
  • Componentes ActiveX

  • Adrotator
  • FileSystemObject
  • TextStream
  • Bases de Datos

  • Introducción
  • Instrucciones SQL
  • ActiveX Data Object
  • Ejemplos ASP

  • Ejemplo Completo
  • Cookies
  • Ejercicios
  • Alojamiento ASP

    Bibliografía

    Sobre el Tutorial

    Creación de un foro en ASP

    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.CreateObject("ADOdb.Connection")

       ' Abrimos el objeto con el driver específico

       ConexionBD.Open "DSN=MiDNS"

    %>  

    Si queremos atacar directamente a la base de datos utilizar esta otra técnica.

    ConexionBD.Open  "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.  
    </A></LI>   <LI>  
    <A HRef="qor.asp?comando=ver">  
    Ver Todo, (refrescar).  
    </A></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&ntilde;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.Execute("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&iacute;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.Execute("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.Execute("UPDATE MiTabla SET IDPregunta = " & IDPregunta & " WHERE QoR='X'")

      End If

    Response.Write("<BR><BR><B>Se ha dado de alta tu colaboraci&oacute;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.Execute("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.Execute("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") & "</A><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") & "</A>)<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&ntilde;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.Execute("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>







    Copyright © 2002, Francisco José Calvo Fernández