Swiss Penguin Logo

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

LUGS

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

LINUX

Was ist Linux?
Distributionen
LIB

Dokumentation
Events
Projekte
Vorträge

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