Schrift
[thread]8640[/thread]

HTML::Template Parameter Fehler

Leser: 1


<< >> 10 Einträge, 1 Seite
kruemmel
 2007-01-13 23:01
#73168 #73168
User since
2006-02-12
33 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe eine mysql DB namens info mit einer Tabelle namens infotable. Aus dieser DB bzw. Tabelle sollen alle Daten ausgelesen und ausgegeben werden. Das ganze mache mit Perl und dem Modul HTML::Template. Hier einmal mein Template und mein Perl Script


HTML Template:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
   
<html lang="en">
   <head>
   
       <title><"Ergebnis von auth.log"></title>
   
   </head>

   <body>
   
       <h1>Tabelle f&uuml;r die Datei auth.log</h1>
   
       <table border="1">
           <caption>Assoziationen</caption>
               <tr>
                   <th>Monat</th>
                   <th>Tag</th>
                   <th>Zeit</th>
                   <th>Host</th>
                   <th>Dienst</th>
                   <th>Meldung</th>
               </tr>
       
           <TMPL_LOOP NAME="data">
       
               <tr>
                   <td>TPMPL_VAR NAME="monat"</td>
                   <td>TPMPL_VAR NAME="tag"</td>
                   <td>TPMPL_VAR NAME="zeit"</td>
                   <td>TPMPL_VAR NAME="host"</td>
                   <td>TPMPL_VAR NAME="dienst"</td>
                   <td>TPMPL_VAR NAME="meldung"</td>
               </tr>
       
           </TMPL_LOOP>
       </table>
   
   </body>
   
</html>


und hier mein Perl Script
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/perl -w

use strict;
use DBI;
use HTML::Template;


# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Datenbankdaten und Verbindung zur DB herstellen
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Datenbank
my $datenbank = "info";
# Datenbankhost
my $datenbankhost = "127.0.0.1";
# Datenbankusername
my $datenbankuser = "root";
# Datenbankpasswort
my $datenbankpw = "";


my $dbh = DBI->connect("DBI:mysql:$datenbank:$datenbankhost","$datenbankuser","$datenbankpw")
or die "Fehler bei der Datenbankverbindung aufgetreten.";

