Tabelle vollständig generieren
Christoph Schnauß
- perl
hallo Forum ;-)
Ich bin seit mehreren Tagen dabei, meine "alten" Perl-Scripte zu "modernisieren". Ein Haufen Tipparbeit ...
Dabei bin ich zwar über einen Berg kleinere und größere Problene gestolpert, aber nur eines konnte ich bisher nicht auflösen. Es geht um die Einbindung des CGI-Moduls in der Form
use strict;
use CGI;
my $my = new CGI;
und um das Generieren von HTML-Seiten. Normalerweise funktiuoniert das ja wunderbar, bloß mit Tabellen bekomme ich Probleme. Folgendes Beispiel:
sub keine_eingabe {
print $my->header(),"\n",
$my->start_html(-title =>'keine Eingabe',
-style =>{'src'=>'http://www.meine_adresse.de/allgemein.css','\n'},
),"\n",
$my->start_table({-width =>'80%'}),"\n",
$my->start_td({-colspan =>'2'}),"\n",
$my->h3('Fehler:<br>Es wurde nichts angegeben'),"\n",
$my->p('der Text fehlt ;-)<br>bitte Text eingeben und erneut absenden'),"\n",
$my->end_td(),"\n",
$my->end_table(),"\n",
$my->end_html();
exit;
}
In dieser Form macht das keine Mühe, ist bloß nicht "vollständig". Denn: da fehlt das <tr>, und _genau_darum_ gehts mir. Ich möchte (muß) meine generierte Tabelle in zwei Spalten aufteilen, was dann in der zweiten Tabellenzeile erfolgen soll. Rechte Spalte für ein paar Eingabefelder (textfields und buttons), linke Spalte für Hinweise. Aber aus irgendeinem Grund fehlt bei dieser Art der Notierung die Möglichkeit, mit
$my->tr()
irgendwas auszurichten. Ich verstehe nicht, warum das mit $my->td() funktioniert, aber nicht mit $my->tr(), schließlich möchte ich nicht sämtliche Tabellenzellen nebeneinander stellen.
Hat jemand nen Hinweis?
Ähm, ehe jetzt irgendwer "perldoc CGI" oder ähnliches rät: das hab ich bereits alles ziemlich grundlich gelesen. In meinen "alten" Scripts hatte ich sowas stehen:
sub keine_eingabe {
print "Content-Type: text/html\n\n";
print "<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1252">\n";
print "<title>keine Eingabe</title>\n";
print "<link rel="stylesheet" type="text/css" href="http://www.meine_adresse.de></head>\n";
print "<body>";
print "<table width="80%">";
print "<tr><td colspan="2"><h3>Fehler
...
das funktioniert ja auch weiterhin, und _hier_ kriege ich meine <tr>'s auch generiert. Warum klappt das nun nicht in der "moderneren" Schreibweise?
Grüße aus Berlin
Christoph S.
Hallo Christoph,
Aber aus irgendeinem Grund fehlt bei dieser Art der Notierung die
Möglichkeit, mit
$my->tr()
irgendwas auszurichten.
Hat jemand nen Hinweis?
Ähm, ehe jetzt irgendwer "perldoc CGI" oder ähnliches rät:
das hab ich bereits alles ziemlich grundlich gelesen.
... auch das hier?
"Because of conflicts with built-in Perl functions,
the following functions begin with initial caps:
Select
Tr
Link
Delete"
(aus CGI.pm)
Viele Grüße
Michael
(der diese komische HTML-tag-API nie benutzen würde, aber neugierig war)
lieber Michael .... *g*
ja, auch das hab ich gelesen, und auch sas hat nix geholfen
Christoph S.
Hallo,
ja, auch das hab ich gelesen, und auch sas hat nix geholfen
Christoph S.
<img src="/images/14.gif" width=260 height=119 border=0 alt="Ein bischen dumm?">
Jens
Hallo,
Ein bsp von http://www.oreilly.de/catalog/perlmodger/manpage/cgi.htm
print table({-border=>undef},
caption('Wann sollten Sie Gemüse essen?'),
Tr({-align=>CENTER,-valign=>TOP},
[
th(['Gemüse', 'Frühstück','Mittagessen','Abendessen']),
td(['Tomaten' , 'nein', 'ja', 'ja']),
td(['Broccoli' , 'nein', 'nein', 'ja']),
td(['Zwiebeln' , 'ja','ja', 'ja'])
]
)
);
Ich denke mal das sollte dir weiterhelfen.
Gruss
Andreas
hallo Andreas,
Ein bsp von http://www.oreilly.de/catalog/perlmodger/manpage/cgi.htm
Ich denke mal das sollte dir weiterhelfen.
das tut es leider nicht. Dasselbe Beispiel bekomme ixh übrigens mit perldoc CGI auch zu sehen. Aber aus irgendeinem Grund wird dieses Beispiel nicht befolgt.
Grüße aus Berlin
Christoph S.
Hallo Christoph,
das tut es leider nicht.
Das ist natuerlich eine *sehr* detailierte Problem-Beschreibung.
Aber aus irgendeinem Grund wird dieses Beispiel nicht befolgt.
Heisst?
Das Beispiel funktioniert einwandfrei. Du musst also irgendetwas falsch
machen. In deinem Beispiel-Code war es ja das komplette Fehlen von
jeglichem Code, dass das <tr> haette generieren koennen.
Was hast du denn bisher probiert? Welche Probleme traten auf? Etc,
etc -- du solltest die Fragen doch eigentlich kennen :)
Gruesse,
CK
hi Christian,
das tut es leider nicht.
Das ist natuerlich eine *sehr* detailierte Problem-Beschreibung.
das ist überhaupt keine Problembeschreibung, sondern die Antwort auf den Satz:
Ich denke mal das sollte dir weiterhelfen.
Aber aus irgendeinem Grund wird dieses Beispiel nicht befolgt.
Heisst?
heißt, daß ich den Grund noch suchen mußte und nicht genauer angeben konnte.
In deinem Beispiel-Code war es ja das komplette Fehlen von
jeglichem Code, dass das <tr> haette generieren koennen.
weil ich Fehlermeldungen bekam, sobald ich "$my->tr()" oder auch "$my->Tr()" in meinen Code eingebaut hatte. Der zitierte Codeschnipsel sollte wenigstens funktionieren, auch wenn die erzeugte "Tabelle" nur eine Krücke war.
Im übrigen war Michael mit seinem Hinweis näher an einer Problemlösung dran. Solange ich nur "use CGI;" vorgebe, kann das von Andreas zitierte Beispiel sowieso nicht funktionieren, da es "use CGI ':standard';" verlangt.
Was hast du denn bisher probiert?
Ich habe das Script, um das es mir ging, heute nicht auf einem WINDOWS-Rechner laufen lassen, sondern mit meiner FreeBSD-Maschine aufgerufen - auf die Idee komme ich auch nicht immer. Da funktionierte es völlig problemlos (unter Beachtung der Schreibweise "Tr". auf die Miachael aufmerksam gemacht hat). Die einzig mögliche Schlußfolgerung war, auf dem Windows-Rechner, den ich gestern benutzt hatte, die PERL-Installation zu revidieren.
Und das wars dann. Problem beseitigt.
Grüße aus Berlin
Christoph S.
Hallo Christoph,
das ist überhaupt keine Problembeschreibung, sondern die Antwort auf den Satz:
Das wollte ich damit anmerken :)
weil ich Fehlermeldungen bekam, sobald ich "$my->tr()" oder auch "$my->Tr()" in meinen
Code eingebaut hatte.
*Welche* denn? :)
Der zitierte Codeschnipsel sollte wenigstens funktionieren, auch wenn die erzeugte
"Tabelle" nur eine Krücke war.
Ja, sollte es, sofern du CGI.pm mit qw/:all/ oder so eingebunden hast.
Im übrigen war Michael mit seinem Hinweis näher an einer Problemlösung dran. Solange ich
nur "use CGI;" vorgebe, kann das von Andreas zitierte Beispiel sowieso nicht
funktionieren, da es "use CGI ':standard';" verlangt.
Natuerlich. Hat ja auch keiner bestritten, aber du hast ja die Objekt-Orientierte Variante
benutzt, in deinem Beispiel. Ich war natuerlich davon ausgegangen, dass du die
Transfer-Leistung (funktional <-> OO) selber hinbekommst -- und wie du siehst, habe ich mich
nicht geirrt :)
Da funktionierte es völlig problemlos (unter Beachtung der Schreibweise "Tr". auf die
Miachael aufmerksam gemacht hat). Die einzig mögliche Schlußfolgerung war, auf dem
Windows-Rechner, den ich gestern benutzt hatte, die PERL-Installation zu revidieren.
Welche Perl-Version, welche CGI.pm-Version (perl -v und perl -MCGI -e 'print $CGI::VERSION).
Gruesse,
CK, verbotenerweise hier :)
guten Abend,
Welche Perl-Version
This is perl, v5.6.1 built for MSWin32-x86-multi-thread.
Das war es vorher auch schon.
, welche CGI.pm-Version
$CGI::revision = '$Id: CGI.pm,v 1.49 2001/02/04 23:08:39 lstein Exp $';
$CGI::VERSION='2.752';
steht in der CGI.pm. Ob das dieselbe ist, die ich auch gestern hatte, weiß ich nicht.
CK, verbotenerweise hier :)
verbotenerweise ?
Grüße aus Berlin
Christoph S.
Tag Christoph,
Welche Perl-Version
This is perl, v5.6.1 built for MSWin32-x86-multi-thread.
Wie -- noch kein Perl 5.8.0? :) (http://dev.perl.org/perl5/news/2002/07/18/580ann/)
$CGI::VERSION='2.752';
Damit geht das in jedem Fall -- meine eigene Version ist ein ganzes
Stueck aelter :)
steht in der CGI.pm. Ob das dieselbe ist, die ich auch gestern
hatte, weiß ich nicht.
Schade.
CK, verbotenerweise hier :)
verbotenerweise ?
Japp -- ich hatte eigentlich Self-Ferien versprochen *g*
Gruesse,
CK
hi,
Wie -- noch kein Perl 5.8.0? :) (http://dev.perl.org/perl5/news/2002/07/18/580ann/)
habs mir für FreeBSD geholt, aber noch nicht installiert - und für meine WinXP-Maschine will ich abwarten, bis es etwas Entsprechendes bei ActiveState gibt
Japp -- ich hatte eigentlich Self-Ferien versprochen *g*
ok, ich sags auch nicht weiter
Grüße aus Berlin
Christoph S.