Probelem mit Benutzterverwaltung !

firstlord18

Erfahrenes Mitglied
Hi,

also ich habe hier mal den Teil der Benutzverwaltung geschrieben, wo man sich einloggen kann. Die Datei, in der die ganzen Usernames und Passwords gespeichert werden, sieht wie folgt aus:

user1%%pw1
user2%%pw2
etc.
So, nun habe ich halt mal versucht, ein Script zu coden, welches auch auf Funktionen basiert, damit es nicht so viel Quelltext wird. Ich hoffe, jemand kann mir helfen:

PHP:
 <?php
 session_save_path("./sessionsave/");
 session_start();
 
 // Variables:
 $pwfile="user_pw.txt";
 
 // automatischen Admin anlegen:
 if(!file_exists($pwfile)) {
 	$fp=fopen($pwfile, "a+");
 	fputs($fp, "user%%pw");
 	fclose($fp);
 }	
 
 function logged() {
 	if(!$_SESSION['user'] OR !$_SESSION['pw']) {
 		return false;
 	}
 	else {	
 		if(pruef($_SESSION['pw'], $_SESSION['user'])) {
 			return true;
 		}
 		else { 
 			return false;
 		}
 	}	
 }
 function showform() {
 	echo "<form action='admin.php?action=pruef' method='post'>";
 	echo "<br><br>USER: <input type='text' name='user'><br><br>";
 	echo "PW: <input type='text' name='pw'><br><br>";
 	echo "<input type='submit' value='Log-In'></form>";
 }
 
 function pruef($postpw, $postuser) {
 	$p_pw = strtolower(trim($postpw));
 	$p_user=strtolower(trim($postuser));
 	
 	if(!$p_pw)   { $f = "<br>Kein Passwort angegeben<br>"; }
 	if(!$p_user) { $f.= "<br>Keinen Username angegeben<br>"; }
 	
 	if($f) { echo "<center><br>".$f."</center>"; }
 	else {
 		$data=file($pwfile);
 		foreach ($data as $temp) {
 			$e=explode("%%", $temp);
 			if ($p_pw==$e[1] AND $p_user=$e[0]) {
 					$_SESSION['user']=$e[0];
 					$_SESSION['pw']=$e[1];
 		    		return true;    		    	
 			}	
 		}
 	}
 	if(!$_SESSION['user'] OR !$_SESSION['pw']) {
 		return false;
 	}	
 }
 
 function logout() {
 	foreach($_SESSION as $temp) {
 		unset($temp);
 		$temp=array();
 	}
 	session_destroy();
 }
 
 // AUSGABE:
 if($_GET["action"]=="pruef") {
 	pruef($_POST['pw'], $_POST['user']);
 	echo "<meta HTTP-EQUIV=Refresh content='0, URL=".$PHP_SELF."'>";
 }
 else {
 	if (logged()) {
 		echo "Eingeloggt";
 	}
 	else {
 		showform();
 	}
 }

Vielen Dank im Vorraus

Edit: Achso, vllt sollte ich noch mein Problem posten Also:

Ich möchte ja, dass man sich einloggen kann. wenn ich nun auf submit drücke. Eigentlich müsste dann action=pruef ausgeführt werden, wie auch im Form Tag geschrieben, wird es aber nicht. In der URL steht dann:

admin.php?user=user&pw=pw

aber es soll doch admin?action=pruef ausgeführt werden, sodass man danach eingeloggt ist, sofern man richtige Login daten eingegeben hat. Seht Ihr da irgendwo einen Fehler im Code
 
Also dass user und pw im $_GET stehn ist ein Zeichen dafür dass irgentwie das method='post' nicht richtig funktioniert.
Probier mal so:
Code:
function showform() {
    ?>    
    <form action='admin.php?action=pruef' method='post'>
    <br><br>
    USER: <input type='text' name='user'>
    <br><br>
    PW: <input type='text' name='pw'>
    <br><br>
    <input type='submit' value='Log-In'>
    </form>
    <?
}
Kann mir aber nicht vorstellen dass es daran liegt...Komisch komisch komisch :)
 
achso, was ich nochn sagen wollet:

irgendwie wird jetzt immer, wenn ich was ins formualr eingebe und es abschicke, wieder das formular angezeigt. aber eas steht nix mehr im Get .

weiß noch einer rat ?
 
Puuh. Also erstmal: Dein Code ist seehr unübersichtlich. Und ich würde dir dringend davon Abraten, den Username und das Passwort in der URL zu übergeben. Außerdem ist ein HTTP refresh auch nicht die schönste Art.. ;)

Soviel zur Kritik. Es wird schon alles seinen Sinn haben.

Jetzt zur Hilfe:
Mach mal in die IFs jeweils einen echo rein, damit Du besser sehen kannst, an welcher stelle er aussteigt. Und nimm den Refresh raus. Ich nehme mal an, dass er schon in pruef reinspringt, aber die Variablen durch das $PHP_SELF nicht richtig übergeben werden. Somit steht die URL wieder leer da, und er zeigt wieder das Formular an... Aber genau weiss ich das auch nicht. Probier es einfach mal aus.
 
das problem ist, dass php von oben nach unten abarbeitet.

du rufst aus der funktion "logged" die funktion "pruef" auf.
diese befindet sich aber weiter unten, setzte einfach mal die funktion "pruef" über die funktion "logges", dann sollte es normaler weiße gehen
 
Zurück