Homepage Inspire-world | Forum
CGI/Perl Workshops Passwort vergessen?

 Inhaltsverzeichnis/Workshops Übersichtsseite/Passwort vergessen?
Hier in diesem Workshop will ich einmal erklären wie man den Usern die Möglichkeit geben kann vergessene Zugangsdaten per Mail anzufordern.

1. Hier zunächst einmal das Formular zum eintragen der Mailadresse

<html>
<head>
<title>Passwort zusenden</title>
</head>

<body>
<font face="Verdana, Arial" size="2">Ihre E-Mail Adresse</font><br>
<form action="../cgi-bin/vergessen.pl" method="post">
<input type=text name=mailadresse size=16>
<input type=submit value="Passwort senden"></form>

</body>
</html>

Hier nun das Script welches die Daten versendet

#!/usr/bin/perl

# Der Pfad zu Ihrem Mailprogramm
$mailprog = '/usr/sbin/sendmail';

# E-Mail des Empfängers UNBEDINGT den \ vor dem @ notieren
$webmastermail = "webmaster\@ihredomain.de";

############################################################

read(STDIN, $input, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $input);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
###############################################################
# Formularfeldname des Passwortformulares
$mailadresse = $FORM{'mailadresse'};

# Userdatenbank öffnen
open (FILE,"<userdb.dat");
flock(FILE,2);
@users=<FILE>;
flock(FILE,8);
close (FILE);

foreach (@users) # Userdatenbank durchsuchen
{
($email,$user,$passwort)=split(/\|/,$_);
if ($email eq $mailadresse)
{


open (MAIL, "|$mailprog -t") || die $!;
print MAIL "To: $mailadresse\n";
print MAIL "From: $email_liste[$empfaenger]\n";
print MAIL "Subject: Ihre Zugangsdaten\n";
print MAIL "Hier ihre Zugangsdaten\n";
print MAIL "User: $user \n";
print MAIL "Passwort: $passwort\n";
print MAIL "Viele Grüße\n";
print MAIL "Webmaster\n";
close(MAIL);

$gefunden=1;
}
}
if ($gefunden)
{


print "Content-type: text/html\n\n";
print qq~
<html>
<head>
<title>Userdaten gesendet</title>
</head>
<body>
<div align=center>
<font size=2 face=verdana, Arial><b>Userdaten gesendet</b><br>
Ihre Zugangsdaten wurden versendet.<br>
</font></div></body>
</html>
~;
} else {

print "Content-type: text/html\n\n";
print qq~
<html>
<head>
<title>User nicht gefunden</title>
</head>
<body>
<div align=center><table bgcolor=#F2F2F2 width=500 cellspacing=4 cellpadding=4><tr><td>
<font size=2 face=verdana, Arial><b>User nicht gefunden</b><br>
Zu der angegebenen E-Mail Adresse wurden leider keine Daten gefunden.<br>
</font>
</td></tr></table></div></body>
</html>
~;
}
exit;
Erläuterungen zum Script:

Der erste Abschnitt bis zu # Formularfeldname des Passwortformulares sollte eigentlich jedem klar sein der die vorangegangenen Workshops durchgearbeitet hat.

Hier in diesem Abschnitt wird nun zuerst einmal die Userdatenbank geöffnet und in das Array @users gepackt.
# Userdatenbank öffnen
open (FILE,"<userdb.dat");
flock(FILE,2);
@users=<FILE>;
flock(FILE,8);
close (FILE);
Hier nun wird mittels einer foreach Schleife das Array durchsucht.
Damit nun auch was gefunden werden kann wird angegeben wie die Datenbank aufgeteilt (gesplittet) ist. Hier in dem Falle steht die Mailadresse am Anfang des Datensatzes. Diese könnte natürlich genausogut in der Mitte oder am Ende stehen. Der Bereich split(/\|/,$_); Legt nun fest mit welchem Trennzeichen die Datenbank gesplittet ist.
foreach (@users) # Userdatenbank durchsuchen
{
($email,$user,$passwort)=split(/\|/,$_);
if ($email eq $mailadresse)
{
Bei if ($email eq $mailadresse) wird nun verglichen ob die eingegebene E-Mail Adresse zu einer Adresse in der Datenbank passt. eq = Entspricht


Ist diese Bedingung erfüllt wird eine Mail mit den Daten gesendet. Ansonsten schickt uns die
$gefunden=1;
}
}
if ($gefunden)
{
zu der Fehlermeldung. Bei solchen foreach, if und else Konstrukten muss man peinlichst genau darauf achten die Klammern richtig zu setzen. Hier in dem Beispiel wird eine öffnende Klammer bei foreach und gleich darunter bei if geöffnet, geschlossen werden diese unterhalb der else Abfrage.

Dieses Script kann mit den entsprechenden Modifikationen (Datenbankname/Pfad/Datenbankstruktur) eigentlich sehr universell eingesetzt werden.


 Zum Inhaltsverzeichnis/Workshops Übersichtsseite/Passwort vergessen?
Autor: Helmut Walter Homepage Inspire-world Fragen, Anregungen und Hinweise bitte in das Forum

Valid HTML 4.0! Valid CSS!