Hallo :shinner: ,
ich habe hier ein 'kleines' Problem mit folgender do...while-Schleife
$pwh = NULL;
do {
$pwh = gen_pw();
echo "Passwort generiert<br>";
} while (check_pw($pwh) == false);
Diese produziert mir eine Endlosschleife, wenn die Bedingung von while erfüllt ist(?).
Ich hab schon sonstwas versucht und komme nicht dahinter.
Die Schleife soll eigentlich folgendes leisten:
1. Ein Passwort generieren mit Hilfe der Funktion gen_pw, was auch funktioniert.
2. Mit Hilfe der Funktion check_pw herausfinden, ob das Passwort (bzw. der Hash) schon in der Datenbank existiert, was auch funktioniert.
3. Wenn das Passwort in der DB gefunden wird (check_pw == false), den Zufallsgenerator erneut starten, was nicht richtig funktioniert.
Ich habe natürlich, um zu überprüfen, ob check_pw korrekt arbeitet, den Zufallswert (Passwort) in gen_pw durch ein festes Passwort ersetzt, was schon in der DB liegt.
Wie gesagt: check_pw an sich funktioniert.
Aber: Die do...while-Struktur produziert in diesem Szenario eine Endlosschleife. Das verrückte dabei ist, dass nicht einmal mehr die Fehlermeldungen aus der Funktion check_pw ausgegeben werden, obwohl diese ja den Wert der while-Bedingung erzeugt.
Die Fehlermeldungen werden im Quelltext sogar noch vor dem Setzen der Rückgabevariable auf false ausgegeben.
function check_pw($pwh) {
$check = true;
$result = mysql_query("SELECT pwh FROM tabelle");
while ($row = mysql_fetch_assoc($result)) {
if ($pwh == $row['pwh']) {
echo "Das Passwort existiert schon";
$check = false;
break;
}
}
return $check;
}
Alles anzeigen
Ich habe auch schon versucht, das ganze mit einer if-Anweisung zu lösen.
$pwh = gen_pw();
echo "Passwort generiert: ".$pwh;
echo "<br>";
if (check_pw($pwh) == false) {
echo "PW existent...generiere neu: ";
$pwh = gen_pw();
echo $pwh;
}
Alles anzeigen
Das ist natürlich Schwachsinn, weil ich mich ja nicht darauf verlassen kann, dass der Zufallsgenerator bei zweiten Versuch nicht das selbe Passwort ausspuckt (oder doch??).
Aber: Da hat alles funktioniert.
Wo könnte denn mein Fehler liegen?