Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs

Eine Supportdatenbank in ASP erstellen (1/3)

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.

Eingabe der Supportanfrage

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 Tabelle habe ich einfach Support genannt. Anschließend hier nochmals die Feldbeschreibungen mit den entsprechenden Datentypen (SQL Server 7.0 und Access 2000 Datentypen sind angegeben):

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.

Speicherung der 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.

Schlußbemerkung

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

Download des Codes

Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000915.zip

Verwandte Artikel

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.