htaccess mit formular

tuccain

Mitglied
hola,

ich habe folgendes problem:

für einen geschützten bereich möchte ich die htacces-daten (user & pass) in ein html-formular eingeben und dann wahrscheinlich am besten via javascript eine popup-seite des geschützten bereichs öffen.

wie müsste der code aussehen? hab schon mehrmals was versucht aber leider ohne erfolg.

danke
tuccain
 
Nagut.
Aber die Beschreibung ist vielleicht etwas dürftig.
Was genau soll gemacht werden? Willst du, dass man die Daten in die Datei .htaccess (bzw. .htpasswd) per HTML-Formular eingeben kann, und diese dann in der Datei gespeichert werden sollen, oder sollen die Daten nur zur Anmeldung ausgelesen werden?
 
Da bin ich wieder.
Ich hab' eben (auf die Schnelle) ein Script geschrieben, dass deiner erforderlichen Funktionalität entsprechen sollte.
Sollte besser auch noch sauberer programmiert (z. B. nicht soviele Schleifen, ...) werden, aber darauf kommt es erstmal nicht an.

Ich hab's auch gleich getestet, (hab' 2 Namen in der .htpasswd).
Du musst das Script natürlich auch noch umschreiben, jenachdem, welche Crypt-String du übergeben hast (bei mir wars ja 21) und wo deine .htpasswd-Datei liegt.

Hier nun der Quellcode:

PHP:
<?php
if (isset($_POST['Name']) AND isset($_POST['Password'])) {
	$pwfile = file(".htpasswd");
	$Pass = crypt($Password, "21");
	$user_OK = false;

	foreach ($pwfile as $zeile) {
		$LoginData[] = explode(":", $zeile);
	}
	for ($i = 0; $i < count($LoginData); $i++) {
		if (($_POST['Name'] == $LoginData[$i][0]) AND $Pass == $LoginData[$i][1]) {
			$user_OK = true;
			break;
		}
		else {$user_OK = false;}
	}
	if ($user_OK == true) {
		echo "Login erfolgreich!<BR><BR><BR>";
		echo "<A HRef=\"javascript:window.open('file.php', 'Admin')\">Hier geht's weiter</A>";
	}
	else {
		echo "Login nicht erfolgreich!<BR><BR><BR>";
		echo "<A HRef=\"javascript:history.back()\">Hier geht's zurück</A>";		
	}
}
else {
	echo "<HTML><Body><Form Name=\"Login\" Method=\"POST\" Action=\"$PHP_SELF\">"
			."<Input Type=\"Text\" Name=\"Name\"><BR><Input Type=\"Password\" Name=\"Password\"><BR>"
			."<Input Type=\"Submit\" Value=\"Login\"></Form></Body></HTML>";
}
?>

Das "java script" musst du natürlich zusammen schreiben (wird vom Forum automatisch auseinander geschrieben).
Wenn's Fehler geben sollte, bitte melden!;)
 
OK, ich hab' 'nen Fehler entdeckt:

Wenn ich mich mit dem ersten Namen/Passwort aus der .htpasswd anmelden will, sagt mir das Script, dass die Daten falsch sind, beim zweiten Namen funktioniert alles wunderbar.
Wenn ich die Login-Daten und die Daten der .htpasswd aber per echo $Pass und echo $LoginData[$i][1] ausgeben lasse, sind diese absolut identisch!
Von der If-Abfrage weiss ich aber (ich hab' mal nur den Namens-vergleich stehen gelassen), dass das an dem Password liegen muss!

Wie kann das sein:confused:
 
Ich weiss zwar immernoch nicht, woran das liegt, aber ich hab's so umgeschrieben, dass es funktioniert:

PHP:
<?php
if (isset($_POST['Name']) AND isset($_POST['Password'])) {
	$pwfile = file(".htpasswd");
	$Pass = crypt($Password, '21');
	$user_OK = false;

	foreach ($pwfile as $zeile) {
		$a = strpos($zeile, ":");
		$fName = substr($zeile, 0, $a);
		$fPassword = substr($zeile, $a + 1, 13);
		
		if ($_POST['Name'] == $fName AND $Pass == $fPassword) {
			$user_OK = true;
			break;
		}
		else {$user_OK = false;}
	}
	if ($user_OK == true) {
		echo "Login erfolgreich!<BR><BR><BR>";
		echo "<A HRef=\"javascript:window.open('file.php', 'Admin')\">Hier geht's weiter</A>";
	}
	else {
		echo "Login nicht erfolgreich!<BR><BR><BR>";
		echo "<A HRef=\"javascript:history.back()\">Hier geht's zurück</A>";		
	}
}
else {
	echo "<HTML><Body><Form Name=\"Login\" Method=\"POST\" Action=\"$PHP_SELF\">"
			."<Input Type=\"Text\" Name=\"Name\"><BR><Input Type=\"Password\" Name=\"Password\"><BR>"
			."<Input Type=\"Submit\" Value=\"Login\"></Form></Body></HTML>";
}
?>


Hat denn jemand 'ne Ahnung, wo der Fehler beim ersten Script war?!
 
PHP:
foreach ($pwfile as $zeile) {
        $LoginData[] = explode(":", $zeile);
    }
    for ($i = 0; $i < count($LoginData); $i++) {
        if (($_POST['Name'] == $LoginData[$i][0]) AND $Pass == $LoginData[$i][1]) {
            $user_OK = true;
            break;
        }

wäre mir neu wenn du ein Multidimensionales Array erhalten würdest wenn du nen Explode aufrufst ^^

PHP:
        if (($_POST['Name'] == $LoginData[$i][0]) AND $Pass == $LoginData[$i][1]) {

Und was ich eigentlich noch wenniger verstehe
Wieso lest ihr mit Php ein ht File aus ^^?

http://selfhtml.teamone.de/diverses/htaccess.htm

nebenbei brauchst php evt. nur zur erstellung eines neuen Users... aber nicht zur Abfrage!
 
Zuletzt bearbeitet:
Dann erzähl ich dir mal was neues, es ist so!
Ich hab' nämlich mal print_r($LoginData) ausgeführt und, siehe da - ein Multi-Array.
Außerdem, ich habe die werte des gecrypteten Posts und den Wert von $Logindata[$i][1] per Echo miteinander verglichen, es stand auch der richtige und damit meine ich EXAKT DER GLEICHE Wert drin (es sei denn, ich kann nicht richtig lesen).
Und als ich in der if-Abfrage den Vergleich des Passwortes weg liess (also nur noch der Benutzername verglichen wurde), kam immer die Meldung Login erfolgreich!

Das mit dem -warum gerade .htaccess mit php auslesen- ist mir auch schon aufgefallen - macht wirklich nicht viel sinn, wenn die .htaccess im selben Verzeichnis liegt. Aber tuccain hat ja nicht nach dem Sinn, sondern nach einer Lösung gefragt!
 
Zurück