Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP / MySQL] IF-Bedingung fehlerhaft | wie richtig?
sniper.de
23.05.2004, 13:16
hi all!
ich bin mir bewusst, dass es peinlich im ² ist, aber ich bekomme diese eine IF-Anweisung einfach nicht gebacken.
Also:
Ein user fordert ein neues PW an (passwort vergessen) und wird per Link zu meiner Seite verwiesen, wo das PW aktiviert werden muss.
Der User kommt an, und nun kommt die IF-Bedingung.
Es soll geprüft werden, ob im Feld forgotpw in der Datenbank ein Eintrag vorhanden ist, also UNGLEICH Null. Wen ja, dann wird das PW aktiviert, wenn nein hat der User noch kein neues PW angefordert.
Also alles der Sicherheit wegen.
$db ist meine mySQL Klasse.
hier mal die IF-ELSE Struktur:
if ($result=$db->query("SELECT forgotpw FROM user WHERE user='".$_GET['pwuser']."'")!=0) // Wurde ein neues PW angefordert?
//------------ HIER NOCHMALS DIE IF CLAUSE CHECKEN!!!-------------
{
$result=$db->query("SELECT forgotpw FROM user WHERE user='".$_GET['pwuser']."'");
$fetchdata=$db->fetch_array($result);
$db->free_result;
$db->query("UPDATE user SET password='".md5($fetchdata['forgotpw'])."',
forgotpw=Null WHERE user='".$_GET['pwuser']."'");
$tpl= new Smarty;
$replace=array( 'activate' => 'Password wurde geändert, loggen sie sich bitte mit dem neuen Passwort ein.<br>
Sie können ihr Passwort im Profil unter "Passwort/Email ändern" wieder verändern.');
$tpl->assign($replace);
$tpl->display('activatepw.html');
include ($pfad.'/_footer.php');
exit;
}
else // es wurde KEIN neues PW angefordert
{
$tpl= new Smarty;
$replace=array( 'activate' => 'Diese Aktion ist für diesen Benutzernamen <b>ungültig</b>.<br>
Es wurde <b>kein neues Passwort</b> angefordert.<br>
Wenn sie ihr Passwort vergessen haben ,sollten sie zuerst auf "Passwort vergessen" klicken, um ein Neues anzufordern.<br>
');
$tpl->assign($replace);
$tpl->display('activatepw.html');
include ($pfad.'/_footer.php');
exit;
}
Was ist an der IF-Bedingung nur falsch?
Ich habe ZIG Möglichkeiten durchprobiert, und da ich noch ein Anfänger bin, bin ich auf keinen grünen Zweig gekommen.
Über ein paar Tips wäre ich sehr danbar.
ciao
Sniper.de
war auf falschen weg. sorry!
sniper.de
23.05.2004, 13:43
ja ne kein Thema, postet halt irgendwas, jeden Gedankengang.
Es geht ja hierrum:
if ($result=$db->query("SELECT forgotpw FROM user WHERE user='".$_GET['pwuser']."'")!=0) // Wurde ein neues PW angefordert?
Er soll gucken ob das Feld forgotpw in der DB UNGLEICH null ist.
Hi,
bin mir zwar nicht sicher, aber ein Versuch ist es sicher Wert :
if ($result=$db->query("SELECT forgotpw FROM user WHERE user='".$_GET['pwuser']."'") NOT NULL) // Wurde ein neues PW angefordert?
sniper.de
23.05.2004, 14:45
ohne einen Vergleichsoperator?
ich teste es nachher nach deer Formel1 mal aus.
mmh, ev. musst du doch ein IS einfügen if ($result=$db->query("SELECT forgotpw FROM user WHERE user='".$_GET['pwuser']."'") IS NOT NULL) // Wurde ein neues PW angefordert? Wenn man dem mysql-manual glauben darf, sollte es aber auch mit != NULL gehen..
http://www.mysql.de/doc/de/Working_with_NULL.html
Ich würde da was anderes vorschlagen.
IMHO ist es nicht gut, eine Zuweisung und einen Vergleich in eine If-Abfrage zu packen.
Probiers doch mal so:
$result=$db->query("SELECT forgotpw FROM user WHERE user='".$_GET['pwuser']."'");
if ($result != NULL) // Oder so ähnlich
Um die If-Bedingung (0, Null, "") oder so rauszubekommen,
poste doch mal, was für ein Typ das forgotpw-Feld hat.
Evtl. auch mal oben $result ausgeben und angucken.
@SKar
Hier geht's aber nicht um SQL, sondern um PHP, weil nur das Zeug
in den runden Klammern als SQL interpretiert wird und PHP den Rest macht. ;D
Original geschrieben von Shaft99
@SKar
Hier geht's aber nicht um SQL, sondern um PHP, weil nur das Zeug
in den runden Klammern als SQL interpretiert wird und PHP den Rest macht. ;D :] :] oups, da war ich wohl ein bischen voreillig.. :]
In dem Fall ist ein $result=$db->query("SELECT forgotpw FROM user WHERE user='".$_GET['pwuser']."'")
if ($result[password] != NULL) angebracht. Wie Shaft99 schon richtig gesagt hat, gibst du dir am besten mal $result aus um zu sehen was im password-feld steht wenn's leer ist ("", 0, NULL..) und zwar mit foreach($result as $key => $value)
print ($key." = ".$value."<br>");
sniper.de
23.05.2004, 18:51
ich weiss, dass im forgotpw Null steht, da ich es auf Null setze, wenn das PW aktiviert wird ^^
Dann ist das eine Problem ja schon mal gelöst.
Aber ich denk immer noch, dass
if ( a = b < c ) ...
in PHP nicht funktioniert, bzw. nicht das gewünschte resultat liefert.
Weiss einer vielleicht, ob = oder < stärker ist ?
Machs doch einfach so, wie oben beschrieben:
a = b;
if ( a != "Null" ) ...
sniper.de
23.05.2004, 23:39
wie drückt man im PHP vergleich das Null von Mysql aus, also nicht NULL als String sondern den zustand Null
So gehts nicht:
$result=$db->query("SELECT forgotpw FROM user WHERE user='".$_GET['pwuser']."'");
if ($result[0]!= 'Null') // Wurde ein neues PW angefordert?
und so auch nicht
$result=$db->query("SELECT forgotpw FROM user WHERE user='".$_GET['pwuser']."'");
if ($result[0]!= Null) // Wurde ein neues PW angefordert?
menno :(
i_hasser
23.05.2004, 23:49
Original geschrieben von Shaft99
Dann ist das eine Problem ja schon mal gelöst.
Aber ich denk immer noch, dass
if ( a = b < c ) ...
in PHP nicht funktioniert, bzw. nicht das gewünschte resultat liefert.
Weiss einer vielleicht, ob = oder < stärker ist ?
Machs doch einfach so, wie oben beschrieben:
a = b;
if ( a != "Null" ) ...
Müsste if( (a=b)<c ) lauten.
Als kleinen Workaround könntest du folgendes probieren:
if ($db->query("SELECT user FROM user WHERE forgotpw IS NOT NULL AND user='".$_GET['pwuser']."'"))
{
...
}
Damit überlässt du der Datenbank eigentlich die ganze Arbeit:
*Wenn es eine Zeile in der Tabelle gibt, bei der der User gleich $_GET['pwuser'] ist und forgotpw NOT NULL ist, gibt MySQL dir einfach den Usernamen zurück. Folglich wird der von der if-Abfrage zu prüfende Ausdruck TRUE.
*Wenn eine solche Zeile nicht existiert, müsstest du von der Datenbank einen leeren Array zurück bekommen. Ein leerer Array entspricht einem boolean FALSE, also werden die Anweisungen in der IF-Schleife nicht aufgerufen.
----> (siehe http://www.php.net/manual/en/language.types.boolean.php#language.types.boolean.casting)
Das Ganze funktioniert so aber wohl nur, wenn der Wert in der forgotpw-Spalte auch tatsächlich NULL ist (http://dev.mysql.com/doc/mysql/en/Problems_with_NULL.html).
Alle Angaben ohne Gewähr ;)
sniper.de
24.05.2004, 10:40
GENAU DAS habe ich gesucht, vergebens auf der Mysql Page.
DANKE DANKE DANKE.
Ob es das Problem löst, werde ich gleich mal schaun.
Ich danke euch schonmal für eure Hilfe, da ich denke, dass es funzt.
Ja der Wert in der SQL Datenbank ist wirklich Null :)
Ne des funzt irgendwie auch nicht...
http://www.magic-pics.de/Jan/phpmyadmin1.jpg
Ich habe das jetzt so eingebunden:
if ($db->query("SELECT ID FROM user WHERE forgotpw IS NOT NULL AND user='".$_GET['pwuser']."'")) // Wurde ein neues PW angefordert?
//------------ HIER NOCHMALS DIE IF CLAUSE CHECKEN!!!-------------
Ich lass mir ma ebend die DB Ausgabe anzeigen
EDIT2:
Die Datenbank gibt DAS zurück:
Resource id #9
Original geschrieben von sniper.de
Die Datenbank gibt DAS zurück:
Resource id #9
Jetzt ist nur noch die Frage, was du erwartest.
sniper.de
24.05.2004, 15:01
ich erwarte ein FALSE
Aah, ich schätze ich hab die Lösung :P
Bisher hatten wir in der IF-Abfrage ja nur ein $db->query. Dieses Query gibt dir, genau so wie es das auch tun soll eine Resource ID zurück. Da wir aber einen Array mit den Daten aus der Tabelle - und keine Resource ID - wollen, fehlt noch ein $db->fetch_array außen herum.
Daraus folgt mein Vorschlag, der dem Ziel zumindest schon etwas näher sein könnte ;):
if ($db->fetch_array($db->query("SELECT ID FROM user WHERE forgotpw IS NOT NULL AND user='".$_GET['pwuser']."'")))
sniper.de
24.05.2004, 20:45
hi!
Ich war den ganzen tag radeln und da is mir auch nochne Idee gekommen.
Wie wärs , wenn ich einfach mal die Reihen zähle, bei 0 ergäbe es False und bei 1 Reihe entsprechend True.
Deine Lösung check ich auch gleich ma
FUNZT!
Die von dir genannte Lösung funzt EINWANDFREI!
ICH DANKE EUCH FÜR EURE HILFE, DAAAANKKKKEEEE!!!!!
vBulletin® v3.8.7, Copyright ©2000-2012, vBulletin Solutions, Inc.