Passwort Verifizierung im Userbereich

Steffen Giers

Erfahrenes Mitglied
Guten Tag,

Ich versuche schon seit 2 tagen eine Clientseitige Möglichkeit ein Userpasswort durch den User ändern zu lassen. Im Prinzip genau wie hier im Forum.

Ich habe soweit auch alles hinbekommen nur in der Kontrollstruktur haperts bei mir. Ich denke das es ein logischer Fehler von mir ist.

Also...

Verbindung zur Datenbank funktioniert
Auswahl der Datenbank auch
Eindeutig User Identifizierung geht auch
Auswahl des User spezifischen Datensatzes haut auch hin
Formular ist erstellt



Namen der Inputfelder sind:

Passwort (name="pwd")
Neues Passwort (name="npwd")
Neues Passwort wdh. (name="npwdw")



Ich kann mit meinem Script das Passwort bereits ändern. Aber jetzt das Problem:

Ich gebe das alte Passwort (pwd) ein und nur die Wiederholung vom neuen Passwort und er sagt mir fehler beim Eintragen. Was ja auch logisch ist weil das Feld neues Passwort (npwd) und Neues Passwort wdh.(npwdw) nicht gleich ist weil in einem nix drinne steht. Aber Trotzdem wird das passwort in der Datenbank geändert. Das soll es ja nicht!

Im Endeffekt soll er nur den befehl UPDATE ausführen wenn das Neue Passwort mit der Wiederholung übereinstimmt.

Ich hoffe ich habe mich einigermaßen Verständlich ausgedrückt.




PHP:
<?php
include ('checkuser.php');

      //verbindung zur Datenbank : "Verzeichnis", "Benutzter", "Passwort":
mysql_connect (   "localhost",
            "root",
            "")
            or die (mysql_error());
   
      //Datenbank Auswahl:
mysql_select_db ("v157203");

      //Eindeutige Useridentifizierung:
