Vorwort: Heutzutage gibt es überall im Internet Foren, aber ich frage mich, ob Sie jemals auf eine solche Situation gestoßen sind: Die Suche nach den gewünschten Inhalten in den chaotischen Diskussionsinformationen ist eine sehr zeitaufwändige und arbeitsintensive Sache Will ich kein Forum mehr besuchen? Können wir also eine Prüffunktion zum Inhalt unseres Website-Forums hinzufügen? Das heißt, alle von Internetnutzern im Forum geposteten Artikel werden nicht sofort angezeigt. Sie müssen vom Webmaster oder Moderator überprüft werden. Wenn sie als wertvoll erachtet werden und für eine Empfehlung an andere Internetnutzer erforderlich sind, werden sie veröffentlicht. Andernfalls löschen Sie es, um zu vermeiden, dass Platz verschwendet wird und es ein wenig wie ein Highlight-Bereich aussieht. Auf diese Weise kann Ihr Forum klarere und nützlichere Inhalte bereitstellen als gewöhnliche Foren. Wenn Sie es auf Ihrer Website veröffentlichen, dürfte dies mehr Internetnutzer anlocken. Diese Idee lässt sich durchaus umsetzen, und ich werde im Folgenden kurz vorstellen, wie man sie umsetzt.
Hinweis: Dieser Artikel ist für Leser geeignet, die über gewisse Kenntnisse der ACCESS-Datenbank, HTML und ASP verfügen.
1. Analyse der Forumstruktur
Durch die obige Funktionsanforderungsanalyse können wir die Produktion des Forums in vier Teile unterteilen:
(1) Netizen-Registrierungs- und Verwaltungsmodul: Da der Webmaster oder Moderator eingeführt wird, muss er in der Lage sein, es zu steuern Forum Authentifizieren. Die Funktion dieses Moduls besteht darin, registrierte Internetnutzer zu verwalten und relevante Abfragen bereitzustellen. Fragen Sie beispielsweise alle veröffentlichten Artikel eines bestimmten Autors ab, fragen Sie die zehn Internetnutzer ab, die die meisten Artikel veröffentlicht haben usw. Wenn Ihr Forum nicht sehr groß ist, kann dieses Modul weggelassen werden, um nur die Funktion der Moderatorauthentifizierung zu haben und die Teile über Registrierung und Abfrage zu entfernen.
(2) Artikelanzeigemodul: Zeigt alle Artikel an, die von Moderatoren überprüft und als empfehlenswert erachtet wurden.
(3) Artikelveröffentlichungsmodul: Bietet registrierten Internetnutzern die Möglichkeit, ihre Meinungen zu veröffentlichen und nach der Veröffentlichung auf die Überprüfung durch Moderatoren zu warten.
(4) Artikelüberprüfungsmodul: Moderatoren bearbeiten alle auf der Website veröffentlichten, aber nicht überprüften Artikel und entscheiden, ob sie veröffentlicht oder gelöscht werden.
Nachdem Sie die spezifischen Funktionsanforderungen verstanden haben, können Sie mit der Gestaltung des Forums entsprechend dem Modul beginnen. Natürlich gliedern diese Module die Forenstruktur nur funktional und können eigentlich nicht völlig unabhängig voneinander gestaltet werden. Für solche kleineren Anwendungen ist kein vollständig modularer Aufbau erforderlich. Bei guter Planung kann es einfacher sein, Programmcode direkt zu schreiben.
Generell gibt es zwei Möglichkeiten, ein Forum zu implementieren: über Dateien oder Datenbanken. Relativ gesehen ist die Verwendung einer Datenbank einfacher und effizienter, kann eine bessere Kontrolle über das Forum ermöglichen und kann auch eine gewisse Überprüfung und einen gewissen Schutz für die Daten bieten. Hier verwende ich die ACCESS-Datenbank. Für allgemeine kleine und mittlere Anwendungen sollte ACCESS in der Lage sein, diese Aufgabe zu erledigen.
Aus der obigen Analyse können wir erkennen, dass es vier Tabellen geben sollte. Nachfolgend gebe ich die Struktur jeder Tabelle an.
(1) Autorentabelle (zum Speichern von Autoreninformationen):
ID: Texttyp, erforderlich. Es ist der Codename eines Internetnutzers.
Passwort: Texttyp, erforderlich.
Spitzname: Texttyp, erforderlich.
EMAIL: Texttyp, erforderlich.
Position: Numerischer Typ, erforderlich. -1 steht für normale Internetnutzer, 0 steht für Webmaster. Zahlen größer als 0 stehen für Moderatoren.
Anzahl der Artikel: numerischer Typ, erforderlich. Die Gesamtzahl der von Internetnutzern veröffentlichten Artikel.
Name: Texttyp, optional.
Geschlecht: Texttyp, optional.
Telefon: Texttyp, optional.
(2) Inhaltstabelle (wird zum Speichern spezifischer Artikelinhalte und zugehöriger Informationen verwendet):
ID: Automatische Nummerierung und Indizierung, um die Suche zu beschleunigen.
Kanban-ID: numerischer Typ aus der Kanban-Liste, der das Kanban-Board angibt, zu dem der Artikel gehört.
Themen-ID: Numerischer Typ aus der Thementabelle, der das Thema angibt, zu dem der Artikel gehört.
Autoren-ID: Texttyp aus der Autorentabelle, der den Autor des Artikels angibt.
Datum: Datums-/Uhrzeittyp, der voreingestellte Anfangswert ist die Funktion NOW(), die automatisch die aktuelle Systemzeit als Wert übernimmt.
Titel: Texttyp. Der Titel des Artikels.
Veröffentlichen: Ja/Nein-Typ, „True“ bedeutet, dass der Artikel überprüft wurde und veröffentlicht werden kann; „Nein“ bedeutet, dass der Artikel noch überprüft werden muss.
Empfehlung: Numerischer Typ, der Empfehlungsgrad des Artikels.
Inhalt: Art der Bemerkung, spezifischer Inhalt des Artikels.
Anzahl der Klicks: Zahlentyp, die Anzahl der Klicks auf den Artikel.
(3) Kanban-Liste (wird zum Speichern von Informationen zum Kanban verwendet):
ID: Automatische Nummer. Ebenso wird ein Index dafür festgelegt.
Name: Texttyp, der Name des Boards.
Moderator: Texttyp, ID des Board-Moderators.
Anzahl der Themen: Numerischer Typ, die Anzahl der in der Tafel enthaltenen Themen.
(4) Thementabelle (wird zum Speichern von Informationen zu Themen verwendet):
ID: Automatisch nummerieren und einen Index dafür festlegen.
Titel: Texttyp, der den Themennamen angibt.
Kanban-Board: Zahlentyp aus der Kanban-Board-Liste, der das Kanban-Board angibt, zu dem das Thema gehört.
Anzahl der Artikel: Zahlentyp, die Anzahl der im Thema enthaltenen Artikel.
Alle Tabellen wurden entworfen, aber der Entwurf der Datenbank ist noch nicht abgeschlossen. Daher müssen wir noch Beziehungen zwischen Tabellen herstellen, damit die Datenbank einige Korrelationsprüfungen durchführen kann, um Datenfehler zu vermeiden. Ein weiterer Vorteil des Herstellens von Beziehungen zwischen Tabellen besteht darin, dass damit problemlos komplexe JOIN-Abfragen erstellt werden können.
Wenn wir eine Datenbank in ASP betreiben, verwenden wir normalerweise während der Ausführung generierte Abfragen, die dann zur Interpretation und Ausführung an die Datenbank übergeben werden. Und hier werden wir gespeicherte Abfragen verwenden. Gespeicherte Prozeduren bieten mehr Vorteile als Abfragen zur Ausführungszeit.
Es wird in der Datenbank gespeichert und ist unabhängig vom ASP-Programmcode, wodurch es einfacher zu erstellen und zu ändern ist und die Abfrageeffizienz höher und schneller ist. Es kann debuggt und dann auf der ASP-Seite verwendet werden, wodurch viele Probleme vermieden werden können. Und ASP-Programmcode, der gespeicherte Abfragen verwendet, ist einfacher zu lesen und zu ändern. Vielleicht ärgert sich jeder über die Verwendung von SQL-Abfragen in ASP, insbesondere über Kommas, Semikolons usw., die zu Fehlern führen können, wenn Sie nicht vorsichtig sind. Nachdem Sie gespeicherte Abfragen verwendet haben, müssen Sie sich über diese Probleme keine Gedanken mehr machen. Natürlich gibt es einige Dinge, auf die Sie achten müssen, wenn Sie vorab gespeicherte Programme verwenden. Wie Sie diese verwenden, erkläre ich Ihnen später im Detail. Es ist sehr einfach, in ACCESS ein gespeichertes Programm zu erstellen, daher werde ich hier nicht mehr darauf eingehen. Hier gebe ich nur den SQL-Anweisungsprogrammcode für jede Abfrage an.
Ich habe alle zu verwendenden Abfragen in der Datenbank als vorab gespeicherte Programme gespeichert:
(1) Artikel nach ID abfragen:
SELECT-Thementabelle AS-Themenname, Kanban-Listenname. Inhaltsverzeichnis.*
FROM topic table INNER JOIN (content table INNER JOIN kanban list ON content table.kanban ID = kanban list.ID) ON topic table.ID = content table.topic ID
WHERE (((content table.ID)=[articleid]));
(2) Moderator-Passwortabfrage:
SELECT Kanban list.Board-Besitzer, Autor table.Password
FROM Autorentabelle INNER JOIN Kanban-Liste ON Autorentabelle.ID = Kanban-Liste.Board-Besitzer
WHERE (((kanban list.ID)=[id];
(3) Fragen Sie den Autor ab:
SELECT author table.*
FROM Autorentabelle
WHERE (((author table.ID)=[id]));
(4) Liste der veröffentlichten Artikel:
SELECT [Inhaltstabelle].[ID], [Inhaltstabelle].[Titel], [Inhaltstabelle].[Autoren-ID ] AS Autor, [Inhaltsverzeichnis].[Datum], [Inhaltsverzeichnis].[Empfehlung], [Inhaltsverzeichnis].[Anzahl der Klicks] AS Anzahl der Klicks.
VON Inhaltsverzeichnis
WHERE ((([Inhaltsverzeichnis].[Themen-ID])=[TopicIndex]) Und (([Inhaltsverzeichnis].[Veröffentlicht])=True)
)
;
id, Thema table.ID AS Themen-ID, Thema table.title AS Thema, Inhalt table.title AS Titel, Inhalt table.author ID AS Autor, Inhalt table.date AS Datum
FROM Thementabelle INNER JOIN Inhaltstabelle ON Thementabelle.ID = Inhaltstabelle.Themen-ID
WHERE (((Content table. Publish)=False) AND ((Content table. Kanban ID)=[boardid]));
(5) Themenliste:
SELECT Thementabelle.*, Kanban-Name
FROM Kanban-Liste INNER JOIN Thementabelle ON Kanban-Liste.ID = Thementabelle.kanban
WHERE (((topic table.kanban)=[boardIndex]));
Es gibt auch einige Abfragen, da die meisten davon ähnlich sind, werde ich sie nicht einzeln auflisten.
In der obigen Abfrageanweisung können Sie einige von „[“ und „]“ umgebene Dinge sehen, bei denen es sich um Abfrageparameter handelt. Der Parameterwert muss während der Ausführung angegeben werden. Anschließend wird der Parameterwert in die Abfrageanweisung eingefügt, bevor sie ausgeführt werden kann. Beachten Sie außerdem, dass Sie beim Einrichten dieser INNER JOIN-Abfragen die Beziehung zwischen Tabellen zur Entwurfsansicht hinzufügen müssen, da sonst die INNER JOIN-Abfrageanweisung nicht automatisch generiert werden kann.
Zu diesem Zeitpunkt ist das Datenbankdesign abgeschlossen und die nächste Arbeit ist ASP.
2. Aufbau
1. Um das Hauptformular zu erstellen
, müssen Sie zunächst ein Formular bereitstellen, das es den Internetnutzern ermöglicht, Registrierungsinformationen einzugeben, und werfen wir einen genaueren Blick auf das ASP-Skript, das die Registrierung implementiert.
(1) Ändern Sie das einfache Anführungszeichen in den Informationen in zwei einfache Anführungszeichen und fügen Sie davor und danach einfache Anführungszeichen hinzu
Funktion SqlStr(data)
SqlStr = "'" & Replacement( data,"'", "''" ) & "'"
zur Endfunktion
: Dies ist eine benutzerdefinierte Funktion, die verwendet wird, um einfache Anführungszeichen (') in Benutzereingaben in zwei einfache Anführungszeichen ('') umzuwandeln. In ASP wird eine Zeichenfolge von doppelten Anführungszeichen umgeben, sodass das „'“ oben eine Zeichenfolge mit nur einem einfachen Anführungszeichen darstellt. Der Grund, warum Sie ein einzelnes Anführungszeichen durch zwei einfache Anführungszeichen ersetzen müssen, liegt darin, dass in SQL-Anweisungen einfache Anführungszeichen zur Darstellung von Variablen verwendet werden. Um Verwirrung zu vermeiden, müssen einfache Anführungszeichen in der Zeichenfolge durch zwei einfache Anführungszeichen dargestellt werden. Alle Benutzereingaben müssen als Variablen in die SQL-Anweisung eingebettet werden, daher ist diese Funktion unerlässlich.
(2) Lagervorbereitung
id=Anfrage("id")
Passwort=Anfrage("Passwort")
Nickname=Request("Spitzname")
email=Request("email")
sex=request("sex")
Hinweis: Es ist nicht notwendig, den Inhalt des Benutzereingabeformulars in einer Variablen zu speichern, aber es erleichtert das Lesen und Schreiben.
if Request("name")=""then name=" " else name=request("name")
if Request("phone")=""then phone=" " else phone=request("phone")
Da diese Inhalte nicht ausgefüllt werden müssen, um zu verhindern, dass der Benutzer nichts eingibt und Datenbankbetriebsfehler verursacht werden , es muss sein: Ersetzen Sie nicht ausgefüllte Felder durch Leerzeichen.
(3) Verbindung herstellen
Setze conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Hinweis: In diesem Abschnitt wird eine Datenbankverbindung hergestellt. Der Name der Datenbank lautet bbssystem.mdb . In diesem Abschnitt ist nur die Anwendung der Server.MapPath-Funktion zu beachten. Wenn es sich um ein bestimmtes Verzeichnis handelt, verwenden Sie im Allgemeinen nicht den Verzeichnisnamen direkt, sondern stattdessen die Funktion Server.MapPath. Durch die sinnvolle Nutzung von Funktionen wie Server.MapPath und Request.ServerVariables() können Sie Ihre WEB-Anwendung portabler machen.
Set cmd = Server.CreateObject("ADODB.Command")
(4) Fragen Sie ab, ob der Autor bereits existiert
Legen Sie cmd.ActiveConnection = conn fest
cmd.CommandText = „Abfrageautor“
ReDim param(0) 'Parameter-Array deklarieren
param(0) = CStr(id) ' Cint kann nicht ignoriert werden
Set rs = cmd.Execute(,param)
Hinweis: Dieser Abschnitt wird zum Ausführen des gespeicherten Programms verwendet. Es gibt viele Möglichkeiten, Abfragen in ADO auszuführen, aber für gespeicherte Prozeduren können Sie nur das Command-Objekt verwenden. Erstellen Sie zunächst ein Befehlsobjekt mit dem Namen cmd, setzen Sie dann das Verbindungsverbindungsobjekt auf die ActiveConnection-Eigenschaft des cmd-Objekts, legen Sie den Namen der auszuführenden Abfrage „Abfrageautor“ auf die Eigenschaft CommandText fest und weisen Sie dann Werte zu Abfrageparameter. Wir haben ein Parameterarray param(0) deklariert, da die Abfrage „Abfrageautor“ nur einen Parameter enthält und das Array daher nur eine Komponente hat. Generell gilt, dass bei mehreren Parametern in einer Abfrage ein Parameterarray mit entsprechend vielen Komponenten deklariert werden muss. Und die Reihenfolge, in der die Parameter erscheinen, entspricht der Reihenfolge der Komponenten im Array. Bei der Verwendung der Parameterabfrage sollte besonders darauf geachtet werden, dass die Parametertypen genau übereinstimmen müssen, da sonst ein Fehler auftritt. Daher ist die obige Typkonvertierungsfunktion CStr () unverzichtbar.
wenn nicht (rs.eof oder rs.bof), dann
Response.write „Fehler, die von Ihnen eingegebene ID-Nummer ist belegt, bitte versuchen Sie es mit einer anderen!“
anders
sql = „In die Autorentabelle einfügen (ID, Spitzname, E-Mail, Passwort, Name, Schule, Abteilung, Geschlecht, Telefonnummer) Values(“
sql = sql & SqlStr(id) & ","
sql = sql & SqlStr(Spitzname) & ","
sql = sql & SqlStr(email) & ","
sql = sql & SqlStr(passwort) & ","
sql = sql & SqlStr(name) & ",&", "
sql = sql & SqlStr(sex) & ","
sql = sql & SqlStr(phone) & ")"
conn.Execute sql
verwendet eine SQL-Insert-Anweisung, um Daten in die Datenbank einzufügen. Tatsächlich kann diese Abfrage auch in ein vorgespeichertes Programm umgewandelt und in der Datenbank abgelegt werden :-) Allerdings sieht man im Vergleich auch die Vorteile des vorgespeicherten Programms Es ist schwierig, die Abfrage während der Ausführung zu schreiben.
2. Erstellen Sie das Artikelanzeigemodul.
Wie bereits erwähnt, gehört ein bestimmter Artikel zum Schwarzen Brett und zum Hauptteil. Daher müssen Sie beim Anzeigen von Artikeln die beiden Seiten der Bulletin-Board-Liste und der Themenliste durchgehen, bevor Sie die Liste der Artikel zu einem bestimmten Thema erhalten.
(1) Anzeigeseite der Board-Liste:
<html>
<Kopf>
<Titel>Kanban-Liste</Titel>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</head>
(2) Öffnen Sie die Verbindung und zeigen Sie die Kanban-Liste an
< %Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
sql = „select * from Kanban list“
set rs=conn.execute(sql)
%>
Hinweis: Eine einfache SQL-Abfrage gibt alle Informationen über die Kanban-Tafel an den Datensatz RS zurück. Die folgende Aufgabe besteht darin, den aufgezeichneten Inhalt anzuzeigen und einen Link zu erstellen, um das Thema des Boards auf dem entsprechenden Boardnamen anzuzeigen.
<body bgcolor="#FFFFFF">
< h2 align="center">Kanban list</h2>
<table width="60%" border="0"cellspacing="0" cellpadding="0"align="center">
<tr bgcolor="#FFFFCC">
< td height="35" width="25%">Scanboard-Name</td>
<td height="35" width="21%">Moderator</td>
<td height="35" width="23%">Anzahl der Themen</td>
<td height="35" width="31%">Moderator-Login</td>
</tr>
Hinweis: In diesem Teil wird der Titel jeder Spalte in der Tabelle angezeigt. Hier verwende ich keine einheitliche Funktion zum Anzeigen des Inhalts des RS-Datensatzes, da dies eine bessere Kontrolle über das Erscheinungsbild und den Stil der Tabelle ermöglicht . Verwendung Obwohl das Aufstehen etwas umständlich ist, ist es flexibler.
< %
Tun
boardid=rs("id")
Boardname=rs("Name")
boardmanager=rs("Board-Inhaber")
Response.write "<tr><td><a href=qBoard.asp?boardid="& boardid& "&boardname=" & boardname& ">" & boardname &"< /a>< /td>"
Hinweis: Diese Zeile ist Wichtig: Wenn Sie auf den Namen jedes Boards klicken, können Sie eine Verbindung zu der Seite herstellen, auf der das Thema des Boards angezeigt wird. Der Programmcode sieht etwas umständlich aus. Ich werde ihn aufschlüsseln und Ihnen erklären, und Sie werden es verstehen. Nach dem Klicken fordert der Browser die Seite qBoard.asp mit einem Parameter „boardid“ an, der die ID-Nummer des anzuzeigenden Boards darstellt. Ein Fragezeichen (?) wird verwendet, um die Anforderungsseite und den Parameter zu trennen. Boardid ist die zuvor festgelegte Variable, die die ID-Nummer des entsprechenden Boards enthält. Diese Verbindung enthält auch einen weiteren Parameter Boardname, der zur Übergabe des Boardnamens an die Seite qBoard.asp verwendet wird. Verwenden Sie „&“, um mehrere Parameter zu trennen. Dieser Parameter ist nicht erforderlich, um zu vermeiden, dass boardid erneut zum Abfragen des Boardnamens in qBorad.asp verwendet wird. Im Allgemeinen sollten Datenbankoperationen so wenig wie möglich verwendet werden, was die Leistung von ASP-Seiten verbessern kann. Da die Response.Write-Anweisung Zeichenfolgen als Parameter verwendet, wird das Verbindungszeichen „&“ zwischen den oben genannten Zeichenfolgen und Variablen verwendet. Das Endergebnis der ASP-Seitenerklärung sollte so aussehen
<td>< a href=qBoard.asp?boardid=1&boardname=System Board>System Board</a><td>.
Response.write "< td>< a href=qAuthor.asp?author="&boardmanager & ">" &boardmanager & "< /a></td>"
Response.write "< td>" &rs("Anzahl der Themen") & "< /td>"
Response.write "< td>< a href=managerlogin.asp?boardid="&boardid & ">Board processing< /a></td>< /tr>"
Hinweis: In dieser Tabelle wird zusätzlich zur Verbindung angezeigt Inhaltlich gibt es im Kanban-Theme auch einen Mosaik-Abfrageteil und einen Board-Service-Verarbeitungsteil. Die Moderator-Abfrage kann einfach über qAuthor.asp abgerufen und angezeigt werden. Sagte. Die Board-Verarbeitung wird von der Seite managerlogin.asp übernommen. Dies gehört zum Artikel-Review-Modul, das ich später im Detail erläutern werde.
rs.movenext
Schleife bis rs.eof
%>
Hinweis: Durch eine do...-Schleife werden alle Nachrichten im Datensatz angezeigt.
</Tabelle>
<div align="center"><br>
Klicken Sie auf den Boardnamen, um die Themenliste zu erhalten, klicken Sie auf den Namen des Boardbesitzers, um die Nachrichten des Boardbesitzers anzuzeigen
</div>
</Körper>
</html>
< %
setze rs=nichts
Verbindung schließen
setze conn=nichts
%>
(3) Erstellen Sie die Seite qBaord.asp:
< %
boardid=request("boardid") 'Ruft die von der vorherigen Seite übergebene Board-ID-Nummer ab
Setze conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Setze cmd = Server.CreateObject("ADODB.Command")
Legen Sie cmd.ActiveConnection = conn fest
cmd.CommandText = "Themenliste"
ReDim param(0) //Hinweis: Parameter-Array deklarieren
param(0) = CLng(boardid)//Hinweis: CLng kann nicht ignoriert werden
Setze rs = cmd.Execute( ,param)
%>
<html>
<Kopf>
<Titel>Themenliste</Titel>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</Kopf>
<body bgcolor="#FFFFFF">
< h1 align="center"><%=rs("kanban name")%>Board-Themenliste</h1>
<table width="80%" border="0"cellspacing="0" cellpadding="0"align="center">
<tr bgcolor="#FFFFCC">
<td width="89%" height="21">Theme</td>
<td width="11%" height="21">Anzahl der Artikel</td>
</tr>
< %
Tun
topicid=rs("id")
topicname=rs("title")
sum=rs("Anzahl der Artikel")
Response.write "< tr>< td><a href=qtopic.asp?topicid=" & topicid& "&boardname=" & boardname& ">" & topicname &"< /a>< /td>"
Response.write „< td>“ &sum & „< /td>< /tr>“
rs.movenext
Schleife bis rs.eof
%>
</Tabelle>
</Körper>
</html>
Hinweis: qBoard.asp listet alle Themen in einem bestimmten Forum auf. Nachdem Sie auf den Themennamen geklickt haben, gelangen Sie zur entsprechenden Themenartikelliste. Diese Liste wird durch das ASP-Skript qTopic.asp implementiert. Der Programmcode von Qtopic.asp entspricht im Wesentlichen fast dem von qBoard.asp, es gibt jedoch Unterschiede in den jeweiligen Details, auf die ich hier nicht näher eingehen werde.
(4) Nachdem Sie in der Artikelliste auf den Artikeltitel geklickt haben, gelangen Sie zur Seite zum Durchsuchen des Artikelinhalts Article.asp:
< %
Articleid=request("articleid")
Setze conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver(*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Setze cmd = Server.CreateObject("ADODB.Command")
Legen Sie cmd.ActiveConnection = conn fest
cmd.CommandText = „Artikel nach ID abfragen“
ReDim param(0) 'Deklaration
param(0) = CLng(articleid) ' Cint kann nicht ignoriert werden
Setze rs = cmd.Execute( ,param)
Autor=rs("authorid")
title=rs("title")
data=rs("Datum")
rate=rs("empfohlener Abschluss")
boardid=rs("kanbanid")
topicid=rs("topicid")
Boardname=rs("Boardname")
topicname=rs("Themenname")
content=rs("content")
content=replace(content,vbCrlf,"</p><p>")
content="< p>" & content& "< /p>"
Hinweis: Das Inhaltsfeld enthält Text vom Typ Memo, der Zeilenumbrüche enthalten kann. Bei der Anzeige von HTML muss das Newline-Zeichen (also die vbCrlf-Konstante) durch das HTML-Absatzsymbol ersetzt werden. Auf diese Weise wird das ursprüngliche Eingabeformat durch die Verbindung zwischen Absätzen nicht gestört. Wenn Sie das Design verbessern möchten, können Sie CSS verwenden, um das <P>-Tag zurückzusetzen und sein test-indent-Attribut so festzulegen, dass am Anfang jedes Absatzes ein Leerzeichen entsteht.
(5) Addieren Sie eins zur Anzahl der Klicks
sql="Inhaltstabelle aktualisieren. Anzahl der Klicks festlegen=Anzahl der Klicks+1Where ID=" & Artikel-ID
conn.execute sql
Hinweis: Hier gibt es eine SQL-Anweisung. Wenn die Seite angezeigt wird, wird das Klickanzahlfeld in der entsprechenden Tabelle um eins erhöht, sodass die Anzahl der Artikelaufrufe gezählt und der Reihe nach eingestuft werden kann. Als ich die Artikelanweisung ausführte, stellte ich Folgendes fest: Ursprünglich sollte der eingebettete Variablenname in der SQL-Anweisung durch einfache Anführungszeichen unterschieden werden, aber ich habe der Artikel-ID-Variablen hier keine einfachen Anführungszeichen hinzugefügt, und sie wurde tatsächlich übergeben, und ich schreibe so hat in der Vergangenheit immer zu Fehlern geführt. Ich frage mich, ob das an der neuen Version von ADO liegt.
setze cmd=nichts
%>
<html>
<Kopf>
<Titel>Unbenanntes Dokument</Titel>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</Kopf>
<body bgcolor="#E9E9E4">
<table width="89%" border="0"cellspacing="0" cellpadding="0"align="center">
<tr bgcolor="#CCCCCC">
<td>Autor:<font color="#FF3366"><a href="qauthor.asp?author=< %=author%>">< %=author%> < /a>< /font>Veröffentlichungsdatum: < Schriftfarbe="#FF3333"><%=data%>< /font>
Kanban-Board:< Schriftfarbe="#FF3333"><a href="qboard.asp?boardid=< %=boardid%>">< %=boardname%>< /a>< /font>Empfehlung des Board-Eigentümers:< Schriftfarbe="#FF3333">#rate#</font>< /td>
</tr>
<tr bgcolor="#CCCCCC">
<td>Title:<font color="#FF3333"><%=title%>
Thema: < a href="qtopic.asp?topicid=<%=topicid%>"> < %=topicname%>< /a> < /font>< /td>
</tr>
<tr valign="top">
<td>
<Std>
< Schriftfarbe="#FF3366">Artikelinhalt: < /font>< br>
<br>
< Schriftfarbe=blau>< %response.writecontent%>< /font>
<br>
<br>
</td>
</tr>
<tr valign="top">
<td height="18">
<table width="50%" border="0"cellspacing="0" cellpadding="0"align="right" bgcolor="#CCCCCC">
<tr>
< td width="0%"> < /td>
<td width="65%">Über dieses Thema<a href="submit.asp?topicid=< %=topicid%>&boardid=<%=boardid%>">Hinterlasse einen Kommentar< /a></td>
Diese Verbindung ermöglicht es Internetnutzern, ihre eigene Meinung zum Thema dieses Kommentars zu äußern. Darüber wird im nächsten Modul gesprochen, daher werde ich es hier nicht erwähnen.
</tr>
</Tabelle>
</td>
</tr>
</Tabelle>
</Körper>
</html>
< %
setze rs=nichts
Verbindung schließen
setze conn=nichts
%>
Zu diesem Zeitpunkt ist auch der Artikelanzeigeteil abgeschlossen. Werfen wir einen Blick darauf, wie der Artikelveröffentlichungsteil implementiert wird.
3. Erstellen Sie den Artikelveröffentlichungsteil.
Das Artikelveröffentlichungsmodul besteht nur aus zwei Seiten: Eine ist die zuvor erwähnte Datei „submit.asp“, die zur Bereitstellung des Eingabeformulars verwendet wird, und die andere ist „subresult.asp“, die zur Verarbeitung des Formulars verwendet wird Eingang. Die vorherige Seite ist im Grunde ein HTML-Formular. Es gibt nicht viel zu besprechen. Schauen wir uns den Inhalt von subresult.asp an.
<html>
<Kopf>
<Titel>Artikel veröffentlichen</Titel>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</Kopf>
<body bgcolor="#FFFFFF">
< %
Autor=Anfrage("Autor")
passwort=request("passwort")
topicid=request("topicid")
boardid=request("boardid")
content=request("content")
title=request("title")
Hinweis: In diesem Abschnitt wird der insubmit.asp übermittelte Tabelleninhalt entnommen und in die entsprechende Variable eingefügt.
<html>
<Kopf>
<Titel>Artikel veröffentlichen</Titel>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</Kopf>
<body bgcolor="#FFFFFF">
< %
Autor=Anfrage("Autor")
passwort=request("passwort")
topicid=request("topicid")
boardid=request("boardid")
content=request("content")
title=request("title")
(1) Abfrage, ob der Autor existiert
cmd.CommandText = "wählen Sie * aus der Autorentabelle aus, wobei id='" & Autor &"'"
Setze rs = cmd.Execute()
(2) Überprüfen Sie die Berechtigungen
cmd.CommandText = "wählen Sie * aus der Autorentabelle aus, wobei id='" & Autor &"'"
Set rs = cmd.Execute()
Hinweis: In diesem Abschnitt werden die Berechtigungen des Autors überprüft und Fehler entsprechend behandelt, wenn das Konto nicht existiert oder das Passwort falsch ist. Hier sehen Sie die Verwendung von „response.end“, mit dem das aktuelle ASP-Skript beendet wird. In Kombination mit if-Anweisungen können erwartete Fehler im Programm behandelt werden. In einer guten WEB-Anwendung ist die Fehlerbehandlung unerlässlich.
(3) Ändern Sie das einfache Anführungszeichen in den Informationen in zwei einfache Anführungszeichen und fügen Sie davor und danach einfache Anführungszeichen hinzu
Funktion SqlStr(data)
SqlStr = "'" & Replacement( data,"'", "''" ) & "'"
Funktion beenden
'In Datenbank schreiben
sql = "In die Inhaltstabelle einfügen (Board-ID, Themen-ID, Autoren-ID, Titel, Inhalt)Werte( "
sql = sql & SqlStr(topicid) & ","
sql = sql & SqlStr(boardid) & ","
sql = sql & SqlStr(author) & ","
sql = sql & SqlStr(title) & ","
sql = sql & SqlStr(content) & ")"
conn.SQL ausführen
%>
<h2>Der Artikel wurde an die Datenbank gesendet und kann angezeigt werden, nachdem der Moderator ihn überprüft hat <h2>
</Körper>
</html>
Zu diesem Zeitpunkt wurde der Artikel in der Datenbank gespeichert. Es kann jedoch nicht sofort angezeigt werden und erfordert die Zustimmung des Moderators. Werfen wir als Nächstes einen Blick auf den Verwaltungsteil des Forums.
4. Der Verwaltungsteil des Forums
ist der Kern unseres Forums, aber seine Implementierung ist nichts Besonderes. Es sind immer noch die gleichen alten Dinge: Formularverarbeitung, Datenbankabfrage und die Verwendung von ASP, um sie organisch zu kombinieren. Beim Aufrufen des Artikelüberprüfungsmodus (der zuvor erwähnten Board-Verarbeitung) sollte es am wichtigsten sein, die Identität des Moderators zu überprüfen. Werfen wir einen Blick auf die Moderator-Login-Seite:
< %
boardid=request("boardid")
(Hinweis: Die Board-ID wird von der Verbindung zu dieser Seite übergeben und ist die ID des zu verarbeitenden Boards. Nur dadurch können wir wissen, welches Board verarbeitet wird.)
Setze conn = erver.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Setze cmd = Server.CreateObject("ADODB.Command")
Legen Sie cmd.ActiveConnection = conn fest
cmd.CommandText = „Abfrage des Moderatorpassworts“
ReDim param(0)
param(0) = CLng(boardid) //Hinweis: CLng kann nicht ignoriert werden
Setze rs = cmd.Execute( ,param)
boardmanager=rs("Board-Inhaber")
setze cmd=nichts
%>
<html>
<Kopf>
<Titel>Unbenanntes Dokument</Titel>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</Kopf>
<body bgcolor="#FFFFFF">
< p>Nur der Boardbesitzer < %=boardmanager%> kann diesen Ort betreten </p>
<p>Bitte geben Sie das Bestätigungskennwort ein. Um die Authentifizierung aufrechtzuerhalten, aktivieren Sie bitte die Cookies Ihres Browsers. </p>
<form method="post" action="managerloginrest.asp">
<Eingabetyp="Passwort" Name="Passwort">
< input type="hidden" name="boardid"value=< %=boardid%>>
<input type="submit" name="Submit"value="OK">
</form>
Hinweis: Diese Seite dient nur der Anmeldung. Nachdem Mozhu das Passwort eingegeben hat, kann keine Verifizierung durchgeführt werden. Stattdessen wird die Verifizierungsarbeit auf der nächsten Seite durchgeführt. Tatsächlich können die Passworteingabe und die Überprüfung auf einer Seite durchgeführt werden, die strukturelle Anordnung des Programmcodes ist jedoch etwas mühsam.
</Körper>
</html>
< %
setze rs=nichts
Verbindung schließen
setze conn=nichts
%>
Nachdem die Moderator-ID und das eingegebene Passwort erhalten wurden, folgt die Überprüfungsarbeit managerloginrest.asp Es akzeptiert den Inhalt des Formulars in der obigen Datei und führt die entsprechende Verarbeitung durch:
< %
Response.buffer=true
Hinweis: Legen Sie den Puffer so fest, dass er verwendet werden kann. Im Allgemeinen sollte dieses Element zum Header jeder ASP-Seite hinzugefügt werden, um die Leistung der ASP-Seite zu verbessern. Nach dem Öffnen des Puffers gibt es in ASP einige entsprechende Sonderverwendungen, die später erwähnt werden.
boardid=request("boardid")
passwort=request("passwort")
Setze conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Setze cmd = Server.CreateObject("ADODB.Command")
Legen Sie cmd.ActiveConnection = conn fest
cmd.CommandText = „Abfrage des Moderatorpassworts“
ReDim param(0) 'Deklaration
param(0) = CLng(boardid)//Hinweis: CLng kann nicht ignoriert werden
Setze rs = cmd.Execute( ,param)
boardmanager=rs("Board-Inhaber")
wenn passwort<>rs("passwort")dann %>
<html>
<Kopf>
<Titel>Authentifizierung</Titel>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312">
</Kopf>
<body bgcolor="#FFFFFF">
Falsches Passwort</body>
</html>
< %
anders
session("beenthere")=boarded
Hinweis: Die Verwendung von Session zur Wahrung der Identität des Moderators erfordert, dass die Cookies des Client-Browsers aktiviert sind. Weil die Sitzung über Cookies implementiert wird. Weisen Sie hier der Sitzungsvariablen beenthere die Board-ID zu, um anzuzeigen, dass der Moderator die Identitätsauthentifizierung bestanden hat. Überprüfen Sie auf jeder nachfolgenden Versionsverarbeitungsseite, ob beenthere mit der entsprechenden Versions-ID übereinstimmt.
url="boardmanager.asp?boardid="& boardid
Response.redirect-URL-
Ergänzung: Als ich ASP zum ersten Mal lernte, war ich immer verwirrt von der Response.redirect-Methode und war damit unzufrieden. Lassen Sie mich Ihnen nun einige Techniken erklären. Bevor Sie es verwenden, müssen Sie „response.buffer=true“ übergeben, damit die ASP-Seite den Puffer verwenden kann. Zu diesem Zeitpunkt wird ASP vor der Interpretation in HTML-Programmcode im Puffer abgelegt und nicht direkt an den Client-Browser gesendet. Eine weitere Sache, die Sie wissen müssen, ist: Vor der Verwendung von Response.redirect kann kein tatsächlicher HTML-Programmcode an den Client-Browser gesendet werden, da sonst ein Fehler auftritt. Natürlich gibt es Problemumgehungen. Wenn der HTML-Programmcode vor Response.redirect interpretiert wurde, können Sie den Puffer mit der Methode Response.clear löschen und ihn dann zurücksetzen.
Ende wenn
%>
Hinweis: Das Folgende ist das Rücksetzziel, nachdem die obige Authentifizierung bestanden wurde: boardmanager.asp. Es werden alle Artikel aufgelistet, die verarbeitet wurden.
< %
boardid=request("boardid")
if session("beenthere")<>boardidthen Response.redirect "forums.asp"
Hinweis: Hier wird die Identität des Moderators überprüft, da sie durch Cookies im Browser von Bamboo markiert wurde und wir sie jetzt übergeben können seesion Identifizieren wir uns der Moderator. Wenn die Tags nicht übereinstimmen, wird über „response.redirect“ zur ursprünglichen Anmeldeseite zurückgekehrt. Wenn das Browser-Cookie des Moderators nicht aktiviert ist, ist der Wert von seesion („beenthere“) leer und diese Seite ist ebenfalls nicht zugänglich.
Setze conn = Server.CreateObject("ADODB.Connection")
conn.Open "driver={Microsoft AccessDriver (*.mdb)};dbq=" & Server.MapPath("bbssystem.mdb")
Setze cmd = Server.CreateObject("ADODB.Command")
Legen Sie cmd.ActiveConnection = conn fest
sql="Name aus der Board-Liste auswählen whereid=" & boardid
set rs=conn.execute(sql)
Boardname=rs("Name")
cmd.commandtext="Unveröffentlichte Artikelliste"
ReDim param(0)
param(0) = CLng(boardid)//Hinweis: Clng kann nicht ignoriert werden
Setze rs = cmd.Execute( ,param)
setze cmd=nichts
%>
<html>
<Kopf>
<title>Publikationsbearbeitung</title>
< meta http-äquiv = "content-type" content = "text/html; charSet = gb2312">
</Kopf>
< Body Bgcolor = "#ffffff" >
< H1 Align = "Center" ><%= Boardname%> öffentliches Management < /h1 >
< hr >
< %
Wenn Rs.eof oder Rs.Bof dann Antwort "Write" < H2 > Es gibt keine Artikel, die </h2 > > "verarbeiten können."
Antwort.end
%>
Hinweis: Wenn keine neuen Artikel von den Internetnutzern veröffentlicht werden, wird eine entsprechende Eingabeaufforderung angegeben und die Antwort verwendet, um die Anzeige dieser Seite zu beenden.
< Tabellenbreite = "90%" Border = "0" cellspacing = "0" cellpadding = "0" align = "center" >
< tr bgcolor = "#ffffcc" >
< td width = "40%" Height = "20" > Thema </td >
< td width = "40%" Height = "20" > Artikel Titel </td >
< td width = "8%" Höhe = "20" > Autor </td >
< td width = "12%" Höhe = "20" > Datum </td >
</tr>
< %
Tun
topicID = rs ("topicID")
articleId = rs ("articleId")
Data = rs ("Datum")
DataStr = CSTR (Jahr (Daten)) & "-" & cstr (monat (Daten)) & "-" & cstr (Tag (Daten))
Autor = RS ("Autor")
Articlename = RS ("Titel")
topicname = rs ("Thema")
Antwort.Write "< tr >< td >< a href = qtopic.asp? topicid =" & topicid & ">" & topicname & "< /a >< /td >"
Antwort.Write "< td >< a href = Managartikel.asp? ayicleId =" & artikelID & "& boardid =" & boardid & ">" & Articlename & "< /a >< /td >"
Antwort.Write "< td >< a href = qauthor
Antwort.Write "< td >" & datastr & "< /td >< /tr >"
rs.movenext
Schlaufe bis Rs.Eof
%>
</Tabelle>
</html >
< %
setze rs=nichts
conn.close
Setzen Sie Conn = nichts
%>
</body >
Wenn Sie auf den Link des entsprechenden Artikels klicken, geben Sie die Artikelverarbeitungsseite Managingarticle.asp ein:
< %
articleId = request ("articleId")
BoardID = Anfrage ("BoardID")
IF Session ("reEnthere") <> Boardthen -Antwort.Redirect "Forums.asp"
Setzen Sie conn = server.createObject ("adodb.Connection").
conn.open "triver = {microsoft accessDriver (*.mdb)}; dbq =" & server.mappath ("bbsSystem.mdb"))
Setzen Sie cmd = server.createObject ("adodb.command")
Setzen Sie CMD.ActiveConnection = conn
CMD.Commandtext = "Abfragen von Artikeln nach ID"
REDIM -Param (0)
Param (0) = clng (articleId) // Hinweis: CLNG kann nicht ignoriert werden
Setzen Sie rs = cmd.execute (, param)
Autor = RS ("Authorid")
Titel = RS ("Titel")
Data = rs ("Datum")
rate = rs ("Empfohlener Abschluss")
BoardID = RS ("Kanbanid")
topicID = rs ("topicID")
boardname = rs ("Board Name")
topicname = rs ("themenname")
content = rs ("content")
content = ersetzen (Inhalt, vbcrlf, "</p >< p >")
content = "< p >" & content & "< /p >"
Setzen Sie CMD = nichts
%>
< html >
<Kopf>
< Titel > Untitled Dokument </Titel >
< meta http-äquiv = "content-type" content = "text/html; charSet = gb2312">
</Kopf>
< Body Bgcolor = "#e9e9e4" >
< Tabellenbreite = "89%" Border = "0" cellspacing = "0" cellpadding = "0" align = "center" >
< tr bgcolor = "#CCCCCC" >
< td > Autor: < font color = "#ff3366" >< a href = "qauthor < font color = "#ff3333" ><%= Daten%>< /Schriftart >
Kanban Board: < Schriftart Color = "#ff3333" >< a href = "qboard font color = "#ff3333">#rate#< /font >< /td >
</tr>
< tr bgcolor = "#CCCCCC" >
< td > Titel: < font color = "#ff3333" ><%= Titel%>
Thema: < a href = "qtopic
</tr>
< Tr Valign = "Top" >
< td >
< hr >
< font color = "#ff3366" > Artikelinhalt: < /Schriftart >< br >
<br>
< Schriftfarbe = blau >< %Antwort.WriteContent %>< /Schriftart >
<br>
< hr >
</td>
</tr>
< Tr Valign = "Top" >
< Formmethode = "post" action = "Manageresult.asp" >
< td height = "18" >
< Tabellenbreite = "100%" Border = "1" cellspacing = "1" cellpadding = "1" >
<tr>
< td width = "29%">
< Div Align = "Right" >
< Eingabe type = "Hidden" name = "boardID" value = "< %= BoardID %>" > > >
< Eingabe type = "Hidden" name = "topicID" value = "< %= topicId %>" >
< Eingabe type = "Hidden" name = "artikelID" value = "< %= artikelId %>" > > >
Artikelverarbeitung: < /div >
</td>
< td width = "12%" BorderColor = "#006666"> Löschen:
< Eingabe type = "Radio" name = "verwalten" Wert = 1 >
</td>
< td width = "30%" borderColor = "#006666"> Gepostet von:
< Eingabe type = "Radio" name = "verwalten" Wert = 2 >
Empfehlungsstufe < name = "auswählen" >
< Option Value = "1" > 1 </Option >
< Option Value = "2" > 2 </Option >
< Option Value = "3" ausgewählt > 3 </Option >
< Option Value = "4" > 4 </Option >
< Option Value = "5" > 5 </Option >
</auswählen >
</td>
< td width = "20%" BorderColor = "#006666"> später Prozess:
< Eingabe type = "Radio" name = "verwalten" Wert = 3 >
</td>
< td width = "9%" >
< input type = "surug" name = "surug" value = "OK" >
</td>
</tr>
</Tabelle>
</td>
</form>
</tr>
</Tabelle>
</Körper>
</html >
< %
setze rs=nichts
conn.close
Setzen Sie Conn = nichts
%>
HINWEIS: Diese Seite ist im Grunde genauso wie Artikel.
Als nächstes müssen wir die entsprechenden Teile der Datenbank gemäß dem Verarbeitungsprozess des Moderators ändern.
<%Antwort.Buffer = True%>
< html >
<Kopf>
< Titel > Artikelverarbeitung </Titel >
< meta http-äquiv = "content-type" content = "text/html; charSet = gb2312">
</Kopf>
< Body Bgcolor = "#e9e9e4" >
< %
articleId = request ("articleId")
BoardID = Anfrage ("BoardID")
topicID = request ("topicId")
verwalten = request ("verwalten")
'Akzeptieren Sie Forminhalte
Response.write verwalten 'Show Buzhu ID
IF Session ("reEnthere") <> Boardthen -Antwort.Redirect "Forums.asp"
Setzen Sie conn = server.createObject ("adodb.Connection").
conn.open "triver = {microsoft accessDriver (*.mdb)}; dbq =" & server.mappath ("bbsSystem.mdb"))
Nach dem Betrieb des Moderators auf der vorherigen Seite wird die entsprechende Verarbeitung unten durchgeführt.
Wenn clng (request ("verwalten")) = 1 dann
sql = "Aus Inhaltstabelle löschen wobei ID =" & articleId
Conn.execute SQL
Antwort.Write "< H1 > Artikel wurde gelöscht </h1 >"
response.write "< a href = > zurück </a>"
elseif clng (request ("verwalten")) = 2Then
SQL = "Inhaltstabelle Aktualisieren Sie Set Publish = true WhereId =" & articleId
Conn.execute SQL
SQL = "Topic -Tabelle Aktualisieren Sie Anzahl der Artikel = Anzahl der Artikel+1Where ID =" & topicID
Conn.execute SQL
Antwort.Write "< H1 > Artikel wurde veröffentlicht </h1 >"
response.write "< a href = > zurück </a>"
anders
Antwort.Clear
response.redirect "boardManager.asp? boardId =" & Boarded
Ende wenn
%>
</Körper>
</html >
< %
conn.close
Setzen Sie Conn = nichts
%>
Nach den obigen Schritten werden alle Teile im Grunde genommen abgeschlossen. Wenn Sie es verwenden möchten, müssen Sie mehr Aufwand in Layout -Design, Client -Datenüberprüfung usw. einsetzen. Aber das sind alles HTML -Inhalt und haben wenig mit ASP zu tun, also werde ich hier nicht auf Details eingehen.