my $sth = $dbh->prepare('select  Monat, Tag, Zeit, Host, Dienst, Meldung
                       from infotable');

$sth->execute();

my $rows;
push @{$rows}, $_ while $_ = $sth->fetchrow_hashref();

my $template = HTML::Template->new(filename => 'template1.html');
$template->param(data => $rows);

print $template->output();

$dbh->disconnect();



Wenn ich das Perl Script ausführe bekomme ich eine Fehlermeldung in das error.log File. Die Fehlermeldung sieht so aus:

Code: (dl )
1
2
3
[Sat Jan 13 21:40:45 2007] [error] [client 127.0.0.1] HTML::Template->output() : fatal error in loop output : HTML::Template : Attempt to set nonexistent parameter 'meldung' - this parameter name doesn't match any declarations in the template file : (die_on_bad_params => 1) at /usr/local/share/perl/5.8.8/HTML/Template.pm line 2997
[Sat Jan 13 21:40:45 2007] [error] [client 127.0.0.1]  at /opt/lampp/htdocs/xampp/testperl.pl line 38
[Sat Jan 13 21:40:45 2007] [error] [client 127.0.0.1] Premature end of script headers: testperl.pl


Kann es sein, dass das Modul HTML::Template einen Fehler hat? Ich benutze die Version 2.8. Ich verstehe nicht was mit dem  Parameter meldung nicht stimmt. Es ist ein Parameter aus der Tabelle infotable unzwar der letzte der Tabelle. Hat vielleicht einer von euch eine Idee ?

edit pq: code-tags hinzugefügt\n\n

<!--EDIT|pq|1168792872-->
esskar
 2007-01-13 23:06
#73169 #73169
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
im SQL sind Monat, Tag, Zeit, Host, Dienst, Meldung groß geschrieben.

im template sind diese aber klein geschrieben
deswegen der ärger
kruemmel
 2007-01-13 23:22
#73170 #73170
User since
2006-02-12
33 Artikel
BenutzerIn
[default_avatar]
Hallo esskar,

erst einmal Danke für deine sehr schnelle Antwort. Wahnsinn

Es lag aber nicht an der Groß- und Kleinschreibung. Ich habe mal alles Groß geschrieben (im sql und im Script + HTML Template)

Wenn ich das Script aufrufe bekomme ich im Browser folegendes angezeigt.


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>500 Internal Server Error</title>
</head><body>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error or
misconfiguration and was unable to complete
your request.</p>
<p>Please contact the server administrator,
[EMAIL=you@example.com]you@example.com[/EMAIL] and inform them of the time the error occurred,
and anything you might have done that may have
caused the error.</p>
<p>More information about this error may be available
in the server error log.</p>
<hr>
<address>Apache/2.2.3 (Unix) DAV/2 mod_ssl/2.2.3 OpenSSL/0.9.8d PHP/5.2.0 mod_apreq2-20051231/2.5.7 mod_perl/2.0.2 Perl/v5.8.7 Server at localhost Port 80</address>
</body></html>



Diese Fehlermeldung verweist ja auf das error log und das sagt mir immer noch:

Code: (dl )
1
2
3
[Sat Jan 13 22:21:45 2007] [error] [client 127.0.0.1] HTML::Template->output() : fatal error in loop output : HTML::Template : Attempt to set nonexistent parameter 'meldung' - this parameter name doesn't match any declarations in the template file : (die_on_bad_params => 1) at /usr/local/share/perl/5.8.8/HTML/Template.pm line 2997
[Sat Jan 13 22:21:45 2007] [error] [client 127.0.0.1]  at /opt/lampp/htdocs/xampp/testperl.pl line 38
[Sat Jan 13 22:21:45 2007] [error] [client 127.0.0.1] Premature end of script headers: testperl.pl


edit pq: code-tags hinzugefügt\n\n

<!--EDIT|pq|1168793011-->
esskar
 2007-01-13 23:25
#73171 #73171
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
und was ist hiermit:
Code: (dl )
1
2
3
4
5
6
<td>TPMPL_VAR NAME="monat"</td>
<td>TPMPL_VAR NAME="tag"</td>
<td>TPMPL_VAR NAME="zeit"</td>
<td>TPMPL_VAR NAME="host"</td>
<td>TPMPL_VAR NAME="dienst"</td>
<td>TPMPL_VAR NAME="meldung"</td>


das muss doch

Code: (dl )
<TMPL_VAR NAME="monat">


usw heißen

aber groß und kleinschreibung ist auf jeden fall zu beachten
MisterL
 2007-01-13 23:37
#73172 #73172
User since
2006-07-05
334 Artikel
BenutzerIn
[default_avatar]
Guten Abend.

Schau an: da programmiert jemand unter Linux mit Perl, MySQL und XAMPP...(und ich muss hier mit der Windowsvariante Vorlieb nehmen :,-( )
Aber dieses Skript des Meisters wurde schon konsultiert ?
Von der Logik her werden hier nur andere Parameter verwendet.

Nachtrag: die ?-Notation sollte man übrigens nicht links liegen lassen. Auch "Escaping von Quoting-Zeichen genannt"

Gruss MisterL\n\n

<!--EDIT|MisterL|1168724360-->
“Perl is the only language that looks the same before and after RSA encryption.”
kruemmel
 2007-01-14 00:12
#73173 #73173
User since
2006-02-12
33 Artikel
BenutzerIn
[default_avatar]
Hallo,

esskar du hast recht ich habe

TMPL_VAR NAME="monat"

mit

TPMPL_VAR NAME="monat"

verwechselt. Jetzt bekomme ich auch eine andere error message ins log File. Sie lautet:

[Sat Jan 13 23:06:14 2007] [error] [client 127.0.0.1] malformed header from script. Bad header=<!DOCTYPE HTML PUBLIC "-//W3C/: testperl.pl
[Sat Jan 13 23:06:17 2007] [error] [client 127.0.0.1] malformed header from script. Bad header=<!DOCTYPE HTML PUBLIC "-//W3C/: testperl.pl
[Sat Jan 13 23:06:27 2007] [error] [client 127.0.0.1] malformed header from script. Bad header=<!DOCTYPE HTML PUBLIC "-//W3C/: testperl.pl
[Sat Jan 13 23:06:32 2007] [error] [client 127.0.0.1] malformed header from script. Bad header=<!DOCTYPE HTML PUBLIC "-//W3C/: testperl.pl

Ich denke mal das irgendetwas mit dem Dokumenten Typ des HTML Files nicht stimmt. Habe die Datei mal in meine IDE (Komodo) geladen und dort wird auch gleich gemeckert:

Access: [3.3.1.1]: use style sheets to control presentation
esskar
 2007-01-14 00:18
#73174 #73174
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code: (dl )
1
2
print "Content-Type: text/html\n\n";
print $template->output();
kruemmel
 2007-01-14 00:37
#73175 #73175
User since
2006-02-12
33 Artikel
BenutzerIn
[default_avatar]
Hallo,

Danke esskar,

dein letzter Typ hat mir die Ausgabe auch geliefert. Ich habe in der zwischenzeit auch noch etwas rum probiert und habe mal das CGI Modul mit reingeladen und die Zeilen

my $CGI = CGI->new();

und

print $CGI->header();

mit eingefügt.

Damit habe ich die Ausgabe auch hinbekommen. Eine Frage habe ich dann aber noch. Was ist der Unterschied zwischen dem laden des CGI Moduls und deiner Lösung (
print "Content-Type: text/html\n\n";)

Bei deiner Lösung brauche ich das CGI Modul nicht laden.
topeg
 2007-01-14 00:57
#73176 #73176
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Code: (dl )
$cgi->header();

Kann unter Umständen mehr ausgeben als "Content-Type: text/html\n\n".
Je nachdem was du mit dem CGI-Modul machst.
In deinem Fall gibt die Funktion aber nur den Content-Type als "text/html" aus.
Das sagt übrigens dem Browser wie die Daten, die er empfängt, darstellen soll. "text/plain" stellt die übermittelten Daten z.B. als unformatierten Text dar, oder "image/gif" als Gif-Bild.
bloonix
 2007-01-14 14:19
#73177 #73177
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=esskar,13.01.2007, 22:06]im SQL sind Monat, Tag, Zeit, Host, Dienst, Meldung groß geschrieben.

im template sind diese aber klein geschrieben
deswegen der ärger[/quote]
Es würde nur Ärger geben, wenn das Template mit der Option
case_sensitive geladen würde.

my $template = HTML::Template->new(
  filename => 'template.tmpl',
  case_sensitive => 1
);


Ansonsten ist Groß-Klein-Schreibung egal. In Template.pm wird
auf die Keys ein lc() ausgeführt.\n\n

<!--EDIT|opi|1168777250-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
<< >> 10 Einträge, 1 Seite



View all threads created 2007-01-13 23:01.