Atmaseva: CSS und CGI und CGI in html

Hallo zusamamen,

ich habe gerade auf meinem Rechner Apache und Perl installiert. (Bin also ein blutiger Anfänger)

Ich möchte Daten aus einer Datei lesen und anschließend in einer Tabelle ausgeben (siehe Testbeispiele weiter unten).

Dabei sind bei mir folgende Fragezeichen entstanden:

  • Wie kann dafür sorgen, dass mittels perl auch css Anweisungen einer externen css-Datei ausgeführt werden.
    Nur eine der folgenden Zeilen (siehe Kommentar weiter unten im perl Script) funktionert. Angabe mit class="xxx" werden ignoriert.

  • Wie kann ich ein CGI-Script ohne Benutzeraktion innerhalb einer HTML-Datei aufrufen? In Selfhtml habe ich für diesen Zweck als einzige Möglichkeit "Server Side Includes" gefunden.
    Leider schaffe ich es nicht, auf meinem Apache SSI zum Laufen zu bringen. Gibt es eine andere Möglichkeit, CGI Scripe ohne Nutzeraktion aus eine html-Datei aufzurufen (abgesehen vom automatischen Laden). Oder muß ich unbedingt SSI auf meinem Apache zum Laufen bringen?

Vielen Dank im voraus für die Hilfe
atmaseva

HTML-Datei, in der später aus mehreren Dateien Daten ausgelesen und in eine Tabelle geschrieben werden sollen

<html>
<head>
<title>Tabelle ausgeben</title>
<link rel="stylesheet" type="text/css" href="/format_m.css">
</head>
<body>
<!-- folgende Zeile ist nur ein Krügge, da ich z.Z. keine Lösung habe, um
ein Pearl-Script ohne Benutzeraktion zum laufen gebracht habe  -->
<a href="/cgi-bin/openFile.pl">Tabelle ausgeben</a>
<!-- dies war mein Versuch mir SSI:
<!-- #exec cgi="/cgi-bin/openFile.cgi" -->
</body>
</html>

Auszug aus der CSS-Datei format_m.css:
.tabText {
 font-family:Arial,Helvetica,sans-serif;
 color:#003399;
 font-size:9pt;
}

perl-Script openFile
#!/usr/bin/perl -w

use strict;
use CGI::Carp qw(fatalsToBrowser);

my ($x, $record, $vorname, $nachname);

open (INPUT, "C:/public/testio/datei.csv") || die "Cant open input file";

print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Ausgabe der Tabelle</title>\n";
print '<link rel="stylesheet" type="text/css" href="format_m.css">', "\n";
print "</head><body>\n";

print "<h1 style='color:red'>Hier kommt die Liste</h1>\n";
print '<p style="color:#003399">test text text</p>', "\n";

die folgende Angabe class="tabText" bleibt wirkungslos

print '<p class="tabText">test text text</p>', "\n";

print '<table border="0" cellspacing="0" cellpadding="0">', "\n";
print '<colgroup><col width="270px"><col width="270px"></colgroup>', "\n";

while (<INPUT>) {
   ($vorname, $nachname) = split(';');
   print "<TR>\n";
   print "<td class='tabtext'>$vorname</TD>\n";
   print "<td>$nachname</TD></tr>\n";
}
print "</table>\n";

print "</body></html>\n";
close (INPUT);

  1. tjaaaaa,

    ich habe gerade auf meinem Rechner Apache und Perl installiert. (Bin also ein blutiger Anfänger)

    Das sieht man an deinem Perl-Script

    perl-Script openFile
    #!/usr/bin/perl -w

    ok, diese Zeile sagt natürlich jedem, daß dein Script auf einem UNIX-Rechner läuft. auf Windows gibts kein Verzeichnis /usr/bin/perl

    open (INPUT, "C:/public/testio/datei.csv") || die "Cant open input file";

    wie kannst du auf einem UNIX-Rechner einen Pfad "C:/public..." einrichten? Außerdem sollte schon gesagt werden, was mit der geöffneten Datei geschehen soll, also zum Beispiel:
    open (INPUT, ">C:/public/testio/datei.csv")
    beachte dabei das Zeichen > , womit die Datei zum Schreiben geöffnet ist. Existiert sie aber bereits oder ist das eine völlig neue Datei? Wenn sie bereits existiert, wird mit einem > der bereits bestehende Inhalt überschrieben.

    print "Content-type: text/html\n\n";

    und wenn schon die Pfade korrekt wären, müßte hier stehen:
    print INPUT "Content-type: text/html\n\n";

    du müßtest dir doch erst nochmal etwas genauer anschauen, wie man mit PERL HTML-Dokumnente generieren läßt ;-)

    Grüße aus Berlin

    Christoph S.

    1. Hallo Christoph,

      Danke für die schnelle Antwort zur späten Stunde. Meine erste Zeile ist falsch, ich arbeite mit Windows.

      Meine Fragen bleiben jedoch.

      Wenn ich z.B. den von Perl generierten Quelltext wieder als eigene HTML-Datei abspeichere, funktionieren die class-Angaben.

      Die anderen Bugs werde ich auf jeden Fall entfernen. Oder haben die Bugs etwas direkt mit meinen Fragen zu tun?

      ciao
      atmaseva

      tjaaaaa,

      ich habe gerade auf meinem Rechner Apache und Perl installiert. (Bin also ein blutiger Anfänger)
      Das sieht man an deinem Perl-Script

      perl-Script openFile
      #!/usr/bin/perl -w
      ok, diese Zeile sagt natürlich jedem, daß dein Script auf einem UNIX-Rechner läuft. auf Windows gibts kein Verzeichnis /usr/bin/perl

      open (INPUT, "C:/public/testio/datei.csv") || die "Cant open input file";
      wie kannst du auf einem UNIX-Rechner einen Pfad "C:/public..." einrichten? Außerdem sollte schon gesagt werden, was mit der geöffneten Datei geschehen soll, also zum Beispiel:
      open (INPUT, ">C:/public/testio/datei.csv")
      beachte dabei das Zeichen > , womit die Datei zum Schreiben geöffnet ist. Existiert sie aber bereits oder ist das eine völlig neue Datei? Wenn sie bereits existiert, wird mit einem > der bereits bestehende Inhalt überschrieben.

      print "Content-type: text/html\n\n";
      und wenn schon die Pfade korrekt wären, müßte hier stehen:
      print INPUT "Content-type: text/html\n\n";

      du müßtest dir doch erst nochmal etwas genauer anschauen, wie man mit PERL HTML-Dokumnente generieren läßt ;-)

      Grüße aus Berlin

      Christoph S.

      1. hi,

        Die anderen Bugs werde ich auf jeden Fall entfernen. Oder haben die Bugs etwas direkt mit meinen Fragen zu tun?

        natürlich haben sie das. Wenn du bloß "print" schreibst, wird eine Zeichenfolge (keine Datei) "on the fly" auf deinem Monitor ausgegeben, die sofort verschwunden ist, wenn du irgendwohin weiterklickst. Und das Verzeichnis, in dem eine solche Zeichenfolge eventuell nach externen CSS-Dateien suchen könnte, ist immer das Verzeichnis, in dem dein Script liegt bzw. arbeitet, also wahrscheinlich irgendwas mit cgi-bin. Sobald die Pfade für die Datei, die du schreiben willst, korrekt sind, kannst du völlig problemlos auch externe CSS- oder JS-Dateien einbinden lassen.

        Christoph S.