Swiss Penguin Logo

LINUX - Plakat für die iEX
eine Beispiel-Datenbank

LUGS

Über die LUGS
Statuten und Protokolle
Sektionen
Terminliste
IRC
Mailinglisten
Kontaktadressen
Mitglied werden
Internes
Mitgliederliste

LINUX

Was ist Linux?
   Screenshots
Distributionen
   kmLinux
Firmen
Ressourcen
LIB

Dokumentation
Events
Projekte
Vorträge
Allgemeines

ChangeLog
Sprache
Galerie

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";
$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.

Powered by Linux, served by Apache / PHP, last changes done 04.02.2008 -- Copyright