Prefacio: Hoy en día, hay foros en todas partes en Internet, pero me pregunto si alguna vez se ha encontrado con una situación así: buscar el contenido que desea en la información de discusión desordenada es una tarea que requiere mucho tiempo y trabajo. ¿Ya no quiero ir a ningún foro? Entonces, ¿podemos agregar una función de auditoría al contenido del foro de nuestro sitio web? Es decir, todos los artículos publicados por los internautas en el foro no se mostrarán inmediatamente. Deben ser revisados por el webmaster o moderador. Si se consideran valiosos y necesarios para recomendarlos a otros internautas, se publicarán. De lo contrario, elimínelo para evitar desperdiciar espacio y que parezca un área destacada. De esta manera, su foro puede proporcionar contenido más claro y beneficioso que los foros normales. Ponerlo en su sitio web debería atraer a más internautas a visitarlo. Esta idea ciertamente se puede realizar y a continuación presentaré brevemente cómo hacerlo.
Nota: Este artículo es adecuado para lectores que tengan cierto conocimiento de la base de datos ACCESS, HTML y ASP.
1. Análisis de la estructura del foro
A través del análisis de requisitos funcionales anterior, podemos dividir la producción del foro en cuatro partes:
(1) Módulo de gestión y registro de internautas: debido a que se presenta al webmaster o moderador, debe poder controlarlo en el foro Autenticar. La función de este módulo es gestionar los internautas registrados y brindar consultas relevantes. Por ejemplo, consultar todos los artículos publicados por un autor específico, consultar a los diez internautas que han publicado la mayor cantidad de artículos, etc. Si su foro no es muy grande, este módulo se puede omitir para tener solo la función de autenticación de moderador y eliminar las partes sobre registro y consulta.
(2) Módulo de visualización de artículos: muestra todos los artículos que han sido revisados por los moderadores y considerados dignos de recomendación.
(3) Módulo de publicación de artículos: proporciona un lugar para que los internautas registrados publiquen sus opiniones y esperen la revisión de los moderadores después de la publicación.
(4) Módulo de revisión de artículos: los moderadores procesan todos los artículos que se han publicado en el sitio web pero que no han sido revisados y han decidido si publicarlos o eliminarlos.
Después de comprender los requisitos funcionales específicos, puede comenzar el diseño del foro según el módulo. Por supuesto, estos módulos sólo dividen funcionalmente la estructura del foro y, en realidad, no pueden diseñarse de forma completamente independiente. Para aplicaciones tan pequeñas, no es necesario un diseño modular completo. Puede resultar más fácil escribir el código del programa directamente con una buena planificación.
Generalmente hay dos formas de implementar un foro: usando archivos o bases de datos. En términos relativos, utilizar una base de datos es más simple y eficiente, puede proporcionar un mejor control sobre el foro y también puede proporcionar cierta verificación y protección de los datos. Aquí estoy usando la base de datos ACCESS. Para aplicaciones generales pequeñas y medianas, ACCESS debería poder hacer el trabajo.
Del análisis anterior, podemos saber que debería haber cuatro tablas. A continuación doy la estructura de cada tabla.
(1) Tabla de autores (utilizada para almacenar información del autor):
ID: tipo de texto, obligatorio. Es el nombre en clave de un internauta.
Contraseña: Tipo de texto, requerido.
Apodo: tipo de texto, obligatorio.
CORREO ELECTRÓNICO: Tipo de texto, obligatorio.
Posición: Tipo numérico, requerido. -1 representa internautas comunes, 0 representa webmasters. Los números mayores que 0 representan moderadores.
Número de artículos: tipo numérico, obligatorio. El número total de artículos publicados por los internautas.
Nombre: tipo de texto, opcional.
Género: tipo de texto, opcional.
Teléfono: Tipo texto, opcional.
(2) Tabla de contenido (utilizada para almacenar el contenido del artículo específico y la información relacionada):
ID: numerarlo e indexarlo automáticamente para acelerar la búsqueda.
ID Kanban: tipo numérico, de la lista Kanban, que indica el tablero Kanban al que pertenece el artículo.
ID de tema: Tipo numérico, de la tabla de temas, que indica el tema al que pertenece el artículo.
ID de autor: tipo de texto, de la tabla de autores, indicando el autor del artículo.
Fecha: Tipo de fecha/hora, el valor inicial preestablecido es la función AHORA(), que automáticamente toma la hora actual del sistema como valor.
Título: Tipo de texto. El título del artículo.
Publicar: tipo Sí/No, "Verdadero" significa que el artículo ha sido revisado y puede publicarse; "No" significa que el artículo aún no ha sido revisado.
Recomendación: Tipo numérico, el grado de recomendación del artículo.
Contenido: Tipo de comentario, contenido específico del artículo.
Número de clics: tipo de número, el número de clics en el artículo.
(3) Lista Kanban (utilizada para almacenar información sobre el kanban):
ID: Número automático. Del mismo modo, también se establece un índice para el mismo.
Nombre: Tipo de texto, el nombre del tablero.
Moderador: Tipo de texto, ID del moderador del foro.
Número de Temas: Tipo numérico, el número de temas incluidos en el tablero.
(4) Tabla de temas (utilizada para almacenar información sobre temas):
ID: numera automáticamente y establece un índice para ello.
Título: Tipo de texto, indicando el nombre del tema.
Tablero Kanban: Tipo de número, del listado de tableros Kanban, indicando el tablero Kanban al que pertenece el tema.
Número de artículos: Tipo de número, el número de artículos contenidos en el tema.
Se han diseñado todas las tablas, pero el diseño de la base de datos aún no está completo, por lo que aún necesitamos establecer relaciones entre las tablas para que la base de datos pueda realizar algunas comprobaciones de correlación para evitar errores de datos. Otro beneficio de establecer relaciones entre tablas es que a través de él se pueden establecer fácilmente consultas JOIN complejas.
Por lo general, cuando operamos una base de datos en ASP, utilizamos consultas generadas durante la ejecución, que luego se pasan a la base de datos para su interpretación y ejecución. Y aquí vamos a utilizar consultas almacenadas. Los procedimientos almacenados tienen más ventajas que las consultas en tiempo de ejecución.
Se almacena en la base de datos y es independiente del código del programa ASP, lo que facilita su creación y modificación, y la eficiencia de las consultas es mayor y más rápida. Puede depurarse y luego usarse en la página ASP, lo que puede evitar muchos problemas. Y el código de programa ASP que utiliza consultas almacenadas es más fácil de leer y modificar. Quizás a todo el mundo le molesta el uso de consultas SQL en ASP, especialmente aquellas comas, punto y coma, etc., que pueden provocar errores si no se tiene cuidado. Después de utilizar consultas almacenadas, no tiene que preocuparse por estos problemas. Por supuesto, hay algunas cosas a las que debe prestar atención cuando utilice programas prealmacenados. Explicaré cómo usarlos en detalle más adelante. Es muy fácil crear un programa almacenado en ACCESS, así que no diré más al respecto aquí. Aquí solo doy el código del programa de declaración SQL para cada consulta.
He guardado todas las consultas para usar en la base de datos como programas prealmacenados. Las principales son las siguientes:
(1) Consultar artículos por ID:
SELECCIONAR tabla de temas. Título COMO nombre de tema, Lista Kanban. Tabla de contenido.*
DESDE la tabla de temas INNER JOIN (tabla de contenido INNER JOIN lista kanban ON tabla de contenido.ID de kanban = lista de kanban.ID) EN tabla de temas.ID = tabla de contenido.ID de tema
WHERE (((content table.ID)=[articleid]));
(2) Consulta de contraseña del moderador:
SELECCIONAR lista Kanban.Propietario del tablero, tabla de autor.Contraseña
DESDE la tabla de autores INNER JOIN lista kanban EN tabla de autores.ID = lista kanban.propietario del tablero
WHERE (((kanban list.ID)=[id];
(3) Consultar al autor:
SELECCIONAR tabla de autores.*
DE la tabla de autores
WHERE (((author table.ID)=[id]));
(4) Lista de artículos publicados:
SELECT [Tabla de contenido].[ID], [Tabla de contenido].[Título], [Tabla de contenido].[ID de autor] ] AS autor, [tabla de contenido].[fecha], [tabla de contenido].[recomendación], [tabla de contenido].[número de clics] AS número de clics.
DE tabla de contenidos
WHERE ((([Tabla de contenido].[ID de tema])=[Índice de tema]) y (([Tabla de contenido].[Publicado])=Verdadero)
)
; id, tabla de temas.ID AS id del tema, tabla de temas.título AS tema, tabla de contenidos.título AS título, tabla de contenidos.identificador de autor AS autor, tabla de contenidos.fecha AS fecha
FROM tabla de temas INNER JOIN tabla de contenido ON tabla de temas.ID = tabla de contenidos.ID de tema
WHERE (((Tabla de contenido. Publicar)=False) AND ((Tabla de contenido. ID de Kanban)=[boardid]));
(5) Lista de temas:
SELECT Tabla de temas.*, Lista de Kanban COMO nombre de Kanban.
FROM lista kanban INNER JOIN tabla de temas ON lista kanban.ID = tabla de temas.kanban
WHERE (((topic table.kanban)=[boardIndex]));
También hay algunas consultas, debido a que la mayoría de ellas son similares, no las enumeraré una por una.
En la declaración de consulta anterior, puede ver algunas cosas rodeadas por "[" y "]", que son parámetros de consulta. El valor del parámetro debe proporcionarse durante la ejecución y luego el valor del parámetro se introduce en la declaración de consulta antes de que se pueda ejecutar. Otra cosa a tener en cuenta es que al establecer esas consultas INNER JOIN, debe agregar la relación entre tablas a la vista de diseño; de lo contrario, la declaración de consulta INNER JOIN no se puede generar automáticamente.
En este punto, el diseño de la base de datos está terminado y el siguiente trabajo es ASP.
2. Construcción
1. Para construir el formulario principal
, primero debe proporcionar un formulario que permita a los internautas ingresar información de registro. Estos son contenidos HTML, y echemos un vistazo más de cerca al script ASP que implementa el registro.
(1) Cambie las comillas simples en la información a dos comillas simples y agregue comillas simples antes y después
Función SqlStr(datos)
SqlStr = "'" y Reemplazar (datos, "'", "''") y "'"
sobre la función final
: Esta es una función personalizada que se utiliza para convertir comillas simples (') en la entrada del usuario en dos comillas simples (''). En ASP, una cadena está entre comillas dobles, por lo que "'" arriba representa una cadena con una sola comilla simple. La razón por la que necesita reemplazar una comilla simple con dos comillas simples es porque en las declaraciones SQL, las comillas simples se utilizan para representar variables. Para evitar confusiones, las comillas simples en la cadena deben estar representadas por dos comillas simples. Todas las entradas del usuario deben estar incrustadas en la declaración SQL como variables, por lo que esta función es esencial.
(2) Preparación para el almacenamiento
id=Solicitud("id")
contraseña=Solicitud("contraseña")
apodo=Solicitud("apodo")
correo electrónico=Solicitud("correo electrónico")
sexo=solicitud("sexo")
Nota: No es necesario guardar el contenido del formulario de entrada del usuario en una variable, pero facilita la lectura y la escritura.
si Solicitud("nombre")=""entonces nombre=" " else nombre=solicitud("nombre")
if Request("phone")=""then phone=" " else phone=request("phone")
Debido a que no es necesario completar estos contenidos, para evitar que el usuario no ingrese nada y cause errores en la operación de la base de datos , debe ser Reemplazar los campos vacíos con espacios.
(3) Establecer conexión
Establecer conexión = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Nota: Esta sección es para establecer una conexión de base de datos. El nombre de la base de datos es bbssystem.mdb. En esta sección lo único a tener en cuenta es la aplicación de la función Server.MapPath. En términos generales, siempre que se trate de un directorio específico, no utilice el nombre del directorio directamente, sino la función Server.MapPath. Hacer un buen uso de funciones como Server.MapPath y Request.ServerVariables() puede hacer que su aplicación WEB sea más portátil.
Establecer cmd = Server.CreateObject("ADODB.Command")
(4) Consultar si el autor ya existe
Establecer cmd.ActiveConnection = conexión
cmd.CommandText = "Autor de la consulta"
ReDim param(0) 'Declarar matriz de parámetros
param(0) = CStr(id) ' Cint no se puede ignorar
Set rs = cmd.Execute(,param)
Nota: Esta sección se utiliza para ejecutar el programa almacenado. Hay muchas formas de ejecutar consultas en ADO, pero para procedimientos almacenados solo puede usar el objeto Comando. Primero, cree un objeto Comando llamado cmd, luego establezca el objeto de conexión de conexión en la propiedad ActiveConnection del objeto cmd, establezca el nombre de la consulta que se ejecutará "Autor de consulta" en la propiedad CommandText y luego asigne valores al parámetros de consulta. Declaramos una matriz de parámetros param(0), porque solo hay un parámetro en la consulta "Autor de la consulta", por lo que la matriz tiene un solo componente. Generalmente, si hay varios parámetros en una consulta, se debe declarar una matriz de parámetros con el número correspondiente de componentes. Y el orden en que aparecen los parámetros corresponde al orden de los componentes de la matriz. En el proceso de uso de la consulta de parámetros, se debe prestar especial atención al hecho de que los tipos de parámetros deben coincidir estrictamente; de lo contrario, se producirá un error, por lo que la función de conversión de tipo CStr () anterior es indispensable.
si no (rs.eof o rs.bof) entonces
Response.write "Error, el número de identificación que ingresó ha sido ocupado, ¡pruebe con otro!"
demás
sql = "Insertar en la tabla de autores (id, apodo, correo electrónico, contraseña, nombre, escuela, departamento, sexo, número de teléfono) Valores("
sql = sql & SqlStr(id) & ","
sql = sql & SqlStr(apodo) & ","
sql = sql & SqlStr(correo electrónico) & ","
sql = sql & SqlStr(contraseña) & ","
sql = sql & SqlStr(nombre) & ",&", "
sql = sql & SqlStr(sexo) & ","
sql = sql & SqlStr(teléfono) & ")"
conn.Execute sql
utiliza una instrucción SQL Insert para insertar datos en la base de datos. De hecho, esta consulta también se puede convertir en un programa prealmacenado y colocarla en la base de datos. Soy un poco vago :-) Sin embargo, en comparación, también puedes ver los beneficios del programa prealmacenado. Es problemático escribir la consulta durante la ejecución.
2. Construya el módulo de visualización de artículos.
Como se mencionó anteriormente, un artículo específico pertenece al tablero de anuncios y al cuerpo principal. Por lo tanto, al mostrar artículos, debe revisar las dos páginas de la lista del tablero de anuncios y la lista de temas antes de poder obtener la lista de artículos bajo un tema específico.
(1) Página de visualización de la lista de tableros:
<html>
<cabeza>
<título>Lista Kanban</título>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</head>
(2) Abra la conexión y muestre la lista kanban
< %Establecer conexión = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
sql = "seleccionar * de la lista Kanban"
establecer rs=conn.execute(sql)
%>
Nota: Una consulta SQL simple devuelve toda la información sobre el tablero kanban al conjunto de registros RS. La siguiente tarea es mostrar el contenido grabado y crear un enlace para mostrar el tema del tablero en el nombre del tablero correspondiente.
<cuerpo bgcolor="#FFFFFF">
< h2 align="center">Lista Kanban</h2>
<ancho de tabla="60%" border="0"cellspace="0" cellpadding="0"align="center">
<tr bgcolor="#FFFFCC">
< td height="35" width="25%">Nombre del panel de escaneo</td>
<td height="35" width="21%">Moderador</td>
<td height="35" width="23%">Número de temas</td>
<td height="35" width="31%">Inicio de sesión del moderador</td>
</tr>
Nota: Esta parte es para mostrar el título de cada columna en la tabla. Aquí no uso una función unificada para mostrar el contenido del registro RS, porque esto permite un mayor control sobre la apariencia y el estilo de la tabla. Uso Aunque es un poco incómodo levantarse, es más flexible.
<%
hacer
boardid=rs("identificación")
nombre del tablero=rs("nombre")
boardmanager=rs("Propietario del tablero")
Response.write "<tr><td><a href=qBoard.asp?boardid="& boardid& "&boardname=" & boardname& ">" & boardname &"< /a>< /td>"
Nota: Esta línea es Es importante destacar que cuando haces clic en el nombre de cada tablero, puedes conectarte a la página que muestra el tema del tablero. El código del programa parece un poco engorroso. Lo desglosaré y te lo explicaré y lo entenderás. Después de hacer clic, el navegador solicita la página qBoard.asp con un parámetro boardid, que representa el número de identificación del tablero que se mostrará. Se utiliza un signo de interrogación (?) para separar la página de solicitud y el parámetro. Boardid es la variable establecida anteriormente, que contiene el número de identificación del tablero correspondiente. Esta conexión también contiene otro parámetro nombre de placa, que se utiliza para pasar el nombre de la placa a la página qBoard.asp. Utilice "&" para separar varios parámetros. Este parámetro no es necesario. Se pasa para evitar usar boardid nuevamente para consultar el nombre del tablero en qBorad.asp. En términos generales, las operaciones de bases de datos deben usarse lo menos posible, lo que puede mejorar el rendimiento de las páginas ASP. Debido a que la declaración Response.Write usa cadenas como parámetros, el carácter de conexión "&" se usa entre las cadenas y variables anteriores. El resultado final de la explicación de la página ASP debería ser así
<td>< a href=qBoard.asp?boardid=1&boardname=Placa del sistema>Placa del sistema</a><td>.
respuesta.write "< td>< a href=qAuthor.asp?author="&boardmanager & ">" &boardmanager & "< /a></td>"
respuesta.escribir "< td>" &rs("número de temas") & "< /td>"
Response.write "< td>< a href=managerlogin.asp?boardid="&boardid & ">Procesamiento de placa< /a></td>< /tr>"
Nota: En esta tabla, además de la conexión, se muestra el Para el contenido del tema kanban, también hay una parte de consulta en mosaico y una parte de procesamiento de servicio de tablero. La consulta del moderador se puede implementar a través de qAuthor.asp. Simplemente recupera la información del autor de la base de datos y la muestra. Dicho. El procesamiento del tablero lo maneja la página managerlogin.asp. Este pertenece al módulo de revisión de artículos, que explicaré en detalle más adelante.
rs.movenext
bucle hasta rs.eof
%>
Nota: A través de un bucle do..., se muestran todos los mensajes del conjunto de registros.
</mesa>
<div align="center"><br>
Haga clic en el nombre del tablero para obtener la lista de temas, haga clic en el nombre del propietario del tablero para ver los mensajes del propietario del tablero
</div>
</cuerpo>
</html>
<%
establecer rs = nada
con.cerrar
establecer conexión = nada
%>
(3) Cree la página qBaord.asp:
<%
boardid=request("boardid") 'Obtiene el número de identificación del tablero pasado de la página anterior
Establecer conexión = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Establecer cmd = Server.CreateObject ("ADODB.Command")
Establecer cmd.ActiveConnection = conexión
cmd.CommandText = "Lista de temas"
ReDim param(0) //Nota: declarar matriz de parámetros
param(0) = CLng(boardid)//Nota: CLng no se puede ignorar
Establecer rs = cmd.Execute(,param)
%>
<html>
<cabeza>
<título>Lista de temas</título>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</cabeza>
<cuerpo bgcolor="#FFFFFF">
< h1 align="center"><%=rs("kanban name")%>Lista de temas del tablero</h1>
<ancho de tabla="80%" border="0"cellspace="0" cellpadding="0"align="center">
<tr bgcolor="#FFFFCC">
<td width="89%" height="21">Tema</td>
<td width="11%" height="21">Número de artículos</td>
</tr>
<%
hacer
id de tema = rs ("identificación")
nombre del tema = rs ("título")
suma=rs("número de artículos")
respuesta.write "< tr>< td><a href=qtopic.asp?topicid=" & topicid& "&boardname=" & boardname& ">" & topicname &"< /a>< /td>"
respuesta.escribir "< td>" &sum & "< /td>< /tr>"
rs.movenext
bucle hasta rs.eof
%>
</mesa>
</cuerpo>
</html>
Nota: qBoard.asp enumera todos los temas de un foro determinado. Después de hacer clic en el nombre del tema, ingresará a la lista de artículos del tema correspondiente. Esta lista se implementa mediante el script ASP qTopic.asp. El código del programa Qtopic.asp es casi el mismo que el de qBoard.asp en esencia, pero existen diferencias en sus respectivos detalles y no entraré en más detalles aquí.
(4) Después de hacer clic en el título del artículo en la lista de artículos, ingresará a la página de exploración del contenido del artículo artículo.asp:
<%
ID de artículo = solicitud ("ID de artículo")
Establecer conexión = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver(*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Establecer cmd = Server.CreateObject ("ADODB.Command")
Establecer cmd.ActiveConnection = conexión
cmd.CommandText = "Consultar artículos por id"
Parámetro ReDim(0) 'Declaración
param(0) = CLng(articleid) ' Cint no se puede ignorar
Establecer rs = cmd.Execute(,param)
autor=rs("identificador de autor")
título=rs("título")
datos=rs("Fecha")
rate=rs("título recomendado")
boardid=rs("kanbanid")
id de tema = rs ("id de tema")
nombre del tablero = rs ("nombre del tablero")
nombre del tema = rs ("nombre del tema")
contenido=rs("contenido")
contenido=reemplazar(contenido,vbCrlf,"</p><p>")
content="< p>" & content& "< /p>"
Nota: Esto es algo a tener en cuenta. El campo de contenido contiene texto tipo memo, que puede contener caracteres de nueva línea. En la visualización de HTML, el carácter de nueva línea (es decir, la constante vbCrlf) debe reemplazarse por el símbolo de párrafo HTML. De esta forma, la conexión entre párrafos no alterará el formato de entrada original. Si desea diseñar mejor, puede usar CSS para restablecer la etiqueta <P> y establecer su atributo de sangría de prueba para lograr un espacio al principio de cada párrafo.
(5) Agregue uno al número de clics
sql="Actualizar tabla de contenido Establecer número de clics=número de clics+1Dónde ID=" & ID de artículo
conn.execute sql
Nota: Aquí hay una declaración SQL Cuando se muestra la página, el campo de recuento de clics en la tabla correspondiente se incrementará en uno, de modo que el número de vistas de artículos se pueda contar y clasificar en orden. Al ejecutar la declaración del artículo, descubrí que: originalmente en la declaración SQL, el nombre de la variable incrustada debía distinguirse entre comillas simples, pero no agregué comillas simples a la variable de ID del artículo aquí, y en realidad pasó, y escribí así Siempre ha causado errores en el pasado. Me pregunto si es por la nueva versión de ADO.
establecer cmd = nada
%>
<html>
<cabeza>
<título>Documento sin título</título>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</cabeza>
<cuerpo bgcolor="#E9E9E4">
<ancho de tabla="89%" border="0"cellspace="0" cellpadding="0"align="center">
<tr bgcolor="#CCCCCC">
<td>Autor:<font color="#FF3366"><a href="qauthor.asp?author=< %=author%>">< %=author%> < /a>< /font>Fecha de publicación: < color de fuente="#FF3333"><%=datos%>< /fuente>
Tablero Kanban:< font color="#FF3333"><a href="qboard.asp?boardid=< %=boardid%>">< %=boardname%>< /a>< /font>Recomendación del propietario del tablero:< color de fuente="#FF3333">#rate#</font>< /td>
</tr>
<tr bgcolor="#CCCCCC">
<td>Título:<color de fuente="#FF3333"><%=título%>
Tema: < a href="qtopic.asp?topicid=<%=topicid%>"> < %=topicname%>< /a> < /font>< /td>
</tr>
<tr valign="arriba">
<td>
<hora>
< font color="#FF3366">Contenido del artículo: < /font>< br>
<br>
< color de fuente=azul>< %response.writecontent%>< /fuente>
<br>
<br>
</td>
</tr>
<tr valign="arriba">
<altura td="18">
<ancho de tabla="50%" border="0"cellspacing="0" cellpadding="0"align="right" bgcolor="#CCCCCC">
<tr>
< td ancho="0%"> < /td>
<td width="65%">Acerca de este tema<a href="submit.asp?topicid=< %=topicid%>&boardid=<%=boardid%>">Deja un comentario< /a></td>
Esta conexión permite a los internautas expresar sus propias opiniones sobre el tema de este comentario. De esto se hablará en el próximo módulo, por lo que no lo mencionaré aquí.
</tr>
</mesa>
</td>
</tr>
</mesa>
</cuerpo>
</html>
< %
establecer rs = nada
con.cerrar
establecer conexión = nada
%>
En este punto, la parte de visualización del artículo también está completa. Echemos un vistazo a cómo se implementa la parte de publicación de artículos.
3. Construya la parte de publicación del artículo.
El módulo de publicación del artículo solo tiene dos páginas, una es el submit.asp mencionado anteriormente, que se usa para proporcionar el formulario de entrada, y el otro es el subresult.asp, que se usa para procesar el formulario. aporte. La página anterior es muy simple. Básicamente es un formulario HTML. No hay mucho de qué hablar. Echemos un vistazo al contenido de subresult.asp.
<html>
<cabeza>
<título>Publicar artículo</título>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</cabeza>
<cuerpo bgcolor="#FFFFFF">
<%
autor=solicitud("autor")
contraseña=solicitud("contraseña")
id de tema = solicitud ("id de tema")
ID de tablero = solicitud ("ID de tablero")
contenido = solicitud ("contenido")
title=request("title")
Nota: Esta sección extrae el contenido de la tabla enviado en submit.asp y lo coloca en la variable correspondiente.
<html>
<cabeza>
<título>Publicar artículo</título>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</cabeza>
<cuerpo bgcolor="#FFFFFF">
<%
autor=solicitud("autor")
contraseña=solicitud("contraseña")
id de tema = solicitud ("id de tema")
ID de tablero = solicitud ("ID de tablero")
contenido = solicitud ("contenido")
title=request("title")
(1) Consultar si el autor existe
cmd.CommandText = "seleccione * de la tabla de autores donde id='" & autor &"'"
Establecer rs = cmd.Execute()
(2) Verificar permisos
cmd.CommandText = "seleccione * de la tabla de autores donde id='" & autor &"'"
Set rs = cmd.Execute()
Nota: Esta sección verifica los permisos del autor y maneja los errores en consecuencia si la cuenta no existe o la contraseña es incorrecta. Aquí puede ver el uso de respuesta.end, que se utiliza para finalizar el script ASP actual. Combinado con declaraciones if, se pueden manejar los errores esperados en el programa. En una buena aplicación WEB, el manejo de errores es fundamental.
(3) Cambie las comillas simples en la información a dos comillas simples y agregue comillas simples antes y después
Función SqlStr(datos)
SqlStr = "'" y Reemplazar (datos, "'", "''") y "'"
Función final
'Escribir en la base de datos
sql = "Insertar en la tabla de contenido (ID del tablero, ID del tema, ID del autor, título, contenido)Valores("
sql = sql & SqlStr(id de tema) & ","
sql = sql & SqlStr(ID de placa) & ","
sql = sql & SqlStr(autor) & ","
sql = sql & SqlStr(título) & ","
sql = sql & SqlStr(contenido) & ")"
conexión.Ejecutar sql
%>
<h2>El artículo ha sido enviado a la base de datos y se puede ver después de que el moderador lo revise <h2>
</cuerpo>
</html>
En este punto, el artículo se ha guardado en la base de datos. Sin embargo, no se puede mostrar inmediatamente y requiere la aprobación del moderador. A continuación, echemos un vistazo a la parte de gestión del foro.
4. La parte de gestión del foro
es el núcleo de nuestro foro, pero su implementación no tiene nada de especial. Sigue siendo lo mismo de siempre: procesamiento de formularios, consulta de bases de datos y uso de ASP para combinarlos orgánicamente. Al ingresar al modo de revisión del artículo (el procesamiento del tablero mencionado anteriormente), lo más importante debe ser verificar la identidad del moderador. Echemos un vistazo a la página de inicio de sesión del moderador:
<%
ID de tablero = solicitud ("ID de tablero")
(Nota: el ID del tablero se pasa a través de la conexión a esta página y es el ID del tablero que se va a procesar. Solo a través de esto podemos saber qué tablero se está procesando).
Establecer conexión = server.CreateObject("ADODB.Connection")
conexión.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Establecer cmd = Server.CreateObject ("ADODB.Command")
Establecer cmd.ActiveConnection = conexión
cmd.CommandText = "Consulta de contraseña del moderador"
Parámetro ReDim(0)
param(0) = CLng(boardid) //Nota: CLng no se puede ignorar
Establecer rs = cmd.Execute(,param)
boardmanager=rs("Propietario del tablero")
establecer cmd = nada
%>
<html>
<cabeza>
<título>Documento sin título</título>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</cabeza>
<cuerpo bgcolor="#FFFFFF">
< p>Solo el propietario del tablero < %=boardmanager%> puede ingresar a este lugar </p>
<p>Ingrese la contraseña de verificación y, para mantener la autenticación, active las cookies de su navegador. </p>
<método de formulario="post" action="managerloginrest.asp">
<tipo de entrada="contraseña" nombre="contraseña">
< tipo de entrada="oculto" nombre="boardid"value=< %=boardid%>>
<tipo de entrada="enviar" nombre="Enviar"valor="Aceptar">
</formulario>
Nota: Esta página es solo para iniciar sesión. Después de obtener la contraseña ingresada por Mozhu, no puede realizar la verificación. En cambio, el trabajo de verificación se llevará a cabo en la página siguiente. De hecho, el trabajo de ingreso y verificación de contraseña se puede completar en una página, pero la disposición estructural del código del programa es un poco problemática.
</cuerpo>
</html>
<%
establecer rs = nada
con.cerrar
establecer conexión = nada
%>
Ahora que se obtienen el ID del moderador y la contraseña ingresada, el siguiente es el trabajo de verificación managerloginrest.asp. Acepta el contenido del formulario en el archivo anterior y realiza el procesamiento relacionado:
<%
Response.buffer=true
Nota: Configure el búfer para permitir su uso. En términos generales, este elemento debe agregarse al encabezado de cada página ASP, lo que puede mejorar el rendimiento de la página ASP. Después de abrir el búfer, existen algunos usos especiales correspondientes en ASP, que se mencionarán más adelante.
ID de tablero = solicitud ("ID de tablero")
contraseña=solicitud("contraseña")
Establecer conexión = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Establecer cmd = Server.CreateObject ("ADODB.Command")
Establecer cmd.ActiveConnection = conexión
cmd.CommandText = "Consulta de contraseña del moderador"
Parámetro ReDim(0) 'Declaración
param(0) = CLng(boardid)//Nota: CLng no se puede ignorar
Establecer rs = cmd.Execute(,param)
boardmanager=rs("Propietario del tablero")
si contraseña<>rs("contraseña")entonces %>
<html>
<cabeza>
<título>Autenticación</título>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</cabeza>
<cuerpo bgcolor="#FFFFFF">
Contraseña incorrecta</cuerpo>
</html>
< %
demás
session("beenthere")=boarded
Nota: El uso de Session para mantener la identidad del moderador requiere que las cookies del navegador del cliente estén activadas. Porque la sesión se implementa a través de cookies. Aquí, asigne el ID del tablero a la variable de sesión que ha estado allí, lo que indica que el moderador ha pasado la autenticación de identidad. En cada página de procesamiento de versión posterior, verifique si beenthere coincide con el ID de versión correspondiente.
url="boardmanager.asp?boardid="& ID de placa
de URL de Response.redirect
: cuando aprendí ASP por primera vez, siempre me confundió el método de respuesta.redirect y no estaba satisfecho con él. Ahora déjame contarte algunas técnicas. Antes de usarlo, debe pasar respuesta.buffer=true para permitir que la página ASP use el búfer. En este momento, antes de que ASP se interprete en código de programa HTML, se coloca en el búfer y no se envía directamente al navegador del cliente. Otra cosa que se debe saber es: antes de usar respuesta.redirect, no se puede enviar ningún código de programa HTML real al navegador del cliente; de lo contrario, se producirá un error. Por supuesto, existen soluciones alternativas si el código del programa HTML se interpretó antes de Response.redirect, puede usar el método Response.clear para borrar el búfer y luego usarlo para restablecerlo.
terminar si
%>
Nota: El siguiente es el destino de reinicio después de pasar la autenticación anterior: boardmanager.asp. Enumerará todos los artículos que han sido procesados.
< %
ID de tablero = solicitud ("ID de tablero")
if session("beenthere")<>boardidthen Response.redirect "forums.asp"
Nota: Aquí es donde se verifica la identidad del moderador, porque ha sido marcado en el navegador de Bamboo a través de cookies, y ahora podemos pasar seesion Identifiquemos el moderador. Si las etiquetas no coinciden, volverá a la página de inicio de sesión original a través de Response.redirect. Si la cookie del navegador del moderador no está activada, el valor de seesion ("beenthere") estará vacío y tampoco se podrá acceder a esta página.
Establecer conexión = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Establecer cmd = Server.CreateObject ("ADODB.Command")
Establecer cmd.ActiveConnection = conexión
sql="seleccione el nombre de la lista del tablero dondeid=" & boardid
establecer rs=conn.execute(sql)
nombre del tablero=rs("nombre")
cmd.commandtext="Lista de artículos no publicados"
Parámetro ReDim(0)
param(0) = CLng(boardid)//Nota: Clng no se puede ignorar
Establecer rs = cmd.Execute(,param)
establecer cmd = nada
%>
<html>
<cabeza>
<título>Procesamiento de publicación</título>
< meta http-oquiv = "content-type" content = "text/html; charset = gb2312">
</cabeza>
< Body bgcolor = "#ffffff" >
< H1 align = "Center" ><%= BoardName%> Gestión pública < /H1 >
< HR >
< %
Si rs.eof o rs.bof entonces respuesta.write "< H2 > No hay artículos para procesar </H2 >"
respuesta.
%>
Nota: Si los internautas no publicarán nuevos artículos, esto dará un mensaje correspondiente y usará la respuesta.
< Worth Width = "90%" Border = "0" CellSpacing = "0" CellPadding = "0" Align = "Center" >
< tr bgcolor = "#fffffcc" >
< TD Width = "40%" Height = "20" > Tema </TD >
< TD Width = "40%" Height = "20" > Título del artículo </TD >
< TD Width = "8%" Height = "20" > Autor </TD >
< TD Width = "12%" Height = "20" > Fecha </TD >
</tr>
< %
hacer
TopicId = RS ("TopicId")
ArtículoD = RS ("Artículoid")
data = rs ("fecha")
dataTR = cstr (año (datos)) y "-" & cstr (mes (data)) & "-" & cstr (día (datos)))
autor = RS ("Autor")
ArticLename = RS ("Título")
TopicName = RS ("Tema")
respuesta.write "< tr >< td >< a href = qtopic.asp? topicid =" & topicid & ">" & topicname & "< /a >< /td >"
Respuesta.Write "< TD >< a href = ganagearticle.asp? Artículo =" & ArtículoD & "& Boardid =" & Boardid & ">" & articlename & "< /a >< /td >"
respuesta.write "< td >< a href = qauthor.asp? autor =" & autor & ">" & autor & "< /a >< /td >"
Response.Write "< TD >" & Datatr & "< /TD >< /Tr >"
rs.movenext
bucle hasta RS.EOF
%>
</mesa>
</html >
< %
establecer rs = nada
Conn.clar
establecer conn = nada
%>
</cuerpo >
Cuando haga clic en el enlace del artículo correspondiente, ingresará la página de procesamiento del artículo Managemeartle.asp:
< %
ArtículoD = request ("Artículoid")
BoardId = request ("BoardId")
Si Session ("BEENTERE") <> Boardidthen Response.Redirect "Forums.asp"
Establecer conn = server.createObject ("ADODB.Connection")
Conn.open "Driver = {Microsoft AccessDriver (*.mdb)}; dbq =" & server.mappath ("bbssystem.mdb")
Establecer cmd = server.createObject ("ADODB.COMMAND")
Establecer cmd.activeconnection = conn
cmd.commandText = "Artículos de consulta por ID"
Redim Param (0)
Param (0) = CLNG (Artículo) // Nota: CLNG no se puede ignorar
Establecer rs = cmd.execute (, param)
Autor = RS ("AuthorId")
Title = RS ("Título")
data = rs ("fecha")
tasa = rs ("grado recomendado")
BoardId = RS ("Kanbanid")
TopicId = RS ("TopicId")
BoardName = RS ("Nombre del tablero")
TopicName = RS ("Nombre del tema")
content = rs ("contenido")
content = reemplazar (contenido, vbcrlf, "</p >< p >")
content = "< p >" & content & "< /p >"
Establecer CMD = nada
%>
< html >
<cabeza>
< Título > Documento sin título </Título >
< meta http-oquiv = "content-type" content = "text/html; charset = gb2312">
</cabeza>
< Body Bgcolor = "#E9E9E4" >
< Worth Width = "89%" Border = "0" CellSpacing = "0" CellPadding = "0" Align = "Center" >
< TR bgcolor = "#cccccc" >
< TD > Autor: < font color = "#ff3366" >< a href = "qauthor.asp? Autor = < %= Autor %>" >< %= Autor %> /A >< /Font > Fecha publicada: < font color = "#ff3333" ><%= datos%>< /fuente >
Junta Kanban: < Font Color = "#FF3333" >< a href = "Qboard.asp? BoardId = < %= BoardId %>" >< %= BoardName %>< /A >< /Font > Propietario de la junta Recomendación: < font color = "#ff3333">#tasa#< /font >< /td >
</tr>
< TR bgcolor = "#cccccc" >
< TD > Título: < Font Color = "#FF3333" ><%= Título%>
Tema: < a href = "qtopic.asp? Topicid = <%= topicid%>" > <%= topicName%>< /a > < /fuente >< /td >
</tr>
< tr valign = "top" >
< TD >
< HR >
< Font Color = "#FF3366" > Contenido del artículo: < /fuente >< BR >
<br>
< Color de fuente = azul >< %Respuesta. WriteContent %>< /Font >
<br>
< HR >
</td>
</tr>
< tr valign = "top" >
< Form Method = "Post" Action = "ManagerSult.asp" >
< TD Height = "18" >
< Worth Width = "100%" Border = "1" CellSpacing = "1" CellPadding = "1" >
<tr>
< TD Width = "29%">
< Div align = "correcto" >
< Tipo de entrada = "Hidden" name = "BoardId" Value = "< %= BoardId %>" >
< Tipo de entrada = "Hidden" name = "topicId" value = "< %= topicid %>" >
< Tipo de entrada = "Hidden" name = "Artículoid" value = "< %= ArteraD %>" >
Procesamiento de artículos: < /div >
</td>
< td width = "12%" borderColor = "#006666"> Eliminar:
< Entrada tipo = "Radio" name = "Manaye" Valor = 1 >
</td>
< td width = "30%" borderColor = "#006666"> Publicado por:
< Entrada tipo = "Radio" name = "Manaye" Valor = 2 >
Nivel de recomendación < Seleccionar nombre = "Seleccionar" >
< Valor de opción = "1" > 1 </opción >
< Valor de opción = "2" > 2 </opción >
< Valor de opción = "3" seleccionado > 3 </opción >
< Valor de opción = "4" > 4 </opción >
< Valor de opción = "5" > 5 </opción >
</Seleccionar >
</td>
< td width = "20%" borderColor = "#006666"> Proceso más tarde:
< Tipo de entrada = "Radio" Name = "Manaye" Valor = 3 >
</td>
< TD Width = "9%" >
< Tipo de entrada = "Subt" name = "Subt" value = "OK" >
</td>
</tr>
</mesa>
</td>
</formulario>
</tr>
</mesa>
</cuerpo>
</html >
< %
establecer rs = nada
Conn.clar
establecer conn = nada
%>
Nota: Esta página es básicamente la misma que el artículo.
A continuación, necesitamos modificar las partes correspondientes de la base de datos de acuerdo con el proceso de procesamiento del moderador.
<%Respuesta.Buffer = True%>
< html >
<cabeza>
< Título > Procesamiento de artículos </Título >
< meta http-oquiv = "content-type" content = "text/html; charset = gb2312">
</cabeza>
< Body Bgcolor = "#E9E9E4" >
< %
ArtículoD = request ("Artículoid")
BoardId = request ("BoardId")
topicId = request ("topicId")
administrar = request ("administrar")
'Aceptar contenido de formulario
Respuesta.WRITE Manager 'Show Buzhu Id
Si Session ("BEENTERE") <> Boardidthen Response.Redirect "Forums.asp"
Establecer conn = server.createObject ("ADODB.Connection")
Conn.open "Driver = {Microsoft AccessDriver (*.mdb)}; dbq =" & server.mappath ("bbssystem.mdb")
De acuerdo con la operación del moderador en la página anterior, el procesamiento correspondiente se llevará a cabo a continuación.
if clng (request ("administrar")) = 1 entonces
sql = "Eliminar de la tabla de contenido donde id =" & Artículoid
Conn.execute SQL
Respuesta.Write "< H1 > El artículo se ha eliminado </H1 >"
respuesta.write "< a href = > back </a>"
Elseif Clng (request ("Manaye")) = 2Then
sql = "actualizar contenido tabla set publish = true WhereID =" & Artículoid
Conn.execute SQL
sql = "Actualización Tema Tabla Conjunto Número de artículos = Número de artículos+1 donde id =" & topicid
Conn.execute SQL
Response.write "< H1 > se ha publicado el artículo </H1 >"
respuesta.write "< a href = > back </a>"
demás
respuesta.
Response.Redirect "BoardManager.asp? Boardid =" y abordado
terminar si
%>
</cuerpo>
</html >
< %
Conn.clar
establecer conn = nada
%>
Después de los pasos anteriores, todas las piezas se completan básicamente. Si desea poder usarlo, debe poner más esfuerzo en el diseño del diseño, la verificación de datos del cliente, etc. Pero esos son todos contenido HTML y tienen poco que ver con ASP, por lo que no entraré en detalles aquí.