Struppi: premature end of script headers

Beitrag lesen

Hier mal der CODE um den es geht...
Wie gesagt es funktioniert, nur am Bildschirm kommt nix bzw. Fehlermeldung...(siehe Posting)!!!

D.h. du gibst keinen gültigen HTTP header aus, folglich zeigt der Browser eine Fehlermeldung an, weil er keine antwort bekommt.

Du solltest dich mit einigen grundlegeneden Dingen über CGI Programmierung auseinandersezten.

#!/usr/bin/perl

keine Ahnung wie Fortgeschritten du bist, aber ich würde dir dringend raten die Warnungen anzuschalten (kein wunder das du keine erhälst) und use strict zu verwenden.

#!/usr/bin/perl -w

use strict;

Einbinden der Module

use XML::Simple;

use lib "lib";
use GENDB;
use CONTGEN;

use POSIX qw/setsid/;

Aus dem String einen Hash gemacht:

my %CGIDATEN = decodeCGIDaten();

wie schon Cheatah schreibt: use CGI;

Das ist ein Modul für die CGI Programmierung, das dir viele viele Möglichkeiten anbietet eine saubere Ausgabe an den Browser zuschicken.

if($pid == 0) { die $! unless setsid(); }
 else { exit; }

Ich weiss nicht, ob du weißt was exit macht. Ich würd es aber auf jeden Fall noch mal nachlesen.

close STDIN;
 close STDOUT;
 close STDERR;

Auch das würd ich an dieser Stelle noch nicht tun. Da dein Programm noch nicht fertig ist.

Verbindung zur Datenbank

&GENDB::verbindeDB();

Der Aufruf mit '&' ist seit Perl 5 nicht mehr nötig und macht evtl. Dinge duie du nicht willst.

print << "ENDE_HTML";
Content-type: text/html\n\n
<html>
 <head>
  <title>Datenbankgenerierung</title>
  <link href="/css/intern.css" rel="stylesheet" type="text/css">
  <script LANGUAGE="JavaScript" TYPE="text/javascript" src="/js/intern.js"></script>
 </head>
ENDE_HTML

Und genau dafür bietet das CGI Modul saubere Funktionen an

print CGI::header(),
CGI::start_html(
-meta   => {'content-type' => "text/html; charset=iso-8859-1"},
-title  => '....',
-style  => {src => '/css/intern.css'}
-script => {src => '/js/intern.js'}
)
;

if ($erstmals eq "ja") {
 print "<body onload="javascript:history.back(); FensterOeffnen('benutzerpraesenz','/cgi-bin/admin/GENERIERUNG/DB_GENERIERUNG.pl','','DB_GENERIERUNG')">";

'javascript:' ist hier lediglich ein nutzloses Label, das in älteren Browsern zu Fehlermeldungen führt.

print << "ENDE_HTML";

<span class=zentriert style="color:maroon"><h1>Datenbankgenerierung</h2></span>

das <span> ist absolut überflüssig:
<h1 class=zentriert style="color:maroon">Datenbankgenerierung</h1>

<div class=rechts>
   <input type=button value="Schliessen" onClick="JavaScript:self.close()">
  </div>

auch hier ist das Label nicht nötig.

Struppi.