Geschrieben von: Christoph Wille
Kategorie: Datenbank
This printed page brought to you by AlphaSierraPapa
Willkommen zum ersten Artikel in einer Serie von insgesamt drei. Das Ziel ist es, am Ende der Serie ein voll funktionsfähiges Gästebuch mit ASP und ADO zu erstellen. Im ersten Artikel beschäftigen wir uns mit dem Datenbankdesign und dem Erstellen eines Eintrages in das Gästebuch (Teil 2 behandelt dann die Ausgabe, und Teil 3 die Administration des Gästebuchs).
Bevor ich mit dem Datenbankdesign beginne, sehen wir uns einmal ein typisches Eingabeformular für ein Gästebuch an:
Der Benutzer muß Name und Emailadresse angeben, die Angabe der Homepage beziehungsweise eines Kommentars ist freiwillig. Um das Formular einfach zu halten, habe ich auf die Überprüfung der Eingabe vor dem Abschicken des Formulars an den Server verzichtet, man kann dies allerdings leicht zum Sourcecode mittels JavaScript Routinen anfügen.
Auf diesem Bildschirmphoto sind bereits vier Felder zu sehen, die in der Datenbank ebenfalls abgelegt werden müssen: Name, Emailadresse, Homepage und Kommentar.
Neben diesen explizit abgefragten Benutzereingaben kann man allerdings auch einiges an implizit über den Benutzer erhaltenen Information ablegen. So zum Beispiel schickt jeder Browser seine Kennung (User Agent Header) mit, aus der der Hersteller, die Version sowie das verwendete Betriebssystem mit Hilfe der BrowserType Komponente ermittelt werden kann.
Weiters erhält man noch die IP Adresse des Client Computers mitgeteilt (Achtung: dies könnte auch ein Proxy Server sein!). Als letzte verwertbare Information bleibt dann noch das aktuelle Datum des Servers, allerdings sollte man hier darauf vorbereitet sein, eine Korrektur auf Grund der Zeitzonen vorzunehmen.
Damit ergibt sich folgendes Design für die Tabelle Guestbook:
Die Felder sind von ihren Namen klar identifizierbar, allerdings dürften bei einigen Datentypen Fragen auftreten, so zum Beispiel bei EntryDate (Datum des Eintrags). Warum speichere ich das nicht als Datumstyp, sondern als Text? Der Grund ist, daß ich das Datum nicht zum Sortieren brauche (dafür reicht IdField), und ich es somit bereits korrekt formatiert in der Datenbank ablegen kann, was mich unabhängig von der Landeseinstellung des Webservers macht (man könnte es Faulheit nennen).
Die IP Adresse habe ich in vier Felder des Types Byte zerlegt, womit nur 4 Byte Speicherplatz verbraucht werden. Hätte ich im Gegensatz dazu die IP Adresse (192.192.192.192) als Textfeld gespeichert, wäre der Speicherplatzverbrauch 15 Byte gewesen - 11 Byte gespart.
Das letzte Feld IsEntryLive wird in der Implementierung des Gästebuchs im Moment nicht verwendet, allerdings könnte man es dazu verwenden, einen Eintrag erst nach Prüfung durch den Administrator freizuschalten. In der Datenbank ist der Standardwert True vorgegeben.
Jetzt, da die Datenbank fertig ist, können wir uns Gedanken machen, was passieren soll, wenn der Benutzer Daten eingibt und das Formular abschickt. Dazu habe ich eine kleine Process flow Graphik gezeichnet:
Das Eingabeformular signupform.htm ist statisch und führt keine serverseitigen Aktionen durch. Die ASP Datei, auf die die eingegebenen Daten gepostet werden (signup.asp), hat allerdings sehr viele Aufgaben zu erledigen. Im ersten Schritt wird kontrolliert, ob der Benutzer plausible Daten eingeben hat - und wenn nicht, ihn auffordert, die fehlenden/falschen Daten einzugeben. Nach dieser Erstkontrolle postet signup.asp auf sich selbst, und führt die Einfügeoperation in die Datenbank durch.
Der Code für signupform.htm ist simpel, der Code für signup.asp bedarf allerdings einiger Erklärungen.
Zuerst werden alle Felder ausgelesen (Zeilen 13 bis 18), und dann einer einfachen - leicht für eigene Zwecke erweiterbaren - Überprüfung unterzogen (Zeile 21). Eine Zeile vorher allerdings findet die Überprüfung statt, ob dies jetzt der Datenkontrolldurchlauf ist, oder das Einfügen in die Datenbank durchgeführt werden soll (strFinal). Der Teil der Datenkontrolle zieht sich von Zeile 21 bis 45, der Teil für die Einfügeoperation in die Datenbank von Zeile 47 bis 94.
Der Datenkontrolldurchlauf beeinhaltet keine nennenswerten Tricks, in dieser Hinsicht interessanter ist die Einfügeoperation. Zuerst wird mit Hilfe des BrowserType Objekts der Browser und das Betriebssystem ermittelt. Wichtig zu beachten ist, daß das BrowserType Objekt diese Daten nur dann bereitstellen kann, wenn es den Browser kennt - dies bedeutet, er muß in der Datei browscap.ini definiert sein (aktuelle Versionen dieser Datei findet man bei AspTracker.com - ein Link befindet sich am Ende des Artikels).
Das Datum wird mit Hilfe der DatePart Funktion in Zeile 55 zusammengebaut, und danach folgt ein Block (58-63), der die Felder auf die richtige Länge kürzt (sonst gibt es Einfügefehler in die Datenbank). Darauf folgend wird die IP Adresse in vier Blocks zerlegt, und zwar mit Hilfe der Split Funktion aus VBScript.
Um das Einfügen in die Datenbank angenehm zu gestalten, habe ich ein Recordset Objekt geöffnet. Dieses hat allerdings eine spezielle Eigenschaft - es kann keine Zeilen aufweisen, da das WHERE Statement mit IdField-1 niemals erfüllt sein kann (AutoNumber Felder beginnen bei 1). Der Sinn und Zweck eines leeren Recordsets besteht darin, daß es sehr schnell geöffnet wird, speziell wenn die Anzahl der Einträge in das Gästebuch steigt.
Zum Schluß bleibt mir nur noch die Funktion SafeHtmlEncode zu erwähnen - diese macht ihrem Namen alle Ehre, da Server.HtmlEncode bei Null-Werten einen Fehler produziert, und diese Funktion nichts anderes macht, als diesen Fehler zu verhindern.
Damit wünsche ich ihnen auch schon viel Spaß beim Ausprobieren des Sourcecodes, und ich hoffe wir lesen uns wieder beim 2 Artikel der Gästebuchserie.
This printed page brought to you by AlphaSierraPapa
Klicken Sie hier, um den Download zu starten.
http://www.aspheute.com/code/20000331.zip
Ein Gästebuch in ASP erstellen - Teil 2
http:/www.aspheute.com/artikel/20000403.htm
Ein Gästebuch in ASP erstellen - Teil 3
http:/www.aspheute.com/artikel/20000404.htm
browscap.ini Update
http://www.asptracker.com
Live Gästebuch
http://www.aspgerman.com/aspgerman/guestbook/
©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.