Ich denke, das hat mit dem alten Thema (siehe
http://www.hilfdirselbst.ch/...18&topic_id=3615 ) nix mehr zu tun, deshalb mach ich mal nen neuen Threat draus... Damit jeder weiß, worum es geht: Ein Bereich einer Website ist mit .htaccess und .htpasswd geschützt und die Benutzer sollen ihre Passwörter selbstständig ändern können.
Also Ollli, ich hab mir dein "Anfängerscript" mal zu Gemüte geführt, check es aber doch nicht so ganz. Nur mal im groben, Schritt für Schritt:
Du hast eine Seite mit einem Formular mit 4 Eingabefeldern:
Benutzername; Altes Passwort; Neues Passwort; Neues Passwort wiederholen
Die eingegebenen Daten werden mit POST an das Script übergeben. Dieses vergleicht den Benutzername und das alte Passwort mit den Daten in der Datei, die die Zugangsdaten enthält. Sind die Daten vorhanden/korrekt, wird das alte Passwort ersetzt und es kommt eine Bestätigungsseite. Soweit sogut.
Jetzt mal zum eigentlichen Script - ich kommentier mal etwas :)
Langsam, ausführlich und der Reihe nach, soweit ich eben weiß...
(Hab SelfHTML neben mir legen, ich versuch mal selber rauszu-
kriegen, was das Zeug alles bewirkt ;)
$passwd_pfad = "/....../ollli/.htpasswd";
$passwdbackup = "/......./ollli/.htpass2";
# Damit werden die Adressen in Variablen gespeichert.
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
# Damit werden die übertragenen Formulardaten ausgelesen.
# Read heißt lesen, STDIN weiß ich nimma (01)
# $ENV ist eine CGI-Umgebungsvariable,
# CONTEN_LENGTH enthält die Anzahl der Zeichen, die mit POST
# übertragen wurden.
# Diese Daten werden im Skalar (in der Variablen) $buffer ge-
# speichert.
# Damit ergibt sich Frage (01): Was war nochmal STDIN?
@pairs = split(/&/, $buffer);
# Im Arrey @pairs werden die übertragenen Daten aus $buffer
# gesplittet und einzeln gespeichert. Also z.B.
# my @pairs = ("Benutzername", "Klaus", "Altes_Passwort", ...);
# Frage 02: Wäre es hier nicht sinnvoller, einen Hash zu "dekla-
# rieren"? Also z.B. my %Daten = split(...); Und was heißt /&/ ?
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
$value =~ s/<([^>]|\n)*>//g;
$FORM{$name} = $value;
}
# foreach ist eine Schleife, die Listen und Arrays durchläuft.
# In diesem Fall wird der Array @pairs durchlaufen, und der
# jeweils aktuelle Wert des Schleifendurchlaufs wird im Skalar
# $pairs gespeichert. Ich glaub, jetzt weiß ich auch, warum du
# oben keinen Hash verwendest, den kann man nicht so einfach mit
# foreach durchlaufen.
# Aber was macht die Schleife? Bitte das Zeug in der geschweiften
# Klammer mal erklären (3). Was heißt /=/ ? und der ganze Rest?
# Das ist mir irgendwie schon zuviel :(
- - - - - - - - - - - - - - - - - -
Erst mal soweit. Wenn du mir hier kurz weiterhilfst, mach ich weiter. Ich weiß, dass die Schleife die Daten in Formularfeldernamen und Werte trennt, aber die Befehle verstehe ich nicht so recht.
- - - - - - - - - - - - - - - - - -