Daten aus Datenbank auslesen und Tabelle in HTML ausgeben
Alex
- perl
Hallo,
ich möchte ein Perl-Skript schreiben, das ein SQL-Statement aus einem Formular entgegennimmt, Daten aus Datenbank ausliest und eine Tabelle in HTML ausgiebt.
Ich hab schon einen Ansatz (siehe unten).
Wie kann ich Spaltenüberschriften ausgeben ?
Wie kann ich mehrere Spalten ausgeben ? $sth->fetchrow_array gibt nur eine Spalte zurück, die den gesamten Tabelleninhalt enthält!
Merci
Alex
Ansatz:
----------------------------------
use CGI;
use DBI;
use strict;
my $cgi = new CGI;
my $dbh = DBI->connect('dbi:Oracle:mydb', 'scott/tiger', '') or die $DBI::errstr;
my $sql_string = $cgi->param('sql_eingabe'); # "sql_eingabe" ist der Name des Formularfeldes
my $sth = $dbh->prepare($sql_string);
$sth->execute();
#Ausgabe der Daten in den Browser (Tabelle)
my @FelderNamen = $sth->fetchrow_array;
my $spalten = @FelderNamen; # Spaltenanzahl ermitteln
print $cgi->header,
$cgi->start_html('Ergebnis der SQL - Abfrage'),
$cgi->h2('Ergebnis der SQL - Abfrage'),
$cgi->h5($sql_string),
print "<table border=1 cellspacing=1 cellpadding=1>\n";
while ( my @row = $sth->fetchrow_array)
{
print "<tr>\n";
print "<td>\n";
print "@row\n";
print "<td>\n";
print "<tr>\n";
}
$cgi->end_html;
$dbh->disconnect;
Hi,
Wie kann ich Spaltenüberschriften ausgeben ?
äh? Mit print. Wo genau ist dabei Dein Problem?
Wie kann ich mehrere Spalten ausgeben ? $sth->fetchrow_array gibt nur eine Spalte zurück, die den gesamten Tabelleninhalt enthält!
Nein, es liefert Dir einen Datensatz als Array zurück,
print "@row\n";
welches Du hier komplett ausgibst. Mittels Manipulation der Variable $" (s. perldoc perlvar) könntest Du dies zwar in Deinem Sinne weiterführen; vermutlich möchtest Du aber eine Schleife benutzen, oder wenigstens perldoc -f join.
Cheatah
Hi,
funktionieren die Methoden
@FelderNamen = $db->FieldNames();
%Daten = $db->DataHash();
aus dem unteren Bsp., dass Win32::ODBC verwendet, auch mit DBI ???
Danke
Alex
------------------------------------
@FelderNamen = $db->FieldNames();
print "<tr>\n";
for (@FelderNamen){
print "<th>", $_, "</th>\n";
}
print "</tr>\n";
while ($db->FetchRow() and $rows < $max_rows){
print "<tr>\n";
undef %Daten ;
%Daten = $db->DataHash();
$rows++;
for ($i = 0; $i < $spalten; $i++){
if ($Daten{$FelderNamen[$i]} gt ''){
print "<td>", $Daten{$FelderNamen[$i]}, "</td>\n";
}
else{
print "<td>Nicht Angegeben</td>\n";
}
}
print "</tr>\n";
}
print "</table>\n",
Hallo,
funktionieren die Methoden
@FelderNamen = $db->FieldNames();
%Daten = $db->DataHash();aus dem unteren Bsp., dass Win32::ODBC verwendet, auch mit DBI ???
Nein, da DBI keine der Methoden implementiert hat. Aber es gibt vergleichbare Methoden. Ein Blick in die Dokumentation hätte Dir Erklärungen zur Methode fetchrow_hashref() bzw. zum Attribut NAME geliefert. Näheres dazu unter perldoc DBI.
Grüße
Klaus