Loginscript funktioniert nicht.

Valayar

Grünschnabel
Him ich sitze seit 3 Tagen an einem kleinen Loginsscript und Dr.Google hilft mir nicht mehr so recht weiter.
Bisher fertig habe ich die Registrierung, Aktivierungslink per Mail und die Accountaktivierung. Logisch ist nun das man sich auch einloggen kann :P
Soweit so gut, das Script soll ja eigentlich nichts machen ausser checken ob die Felder Name und Passwort nicht leer sind und dann das Passwort mit der Datenbank abgleichen.
Nur leider hab ich anscheinend einen Denkfehler nach dem Anderen und bekomme das Script nicht an laufen. Entweder funktioniert es auch ohne das man irgendwelche Daten eingibt, oder man kann die richtigen Daten eingeben und wird trotzdem nicht eingeloggt oder oder oder. Ich poste einfach mal den aktuellen Code und hoffe das ihr mir helfen könnt.
PHP:
<?php
// Verbindung zur Datenbank aufbauen
include ('db_inc.php');

// Formular wird als Variable gespeichert.
$loginform ='<div id="login">
			<form id="register" action="index.php?site=login" method="post">
			<fieldset><legend>Login</legend>
			<ul>
			<li><label for="name">Nickname:</label>						<input type="text" class="name" name="name" /><br /></li>
			<li><label for="Passwort">Passwort:</label>					<input type="password" class="passwort" name="pwd" /><br /></li>
															<input type="submit" id="submit" value="Login" class="submit" name="submit"/></li>
			</ul>
			</fieldset>
			</form>
			</div>';

// Wenn das Formular noch nicht abgesendet wurde muss es natürlich ausgegeben werden.
if (!isset($_POST['submit'] ))  {
echo $loginform;
}

if (isset($_POST['submit'] ))  {
	$name = trim($_POST['name']);
	$pwd = trim($_POST['pwd']);
	$error = false;
	$errormsg = "<p>";
	// Prüfen ob ein Name angegeben wurde.
	if(empty($name)) {
		$error = true;
		$errormsg .= "Du musst einen Namen angeben.<br />";}
	// Prüfen ob ein Passwort angegeben wurde.
	if(empty($pwd)) {
		$error = true;
		$errormsg .= "Du musst dein Passwort angeben.<br />";}
} 
		//Wenn bis hierher keine Fehler dann prüfe das Passwort
	if(!$error) {
		$ergebnis = mysql_query("SELECT pwd FROM `cms`.`user` WHERE `name` = '$name'");
		while($row = mysql_fetch_object($ergebnis)) {
		if($row->pwd == $pwd) {
  		echo "eingeloggt";
	
	}	
		$error = true;
		$errormsg .= "Das Passwort und der Username stimmen nicht überein.<br />";
		if($error) {
		echo '<div id="errormsg">' .$errormsg . '</div><br /><br /><br />';
		echo $loginform;
		}
	}
}

Vielen Dank im Voraus,

Gruß Valayar
 
Warum prüfst du auf if($error) Innerhalb der While-Schleife. Diese musst du zuerst schliessen bevor du den Error ausgibst, ansonsten kommst du nie dorthin wenn Username oder Passwort leer bleibt
 
Ich glaub du hast hier relativ viel mit Klammern durcheinander gebracht, es fehlen auch ein paar logische else teile, d.h. wenn nicht eingeloggt da steht, dann soll das Script ja error auf true setzen.

Also mMn solltest du das Script nochmal ordentlich formatieren, weil du so besser siehst mit welcher Klammer du welche Anweisung schließt, dann solltest du etwas logischer Arbeiten (ganz oben prüfst du ob der submit Button nicht gedrückt wurde, dann wird etwas erledigt, zwei Zeilen weiter unten wird geprüft ob der submit Button gedrückt wurde, für solche Fälle ist dann ELSE da.
 
Danke für eure Hilfe :)
Das ich mein if($error) innerhalb der Schleife geprüft habe ist genau auf das Problen zurückzuführen, welches Just-Click angesprochen hatte.
Zuviele klammern, zu unübersichtlich usw. Habe selbst nicht mehr durchgeblickt und
nachher andauern den einen If Block woanders hinkopiert usw usw ... im Endeffekt
hab ich den Wald vor lauter Klammern nicht mehr gesehen :P

Hab das ganze Script jetzt nochmal neu geschrieben und etwas vereinfacht und
schätze mal das es so laufen müsste.
PHP:
<?php
// Verbindung zur Datenbank aufbauen
include ('db_inc.php');

// Formular wird als Variable gespeichert.
$loginform ='<div id="login">
			<form id="register" action="index.php?site=login" method="post">
			<fieldset><legend>Login</legend>
			<ul>
			<li><label for="name">Nickname:</label>						<input type="text" class="name" name="name" /><br /></li>
			<li><label for="Passwort">Passwort:</label>					<input type="password" class="passwort" name="pwd" /><br /></li>
															<input type="submit" id="submit" value="Login" class="submit" name="submit"/></li>
			</ul>
			</fieldset>
			</form>
			</div>';


if (!isset($_POST['submit'] ))  {        
echo $loginform;						
}else{									
	$name = trim($_POST['name']);		
	$pwd = trim($_POST['pwd']);

	if(empty($name) AND (empty($pwd))) {	
		echo "<div id='errormsg'>Bitte einen Namen und/oder ein Passwort angeben.</div><br /><br /><br />";  
	}else{																/* Sonst	*/
		$ergebnis = mysql_query("SELECT pwd FROM `cms`.`user` WHERE `name` = '$name'");
		while($row = mysql_fetch_object($ergebnis)) {
			if($row->pwd == $pwd) {
  			echo "eingeloggt <br />"; 
			}else{
  			echo "<div id='errormsg'>Der Username oder das Passwort ist falsch..</div><br /><br /><br />";
		} 
	}
}
?>

Danke für die Hilfe



// Edit: Nagut habs jetzt auf Herz und Nieren getestet ... sobald ich einen nicht existierenden Benutzernamen angebe bekomme ich eine weiße Seite. Aber bin fast am Ziel :P
 
Zuletzt bearbeitet:
Jetzt kannst du die DB-Abfrage noch vereinfachen. Einfach nach Name und Passwort suchen, die Resulate zählen und dann sieht man ob etwas vorhanden ist. Somit brauchst du keine while-Schleife die du eh maximum 1 mal durchläufst
PHP:
$sql = "SELECT * FROM `user` WHERE `name` = '{$name}' AND pwd = '{$pwd}'";
$result = mysql_query($sql);
if(mysql_num_rows($result) > 0){
    //TODO: Eingelogt
}else{
    //TODO: Kombination nicht gefunden
}
 
Würde es nicht mehr Sinn machen du prüfst zuerst ob der Submit-Button gedrückt wurde und ob Fehler aufgetreten sind (in diesem Fall dann $error = 1).

Dann prüfst du im zweiten IF-Block ob der Button entweder nicht gedrückt wurde ODER ob eben bei der Prüfung Fehler aufgetreten sind. In beiden Fällen sollte doch wohl das Formular angezeigt werden (und natürlich eventuell auch eine Fehlermeldung).
 
Die Sicherheitslücken wollte ich stopfen sobald das Script ansich läuft. Ich danke euch allen für die Hilfe.
Wie schnell man sich verrennen kann und nicht mehr weiss wo was stehen muss und durch die ganzen {} nicht mehr durchblickt ist unglaublich.
Jetzt gehts ans sichern. :) Besten Dank
 

Neue Beiträge

Zurück