...
In der Praxis wird man aber dem Benutzer der kein SQL beherrscht lieber eine Auswahlliste der zu suchenden Daten anbieten oder nur ein Textsuche, bei der der eigentliche SQL-Befehl im Script erzeugt wird.
Wiki Markup |
---|
Code Block |
<HTML>
<HEAD><TITLE>Lokale Abfrage in Datenbank Informix</TITLE></HEAD>
<BODY>
<FORM NAME="ABFRAGE" ACTION="/cgi-keipke/db_local.sh">
SQL-Befehl:
<INPUT TYPE="text" NAME=SQLBEFEHL SIZE=100 MAXLENGTH="100"><BR>
<INPUT TYPE="submit" VALUE="Abfrage starten">
<INPUT TYPE="reset" VALUE="Eingabeform löschen">
</FORM>
</BODY>
</HTML>
{CODE} |
Bild 13: Inhalt der Datei db_local.htm, welche die Eingabemaske darstellt.
...
Der eigentliche Datenbankzugriff wird über das ?ACTION"-Script db_local.sh erledigt.
Wiki Markup |
---|
Code Block |
#!/bin/sh
# disable filename globbing
set -f
echo Content-type: text/html
echo
echo "<HTML><TITLE>Ergebnis der Datenbankanfrage</TITLE><BODY>"
# Umgebungsvariablen setzen
INFORMIXDIR=/opt/INF7.24
DBPATH=/ihr/pfad
DBSERVER=demo_se
DBNAME=kunden_db
DBDELIMITER='|'
INFORMIXSERVER=demo_se
PATH=$INFORMIXDIR/bin:$PATH
export DBSERVER DBPATH INFORMIXDIR PATH INFORMIXSERVER DBDELIMITER DBNAME
if [ -z "$QUERY_STRING" ]
then
echo "Die Datenbankanfrage konnte nicht gestartet werden,"
echo "da kein Suchargument angegeben wurde."
else
#Parameter auswerten
SQLBEFEHL=`echo $QUERY_STRING|cut -d'&' -f1|cut -c 11-`
#Bestimmte Sonderzeichen des Browsers ersetzen
SQLBEFEHL=`echo $SQLBEFEHL|sed -e 's/+/ /g'`
SQLBEFEHL=`echo $SQLBEFEHL|sed -e 's/%28/(/g'`
SQLBEFEHL=`echo $SQLBEFEHL|sed -e 's/%29/)/g'`
SQLBEFEHL=`echo $SQLBEFEHL|sed -e 's/%2C/,/g'`
SQLBEFEHL=`echo $SQLBEFEHL|sed -e 's/%3C/</g'`
SQLBEFEHL=`echo $SQLBEFEHL|sed -e 's/%3D/=/g'`
SQLBEFEHL=`echo $SQLBEFEHL|sed -e 's/%3E/>/g'`
SQLBEFEHL=`echo $SQLBEFEHL|sed -e 's/%22/\"/g'`
#Tabelle für Ausgabe vorbereiten
echo '<TABLE BORDER="1">'
echo '<TR>'
echo '<TD>Datenbankname</TD><TD>' $DBNAME '</TD>'
echo '</TR>'
echo '<TR>'
echo '<TD>SQL-Befehl</TD><TD>' "$SQLBEFEHL" '</TD>'
echo '</TR>'
echo '<TR>'
echo '<TD>Start:</TD><TD>'
date
echo '</TD>'
echo '</TR>'
echo '</TABLE>'
echo '<a href="/db_local.htm">Zurück zur Eingabemaske</a><BR>'
#Die temporären Dateien für das Ergebnis und ggf. Fehlermeldungen Informix
UNL_FILE=/tmp/db_anfrage.local.$$
ERR_FILE=/tmp/db_anfrage.local.ERR.$$
#Die eigentliche Datenbankabfrage als Here-Script,
#muss immer am Zeilenanfang stehen
$INFORMIXDIR/bin/dbaccess - - 2>$ERR_FILE <<!
database $DBNAME;
unload to $UNL_FILE
$SQLBEFEHL;
!
echo '<BR>Ergebnis der Anfrage: '
#Wenn ein Errorfile existiert, wird es angezeigt
[ -f $ERR_FILE ] && cat $ERR_FILE
echo '<BR><BR>'
echo '<TABLE BORDER="1">'
#Durch den sed-Befehl wird das Datenbankergebnis formatiert
#Das Pipezeichen wird durch den TR TD Tag ersetzt.
#Der awk setzt jeweils am Zeilenanfang und -ende ebenfalls TR TD
#Hierdurch ist die Ausgabe unabhängig von der Anzahl der Spalten
#und es erscheint immer eine ordentliche Tabelle
[ -f $UNL_FILE ] && sed -e 's/|/<\/TD><TD>/g' $UNL_FILE|awk -F'|' '{ print "<TR><TD>" $0 "</TD></TR>" }'
echo '</TABLE>'
#temporäre Dateien löschen
rm -f $UNL_FILE $ERR_FILE
fi
echo "</BODY></HTML>"
{CODE} |
Bild 15: Inhalt der Datei /cgi-bin/db_local.sh
...
Der Pfad zum Perl-Interpreter wird in der ersten Zeile des Scripts angegeben.
Wiki Markup |
---|
Code Block |
#!/usr/bin/perl
#Kommentare beginnen immer mit Rautezeichen
print "Content-type: text/html\n\n";
print "<HTML><HEAD><TITLE>CGI-Counter in Perl</TITLE></HEAD>\n";
print "<BODY><CENTER>";
$COUNT_FILE_IN="</www/htdocs/keipke/count/.count";
$COUNT_FILE_OUT=">/www/htdocs/keipke/count/.count";
if(!open(COUNTFILE, $COUNT_FILE_IN))
{
#Die Datei ist nicht lesbar oder nicht vorhanden
if(!open(COUNTFILE, $COUNT_FILE_OUT))
{
#Keine Schreibrechte auf Datei oder Verzeichnis
print "Die Counterdatei kann nicht erzeugt werden\n";
print "Sie besitzen nicht das Schreibrecht\n";
print "</BODY>";
exit;
}
else
{
#Datei mit Wert 1 initialisieren
print COUNTFILE "1";
close (COUNTFILE);
$LAST_COUNT="1";
}
}
else
{
while (<COUNTFILE>)
{
#liest alle Zeilen nacheinander in die vorbestimmte Variable $_
#in diesem Fall nur eine Zeile
$LAST_COUNT = $_;
}
close(COUNTFILE);
#Zählerstand erhöhen
++$LAST_COUNT;
#Und wieder zurückschreiben
open(COUNTFILE,$COUNT_FILE_OUT);
print COUNTFILE $LAST_COUNT;
close(COUNTFILE);
}
#Datei ist eingelesen und hochgezählt. Der Wert steht nun in der Variablen
#LAST_COUNT
print "<TABLE BORDER=0><TR><TD>\n";
for ( $i = 100000 ; $i >= 1 ; $i = $i / 10 )
{
$FILENAME=int($LAST_COUNT / $i);
while ( $FILENAME > 9 )
{
$FILENAME=$FILENAME % 10;
}
print "<img src=/graphics/";
print $FILENAME ;
print ".gif>\n";
}
print "</TD></TR></TABLE>\n";
print "</CENTER>\n";
print "</BODY></HTML>\n";
{CODE} |
Bild 17: Inhalt der Datei ?/cgi-bin/counter.pl"