Datenbank-Abfrage
Mit diesem kleinen Formular kann unsere Beispiel-Datenbank
abgefragt werden:
Der Aufbau dieses Web-Interfaces
Das Formular auf dieser Seite ruft ein anderes Skript auf, das dann
die Datenbank-Abfrage durchführt und die Resultate anzeigt.
Das Formular in diesem Skript
<form action="db-abfrage.phtml" method=post>
Das definiert den Namen des Skripts und die Methode der
Informationsübermittlung.
<table border=0 width="100%">
<?
PassThru("/usr/local/httpd/cgi-bin/oracle.pl");
?>
Dieses Statement ruft ein kleines Perl-Skript auf, das dann die
oben gesehene Auswahl-Liste generiert (direkt aus der Datenbank).
<input type="submit" value="Abschicken">
<input type="reset">
</form>
In diesem Teil werden noch die Elemente wie Textzeile und Schaltflächen
definiert und das Formular wieder geschlossen.
Das Perl-Skript, das oben erwähnt ist, sieht im wesentlichen so aus:
use DBI;
$dbh=DBI->connect('dbi:Oracle:*db*', '*uid*', '*pwd*') || die "Connect-Error";
Hier erstellen wir die Verbindung zur Datenbank
$sth=$dbh->prepare("select location from pop");
$sth->execute;
Die eigentliche Datenbank-Abfrage wird vorbereitet und durchgeführt.
print "\n";
while ($ref = $sth->fetchrow_arrayref) {
print "$$ref[0]\n";
}
print " \n";
$sth->finish;
$dbh->disconnect;
Das ist noch das Perl-Konstrukt, um die Daten entgegenzunehmen und
in eine HTML-Auswahlliste zu verwandeln.
Das Skript db-abfrage.phtml , das die Abfrage
entgegennimmt, sieht so aus:
print "<p>Das war die Eingabe: <pre>\n";
print $pop;
print "</pre>\n";
Das Skript, das die Resultate ausgeben soll
Zur Information nochmal die Eingabe (in PHP):
print "<p>Und das sind die Resultate der Abfrage:\n";
PassThru("/usr/local/httpd/cgi-bin/abfrage.pl $pop $naechster");
Wieder der gleiche Trick wie beim vorigen Skript: Perl übernimmt
wieder die Arbeit.
print "<form action=\"db-abfrage.phtml\" method=post>";
print "<input type=hidden name=\"pop\" value=\"$pop\">";
$naechster ++;
print "<input type=hidden name=\"naechster\" value=\"$naechster\">";
print "<input type=\"submit\" value=\"Nächster\">";
?>
</form>
Hier wird der Knopf für mehr Resultate erzeugt.
Das arbeitende Perl-Skript:
use DBI;
$pop=$ARGV[0];
$naechster=$ARGV[1];
$upl = $naechster * 10;
Die Übernahme der Argumente.
$dbh=DBI->connect('dbi:Oracle:*db*', '*uid*', '*pwd*') || die "Connect-Error";
$todo = "select sessions.userid, sessions.login, sessions.logout,
sessions.bytesin, sessions.bytesout
from pop, sessions where
pop.id=sessions.pop and pop.location like '$pop' and
rownum < $upl";
print "Die Abfrage in SQL ist: <strong>$todo</strong>\n<p>";
$sth=$dbh->prepare($todo);
Die Verbindung zur Datenbank und die Vorbereitung des
Select-Statements. Dieses wird auch ausgegeben.
$sth->execute;
print <<ENDOFTEXT;
<table border=1>
<tr><th>UserID</th><th>Login</th><th>Logout</th><th>Total/Session: <br>Hours:Min:Sec</th><th>Bytes in</th>
<th>Bytes out</th> <th>Total KBytes<br>Traffic</th></tr>
ENDOFTEXT
Die Ausführung des SQL-Statements und die Vorbereitung der
HTML-Tabelle zur Darstellung der Resultate.
while ($ref = $sth->fetchrow_arrayref) {
$secdiff=0;
$sec=0;
$min=0;
$hour=0;
$secdiff=$$ref[2] - $$ref[1];
$min = $secdiff / 60;
int $min;
$sec = $secdiff % 60;
$hour= $min / 60;
$hour = int $hour;
$min = $min % 60;
$kbytes=($$ref[4]+$$ref[3]) / 1024;
$kbytes= int $kbytes;
Der Beginn der Schleife, um die Resultate zu übernehmen und ein
paar Berechnungen.
print "<tr><td> <a href=\"db-abfrage1.phtml\?user=$$ref[0]\">$$ref[0]</a>" .
"</td><td>" . gmtime($$ref[1]) . "</td><td>".
gmtime($$ref[2]) . "</td><td>$hour:$min:$sec</td>" .
"<td>$$ref[3]</td><td>$$ref[4]</td>" .
"<td>$kbytes KB</td></tr>\n";
$total = $total + $$ref[4]+$$ref[3] ;
$totalsec = $totalsec + $sec ;
$totalmin = $totalmin + $min ;
$totalhour = $totalhour + $hour ;
}
Die Ausgabe der Resultate in HTML (PHP) und die Berechnung der Summen.
$bytes = $total % 1024;
$kbytes = $total / 1024;
$mbytes = $kbytes / 1024;
$kbytes = $kbytes % 1024;
$kbytes = int $kbytes ;
$mbytes = int $mbytes ;
$sec = $totalsec % 60;
$secmin = (($totalsec - $sec) / 60) ;
$min = ($totalmin + (($totalsec - $sec) / 60)) % 60;
$hour = $totalhour + (($totalmin + $secmin - $min) / 60);
print "<tr><th colspan=7> </th>";
print "<tr><th colspan=7>POP: $pop</th>";
print "<tr><th colspan=3>Total Traffic MBytes/KBytes/Bytes</th><th colspan=4>$mbytes / $kbytes / $bytes</th>";
print "<tr><th colspan=3>Total Online Time h/min/sec</th><th colspan=4>$hour:$min:$sec</th>";
print "</table>\n";
Noch ein paar Berechnungen für die Summen und deren Ausgabe.
$sth->finish;
$dbh->disconnect;
Abschluss der Verbindung zur Datenbank.