Hallo!
Wenn ich mir über ein HTML-Formular die Einträge einer Datenbank mittels folgendem Perl-Skript anzeigen lassen möchte, bekomme ich immer die Fehlermeldung "Premature end of script headers". Wer kann mir sagen, woran dass liegen kann? In der Konsole lässt sich das Skript fehlerfrei compilieren, die Fehlermeldung erfolgt lediglich beim Aufruf über den Browser. Skript:
naja, dein Skript wird quasi nur ausgeführt, wenn es einen Parameter gibt, d.h. an der Konsole kannst du nicht viel testen.
use CGI qw (:standard);
use CGI::Carp qw (fatalsToBrowser);
use DBI;my $DBH;
my $STH;
my $CGI;
my $antwort;$CGI = new CGI();
Da du CGI.pm nutzt frag ich mich, warum du nur due Funktion param nutzt?
###Eintrag oder Anzeige###
Hier ander stelle würd ich den header schicken.
print $CGI->header();
if($CGI->param("anzeige")){
anzeige($CGI, $DBH, $STH);
da CGI global definiert ist, ist der 1.Parameter nicht notwendig.
}
elsif($CGI->param("eintrag")){
eintragen($CGI, $DBH, $STH);
}
sinnvoll wäre hier eine defaultroutine:
besser so:
if($CGI->param("eintrag")){
eintragen($CGI, $DBH, $STH);
}
else{
anzeige($CGI, $DBH, $STH);
}
###Start Subroutine Anzeige###
sub anzeige{
Wo sind die Parameter?
print <<HERE_TEXT1;
Content-type: text/html<html>
<head>
<title>Datensätze in Datenbank</title>
</head>
<body>
<center>
<h1>Datensätze:</h1>
<hr>
<table border>
<tr>
<td width="100"><b>Kalenderwoche</b></td>
<td width="100"><b>Einheiten</b></td>
</tr>HERE_TEXT1
print $CGI->start_html(-title => 'Datensätze in Datenbank');
print $CGI->h1('Datensätze:');
usw.
CGI.pm biete viele Funktionen um HTML Tabellen und Formulare auszugeben, damit verschonst du deinen Perl Code mit dem ganzen HTML Tags.
Gerade für Tabellen gibt es viele Möglichkeiten.
my @rows;
my @data;
while (@data = $STH->fetchrow_array()){
my $kalenderwoche = $data[0];
my $einheiten = $data[1];
print qq§<tr>\n<td><b>$kalenderwoche</b></td>\n<td>$einheiten</td>\n</tr>\n§;
push @rows, $CGI->td([$data[0], $data[1]]);
}
print $CGI->table( $CGI->Tr( @rows) ) );
Ansonsten empfehl ich dir, wenn du das Skript in der Konsole testest, entweder einen Wert für 'anzeige' oder 'eintrag' mal am prompt einzugeben, oder im Skript festzusetzten, da du sonst ja nicht siehst was falsch läuft:
$CGI->param('anzeige', 1);
Struppi.