mysql_query ("   SELECT *
            FROM users
            WHERE login ='".$_SESSION["user_id"]."'")
            or die (mysql_error());
            
      /*Datensatz ändern und überprüfen ob Passwort gleich ist.
      Setze in spalte: pwd, neues passwort(npwdw) wenn pwd = altes passwort */
$update = mysql_query ("UPDATE users
                  SET pwd = '$npwdw'
                  WHERE pwd = '$pwd'")
                  or die (mysql_error());

//Passswort Verifizierung:
if (($_POST['npwd']) == ($_POST['npwdw']))
      {
      $update;
      }
else
      {
      $meldung = "Fehler bei Passworteingabe!";
      }
?>



HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de">     

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>Home Page-Dj Nelson.de</title>
<link rel="stylesheet" type="text/css" href="css/mainstylesheet.css">
</head>

<body>

<!--Gesamtinhaltsbox(Container)-Anfang-->
<div id="container">
<h1 id="header"></h1>
<ul class="mainnav">
      <li><a href="index.php">Home</a></li>
      <li><a href="#">Portofilio</a></li>
      <li><a href="">Musik</a></li>
      <li><a href="#">Kontakt</a></li>
      <li><a href="#">Linkage</a></li>
</ul>

<div id="spalte_links">
<ul class="subnav ">
<h2>Sub Überschrift</h2>
      <li><a href="#">Submenüpunkt 1</a></li>
      <li><a href="logout.php">Logout</a></li>
      <li><a href="seite2.php">Zu Seite 2</a></li>
      <li><a href="pwdupdate.php">Passwort Ändern</a></li>
      <li><a href="#">Submenüpunkt 5</a></li>
</ul>
</div>

<div id="spalte_rechts">
<div class="contentblock">
<h3>Passwort Ändern</h3>
<h4>Hier können Sie ihr Userpasswort ändern!</h4>

<p><form class="kontakt" action="<?=$_SERVER['PHP_SELF']?>" method="post">
<fieldset>
<label>Passwort</label>
   <input type="password" name="pwd">
<label>Neues Passwort</label>
   <input type="password" name="npwd">
<label>Neues Passwort wdh.</label>
   <input type="password" name="npwdw">
<label>&nbsp;</label>
<input type="submit" name="aendern" value="Ändern">
</fieldset>
</form>
</p>
<p><?=$meldung?></p>
</div>

<p id="footer">
<a href="#">|css|</a>
&nbsp;
<a href="#">|xhtml|</a>
&nbsp;
<a href="#">|imprint|</a>
&nbsp;
</p>
</div>
<!--Gesamtinhaltsbox(Container)-Ende-->

</body>
</html>

Beides steht in einer Datei. Der PHP Code über dem HTML!

Danke für eure Ratschläge!
 
*hust*
PHP:
//Passswort Verifizierung: 
if (($_POST['npwd']) == ($_POST['npwdw'])) 
      { 
      $update = mysql_query ("UPDATE users 
                  SET pwd = '$npwdw' 
                  WHERE pwd = '$pwd'") 
                  or die (mysql_error()); 
      } 
else 
      { 
      $meldung = "Fehler bei Passworteingabe!"; 
      }
 
Gesundheit...


Ich schätze das ist jetzt auch nicht besser weil es genauso wenig funktioniert. :confused:
PHP:
include ('checkuser.php');

mysql_connect (	"localhost",
				"root",
				"") 
				or die (mysql_error());

mysql_select_db ("v157203");

mysql_query "	UPDATE users
				SET pwd = '$npwdw'
				WHERE pwd = '$pwd'"
				or die (mysql_error());
				
				
$sql =		"	SELECT * from users
				WHERE login ='".$login."'
				AND pwd ='".$pwd."'
				LIMIT 0,1";

$result = mysql_db_query('v157203',$sql) or die(mysql_error());
$row = mysql_fetch_assoc($result);

//recheck der Daten
   if($row[pwd] == stripslashes($_POST[npwd]) && $row[pwd] == stripslashes($_POST[npwdw]))
	{
	$meldung = "Passwort erfolgreich geändert";
	}
else
	{
	$meldung = "Fehler beim Ändern";
	}

Hat vielleicht wer nen Ansatz zur Lösung?
 
lol, ich glaube nicht das er dir andeuten wollte das er krank ist sondern er hat dort die korrigierte If Bedigung hingeschrieben die bei dir falsch ist und deswegen das nicht klappt. Du hast den SQL Befehl für das Updaten des Passworts im Quelltext vor der If Schleife d.h. das dieser SQL Befehl schon vorher ausgeführt wird und das Resultat in $update gespeichert wird. Siehe hier:

PHP:
 	 /*Datensatz ändern und überprüfen ob Passwort gleich ist. 
	 Setze in spalte: pwd, neues passwort(npwdw) wenn pwd = altes passwort */ 
$update = mysql_query ("UPDATE users 
				 SET pwd = '$npwdw' 
				 WHERE pwd = '$pwd'") 
				 or die (mysql_error()); 
 
//Passswort Verifizierung: 
if (($_POST['npwd']) == ($_POST['npwdw'])) 
	 { 
	 $update; 
	 } 
else 
	 { 
	 $meldung = "Fehler bei Passworteingabe!"; 
	 } 
?>

Richtig wäre aber diese SQL Anweisung in die If Schleife zu schreiben wie der Herr vor mir schon versuchte dir es mitzuteilen ;)

Siehe hier:

PHP:
 //Passswort Verifizierung: 
if (($_POST['npwd']) == ($_POST['npwdw'])) 
	 { 
	 $update = mysql_query ("UPDATE users 
				 SET pwd = '$npwdw' 
				 WHERE pwd = '$pwd'") 
				 or die (mysql_error()); 
	 } 
else 
	 { 
	 $meldung = "Fehler bei Passworteingabe!"; 
	 }

Das was du vor hattest müsstest du anders formulieren, weil mit mysql_query fürhst du die Anweisung aus du hättest schreiben müssen:

PHP:
$update = "UPDATE users 
				 SET pwd = '$npwdw' 
				 WHERE pwd = '$pwd'" 
 
if (($_POST['npwd']) == ($_POST['npwdw'])) 
	 { 
	 mysql_query($update)
	 } 
else 
	 { 
	 $meldung = "Fehler bei Passworteingabe!"; 
	 }

Das wäre auch noch eine Möglichkeit gewesen.

Desweiteren bezweifle ich das er das Passwort bei richtigen User updatet die Anweisung ist bischen falsch und zwar sagst du ihm er soll das Passwort dort Updaten in der SQL Tabelle wo er das alte Passowrt findet. Siehe hier:

PHP:
$update = mysql_query ("UPDATE users 
				 SET pwd = '$npwdw' 
				 WHERE pwd = '$pwd'") 
				 or die (mysql_error());

das würde bedeuten hat irgendein User z.B. das gleiche PAsswort wie ein anderer würde von beiden das PAsswort geändert und ich glaube nicht das das in deinem Sinne war.

Die müsstest also die WHERE Anweisung ändern in diesem SQL Statement.

Auch hast du vorher eine SQL Anweisung die sozusagen im Nirvana endet weil das Ergebnis in keiner Variablen gespeichert wurde. Siehe hier:

PHP:
mysql_query (" SELECT * 
			FROM users 
			WHERE login ='".$_SESSION["user_id"]."'") 
			or die (mysql_error());

Du könntest z.B. schreiben:

PHP:
$update = "UPDATE users 
				 SET pwd = '$npwdw' 
				 WHERE login ='".$_SESSION["user_id"]."'";
 
if (($_POST['npwd']) == ($_POST['npwdw'])) 
	 { 
	 mysql_query($update);
	 } 
else 
	 { 
	 $meldung = "Fehler bei Passworteingabe!"; 
	 }

Hoffe konnte dir nun mit der ausführlichen Erklärung weiter helfen.
 
Zuletzt bearbeitet:
Ups... Da stand ich wohl etwas auf dem schlauch. Klingt alles logisch was du geschrieben hast. Werd mir das mal zu Gemüte führen.

Thx euch beiden!
 
So habe es so gelöst. Funktioniert bis auf eine kleinigkeit auch wunderbar. Ich denke den rest kriege ich auch alleine hin.

PHP:
$sql = "	SELECT * FROM users
			WHERE userID = '" .$_SESSION['userID']. "'
			LIMIT 0, 1";
			
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);

//check der daten und leerzecihen entfernen
	if ($row['pwd'] === trim($_POST['pwd']) && trim($_POST['npwd']) === trim($_POST['npwdw']))
		{
			mysql_query("	UPDATE users
							SET pwd = '$npwdw'
							WHERE userID = '$userID'");
			$meldung = "Passwort erfolgreich geändert";
		} 
	else
		{
		$meldung = "Fehler beim Ändern";
		}
 
Ähm also diese 3 Gleichzeichen (===) kommen mir sehr suspekt vor und diese && anweisung mit trim($_POST['npwd']) da fehlen doch noch ne klammer zu oder?! ;)
 
== vergleicht den Inhalt der Variablen
=== vergleicht den Inhalt und den Typ der Variablen

Hab ich jedenfalls mal wo gelesen. Und ich denke nicht das da ne klammer fehlt weil laut PHP.net ist die Syntax für diesen wert : string trim ( string str ).

Auf jedenfall gehts und nen Parse error gibt er mir auch nicht.
 
Axo ja hab vergessen den balken zur Seite zu schieben ^^ okey das mit diesen 3 = hab ich noch nie gesehen weil nachm Typ vergleichen ist bei PHP sofern man nicht explizit die Variablen deklatriert hat eigentlich nicht nötig da sich PHP den Datentyp meist selber zurecht legt und alles irgendwie passend macht.
 
Nix für ungut... ;) Kann passieren.

Wie meinst du das, dass PHP, sich meist den Datentyp selber zurecht legt? Erklär mal bitte... bin noch nicht so lange am scripten. :-(
 
Zurück