Problem mit Passwortänderung

dodge11

Mitglied
Hallo,

ich versuche gerade ein Portal zu bauen. Im Portal erhält jeder user sein eigenes Konto, dort soll man auch das Passwort ändern können. Doch irgendwie funktioniert das nicht richtig.

Hier mal der Code der Funktion.
PHP:
function edit_password() {
	$id = $_POST['id'];
	global $now_passwort_old, $now_passwort, $now_passwort_check, $now_check;
if(!isset($_POST['passwort_old']) OR $_POST['passwort_old'] == '') { $now_passwort_old = "<br /><b><font color=\"#FF0000\">Bitte gib dein altes Passwort an.</font></b>"; }
elseif(!isset($_POST['passwort']) OR $_POST['passwort'] == '') { $now_passwort = "<br /><b><font color=\"#FF0000\">Du hast kein Passwort angegeben.</font></b>"; }
 elseif(!isset($_POST['passwort_check']) OR $_POST['passwort_check'] == '') { $now_passwort_check = "<br /><b><font color=\"#FF0000\">Bitte wiederhole das Passwort.</font></b>"; }

 else {
	
	$field = 1;
	
	$passwort = md5(trim($_POST['passwort_old']));

	 $sel2 = mysql_query("SELECT id, passwort FROM user WHERE id = '$id' AND passwort = '$passwort'") or die (mysql_error());;
	
	if($p = mysql_num_rows($sel2) == 1) {
            $pass_old = 1;
          }
          else {
			$now_old = "<br /><b><font color=\"#FF0000\">Das alte Passwort stimmt nicht.</b>";
		  }
	
	if(($_POST['passwort']) == ($_POST['passwort_check'])) {
	  $pass = 1;
  } else {
	  $now_check = "<br /><b><font color=\"#FF0000\">Die neuen Passwörter stimmen nicht überein.</b>";
  }

if ($field AND $pass AND $pass_old == 1 ) {

$newpasswort = trim($_POST['passwort']);
$passwort = md5($newpasswort);

mysql_query("UPDATE user SET passwort='$passwort' WHERE id='$id'") 
	or die (mysql_error()."<br>".mysql_errno());
  
  header("Location: index.php?move=122&info=4");
  exit();
 } else {
 }
}
}

Das ist der Code des Formulars

PHP:
<div align="center">
<h1>Passwort ändern</h1>
<br \>
<br \>
<form action="index.php?move=5&edit=password" method="post">
<input type="hidden" name="id" value="<?php echo $id; ?>" />
<table border="0">
<tr>
	<td><b>altes Passwort:</b></td>
	<td><input type="password" name="passwort_old" value="" size="30" maxlength="50" /><?php if(isset($now_passwort_old)) { echo $now_passwort_old; }?> <?php if(isset($now_old)) { echo $now_old; } ?></td>
</tr>
<tr>
	<td>&nbsp;</td>
</tr>

<tr>
	<td><b>neues Passwort:</b></td>
	<td><input type="password" name="passwort" value="" size="30" maxlength="50" /><?php if(isset($now_passwort)) { echo $now_passwort; } ?></td>
</tr>
<tr>
	<td><b>neues Passwort wiederholen:</b></td>
	<td><input type="password" name="passwort_check" value="" size="30" maxlength="50" /><?php if(isset($now_passwort_check)) { echo $now_passwort_check; } ?><?php if(isset($now_check)) { echo $now_check; } ?></td>
</tr>
<tr>
	<td>&nbsp;</td>
</tr>
<tr>
	<td>&nbsp;</td>
	<td><input type="image" src="images/editieren.gif" border="0" /></td>
</tr>
</table>
</div>

Vielen Dank für eure Hilfe.

gruß

dodge
 
Zuletzt bearbeitet:
Was genau tut denn nicht?

Die IF-Abfrage würde ich schon mal so machen:
PHP:
if ($field == 1 AND $pass == 1 AND $pass_old == 1 )
Wobei $field ja gar nichts anderes sein kann...
Evtl. solltest du sicherheitshalber auch vorher $pass und $pass_old auf 0 setzen in den else-Teilen.
Wenn du dasPasswort irgendwo in einer Session speicherst, dann solltest du es da auch noch ändern, weil der User dadrüber ja verfiziert wird und auf der nächsten Seite dann rausgeschmissen werden würde.
 
klar kann $field nicht anders als 1 werden, denn sonst werden ja die fehler an das Formular zurückgegeben. Das Passwort wird nicht in einer session gespeichert. Der user wird über einen automatisch genererierten code identifiziert.
 
Zurück