Alex: Daten aus Datenbank auslesen und Tabelle in HTML ausgeben

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

Ausgabeschleife

while ( my @row = $sth->fetchrow_array)
{
   print "<tr>\n";
   print "<td>\n";
   print "@row\n";
   print "<td>\n";
   print "<tr>\n";
}

$cgi->end_html;

Disconnect

$dbh->disconnect;

  1. 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

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. 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",

      1. 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