Préface : De nos jours, il existe des forums partout sur Internet, mais je me demande si vous avez déjà rencontré une telle situation : rechercher le contenu que vous souhaitez dans les informations de discussion désordonnées est une chose très longue et laborieuse. est-ce que je ne veux plus aller sur aucun forum. Alors pouvons-nous ajouter une fonction d’audit au contenu du forum de notre site Web ? Autrement dit, tous les articles publiés par les internautes sur le forum ne seront pas affichés immédiatement. Ils doivent être examinés par le webmaster ou le modérateur. S'ils sont jugés utiles et nécessaires à recommander à d'autres internautes, ils seront publiés. Sinon, supprimez-le pour éviter de perdre de l'espace et de le faire ressembler un peu à une zone de surbrillance. De cette façon, votre forum peut fournir un contenu plus clair et plus utile que les forums ordinaires. Le mettre sur votre site Web devrait attirer davantage d’internautes à visiter. Cette idée peut certainement être réalisée, et je présenterai brièvement comment la réaliser ci-dessous.
Remarque : Cet article s'adresse aux lecteurs qui ont une certaine compréhension de la base de données ACCESS, de HTML et d'ASP.
1. Analyse de la structure du forum
Grâce à l'analyse des exigences fonctionnelles ci-dessus, nous pouvons diviser la production du forum en quatre parties :
(1) Module d'inscription et de gestion des internautes : le webmaster ou le modérateur étant introduit, il doit pouvoir le contrôler dans le forum Authentifier. La fonction de ce module est de gérer les internautes enregistrés et de fournir des requêtes pertinentes. Par exemple, interrogez tous les articles publiés par un auteur spécifié, interrogez les dix internautes ayant publié le plus d'articles, etc. Si votre forum n'est pas très grand, ce module peut être omis pour n'avoir que la fonction d'authentification du modérateur, et supprimer les parties concernant l'inscription et la requête.
(2) Module d'affichage des articles : affiche tous les articles qui ont été examinés par les modérateurs et jugés dignes d'être recommandés.
(3) Module de publication d'articles : offre un espace permettant aux internautes enregistrés de publier leurs opinions et d'attendre leur examen par les modérateurs après la publication.
(4) Module de révision des articles : les modérateurs traitent tous les articles qui ont été publiés sur le site Web mais qui n'ont pas été examinés et ont décidé de les publier ou de les supprimer.
Après avoir compris les exigences fonctionnelles spécifiques, vous pouvez commencer la conception du forum selon le module. Bien entendu, ces modules divisent uniquement fonctionnellement la structure du forum et ne peuvent en réalité pas être conçus de manière totalement indépendante. Pour des applications aussi petites, il n’est pas nécessaire d’avoir une conception modulaire complète. Il peut être plus facile d’écrire directement le code du programme avec une bonne planification.
Il existe généralement deux manières de mettre en œuvre un forum : à l'aide de fichiers ou de bases de données. Relativement parlant, l'utilisation d'une base de données est plus simple et plus efficace, peut permettre un meilleur contrôle sur le forum et peut également assurer une certaine vérification et protection des données. Ici, j'utilise la base de données ACCESS Pour les applications générales de petite et moyenne taille, ACCESS devrait être capable de faire le travail.
D’après l’analyse ci-dessus, nous pouvons savoir qu’il devrait y avoir quatre tableaux. Ci-dessous, je donne la structure de chaque tableau.
(1) Table des auteurs (utilisée pour stocker les informations sur l'auteur) :
ID : type de texte, obligatoire. C’est le nom de code d’un internaute.
Mot de passe : Type de texte, obligatoire.
Pseudo : Type de texte, obligatoire.
EMAIL : Type de texte, obligatoire.
Position : Type numérique, obligatoire. -1 représente les internautes ordinaires, 0 représente les webmasters. Les nombres supérieurs à 0 représentent les modérateurs.
Nombre d'articles : type numérique, obligatoire. Le nombre total d'articles publiés par les internautes.
Nom : type de texte, facultatif.
Sexe : type de texte, facultatif.
Téléphone : Type de texte, facultatif.
(2) Table de contenu (utilisée pour stocker le contenu d'un article spécifique et les informations associées) :
ID : numérotez-le et indexez-le automatiquement pour accélérer la recherche.
ID Kanban : type numérique, issu de la liste Kanban, indiquant le tableau Kanban auquel appartient l'article.
ID de sujet : type numérique, issu du tableau des sujets, indiquant le sujet auquel appartient l'article.
ID auteur : type de texte, issu de la table des auteurs, indiquant l'auteur de l'article.
Date : Type date/heure, la valeur initiale prédéfinie est la fonction NOW(), qui prend automatiquement l'heure actuelle du système comme valeur.
Titre : Type de texte. Le titre de l'article.
Publier : tapez Oui/Non, "Vrai" signifie que l'article a été révisé et peut être publié ; "Non" signifie que l'article n'a pas encore été révisé.
Recommandation : Type numérique, le degré de recommandation de l'article.
Contenu : Type de remarque, contenu spécifique de l'article.
Nombre de clics : Type de numéro, le nombre de clics sur l'article.
(3) Liste Kanban (utilisée pour stocker des informations sur le kanban) :
ID : numéro automatique De même, un index est également défini pour celle-ci.
Nom : Type de texte, le nom du tableau.
Modérateur : Type de texte, ID du modérateur du forum.
Nombre de sujets : type numérique, le nombre de sujets inclus dans le tableau.
(4) Table de sujets (utilisée pour stocker des informations sur les sujets) :
ID : numéroter automatiquement et définir un index pour celui-ci.
Titre : Type de texte indiquant le nom du sujet.
Tableau Kanban : Type de numéro, issu de la liste des tableaux Kanban, indiquant le tableau Kanban auquel appartient le sujet.
Nombre d'articles : Type de numéro, le nombre d'articles contenus dans le sujet.
Toutes les tables ont été conçues, mais la conception de la base de données n'est pas encore terminée, nous devons donc encore établir des relations entre les tables, afin que la base de données puisse effectuer certaines vérifications de corrélation pour éviter les erreurs de données. Un autre avantage de l'établissement de relations entre les tables est que des requêtes JOIN complexes peuvent être facilement établies via cette méthode.
Habituellement, lorsque nous exploitons une base de données dans ASP, nous utilisons des requêtes générées lors de l'exécution, qui sont ensuite transmises à la base de données pour interprétation et exécution. Et ici, nous allons utiliser des requêtes stockées. Les procédures stockées présentent plus d'avantages que les requêtes au moment de l'exécution.
Il est stocké dans la base de données et est indépendant du code du programme ASP, ce qui facilite sa création et sa modification, et l'efficacité des requêtes est plus élevée et plus rapide. Il peut être débogué puis utilisé dans la page ASP, ce qui peut éviter de nombreux problèmes. Et le code du programme ASP qui utilise des requêtes stockées est plus facile à lire et à modifier. Peut-être que tout le monde est ennuyé par l'utilisation de requêtes SQL dans ASP, en particulier les virgules, points-virgules, etc., qui peuvent provoquer des erreurs si vous ne faites pas attention. Après avoir utilisé des requêtes stockées, vous n'avez plus à vous soucier de ces problèmes. Bien sûr, vous devez faire attention à certaines choses lorsque vous utilisez des programmes pré-enregistrés. J'expliquerai comment les utiliser en détail plus tard. Il est très simple de créer un programme stocké dans ACCESS, je n'en dirai donc pas plus ici. Ici, je donne uniquement le code du programme d'instruction SQL pour chaque requête.
J'ai enregistré toutes les requêtes à utiliser dans la base de données en tant que programmes pré-stockés. Les principales sont les suivantes :
(1) Requête d'articles par ID :
SELECT table de sujet Titre AS nom de sujet, liste Kanban Nom AS Kanban. Table des matières.*
FROM table de sujets INNER JOIN (table de contenu INNER JOIN liste kanban ON table de contenu.ID kanban = liste kanban.ID) ON table de sujet.ID = table de contenu.ID de sujet
OÙ (((content table.ID)=[articleid]));
(2) Requête de mot de passe du modérateur :
SELECT Kanban list.Propriétaire du tableau, auteur table.Password
FROM table d'auteur INNER JOIN liste kanban ON author table.ID = kanban list.board propriétaire
WHERE (((kanban list.ID)=[id];
(3) Interroger l'auteur :
SELECT author table.*
DE la table des auteurs
WHERE (((author table.ID)=[id]));
(4) Liste des articles publiés :
SELECT [Table de contenu].[ID], [Table de contenu].[Titre], [Table de contenu].[ID de l'auteur ] AS auteur, [table des matières].[date], [table des matières].[recommandation], [table des matières].[nombre de clics] AS nombre de clics.
DE table des matières
OÙ ((([Table des matières].[ID du sujet])=[TopicIndex]) Et (([Table des matières].[Published])=True)
)
;
id, sujet table.ID AS identifiant du sujet, sujet table.titre AS sujet, contenu table.titre AS titre, contenu table.auteur ID AS auteur, contenu table.date AS date
FROM table de sujets INNER JOIN table de contenu ON table de sujets.ID = table de contenu.ID de sujet
OÙ (((Table de contenu. Publier)=False) AND ((Table de contenu. ID Kanban)=[boardid]));
(5) Liste de sujets :
SELECT Table de sujets.*, liste Kanban Nom AS Nom du Kanban.
FROM liste kanban INNER JOIN table thématique ON kanban list.ID = table thématique.kanban
WHERE (((topic table.kanban)=[boardIndex]));
Il existe également quelques requêtes, car la plupart d'entre elles sont similaires, je ne les listerai pas une par une.
Dans l'instruction de requête ci-dessus, vous pouvez voir certains éléments entourés de "[" et "]", qui sont des paramètres de requête. La valeur du paramètre doit être donnée lors de l'exécution, puis la valeur du paramètre est introduite dans l'instruction de requête avant qu'elle puisse être exécutée. Une autre chose à noter est que lors de l'établissement de ces requêtes INNER JOIN, vous devez ajouter la relation entre les tables à la vue conception, sinon l'instruction de requête INNER JOIN ne peut pas être générée automatiquement.
À ce stade, la conception de la base de données est terminée et le prochain travail est ASP.
2. Construction
1. Pour créer le formulaire principal
, vous devez d'abord fournir un formulaire permettant aux internautes de saisir les informations d'inscription. Ce sont des contenus HTML, et examinons de plus près le script ASP qui implémente l'enregistrement.
(1) Remplacez le guillemet simple dans les informations par deux guillemets simples et ajoutez des guillemets simples avant et après
Fonction SqlStr (données)
SqlStr = "'" & Remplacer (données, "'", "''" ) & "'"
la fonction de fin
: Il s'agit d'une fonction personnalisée utilisée pour convertir les guillemets simples (') dans les entrées utilisateur en deux guillemets simples (''). En ASP, une chaîne est entourée de guillemets doubles, donc le "'" ci-dessus représente une chaîne avec un seul guillemet simple. La raison pour laquelle vous devez remplacer un guillemet simple par deux guillemets simples est que dans les instructions SQL, les guillemets simples sont utilisés pour représenter les variables. Afin d'éviter toute confusion, les guillemets simples dans la chaîne doivent être représentés par deux guillemets simples. Toutes les entrées utilisateur doivent être intégrées dans l'instruction SQL en tant que variables, cette fonction est donc essentielle.
(2) Préparation au stockage
identifiant=Requête("id")
mot de passe=Demande("mot de passe")
pseudo=Requête("surnom")
email=Demande("email")
sexe=demande("sexe")
Remarque : Il n'est pas nécessaire de sauvegarder le contenu du formulaire de saisie utilisateur dans une variable, mais cela facilite la lecture et l'écriture.
if Request("name")=""then name=" " else name=request("name")
if Request("phone")=""then phone=" " else phone=request("phone")
Parce que ces contenus n'ont pas besoin d'être remplis, afin d'éviter que l'utilisateur ne saisisse rien et provoque des erreurs de fonctionnement de la base de données , il doit s'agir de Remplacer les champs non remplis par des espaces.
(3) Établir la connexion
Définir conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Remarque : Cette section sert à établir une connexion à la base de données. Le nom de la base de données est bbssystem.mdb. . Dans cette section, la seule chose à noter est l'application de la fonction Server.MapPath. De manière générale, chaque fois qu'un répertoire spécifique est impliqué, n'utilisez pas directement le nom du répertoire, mais utilisez plutôt la fonction Server.MapPath. Faire bon usage de fonctions telles que Server.MapPath et Request.ServerVariables() peut rendre votre application WEB plus portable.
Set cmd = Server.CreateObject("ADODB.Command")
(4) Demander si l'auteur existe déjà
Définir cmd.ActiveConnection = conn
cmd.CommandText = "Auteur de la requête"
ReDim param(0) 'Déclarer le tableau de paramètres
param(0) = CStr(id) ' Cint ne peut pas être ignoré
Set rs = cmd.Execute(,param)
Remarque : Cette section est utilisée pour exécuter le programme stocké. Il existe de nombreuses façons d'exécuter des requêtes dans ADO, mais pour les procédures stockées, vous ne pouvez utiliser que l'objet Command. Tout d'abord, créez un objet Command appelé cmd, puis définissez l'objet de connexion conn sur la propriété ActiveConnection de l'objet cmd, définissez le nom de la requête à exécuter "Query Author" sur la propriété CommandText, puis attribuez des valeurs au paramètres de requête. Nous avons déclaré un tableau de paramètres param(0), car il n'y a qu'un seul paramètre dans la requête "Query Author", donc le tableau n'a qu'un seul composant. Généralement, s'il y a plusieurs paramètres dans une requête, un tableau de paramètres avec un nombre correspondant de composants doit être déclaré. Et l'ordre dans lequel les paramètres apparaissent correspond à l'ordre des composants du tableau. Lors de l'utilisation de la requête de paramètres, une attention particulière doit être accordée au fait que les types de paramètres doivent correspondre strictement, sinon une erreur se produira, la fonction de conversion de type CStr() ci-dessus est donc indispensable.
sinon (rs.eof ou rs.bof) alors
réponse.write "Erreur, le numéro d'identification que vous avez entré est occupé, veuillez en essayer un autre !"
autre
sql = "Insérer dans la table des auteurs (identifiant, pseudo, email, mot de passe, nom, école, département, sexe, numéro de téléphone) Valeurs("
sql = sql & SqlStr(id) & ","
sql = sql & SqlStr(pseudo) & ","
sql = sql & SqlStr(e-mail) & ","
sql = sql & SqlStr(mot de passe) & ","
sql = sql & SqlStr(nom) & ",&", "
sql = sql & SqlStr(sexe) & ","
sql = sql & SqlStr(téléphone) & ")"
conn.Execute SQL
utilise une instruction SQL Insert pour insérer des données dans la base de données. En fait, cette requête peut également être transformée en programme pré-stocké et placée dans la base de données. J'étais un peu paresseux :-) Cependant, en comparaison, vous pouvez également voir les avantages du programme pré-stocké. difficile d'écrire la requête pendant l'exécution.
2. Créez le module d'affichage des articles
Comme mentionné précédemment, un article spécifique appartient au babillard électronique et au corps principal. Par conséquent, lors de l'affichage d'articles, vous devez parcourir les deux pages de la liste du babillard électronique et de la liste des sujets avant de pouvoir obtenir la liste des articles sur un sujet spécifique.
(1) Page d'affichage de la liste des tableaux :
<html>
<tête>
<titre>Liste Kanban</titre>
<méta http-equiv="Content-Type"content="text/html; charset=GB2312">
</head>
(2) Ouvrir la connexion et afficher la liste kanban
< %Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
sql = "sélectionner * dans la liste Kanban"
définir rs=conn.execute(sql)
%>
Remarque : Une simple requête SQL renvoie toutes les informations sur le tableau Kanban au jeu d'enregistrements RS. La tâche suivante consiste à afficher le contenu enregistré et à créer un lien pour afficher le sujet du forum sur le nom du forum correspondant.
<body bgcolor="#FFFFFF">
< h2 align="center">Liste Kanban</h2>
<largeur de la table="60%" border="0"cellspacing="0" cellpadding="0"align="center">
<tr bgcolor="#FFFFCC">
< td height="35" width="25%">Nom du tableau</td>
<td hauteur="35" largeur="21%">Modérateur</td>
<td height="35" width="23%">Nombre de sujets</td>
<td height="35" width="31%">Connexion modérateur</td>
</tr>
Remarque : Cette partie sert à afficher le titre de chaque colonne du tableau. Ici, je n'utilise pas de fonction unifiée pour afficher le contenu de l'enregistrement RS, car cela permet plus de contrôle sur l'apparence et le style du tableau. . Utilisation Même s'il est un peu encombrant à relever, il est plus souple.
< %
faire
boardid=rs("id")
nom du tableau=rs("nom")
boardmanager=rs("Propriétaire du conseil")
réponse.write "<tr><td><a href=qBoard.asp?boardid="& boardid& "&boardname=" & boardname& ">" & boardname &"< /a>< /td>"
Remarque : cette ligne est Surtout, lorsque vous cliquez sur le nom de chaque tableau, vous pouvez vous connecter à la page affichant le thème du tableau. Le code du programme semble un peu lourd. Je vais le décomposer et vous l'expliquer, et vous comprendrez. Après avoir cliqué, le navigateur demande la page qBoard.asp avec un paramètre boardid, qui représente le numéro d'identification de la carte à afficher. Un point d'interrogation (?) est utilisé pour séparer la page de requête et le paramètre. Boardid est la variable définie précédemment, qui contient le numéro d'identification de la carte correspondante. Cette connexion contient également un autre paramètre boardname, qui est utilisé pour transmettre le nom de la carte à la page qBoard.asp. Utilisez "&" pour séparer plusieurs paramètres. Ce paramètre n'est pas nécessaire. Il est passé pour éviter d'utiliser à nouveau boardid pour interroger le nom de la carte dans qBorad.asp. De manière générale, les opérations de base de données doivent être utilisées le moins possible, ce qui peut améliorer les performances des pages ASP. Étant donné que l'instruction Response.Write utilise des chaînes comme paramètres, le caractère de connexion « & » est utilisé entre les chaînes et les variables ci-dessus. Le résultat final de l'explication de la page ASP devrait ressembler à ceci
<td>< a href=qBoard.asp?boardid=1&boardname=Carte système>Carte système</a><td>.
réponse.write "< td>< a href=qAuthor.asp?author="&boardmanager & ">" &boardmanager & "< /a></td>"
réponse.write "< td>" &rs("nombre de sujets") & "< /td>"
réponse.write "< td>< a href=managerlogin.asp?boardid="&boardid & ">Board Processing< /a></td>< /tr>"
Remarque : Dans ce tableau, en plus de la connexion Affichage du Dans le contenu du thème kanban, il existe également une partie de requête en mosaïque et une partie de traitement du service de carte. La requête du modérateur peut être implémentée via qAuthor.asp. Elle récupère simplement les informations sur l'auteur de la base de données et les affiche. Dit. Le traitement du tableau est géré par la page managerlogin.asp. Cela appartient au module de révision d'articles, que j'expliquerai en détail plus tard.
rs.movenext
boucle jusqu'à rs.eof
%>
Remarque : via une boucle do..., tous les messages du jeu d'enregistrements sont affichés.
</tableau>
<div align="center"><br>
Cliquez sur le nom du forum pour obtenir la liste des sujets, cliquez sur le nom du propriétaire du forum pour afficher les messages du propriétaire du forum.
</div>
</corps>
</html>
< %
définir rs = rien
connexion.fermer
définir conn = rien
%>
(3) Créez la page qBaord.asp :
< %
boardid=request("boardid") 'Obtenir le numéro d'identification du tableau transmis à partir de la page précédente
Définir conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Définir cmd = Server.CreateObject("ADODB.Command")
Définir cmd.ActiveConnection = conn
cmd.CommandText = "Liste des sujets"
ReDim param(0) //Remarque : déclarer le tableau de paramètres
param(0) = CLng(boardid)//Remarque : CLng ne peut pas être ignoré
Définir rs = cmd.Execute( ,param)
%>
<html>
<tête>
<titre>Liste des sujets</titre>
<méta http-equiv="Content-Type"content="text/html; charset=GB2312">
</tête>
<body bgcolor="#FFFFFF">
< h1 align="center"><%=rs("kanban name")%>Liste des thèmes du tableau</h1>
<largeur de la table="80%" border="0"cellspacing="0" cellpadding="0"align="center">
<tr bgcolor="#FFFFCC">
<td width="89%" height="21">Thème</td>
<td width="11%" height="21">Nombre d'articles</td>
</tr>
< %
faire
identifiant du sujet=rs("id")
nom du sujet=rs("titre")
sum=rs("nombre d'articles")
réponse.write "< tr>< td><a href=qtopic.asp?topicid=" & topicid& "&boardname=" & boardname& ">" & topicname &"< /a>< /td>"
réponse.écrire "< td>" &sum & "< /td>< /tr>"
rs.movenext
boucle jusqu'à rs.eof
%>
</tableau>
</corps>
</html>
Remarque : qBoard.asp répertorie tous les sujets d'un certain forum. Après avoir cliqué sur le nom du sujet, vous entrerez dans la liste d'articles du sujet correspondant. Cette liste est implémentée par le script ASP qTopic.asp. Le code du programme de Qtopic.asp est presque le même que celui de qBoard.asp, mais il existe des différences dans leurs détails respectifs, et je ne vais pas entrer dans plus de détails ici.
(4) Après avoir cliqué sur le titre de l'article dans la liste des articles, vous entrerez dans la page de navigation du contenu de l'article article.asp :
< %
identifiant de l'article=request("id de l'article")
Définir conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver(*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Définir cmd = Server.CreateObject("ADODB.Command")
Définir cmd.ActiveConnection = conn
cmd.CommandText = "Rechercher les articles par identifiant"
ReDim param(0) 'Déclaration
param(0) = CLng(articleid) ' Cint ne peut pas être ignoré
Définir rs = cmd.Execute( ,param)
auteur=rs("identifiant auteur")
titre=rs("titre")
données=rs("Date")
rate=rs("diplôme recommandé")
boardid=rs("kanbanid")
identifiant du sujet=rs("identifiant du sujet")
nom du tableau=rs("nom du tableau")
nom du sujet=rs("nom du sujet")
contenu=rs("contenu")
content=replace(content,vbCrlf,"</p><p>")
content="< p>" & content& "< /p>"
Remarque : C'est quelque chose à noter. Le champ de contenu contient du texte de type mémo, qui peut contenir des caractères de nouvelle ligne. Dans l'affichage HTML, le caractère de nouvelle ligne (c'est-à-dire la constante vbCrlf) doit être remplacé par le symbole de paragraphe HTML. De cette façon, la connexion entre les paragraphes ne perturbera pas le format de saisie d'origine. Si vous souhaitez mieux concevoir, vous pouvez utiliser CSS pour réinitialiser la balise <P> et définir son attribut test-indent pour obtenir un espace au début de chaque paragraphe.
(5) Ajoutez un au nombre de clics
sql="Mettre à jour la table de contenu Définir le nombre de clics=nombre de clics+1Où ID=" & articleid
conn.execute sql
Remarque : il y a une instruction SQL ici Lorsque la page est affichée, le champ du nombre de clics dans le tableau correspondant sera incrémenté de un, afin que le nombre de vues d'articles puisse être compté et classé dans l'ordre. Lors de l'exécution de l'instruction article, j'ai découvert que : à l'origine dans l'instruction SQL, le nom de la variable intégrée devait être distingué par des guillemets simples, mais je n'ai pas ajouté de guillemets simples à la variable articleid ici, et il a en fait été transmis, et j'écris comme ceci a toujours provoqué des erreurs dans le passé. Je me demande si c'est à cause de la nouvelle version d'ADO.
définir cmd = rien
%>
<html>
<tête>
<titre>Document sans titre</titre>
<méta http-equiv="Content-Type"content="text/html; charset=GB2312">
</tête>
<corps bgcolor="#E9E9E4">
<largeur de la table="89%" border="0"cellspacing="0" cellpadding="0"align="center">
<tr bgcolor="#CCCCCC">
<td>Auteur :<font color="#FF3366"><a href="qauthor.asp?author=< %=author%>">< %=author%> < /a>< /font>Date de publication : < couleur de police="#FF3333"><%=data%>< /font>
Tableau Kanban :< font color="#FF3333"><a href="qboard.asp?boardid=< %=boardid%>">< %=boardname%>< /a>< /font>Recommandation du propriétaire du tableau :< font color="#FF3333">#rate#</font>< /td>
</tr>
<tr bgcolor="#CCCCCC">
<td>Titre :<font color="#FF3333"><%=titre%>
Sujet : < a href="qtopic.asp?topicid=<%=topicid%>"> < %=topicname%>< /a> < /font>< /td>
</tr>
<tr valign="haut">
<td>
<heure>
< font color="#FF3366">Contenu de l'article : < /font>< br>
<br>
< couleur de police=bleu>< %response.writecontent%>< /font>
<br>
<br>
</td>
</tr>
<tr valign="haut">
<td hauteur="18">
<largeur du tableau="50%" border="0"cellspacing="0" cellpadding="0"align="right" bgcolor="#CCCCCC">
<tr>
< td largeur="0%"> < /td>
<td width="65%">À propos de ce sujet<a href="submit.asp?topicid=< %=topicid%>&boardid=<%=boardid%>">Laisser un commentaire< /a></td>
Cette connexion permet aux internautes d'exprimer leurs propres opinions sur le sujet de ce commentaire. C'est ce dont parlera le prochain module, je n'en parlerai donc pas ici.
</tr>
</tableau>
</td>
</tr>
</tableau>
</corps>
</html>
< %
définir rs = rien
connexion.fermer
définir conn = rien
%>
À ce stade, la partie affichage de l'article est également terminée. Jetons un coup d'œil à la manière dont la partie publication d'articles est implémentée.
3. Construisez la partie publication de l'article.
Le module de publication de l'article ne comporte que deux pages, l'une est le submit.asp mentionné précédemment, qui est utilisé pour fournir le formulaire de saisie, et l'autre est subresult.asp, qui est utilisé pour traiter le formulaire. saisir. La page précédente est très simple. Il s'agit essentiellement d'un formulaire HTML. Il n'y a pas grand-chose à dire. Jetons un coup d'œil au contenu de subresult.asp :
<html>
<tête>
<titre>Publier l'article</titre>
<méta http-equiv="Content-Type"content="text/html; charset=GB2312">
</tête>
<body bgcolor="#FFFFFF">
< %
auteur=requête("auteur")
mot de passe=requête("mot de passe")
identifiant du sujet=requête("identifiant du sujet")
ID de carte=requête("ID de carte")
contenu=requête("contenu")
title=request("title")
Remarque : Cette section supprime le contenu du tableau soumis dans submit.asp et le place dans la variable correspondante.
<html>
<tête>
<titre>Publier l'article</titre>
<méta http-equiv="Content-Type"content="text/html; charset=GB2312">
</tête>
<body bgcolor="#FFFFFF">
< %
auteur=requête("auteur")
mot de passe=requête("mot de passe")
identifiant du sujet=requête("identifiant du sujet")
ID de carte=requête("ID de carte")
contenu=requête("contenu")
title=request("title")
(1) Demander si l'auteur existe
cmd.CommandText = "sélectionner * dans la table des auteurs où id='" & auteur &"'"
Définir rs = cmd.Execute()
(2) Vérifier les autorisations
cmd.CommandText = "sélectionner * dans la table des auteurs où id='" & auteur &"'"
Set rs = cmd.Execute()
Remarque : Cette section vérifie les autorisations de l'auteur et gère les erreurs en conséquence si le compte n'existe pas ou si le mot de passe est incorrect. Ici vous pouvez voir l'utilisation de Response.end, qui est utilisé pour terminer le script ASP actuel. En combinaison avec les instructions if, les erreurs attendues dans le programme peuvent être gérées. Dans une bonne application WEB, la gestion des erreurs est essentielle.
(3) Remplacez le guillemet simple dans les informations par deux guillemets simples et ajoutez des guillemets simples avant et après
Fonction SqlStr (données)
SqlStr = "'" & Remplacer (données, "'", "''" ) & "'"
Fonction de fin
'Écrire dans la base de données
sql = "Insérer dans la table de contenu (identifiant du forum, identifiant du sujet, identifiant de l'auteur, titre, contenu) Valeurs ( "
sql = sql & SqlStr(sujet) & ","
sql = sql & SqlStr(boardid) & ","
sql = sql & SqlStr(auteur) & ","
sql = sql & SqlStr(titre) & ","
sql = sql & SqlStr(contenu) & ")"
conn.Exécuter SQL
%>
<h2>L'article a été envoyé à la base de données et peut être consulté une fois que le modérateur l'a examiné <h2>
</corps>
</html>
À ce stade, l'article a été enregistré dans la base de données. Cependant, il ne peut pas être affiché immédiatement et nécessite l'approbation du modérateur. Jetons ensuite un œil à la partie gestion du forum.
4. La partie gestion du forum
est le cœur de notre forum, mais sa mise en œuvre n'a rien de spécial. C'est toujours la même chose : le traitement des formulaires, les requêtes dans la base de données et l'utilisation d'ASP pour les combiner de manière organique. Lorsque vous entrez dans le mode de révision d'article (le traitement du forum mentionné précédemment), la chose la plus importante devrait être de vérifier l'identité du modérateur. Jetons un coup d'œil à la page de connexion du modérateur :
< %
ID de carte=requête("ID de carte")
(Remarque : le boardid est transmis par la connexion à cette page et constitue l'ID de la carte à traiter. Ce n'est que grâce à cela que nous pouvons savoir quelle carte est en cours de traitement.)
Définir conn = erver.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Définir cmd = Server.CreateObject("ADODB.Command")
Définir cmd.ActiveConnection = conn
cmd.CommandText = "Requête de mot de passe du modérateur"
Paramètre ReDim (0)
param(0) = CLng(boardid) //Remarque : CLng ne peut pas être ignoré
Définir rs = cmd.Execute( ,param)
boardmanager=rs("Propriétaire du conseil")
définir cmd = rien
%>
<html>
<tête>
<titre>Document sans titre</titre>
<méta http-equiv="Content-Type"content="text/html; charset=GB2312">
</tête>
<body bgcolor="#FFFFFF">
< p>Seul le propriétaire du tableau < %=boardmanager%> peut entrer dans cet endroit </p>
<p>Veuillez saisir le mot de passe de vérification et, pour maintenir l'authentification, veuillez activer les cookies de votre navigateur. </p>
<form method="post" action="managerloginrest.asp">
<type d'entrée="mot de passe" nom="mot de passe">
< input type="hidden" name="boardid"value=< %=boardid%>>
<input type="submit" name="Submit"value="OK">
</formulaire>
Remarque : Cette page est uniquement destinée à la connexion. Après avoir obtenu le mot de passe saisi par Mozhu, il ne peut pas effectuer de vérification. Au lieu de cela, le travail de vérification sera effectué sur la page suivante. En fait, le travail de saisie et de vérification du mot de passe peut être effectué sur une seule page, mais la disposition structurelle du code du programme est un peu gênante.
</corps>
</html>
< %
définir rs = rien
connexion.fermer
définir conn = rien
%>
Maintenant que l'ID du modérateur et le mot de passe saisi sont obtenus, voici le travail de vérification managerloginrest.asp Il accepte le contenu du formulaire dans le fichier ci-dessus et effectue le traitement associé :
< %
réponse.buffer=true
Remarque : définissez le tampon pour autoriser l'utilisation. De manière générale, cet élément doit être ajouté à l'en-tête de chaque page ASP, ce qui peut améliorer les performances de la page ASP. Après l'ouverture du tampon, il existe certaines utilisations spéciales correspondantes dans ASP, qui seront mentionnées plus tard.
ID de carte=requête("ID de carte")
mot de passe=requête("mot de passe")
Définir conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Définir cmd = Server.CreateObject("ADODB.Command")
Définir cmd.ActiveConnection = conn
cmd.CommandText = "Requête de mot de passe du modérateur"
ReDim param(0) 'Déclaration
param(0) = CLng(boardid)//Remarque : CLng ne peut pas être ignoré
Définir rs = cmd.Execute( ,param)
boardmanager=rs("Propriétaire du conseil")
si mot de passe<>rs("mot de passe") alors %>
<html>
<tête>
<titre>Authentification</titre>
<méta http-equiv="Content-Type"content="text/html; charset=GB2312">
</tête>
<body bgcolor="#FFFFFF">
Mot de passe incorrect</corps>
</html>
< %
autre
session("beenthere")=boarded
Remarque : L'utilisation de Session pour conserver l'identité du modérateur nécessite que les cookies du navigateur client soient activés. Parce que la session est mise en œuvre via des cookies. Ici, attribuez l'ID du forum à la variable Session beenthere, indiquant que le modérateur a réussi l'authentification d'identité. Dans chaque page de traitement de version suivante, vérifiez si beenthere correspond à l'ID de version correspondant.
url="boardmanager.asp?boardid="& boardid
d'URL Response.redirect
: lorsque j'ai appris ASP pour la première fois, j'étais toujours confus par la méthode Response.redirect et j'en étais mécontent. Maintenant, laissez-moi vous expliquer quelques techniques. Avant de l'utiliser, vous devez passer réponse.buffer=true pour permettre à la page ASP d'utiliser le tampon. À ce stade, avant qu'ASP ne soit interprété dans le code du programme HTML, il est placé dans la mémoire tampon et n'est pas envoyé directement au navigateur client. Une autre chose qu'il faut savoir est : avant d'utiliser Response.redirect, aucun code de programme HTML réel ne peut être envoyé au navigateur client, sinon une erreur se produira. Bien sûr, il existe des solutions de contournement. Si le code du programme HTML a été interprété avant Response.redirect, vous pouvez utiliser la méthode Response.clear pour vider le tampon, puis l'utiliser pour le réinitialiser.
finir si
%>
Remarque : Voici la cible de réinitialisation une fois l'authentification ci-dessus passée : boardmanager.asp. Il listera tous les articles qui ont été traités.
< %
ID de carte=requête("ID de carte")
if session("beenthere")<>boardidthen réponse.redirect "forums.asp"
Remarque : C'est ici que l'identité du modérateur est vérifiée, car elle a été marquée dans le navigateur de Bamboo via des cookies, et maintenant nous pouvons passer la session. le modérateur. Si les balises ne correspondent pas, il reviendra à la page de connexion d'origine via Response.redirect. Si le cookie du navigateur du modérateur n'est pas activé, la valeur de seesion ("beenthere") sera vide et cette page ne sera pas non plus accessible.
Définir conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Définir cmd = Server.CreateObject("ADODB.Command")
Définir cmd.ActiveConnection = conn
sql="sélectionner le nom dans la liste des forums où id=" & boardid
définir rs=conn.execute(sql)
nom du tableau=rs("nom")
cmd.commandtext="Liste des articles non publiés"
Paramètre ReDim (0)
param(0) = CLng(boardid)//Remarque : Clng ne peut pas être ignoré
Définir rs = cmd.Execute( ,param)
définir cmd = rien
%>
<html>
<tête>
<titre>Traitement de la publication</titre>
<méta http-equiv="Content-Type"content="text/html; charset=GB2312">
</tête>
<body bgcolor="#FFFFFF">
< H1 Align = "Center" ><% = Boardname% > Gestion publique < / H1 >
< hr >
<%
Si Rs.Eof ou Rs.Bof, alors réponse.WRITE "< H2 > Il n'y a pas d'articles à traiter < / h2 >"
réponse.end
%>
Remarque: Si aucun nouvel article n'est publié par des internautes, cela donnera une invite correspondante et utilise la réponse.end pour mettre fin à l'affichage de cette page.
< Table Width = "90%" border = "0" CellSpacing = "0" CellPadding = "0" Align = "Center" >
< tr bgcolor = "# ffffcc" >
< td width = "40%" height = "20" > thème < / td >
< td width = "40%" height = "20" > Titre de l'article < / td >
< td width = "8%" height = "20" > Auteur < / td >
< td width = "12%" height = "20" > Date < / td >
</tr>
<%
faire
topicId = rs ("topicId")
ArticleId = RS ("ArticleId")
data = rs ("date")
datastr = cSTR (année (données)) et "-" & cSTR (mois (données)) et "-" & cSTR (jour (données)))
auteur = rs ("auteur")
artiCLename = rs ("titre")
topicName = rs ("topic")
Response.Write "< Tr >< TD >< a href = qtopic.asp? topicId =" & topicId & ">" & topicname & "< / a >< / td >"
Response.Write "< Td >< a href = manateearticle.asp? ArticleId =" & ArticleId & "& boardId =" & boardId & ">" & articlename & "< / a >< / td >"
Response.Write "< Td >< a href = qauthor.asp? Auteur =" & auteur & ">" & auteur & "< / a >< / td >"
Response.Write "< TD >" & DATASTR & "< / TD >< / TR >"
rs.movenext
boucle jusqu'à Rs.Eof
%>
</tableau>
< / html >
<%
définir rs = rien
connexion.fermer
définir conn = rien
%>
< / Body >
Lorsque vous cliquez sur le lien de l'article correspondant, vous entrerez la page de traitement de l'article ManageAlecticle.asp:
<%
ArticleId = demande ("ArticleId")
BoardId = Request ("BoardId")
Si session ("Beenthere") <> BoardIdThen Response.redirect "forums.asp"
Définir Conn = Server.CreateObject ("Adodb.Connection")
Conn.open "Driver = {Microsoft AccessDriver (* .mdb)}; dbq =" & server.mappath ("bbssystem.mdb")
Définir cmd = server.createObject ("adodb.command")
Définir CMD.ActiveConnection = Conn
cmd.commandText = "Articles de requête par id"
Redim Param (0)
param (0) = clng (articleId) // Remarque: Clng ne peut pas être ignoré
Set rs = cmd.execcute (, param)
auteur = RS ("AUTORID")
Titre = RS ("Title")
data = rs ("date")
Taux = Rs ("Degré recommandé")
BoardId = RS ("Kanbanid")
topicId = rs ("topicId")
BoardName = RS ("Nom du conseil")
topicName = rs ("nom de sujet")
contenu = rs ("contenu")
contenu = remplacer (contenu, vbcrlf, "< / p >< p >")
contenu = "< p >" & Content & "< / p >"
Définir CMD = rien
%>
< html >
<tête>
< Titre > Document sans titre < / titre >
< meta http-equiv = "contenu-type" contenu = "text / html; charset = gb2312">
</tête>
< corps bgcolor = "# e9e9e4" >
< Table Width = "89%" border = "0" CellSpacing = "0" CellPadding = "0" Align = "Center" >
< tr bgcolor = "# cccccc" >
< TD > Auteur: < Font Color = "# ff3366" >< a href = "qauthor.asp? Auteur = <% = auteur% >" ><% = auteur% > < / a >< / police > Date publiée: < Font Color = "# FF3333" ><% = données% >< / police >
Kanban Board: < Font Color = "# ff3333" >< a href = "qboard.asp? BoardId = <% = boardId% >" ><% = boardname% >< / a >< / police > Propriétaire de la carte Recommandation: < FONT COLOR = "# FF3333"> # TAUX # < / FONT >< / TD >
</tr>
< tr bgcolor = "# cccccc" >
< TD > Titre: < Font Color = "# FF3333" ><% = titre% >
Sujet: < a href = "qtopic.asp? TopicId = <% = topicId% >" > <% = topicname% >< / a > < / police >< / td >
</tr>
< tr valign = "top" >
< TD >
< hr >
< Font Color = "# FF3366" > Contenu de l'article: < / FONT >< Br >
<br>
< Color de police = bleu ><% réponse.
<br>
< hr >
</td>
</tr>
< tr valign = "top" >
< Form Method = "Post" Action = "ManageSult.asp" >
< td height = "18" >
< Table Width = "100%" border = "1" CellSpacing = "1" CellPadding = "1" >
<tr>
< td width = "29%">
< div align = "droite" >
< INPUT TYPE = "HIDDEN" name = "BoardId" Value = "<% = BoardId% >" >
< Input type = "Hidden" name = "topicId" value = "<% = topicId% >" >
< INPUT TYPE = "HIDDEN" NAME = "ArticleId" Value = "<% = ArticleId% >" >
Traitement des articles: < / div >
</td>
< td width = "12%" borderColor = "# 006666"> supprimer:
< Type d'entrée = "radio" name = "gérer" Valeur = 1 >
</td>
< td width = "30%" borderColor = "# 006666"> Publié par:
< Type d'entrée = "radio" name = "manage" value = 2 >
Niveau de recommandation < SELECT NAME = "SELECT" >
< Valeur d'option = "1" > 1 < / Option >
< Value Option = "2" > 2 < / Option >
< Valeur d'option = "3" sélectionné > 3 < / Option >
< Value Option = "4" > 4 < / Option >
< Value Option = "5" > 5 < / Option >
< / SELECT >
</td>
< td width = "20%" borderColor = "# 006666"> Processus plus tard:
< Type d'entrée = "radio" name = "manage" value = 3 >
</td>
< td width = "9%" >
< Input type = "soumi" name = "soumi" value = "ok" >
</td>
</tr>
</tableau>
</td>
</formulaire>
</tr>
</tableau>
</corps>
< / html >
<%
définir rs = rien
connexion.fermer
définir conn = rien
%>
Remarque: cette page est fondamentalement la même que l'article.asp dans le module d'affichage de l'article.
Ensuite, nous devons modifier les parties correspondantes de la base de données en fonction du processus de traitement du modérateur.
<% réponse.buffer = true% >
< html >
<tête>
< Titre > Traitement de l'article < / titre >
< meta http-equiv = "contenu-type" contenu = "text / html; charset = gb2312">
</tête>
< corps bgcolor = "# e9e9e4" >
<%
ArticleId = demande ("ArticleId")
BoardId = Request ("BoardId")
topicId = request ("topicId")
manage = request ("great")
'Acceptez le contenu du formulaire
Response.Write Gérer 'Show Buzhu ID
Si session ("Beenthere") <> BoardIdThen Response.redirect "forums.asp"
Définir Conn = Server.CreateObject ("Adodb.Connection")
Conn.open "Driver = {Microsoft AccessDriver (* .mdb)}; dbq =" & server.mappath ("bbssystem.mdb")
Selon l'opération du modérateur sur la page précédente, le traitement correspondant sera effectué ci-dessous.
Si Clng (demande ("gérer")) = 1 alors
SQL = "Supprimer de la table de contenu où id =" & articleId
Conn.execcute SQL
réponse.WRITE "< H1 > L'article a été supprimé < / H1 >"
Response.write "< a href = > back </a>"
elseif clng (request ("great")) = 2Then
SQL = "Mise à jour de la table de contenu set Publish = true wherad =" & articleId
Conn.execcute SQL
SQL = "Mise à jour Tableau Tableau Nombre d'articles = nombre d'articles + 1where id =" & topicId
Conn.execcute SQL
Response.Write "< H1 > L'article a été publié < / h1 >"
Response.write "< a href = > back </a>"
autre
réponse.
Response.redirect "BoardManager.asp? BoardID =" & embarqué
finir si
%>
</corps>
< / html >
<%
connexion.fermer
définir conn = rien
%>
Après les étapes ci-dessus, toutes les pièces sont essentiellement terminées. Si vous souhaitez pouvoir l'utiliser, vous devez faire plus d'efforts dans la conception de la mise en page, la vérification des données du client, etc. Mais ce sont tous du contenu HTML et ont peu à voir avec ASP, donc je n'entrerai pas dans les détails ici.