Problem mit Templates

Alles, was Perl betrifft, kann hier besprochen werden.

Problem mit Templates

Postby magui » 17. August 2005 21:49

Hallo, schon wieder ich.

Ich hab da noch ein script bei dem ich einfach nicht weiterkomme.
Ich habe das aus einem Perl buch und das Script soll den Umgang mit Templates erklären.
Allerdings kommt bei mir im Browser nur eine leere Seite.
Ich vermute das es an der $SCRIPT_NAME liegt, da die zugewiesene Variable leer bleibt.
Wenn ich allerdings die Variablen mit einem kleinen Programm ausgeben lasse dann ist der Eintrag richtig.
Ich weiss nicht mehr weiter.

Hier der (ziemlich lange) Quellcode:

#!c:\apachefriends\xampp\xampp\perl\bin\perl.exe

use strict;
use CGI qw( :cgi );
use Template ();

#_______________________________________________________
#________START HAUPTPROGRAMM_____________________________
#variablen für das Template verzeichnis und unsere eigene URI unter dem wir vom client aufgerufen werden
our $templDir= "C:/templates";
our $action = $ENV{"SCRIPT_NAME"};
print $action;
our $q=new CGI();



#--->VARIABLEN
our $login="";
our $pwd="";
our $pwdRepeat="";
our $email="";
our $firstname="";
our $lastname="";
our $gender="";
our $street="";
our $zip="";
our $city="";
our $bankName="";
our $bankCode="";
our $accountNum="";
#<---

#http header senden
our @headers=("Content-Type: text/html" );
our $headersSent=0;

printHeaders();


my $formName = $q->param( "formName" );
unless ($formName)
{
printLoginForm();
exit (0);
}

if ($formName eq "loginForm")
{
unless (checkLoginForm())
{
printLoginForm();
exit (0);
}
printPersForm();
exit(0);
}
elsif ($formName eq "persForm")
{
unless (checkPersForm())
{
printPersForm();
exit(0);
}
printPmtForm();
exit(0);
}
elsif ($formName eq "pmtForm")
{
unless (checkPmtForm())
{
printPmtForm();
exit(0);
}
printReviewForm();
exit(0);
}
elsif ($formName eq "ReviewForm") #Speicherung der Daten und Ausgabe
{
printAnswer();
exit(0);
}
else
{
print("$formName ist ein falsches Formular");
exit(1);
}
exit(0);

#_______________________________________________________
#________ENDE HAUPTPROGRAMM_____________________________
#_______________________________________________________

#SUBFUNKTIONEN:
#*******************************************************
sub checkLoginForm
{
#alle Formulardaten einlesen
#um undef werte auszuschliessen werden sie mit einen leeren string belegt wenn sie einen false wert besitzen
$login = $q->param( "login" ) || "";
$pwd = $q->param( "pwd" ) || "";
$pwdRepeat = $q->param( "pwdRepeat" ) || "";
$email = $q->param( "email" ) || "";

#Keines der Felder darf leer sein
unless ($login and $pwd and $pwdRepeat and $email)
{
return undef;
}

#Kennwort wiederholung überprüfen:
if($pwdRepeat ne $pwd)
{
return undef;
}

return 1;
}

#*******************************************************
sub checkPersForm
{
$firstname = $q->param( "firstname" ) || "";
$lastname = $q->param( "lastname" ) || "";
$gender = $q->param( "gender" ) || "";
$street = $q->param( "street" ) || "";
$zip = $q->param( "zip" ) || "";
$city = $q->param( "city" ) || "";

unless($firstname and $lastname and $gender and $street and $zip and $city)
{
return undef;
}

return 1;
}

#*******************************************************
sub checkPmtForm
{
$bankName = $q->param( "bankName" ) || "";
$bankCode = $q->param( "bankCode" ) || "";
$accountNum = $q->param( "accountNum" ) || "";

unless($bankName and $bankCode and $accountNum)
{
return undef;
}
}

#*******************************************************
sub addHeader
{
#Funktion mit welcher ein oder mehrere http Header in die zu sendenden Liste aufgenommen werden
#die Liste der Header steht in der globalen Variable @headers

#keine leeren header aufnehmen
unless (@_) {return;}
push( @headers,@_); #push: fügt ein oder mehrere Elemente an ein array an
}

