``Im Prinzip geht alles, ohne Strom geht nichts ....''
Irgendwie paßt dieser Werbespruch der Energieversorger auch auf die in dieser Diplomarbeit analysierten Datenbanken und Web-Interfaces. Als Freeware deklariert und somit kostenlos im Source-Code erhältlich, scheinen sie auf den ersten Blick eine Alternative zu den kommerziellen Produkten zu sein, entpuppen sich aber bei genauerem Hinsehen doch nur als ``Alternative''.
Zum einen fehlen einige von den großen Marken - z.B. Oracle - bekannte Features (Datenbank login, SQL-Befehle wie ALTER TABLE, u.v.m.). Zum anderen laufen die Freeware Produkte einfach noch nicht so stabil wie ihre großen Brüder und Schwestern.
Dennoch haben diese Produkte auch ihre Lebensberechtigung und ihre Einsatzgebiete, für die sie sich bestens eignen.
Wer noch keine Datenbank besitzt, und im Internet einen Produktkatalog,
Ersatzteileliste, Bekanntschaftsanzeigen oder sonstige über Datenbanken
verwaltbare lineare Daten anbieten will, für den stellen sie die beste
Lösung dar. Solange er niemanden einen anderen Zugriff auf seine Datenbank
gibt, außer daß er deren Inhalt sehen kann, leisten die beiden getesteten
Datenbanken und die entsprechenden Interfaces bestens ihren Dienst.
Sobald jedoch mehr als ein bis zwei Administratoren die Verwaltung
über haben, oder es sich um sensible Datenbestände handelt, ist es
mit der Sicherheit der Daten oft weit her. PostgreSQL stellt hier
die einzige Alternative dar, da es die Möglichkeit bietet, einen Zugriff
via
login auf die Datenbank einzurichten. Leider
kann dann über PHP/FI nicht mehr auf die Datenbank zugegriffen werden,
außer über den von mir erstellten Patch (Anhang A.3,
S.
).
Wer jedoch in seiner Firma schon über eine große Datenmenge auf kommerziellen
Systemen verfügt und aus diesen nur einen kleinen Auszug der Öffentlichkeit
zur Verfügung stellen will, dem sei von Freeware Systemen abgeraten.
Es besteht zwar z.B. mit PHP/FI die Möglichkeit, fast jede bekannte
Datenbank ans Internet anzubinden. Aus Kompatibilitätsgründen und
Sicherheitsaspekten sollte man jedoch auf die meist vom Hersteller
der verwendeten Datenbank Systeme angebotenen Zusätze zurückgreifen.
Ein ganz anderer Gesichtpunkt ist, daß die Übertragung der Daten durch
das
http Protokoll alles andere als sicher verläuft.
Wer also beabsichtigt, sensible Daten mittels
http übers
Web zu verschicken, dem ist auch nicht zu helfen. Einzige Alternative
zum
http ist das
https Protokoll.
Hierbei überträgt der Web-Server die Daten verschlüsselt. Leider unterliegt
der zur Zeit sicherste Verschlüsselungsalgorithmus den amerikanischen
Exportbestimmungen und ist somit in Deutschland nicht erhältlich.
Ein Ausblick auf die Zukunft läßt jedoch hoffen, daß die Freeware Produkte in kürzester Zeit auch auf diesem Anwendungsgebiet den Kommerziellen in nichts mehr nachstehen werden. Und hoffen wir, daß es den Programmierern endlich gelingt, auch funktionierende ODBC Schnittstellen zu schreiben.
Abschließend soll noch ein kleines Anwendungsbeispiel zeigen, für welchen Bereich die getestete Software sich am besten eignet.
Hans, ein leidenschaftlicher Modellauto Sammler, möchte seine doppelten
Exemplare gerne über das Internet an den Mann/Frau bringen. Da sich
sein Angebot immer wieder ändert, die Eigenschaft der Modellautos
als Ware jedoch nicht, richtet ihm ein Bekannter bei seinem Bürgernetzverein
eine Datenbank und ein Web-Interface ein. Somit kann er sein Angebot
jederzeit ändern, ohne die entsprechenden HTML Seiten neu zu schreiben.
Als Datenbank hat er nun PostgreSQL gewählt; somit kann er - durch
Vergabe eines Passwortes - schon einmal ausschließen, daß die anderen
Mitglieder des Vereins an den Daten von Hans herumspielen.
Für die Anbindung an das Internet wählte er PHP/FI; dies hat er noch
ein wenig bearbeitet und alle nicht verwendeten Funktionen im Source-Code
auskommentiert. Somit kann der Web-Server des Vereins durch bestimmte
PHP/FI Funktionen keinen Schaden nehmen.
Über einen Homepage kommt der Surfer auf eine durch Frames zweigeteilte
Seite. In der oberen Hälfte findet er den Katalog mit den Autos, von
denen er die gewünschten Modelle mittels Mausklick der Bestellung
auf der unteren Hälfte hinzufügen kann. Hierbei ist die Framegröße
durch den Surfer beliebig veränderbar.
Über die Homepage aus ist es Hans außerdem möglich, auf eine (über
.
htaccess) Passwort geschützte Web-Seite zu gelangen,
über die er seine Datenbankeinträge verwalten kann (der Einfachheit
halber nur das Einfügen von Datensätzen; Löschen und Ändern geht analog).
Der Aufbau der Datenbank ist entsprechend dem Produkt sehr einfach.
Sie enthält die wichtigsten Eigenschaften der Modellautos als Ware.
Tabelle 5.1 (S.
)
zeigt den Aufbau der Tabelle
'liste' in der Datenbank
'auto'.
Abbildung 5.1 (S.
) zeigt
die Homepage, deren HTML Code nicht weiter erleutert werden muß.
<?
$sock = pg_sconnect("localhost","5432","auto","hans","dampf");
if ($sock == 0)
{ echo "FEHLER: $pg_ErrorMessage($sock) <br>";
}
else
{
>
<html>
pg_sconnect öffnet eine Verbindung zur Datenbank
'auto' auf dem
'localhost' über
Port
'5432' unter dem Benutzernamen
'hans'
mit dem Passwort
'dampf'. Ist dies
erfolgreich, so wird mit normalem HTML Code fortgefahren.
<script language="JavaScript">
<!-
function bestellen(art,desc,color,prize,pieces)
{
parent.bestellung.document.bestellung.artikel.value =
parent.bestellung.document.bestellung.artikel.value +
"
n"+art+ desc+color+prize+" "+pieces;
}
// ->
</script>
Die Funktion
bestellen in JavaScript schreibt
beim Aufruf die ihm übergebenen Parameter als Text in das Bestellformular
in der unteren Framehälfte. Dabei geht sie wie folgt vor:
Vom Hauptframe (
parent) nimmt sie den untergeordneten
Frame (
bestellung); von diesem
document
wird der Wert der Textarea (
artikel)
im Formular (
bestellung) gesetzt.
<?
$result = pg_Exec($sock, "select * from liste order by
bestnr");
if (!$result)
{ echo "Fehler: $pg_ErrorMessage <br>";
}
else
{
$rows = pg_numRows($result);
$index1 = 0;
while ($index1 < $rows)
{
$col[0] = pg_result($result, $index1, "bestnr");
$col[1] = pg_result($result, $index1, "bez");
$col[2] = pg_result($result, $index1, "color");
$col[3] = pg_result($result, $index1, "prize");
$col[4] = pg_result($result, $index1, "image");
>
pg_Exec holt jetzt aus der vorher geöffneten Datenbank die entsprechenden Datensätze gemäß der übergebenen SQL Sequenz. pg_numRows zählt anschließend die zurückgelieferten Datensätze. In der jetzt folgenden while Schleife werden die Daten im HTML Format aufbereitet (dies kann je nach gewünschtem Layout anders ausfallen); dazu werden zur leichteren Weiterverarbeitung die Spaltenwerte der Datenbank dem Array col zugewiesen.
Weil es Modellautos in verschiedenen Farben gibt, stehen die verfügbaren
Farben alle durch Kommas getrennt in der Variablen
$col[2].
Um nun die Farben einzeln zu bekommen - nicht alle in einer Variablen
- wird die PHP/FI Funktion
strtok() zu Hilfe
genommen; stellvertretend für die verschiedenen Layoutvariationen
steht das hier aufgeführte Listing.
$tok = strtok($col[2],",");
while ($tok)
{
>
<! Ausgabe der Farben in HTML >
<? echo $tok;><br>
<?
$tok = strtok(",");
}
>
<?
$index1 = $index1 + 1;
}
>
strtok($col[2],",") liest aus der
Variablen
$col[2] alle Zeichen bis zum ersten
Komma.
strtok(",") liest weiter bis
zum nächsten Komma. Dies wird innerhalb der
while Schleife
solange wiederholt, bis die Variable
$col[2] ausgelesen
wurde.
Mit der Weiterschaltung von
$index1 wird die
im vorangegangenen Listing begonnene
while Schleife
beendet.
Die untere Framehälfte - das Bestellformular - ist genauso einfach
wie sinnvoll aufgebaut. Es besteht lediglich aus einem HTML Formular,
welches die erforderlichen Elemente für eine Bestellung enthält (z.B.
Name und Anschrift des Bestellers). Abgeschickt wird es dann mit Hilfe
der
mailto Methode.
<form action="mailto:xyz" method="post"
enctype="text/plain" name="bestellung">
</form>
Abbildung 5.4 (S.
)
zeigt ein einfaches Eingabeformular um neue Artikel in die Datenbank
aufzunehmen.
Der Aufbau des HTML Codes der Seite ist ``rekursiv''. Dies bedeutet,
daß sich die Seite zur Übernahme des eingegebenen Artikels in die
Datenbank selbst aufruft. Hierfür übergibt sie sich selbst ein Flag,
welches über ihre auszuführende Funktion bestimmt.
Ist dieses Flag nicht gesetzt, dann erscheint auf dem Browser nur
das Eingabeformular. Beim Aufruf der Seite mit gesetztem Flag, werden
die übergebenen Werte in die Datenbank eingefügt. Nachfolgendes Listing
soll dies verdeutlichen.
<?
$sock = pg_sConnect("localhost","5432","auto","hans","dampf");
if (!$sock)
{ echo "FEHLER: $pg_ErrorMessage($sock) <br>";
}
else
{
if ($action == "insert")
{
$ins_result = pg_Exec($sock, "insert into liste values
('$bestnr','$bez',
'$color','$prize','$image')");
if (!$ins_result)
{ echo "FEHLER: $pg_ErrorMessage($sock) <br>";
}
else
{
echo "Folgender Artikel <br>
$bestnr , $bez , $prize , $color , $image <br>
angelegt !!!!! <br>";>
</a>
<?
}
}
else
{
/* Ausgabe des Eingabeformulars*/
>
Zuerst wird wieder eine Verbindung mit der Datenbank hergestellt. Danach wird das Flag $action ausgewertet. Ist es gesetzt, so werden die Werte der übergebenen Variablen von pg_Exec in die Datenbank eingefügt.