#!/usr/bin/perl
# Angabe das hier CGI Prameter genutzt werden
use CGI qw(param);
######################################################
# Das Passwort für den Admin
$password = "Admin";
# Das Passwort für den User
$userp = "User";
######################################################
# Variablendefinition von $action
# Es wird hier festgelegt bei welcher Aktion
# welche Subroutine aufgerufen wird
$action = param('action');
######################################################
# Die action Parameter.
# Bei keinem Parameter (eq "") wird der Login aufgerufen
if ($action eq ""){&administratorlogin}
elsif ($action eq "login"){&startseite}
elsif ($action eq "seitezwei"){&seitezwei}
elsif ($action eq "seitedrei"){&seitedrei}
elsif ($action eq "seitevier"){&seitevier}
elsif ($action eq "user"){&userdaten}
elsif ($action ne "login" or "seitezwei" or "seitedrei" or "seitevier"){&errorroutine}
# Die obere Zeile ist eine kleine zusätzliche Sicherheit
# wird das Script mit anderen als den hier notierten Parametern
# aufgerufen heisst das den Aufruf der Subroutine
# sub errorroutine zu veranlassen. Da für den Userteil eine eigene
# Fehlerprüfung eingebaut ist ist hier der Parameter user nicht mit gelistet
######################################################
sub administratorlogin {
print "Content-type: text/html\n\n";
print qq~
<form action="pass2.pl" method="post">
<input type="hidden" name="action" value="login">
<b>Administratorlogin</b><br>
Passwort <input type="passwort" name="password" size="15"> "<b>Admin</b>" zum Login benutzen
<br><br>
<input type="Submit" value="Einloggen"></td>
</form>
<br><br>
<hr>
<form action="pass2.pl" method="post">
<input type="hidden" name="action" value="user">
<b>User Login</b><br>
Passwort <input type="passwort" name="userp" size="15"> "<b>User</b>" zum Login benutzen
<br><br>
<input type="Submit" value="Einloggen"></td>
</form>
~;
exit;
}
######################################################
sub startseite {
# Parameterdefinition für das zu übergebende Passwort
$pass = param("password");
# Entspricht das Passwort dem Passwort
if ($password eq $pass) {
# Hier wird nun die subroutine "sub header" eingebunden.
&header;
print qq~
Das ist die erste Seite nach dem Login<br>
Hier können dann weitere beliebige Operationen ausgeführt werden.
~;
&footer;
# Hier wird nun die subroutine "sub footer" eingebunden.
} else{
&errorroutine
}
}
######################################################
sub seitezwei {
# Parameterdefinition für das zu übergebende Passwort
$pass = param("password");
# Entspricht das Passwort dem Passwort
if ($password eq $pass) {
# Hier wird nun die subroutine "sub header" eingebunden.
&header;
print qq~
Das ist die zweite Seite nach dem Login<br>
Hier können dann weitere beliebige Operationen ausgeführt werden.
~;
&footer;
# Hier wird nun die subroutine "sub footer" eingebunden.
} else {
&errorroutine;
}
}
######################################################
sub seitedrei {
# Parameterdefinition für das zu übergebende Passwort
$pass = param("password");
# Entspricht das Passwort dem Passwort
if ($password eq $pass) {
# Hier wird nun die subroutine "sub header" eingebunden.
&header;
print qq~
Subroutine 3<br>
Hier können dann weitere beliebige Operationen ausgeführt werden.
~;
&footer;
# Hier wird nun die subroutine "sub footer" eingebunden.
} else {
&errorroutine;
}
}
######################################################
sub seitevier {
# Parameterdefinition für das zu übergebende Passwort
$pass = param("password");
# Entspricht das Passwort dem Passwort
if ($password eq $pass) {
# Hier wird nun die subroutine "sub header" eingebunden.
&header;
print qq~
Subroutine 4<br>
Hier können dann weitere beliebige Operationen ausgeführt werden.
~;
&footer;
# Hier wird nun die subroutine "sub footer" eingebunden.
} else {
&errorroutine;
}
}
######################################################
sub userdaten {
# Parameterdefinition für das zu übergebende Passwort
# Achtung, hier sind andere Variablen anzuwenden
$pass = param("userp");
# Entspricht das Passwort dem Passwort
# Achtung, hier sind andere Variablen anzuwenden
if ($userp eq $pass) {
print "Content-type: text/html\n\n";
print qq~
<html>
<head><title>Userbereich</title></head>
<body>
Das ist der Userbereich, dieser kann wiederum ganz anders gestaltet sein.<br>
<a href="pass2.pl">Logout</a>
</body>
</html>
~;
} else {
# Fehlermeldung bei ungültigen Daten
print qq~
<html>
<head><title>FEHLER</title></head>
<body>
<div align="center"><b>Fehler: Falscher Username oder Passwort!</b><br><br>
<form action="pass2.pl" method="post">
<input type="hidden" name="action" value="user">
<font face="Verdana, Arial" size="2">Passwort</font>
<input type="password" name="password" size="15"><br><br>
<input type="Submit" value="Einloggen">
</form>
</body>
</html>
~;
}
}
######################################################
# ERRORROUTINE BEI FALSCHEM LOGIN
######################################################
# errorroutine
sub errorroutine {
print "Content-type: text/html\n\n";
print qq~
<html>
<head>
<title>Administrator Login</title>
</head>
<body>
<div align="center">
<font face="Verdana, Arial" size="2" color="red">
<b>Fehler: Falsches Passwort!</b></font><br><br>
<form action="pass2.pl" method="post">
<input type="hidden" name="action" value="login">
<font face="Verdana, Arial" size="2">Passwort</font>
<input type="password" name="password" size="15"><br><br>
<input type="Submit" value="Einloggen">
</form>
</div>
</body>
</html>
~;
exit;
}
######################################################
# HEADER UND FOOTER BEREICH
######################################################
# Header
sub header {
$pass = param("password");
print "Content-type: text/html\n\n";
print qq~
<html>
<head>
<title>Administrationspaneel</title>
</head>
<body>
<div align="center">
<table cellspacing="2" cellpadding="2" border="0" width="600">
<tr>
<td colspan="2">
<table bgcolor="#000080" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td>
<table cellspacing="1" cellpadding="2" border=0" width="100%">
<tr>
<td bgcolor="#EFEFEF">
<font face="Verdana, Arial" size="2"><b>Administrationspaneel</b></font></td>
</tr>
</table>
</td></tr></table>
</td>
</tr>
<tr>
<td valign="top" bgcolor="#EFEFEF" width="150">
<!-- Menü hier einfügen -->
<form action="pass2.pl" method="post">
<input type="hidden" name="action" value="seitezwei">
<input type="hidden" name="password" value="$pass">
<input type="Submit" value="Subroutine 2"><br><br>
</form>
<form action="pass2.pl" method="post">
<input type="hidden" name="action" value="seitedrei">
<input type="hidden" name="password" value="$pass">
<input type="Submit" value="Subroutine 3"><br><br>
</form>
<form action="pass2.pl" method="post">
<input type="hidden" name="action" value="seitevier">
<input type="hidden" name="password" value="$pass">
<input type="Submit" value="Subroutine 4"><br><br>
</form>
<form action="pass2.pl" method="post">
<input type="hidden" name="action" value="login">
<input type="hidden" name="password" value="$pass">
<input type="Submit" value="Startseite"><br><br>
</form>
<form action="pass2.pl" method="post">
<input type="Submit" value="Logout">
</form>
<!-- Menü hier einfügen --></td>
<td valign="top"><!-- HEADERENDE -->
~;
}
######################################################
# Footer
sub footer {
print qq~
<!-- FOOTERANFANG --></td>
</tr>
<tr>
<td colspan="2">
<table bgcolor="#000080" cellspacing="0" cellpadding="0" border="0" width="100%">
<tr>
<td>
<table cellspacing="1" cellpadding="2" border=0" width="100%">
<tr>
<td bgcolor="#EFEFEF">
<font face="Verdana, Arial" size="2"><b>Administrationspaneel</b></font></td>
</tr>
</table>
</td></tr></table></td></tr></table>
</div>
</body>
</html>
~;
exit;
}
Script Demo: Passwort2.pl
Erläuterungen zum Script:
Also weiter geht's...
elsif ($action ne "login" or "seitezwei" or "seitedrei" or "seitevier"){&errorroutine}
Hier habe ich zunächst noch was notiert was bei der übergabe von falschen Parametern die Subroutine errorroutine aufruft.
Das "ne" bei elsif steht für » Entspricht nicht « zu gut Deutsch.
Nun weiter mit den Subroutinen und deren Verwendung/Einbindung
Wie jeder sehen wird habe ich hier am Scriptende Subroutinen für Header, Footer und Error angelegt. Eingebunden werden diese Subroutinen nun mit
z.B. &header; Es ist also erstmal egal wo die Subroutine sich befindet, genauso hätte ich diese mitten zwischen die anderen Routinen notieren können.
Hier soll vielmehr verdeutlicht werden was damit möglich ist. Diese Header, Footer und Errorroutine sind ja hier erstmal nur als Verdeutlichung der Funktionsweise und der Vorteile von Subroutinen gedacht.
Subroutinen können ja auch Code enthalten der spezielle Scriptfunktionen z.B. Datum, eine Mailfunktion uvam. beinhaltet. Hier in dem Beispiel ist es das "Scriptdesign" mitsamt Menü.
Dieses brauche ich dann halt nicht komplett in jeder Subroutine neu zu schreiben - es wird ganz einfach an der Stelle eingebunden.
Hinweis!
Die Einbindung von Subroutinen kann nicht in einem Bereich erfolgen der mit
print qq~
...
~;
oder ähnlichem eingeschlossen ist.
Subroutinen kann man auch auslagern...
Eine weitere Möglichkeit ist es Subroutinen in externen Dateien zu notieren. Diese externen Subroutinen werden ohne die
#!/usr/bin/perl Zeile notiert und mit require "subroutinenname.pl"; in das Script eingebunden.
Externe Subroutinen enden mit 1;
Beispiel
# Externe Subroutine zum Zählen von Zeilen
open(DATEI,"$datei");
while(<DATEI>) {
$zeilen = $_;
chomp($zeilen);
$zeilenanzahl = $zeilenanzahl + 1;
}
close(DATEI);
1;
Dies ist natürlich nur ein kleines Beispiel, denkt man aber an ein Forum wird schnell deutlich wie nützlich das sein kann.
Ich könnte hiermit z.B. die Userzahl im Forum ausgeben lassen und auch in der Administration.
Genauso einfach ist es Subroutinen ein und aus zu schalten. Hier könnte man das nutzen um in einem Script je nach Useranforderung
Mails zu senden oder auch nicht.
if ($emailbenachrichtigung eq "ja") {
require "mail.pl";
}
Diese Subroutinenausgabe die von Bedingingen abhängig gemacht wird ist auch sehr gut zu nutzen um z.B. Menüs bestimmten Usergruppen anzuzeigen oder auch nicht.
So kann man wenn ein Passwort zum Administrator passt dessen Menü aufrufen und bei einem Userlogin ein ganz anderes.
|