#*******************************************************
sub printHeaders
{
#Funktion die alle http header an den Client schickt; muss vor der ausgabe von daten aufgerufen werden
#mit der Variablen $headersSent wird verhindert das die header mehrfach gesendet werden

if( $headersSent)
{
return;
}

foreach my $header (@headers)
{
print ("$header\n");
}
print ("\n");
$headersSent=1;
}

#*******************************************************
sub printLoginForm
{
#Funktion für das Formular der Logindaten
my $fname="wfLoginForm.html";
my $path="$templDir/$fname";
my $templ = new Template( $path, "r" );

unless( $templ )
{
return undef;
}

my %subs =(); #Hash deklarieren

# $action wird im Hauptprogramm gesetzt
#Hash mit keys und werten setzen
$subs{"action"} = $action;
$subs{"login"} = $q->param( "login" ) || "";
$subs{"pwd"} = $q->param( "pwd" ) || "";
$subs{"pwdRepeat"} = $q->param( "pwdRepeat" ) || "";
$subs{"email"} = $q->param( "email" ) || "";

print( $templ->substitute( \%subs )); #referenz auf das subs-hash
}

#*******************************************************
sub printPersForm
{
#Funktion für die Ausgabe der pers. Daten
my $fname="wfPersForm.html";
my $path="$templDir/$fname";
my $templ=new Template($path,"r");

unless ($templ)
{
return undef;
}

my %subs=(); #hash deklarieren

$subs{"action"}=$action;
$subs{"firstname"}=$q->param("firstname")||"";
$subs{"lastname"}=$q->param("lastname")||"";
$subs{"gender"}=$q->param("gender")||"";
$subs{"femaleChecked"}="checked";
if($gender eq "m")
{
$subs{"maleChar"}="r";
$subs{"maleChecked"}="checked";
$subs{"femaleChecked"}="";
$subs{"title"}="Herr";
}

$subs{"street"}=$q->param("street")||"";
$subs{"zip"}=$q->param("zip")||"";
$subs{"city"}=$q->param("city")||"";

print($templ->substitute(\%subs));
}

#*******************************************************
#Funtkion für die Ausgabe des Formulars der Zahlungsmethode
sub printPmtForm
{
my $fname="wfPmtForm.html";
my $path="$templDir/$fname";
my $templ=new Template($path,"r");

unless ($templ)
{
return undef;
}

my %subs=(); #hash deklarieren

$subs{"action"}=$action;
$subs{"bankName"}=$q->param("bankName")||"";
$subs{"bankCode"}=$q->param("bankCode")||"";
$subs{"accountNum"}=$q->param("accountNum")||"";

print($templ->substitute(\%subs));
}

#*******************************************************
#Funtkion für den Review Step:
sub printReviewForm
{
my $fname="wfReview.html";
my $path="$templDir/$fname";
my $templ=new Template($path,"r");

unless ($templ)
{
return undef;
}

my %subs=(); #hash deklarieren

$subs{"action"}=$action;
$subs{"login"}=$q->param("login")||"";
$subs{"pwd"}=$q->param("pwd")||"";
$subs{"pwdRepeat"}=$q->param("pwdRepeat")||"";
$subs{"email"}=$q->param("email")||"";
$subs{"firstname"}=$q->param("firstname")||"";
$subs{"lastname"}=$q->param("lastname")||"";
$subs{"gender"}=$q->param("gender")||"";
$subs{"street"}=$q->param("street")||"";
$subs{"zip"}=$q->param("zip")||"";
$subs{"city"}=$q->param("city")||"";
$subs{"accountNum"}=$q->param("accountNum")||"";

print($templ->substitute(\%subs));
}

#*******************************************************
#Funtkion für die Ausgabe der Antwort nach dem Commit step:
sub printAnswer
{
my $fname="wfCommit.html";
my $path="$templDir/$fname";
my $templ=new Template($path,"r");

unless ($templ)
{
return undef;
}

my %subs=(); #hash deklarieren

my $gender=$q->param("gender");
$subs{"maleChar"}=($gender eq "m")?"r":"";
$subs{"title"}=($gender eq "m")?"Herr":"Frau";
$subs{"lastname"}=$q->param("lastname")||"";
$subs{"login"}=$q->param("login")||"";

print($templ->substitute(\%subs));
}

Kann das jemand zum laufen bringen?
Bin um jede Hilfe dankbar.
magui
 
Posts: 5
Joined: 13. August 2005 13:59

Return to Perl

Who is online

Users browsing this forum: No registered users and 8 guests