Geschrieben von: Klaus Aschenbrenner
Kategorie: Datenbank
This printed page brought to you by AlphaSierraPapa
Willkommen zum 1. Teil dieser 3-teiligen Serie. In diesem Artikel möchte ich Ihnen zeigen, wie ein Besucher einer Website eine Supportanfrage mittels Formular in eine Datenbank posten kann. Im 2. Teil dieser Serie werde ich Ihnen dann näherbringen, wie ein Supportmitarbeiter diese Anfrage bearbeiten und beantworten kann. Schlußendlich werden Sie im 3. Teil dann sehen, wie aus diesen Supportanfragen und Supportantworten eine FAQ aufgebaut werden kann.
Im Download zu diesem Artikel erhalten Sie sowohl eine Access Datenbank als auch das SQL Script für die notwendige Tabelle in SQL Server.
Als erstes möchte ich Ihnen in der nachfolgenden Grafik zeigen, wie das Formular für die Supportanfragen aussehen wird:
Bild 1: Formular für die Supportanfrage
Der Benutzer muß seine Email-Adresse und sein Problem eingeben. Die beiden anderen Felder, nämlich der Name und das Programm, welches das Problem verursacht, sind nicht zwingend notwendig. Damit sichergestellt wird, daß die Email-Adresse und das Problem angegeben worden ist, werden diese beiden Felder mit Hilfe der JavaScript-Funktion "ValidateFields" überprüft, ob sie einen Wert enthalten. Dies geschieht in den Zeilen 8 bis 28 in der Datei submit.html.
<SCRIPT LANGUAGE="JavaScript"> <!-- function ValidateFields() { var Formular; var bReturn = true; Formular = document.SupportForm; // Ueberpruefen, ob eine EMail-Adresse angegeben wurde if (Formular.EMail.value.length == 0) { window.alert("Bitte geben Sie eine EMail-Adresse an!"); bReturn = false; } // Ueberpruefen, ob ein Problem angegeben wurde if (Formular.Problem.value.length == 0) { window.alert("Bitte geben Sie das Problem an!"); bReturn = false; } return(bReturn); } // --> </SCRIPT>
Die Überprüfung wird clientseitig durchgeführt, damit die Daten nicht zum Server transportiert, dort überprüft und bei einem Problem wieder zum Client zurück transportiert werden müssen. Zusätzlich wird natürlich eine serverseitige Validierung durchgeführt (siehe das Codelisting für submit.asp).
Nachdem Sie oben den Aufbau des Formulars gesehen haben, können wir nun daraus unser Tabellenschema ableiten. Es sieht folgendermaßen aus:
Bild 2: Tabellenschema in SQL Server 7.0
Bild 3: Tabellenschema in Access 2000
Die ID enhält einen eindeutigen Wert für die Supportanfrage. Sie wird, neben der eindeutigen Kennzeichnung jedes Datensatzes, später noch für den Aufbau der FAQ-Datenbank gebraucht. Die anderen 4 Felder entsprechen den Feldern des Formulars. Wenn die Felder durch die JavaScript-Funktion "ValidateFields" überprüft wurden, wird das Formular an die ASP-Seite "submit.asp" weitergeleitet, wo jetzt die Supportanfrage in die Datenbank gespeichert wird.
Den Ablauf des Informationsflusses über die verschiedenen Dateien und die Speicherung in der Datenbank habe ich in der folgenden Grafik dargestellt:
Bild 4: Ablauf von Datentransport und -speicherung
Hier nochmals die Erklärung des Ablaufs:
Als erstes werden die Daten in das Formular eingegeben. Anschließend werden sie von der vorher schon besprochenen JavaScript-Funktion überprüft und anschließend an das ASP-Script in der Datei "submit.asp" weitergeleitet. Dieses Script speichert dann die Supportanfrage in der Datenbank.
Die Speicherung der Supportanfrage in die Datenbank übernimmt die ASP-Datei "submit.asp". Hier speichere ich nicht wie üblich die Daten in einer Accessdatenbank, sondern in einer SQL-Datenbank, damit Sie einmal sehen, wie einfach man mit Hilfe von ASP auf eine SQL-Datenbank zugreifen kann. Der Connectionstring für den Verbindungsaufbau zur SQL-Datenbank lautet wie folgt:
"Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa; Initial Catalog=Support;Data Source=localhost"
Dem Attribut Provider weisen Sie den SQL-OLEDB-Provider SQLOLEDB zu, dem Attribut User ID müssen Sie ein Benutzerkonto zuweisen (hier ist dies das Standardbenutzerkonto von SQL-Server, nämlich sa). Als nächstes müssen Sie Initial Catalog den Datenbanknamen zuweisen und schlußendlich erhält das Attribut Data Source den Namen des SQL-Servers (in diesem Fall localhost).
So einfach kann man auf eine SQL-Datenbank mit Hilfe von ADO (ActiveX Data Objects) und ASP zugreifen!
Der Connectionstring für eine Accessdatenbank, die im Stammverzeichnis auf dem Webserver liegt, würde wie folgt lauten:
"Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & Server.MapPath("Support.mdb")
So kann man einfach durch Austauschen des Connectionstrings die Datenbank-Verbindung zum Beispiel von einem SQL-Server zu einer Access-Datenbank ändern.
Bei der Datenbankverbindung sind noch die Eigenschaften CursorType, CursorLocation und Locktype des Recordsets zu beachten. Die Eigenschaft CursorType gibt den Typ des Cursors an. Es gibt folgende Einstellungen:
In unserem Beispiel habe ich mich für die Einstellung adOpenStatic entschieden, weil sie eine gute Perfomance bietet und das Einfügen von neuen Datensätzen direkt in die Tabelle mittels AddNew Kommando erlaubt.
Die Eigenschaft CursorLocation gibt an, ob der Datenbankcursor clientseitig oder serverseitig gehalten wird. Es gibt folgende Einstellungen:
Hier habe ich mich für einen clientseitigen Datenbankcursor entschieden, da dieser, im Gegensatz zum serverseitigen Cursor, die Recordset Methoden Upate und UpdateBatch unterstützt.
Die letzte Eigenschaft, nämlich Locktype gibt den Typ des geöffneten Recordsets an. Folgende Einstellungen stehen zur Auswahl:
Hier fiel meine Wahl auf adLockOptimistic, da dadurch erst das Einfügen eines neuen Datensatzes in ein Recordset mittels AddNew und Update Methode des ADO Recordset Objektes ermöglicht wird!
Nachdem wir nun unsere SQL-Datenbankverbindung aufgebaut haben, können wir mit Hilfe von ADO die Supportanfrage in der Tabelle Support speichern.
<% @ LANGUAGE="VBSCRIPT" ENABLESESSIONSTATE=False %> <% Dim strName, strEMail, strProgramm, strProblem, tempID Dim rsRecordset, strConnectionString, strSQL, cnnConnection ' Informationen aus dem Formular ermitteln strName = Trim(Request.Form("Name")) strEMail = Trim(Request.Form("EMail")) strProgramm = Trim(Request.Form("Programm")) strProblem = Trim(Request.Form("Problem")) ' Ueberpruefung der Felder If strEMail = "" Or strProblem = "" Then Response.Write "Bitte füllen Sie alle notwendigen Felder aus" Else ' Tabelle oeffnen Set rsRecordset = Server.CreateObject("ADODB.Recordset") ' Connectionstring fuer SQL Server Datenbank ' localhost gegebenenfalls gegen den Computernamen austauschen strConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;" & _ "User ID=sa;Initial Catalog=Support;Data Source=localhost" ' Connectionstring fuer Access Datenbank ' strConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;" & _ ' "Persist Security Info=False;Data Source=" & _ ' Server.MapPath("Support.mdb") strSQL = "SELECT * FROM Support WHERE ID = 0" rsRecordset.CursorType = 3 rsRecordset.CursorLocation = 3 rsRecordset.LockType = 3 rsRecordset.Open strSQL, strConnectionString ' Der Access Provider erlaubt keine Strings der Laenge 0 als Werte If strName = "" Then strName = " " End If If strProgramm = "" Then strProgramm = " " End If ' Supportanfrage speichern ' Id wird automatisch von der Datenbank generiert rsRecordset.AddNew rsRecordset.Fields("Name") = strName rsRecordset.Fields("EMail") = strEMail rsRecordset.Fields("Programm") = strProgramm rsRecordset.Fields("Problem") = strProblem rsRecordset.Update rsRecordset.Close Set rsRecordset = Nothing End If %>
Mit Hilfe des ADO-Befehls AddNew wird ein neuer Datensatz an die Tabelle angehängt. Anschließend wird mit Hilfe der Fieldsauflistung den Feldern des neuen Datensatzes die entsprechenden Werte zugewiesen. Zuletzt wird der Datenbankzeiger mit dem Befehl Update vom clientseitigen Recordsetcursor in die Datenbank geschrieben. Außerdem wird von der Datenbank jeder Supportanfrage eine eindeutige ID zugewiesen.
Sie haben im 1. Teil meiner 3-teiligen Serie gesehen, wie Sie eine Supportanfrage in einer SQL-Datenbank speichern können. Dabei haben Sie gelernt, wie man die Gültigkeit der Formulareingabefelder clientseitig überprüft, damit die Daten nicht umsonst zum Server gesendet werden müssen.
Des weiteren haben Sie gesehen, daß man zum Beispiel nur durch das Verwenden des geeigneten Connectionstrings über einen OLE DB Provider eine Datenbankverbindung zu einer Accessdatenbank oder zu einem SQL-Server aufbauen kann. Es ist keine einzige andere Quellcodeänderung dafür notwendig.
In den nächsten beiden Artikeln werden Sie dann sehen, wie ein Supportmitarbeiter eine Supportanfrage beantworten kann, und wie man daraus eine FAQ-Datenbank aufbauen kann.
This printed page brought to you by AlphaSierraPapa
Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000915.zip
Eine Supportdatenbank in ASP erstellen - Teil 2
http:/www.aspheute.com/artikel/20010214.htm
©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.