Bei einem mysql-update wird falscher Wert in der DB gespeichert

Schind

Mitglied
Hallo zusammen!
Ich habe ein kleines PHP-Skript geschrieben, das für einen User ein neues Passwort generiert, diesem per Mail zuschickt und es md5-verschlüsselt in die Datenbank speichert.

Eigentlich sollte das Ganze kein Problem sein, allerdings tritt bei mir ein seltsames Problem auf: Anstatt des verschlüsselten Passwortes wird in der DB immer der Wert 'd41d8cd98f00b204e9800998ecf8427e' gespeichert, unabhängig davon, welches Passwort generiert wird.

Die beiden Ausgaben der Variable $gensql vor und nach dem Query geben allerdings den richtigen Query-String mit dem generierten Passwort aus.

Ich hoffe wirklich, jemand kann mir helfen, da ich schon seit geraumer Zeit versuche, das Problem zu lösen, aber einfach keinen Fehler erkennen kann.

Hier der notwendige Cocde:

PHP:
<?
function generatePassword($length = 8)
	{
		$possibleChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
		srand((double)microtime() * 1000000);	// Zufallsgenerator auf Startwert setzen
		$password = "";
		for($i = 0; $i < $length; $i++)
		{
			$randval = rand(0, strlen($possibleChars));
			$password .= $possibleChars[$randval];
		}
		return $password;
	}
?>
<form name="passwordform" action="main.php?site=generate_password&id=<? echo $_GET['id']; ?>" method="post">
	<table>		
<?
	if(isset($_POST['senden']))
	{
		$pwd = generatePassword();
		$gensql = "UPDATE user SET passwort = '" . md5($pwd) . "' WHERE id = " . $_GET['id'];
		echo $gensql;				
		if($query = mysql_query($gensql))
		{			
			echo $gensql;
?>
		<tr class="text" height="40px" valign="center">
			<td colspan="2"><b>Das Passwort wurde erfolgreich geändert.</b></td>
		</tr>
<?
		} else
		{
?>
		<tr class="text" height="40px" valign="center">
			<td colspan="2"><b>Fehler: Das Passwort konnte nicht geändert werden.</b></td>
		</tr>
<?
		}
	} else
	{
?>
		<tr height="30px"><td></td></tr>
<?
	}
?>
		<tr class="text">
			<td colspan="2">
				Beim Klicken auf den Button wird ein 8 Zeichen langes Passwort generiert, das aus Kleinbuchstaben, Großbuchstaben und Ziffern besteht.
			</td>			
		</tr>
		<tr height="40px" valign="center">
			<td colspan="2" align="center">
				<input type="submit" name="senden" value="Passwort generieren" />
			</td>
		</tr>		
	</table>
</form>

Vielen Dank schon im Voraus für eure Mühen.
 
Hi,

und den User mit der ID gibt es wirklich? Und du bist dir auch sicher das das Query ausgeführt wird?

gruß ne0hype
 
Ja, den User gibt es wirklich.

Und es wird *irgendein* Query ausgeführt, das ist ja das Problem.

konkretes Beispiel:
DB schaut so aus:

id benutzername passwort vorname nachname
---------------------------------------------
140 test blabla Test FILIALLEITER


Ich klicke auf Passwort generieren, die beiden Ausgaben geben folgendes aus:
UPDATE user SET passwort = '0719a8fe97bb767134a59342d6f989e5' WHERE id = 140
UPDATE user SET passwort = '0719a8fe97bb767134a59342d6f989e5' WHERE id = 140

Die DB sieht anschließend so aus:

id benutzername passwort vorname nachname
---------------------------------------------
140 test d41d8cd98f00b204e9800998ecf8427e Test FILIALLEITER


Es wird also *irgendwie* nicht das Query, sondern ein anderes ausgeführt.. Ich versteh das einfach nicht :(
 
Also, der Hash "d41d8cd98f00b204e9800998ecf8427e" steht für einen leeren String.

Sprich:

PHP:
<?php
echo md5('');
?>

Wird dir genau diesen Hash ausgeben.

Dementsprechend ist aus irgendeinem Grund in deinem Query die Variable $pwd leer.

Hast du mal testweise mit einem Fixwert versucht zu arbeiten?
 
ja, hab ich versucht, und das hat auch nicht funktioniert. Aber immerhin weiß ich jetzt, dass der Wert für einen Leerstring steht. Trotzdem sehr seltsam.
 
Problem gelöst.. Weiter unten im Code hatte ich noch nicht korrekt auskommentierten PHP-Code, der dann den Leerstring in die DB geschrieben hat.. Lool :)

Trotzdem vielen Dank für eure Hilfe.
 
Zurück