App installieren
How to install the app on iOS
Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
[PHP / MySQL] IF-Bedingung fehlerhaft | wie richtig?
- Ersteller sniper.de
- Erstellt am
sniper.de
Grand Admiral Special
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:
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
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:
PHP:
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
Kali
Vice Admiral Special
war auf falschen weg. sorry!
sniper.de
Grand Admiral Special
ja ne kein Thema, postet halt irgendwas, jeden Gedankengang.
Es geht ja hierrum:
Er soll gucken ob das Feld forgotpw in der DB UNGLEICH null ist.
Es geht ja hierrum:
PHP:
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.
SKar
Vice Admiral Special
Hi,
bin mir zwar nicht sicher, aber ein Versuch ist es sicher Wert :
bin mir zwar nicht sicher, aber ein Versuch ist es sicher Wert :
PHP:
if ($result=$db->query("SELECT forgotpw FROM user WHERE user='".$_GET['pwuser']."'") NOT NULL) // Wurde ein neues PW angefordert?
sniper.de
Grand Admiral Special
ohne einen Vergleichsoperator?
ich teste es nachher nach deer Formel1 mal aus.
ich teste es nachher nach deer Formel1 mal aus.
SKar
Vice Admiral Special
mmh, ev. musst du doch ein IS einfügen
Wenn man dem mysql-manual glauben darf, sollte es aber auch mit != NULL gehen..
http://www.mysql.de/doc/de/Working_with_NULL.html
PHP:
if ($result=$db->query("SELECT forgotpw FROM user WHERE user='".$_GET['pwuser']."'") IS NOT NULL) // Wurde ein neues PW angefordert?
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:
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.
IMHO ist es nicht gut, eine Zuweisung und einen Vergleich in eine If-Abfrage zu packen.
Probiers doch mal so:
Code:
$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.
SKar
Vice Admiral Special
oups, da war ich wohl ein bischen voreillig..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.
In dem Fall ist ein
PHP:
$result=$db->query("SELECT forgotpw FROM user WHERE user='".$_GET['pwuser']."'")
if ($result[password] != NULL)
PHP:
foreach($result as $key => $value)
print ($key." = ".$value."<br>");
sniper.de
Grand Admiral Special
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
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:
Aber ich denk immer noch, dass
Code:
if ( a = b < c ) ...
Weiss einer vielleicht, ob = oder < stärker ist ?
Machs doch einfach so, wie oben beschrieben:
Code:
a = b;
if ( a != "Null" ) ...
sniper.de
Grand Admiral Special
wie drückt man im PHP vergleich das Null von Mysql aus, also nicht NULL als String sondern den zustand Null
So gehts nicht:
und so auch nicht
menno
So gehts nicht:
PHP:
$result=$db->query("SELECT forgotpw FROM user WHERE user='".$_GET['pwuser']."'");
if ($result[0]!= 'Null') // Wurde ein neues PW angefordert?
PHP:
$result=$db->query("SELECT forgotpw FROM user WHERE user='".$_GET['pwuser']."'");
if ($result[0]!= Null) // Wurde ein neues PW angefordert?
menno
Original geschrieben von Shaft99
Dann ist das eine Problem ja schon mal gelöst.
Aber ich denk immer noch, dass
in PHP nicht funktioniert, bzw. nicht das gewünschte resultat liefert.Code:if ( a = b < c ) ...
Weiss einer vielleicht, ob = oder < stärker ist ?
Machs doch einfach so, wie oben beschrieben:
Code:a = b; if ( a != "Null" ) ...
Müsste if( (a=b)<c ) lauten.
Als kleinen Workaround könntest du folgendes probieren:
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
PHP:
if ($db->query("SELECT user FROM user WHERE forgotpw IS NOT NULL AND user='".$_GET['pwuser']."'"))
{
...
}
*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
Grand Admiral Special
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...
Ich habe das jetzt so eingebunden:
Ich lass mir ma ebend die DB Ausgabe anzeigen
EDIT2:
Die Datenbank gibt DAS zurück:
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...
Ich habe das jetzt so eingebunden:
PHP:
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:
Code:
Resource id #9
Zuletzt bearbeitet:
Jetzt ist nur noch die Frage, was du erwartest.Original geschrieben von sniper.de
Die Datenbank gibt DAS zurück:
Code:Resource id #9
sniper.de
Grand Admiral Special
ich erwarte ein FALSE
Aah, ich schätze ich hab die Lösung
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 :
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 :
PHP:
if ($db->fetch_array($db->query("SELECT ID FROM user WHERE forgotpw IS NOT NULL AND user='".$_GET['pwuser']."'")))
sniper.de
Grand Admiral Special
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
[EDIT]
FUNZT!
Die von dir genannte Lösung funzt EINWANDFREI!
ICH DANKE EUCH FÜR EURE HILFE, DAAAANKKKKEEEE!!!!!
[/EDIT]
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
[EDIT]
FUNZT!
Die von dir genannte Lösung funzt EINWANDFREI!
ICH DANKE EUCH FÜR EURE HILFE, DAAAANKKKKEEEE!!!!!
[/EDIT]
Zuletzt bearbeitet:
Ähnliche Themen
- Antworten
- 3
- Aufrufe
- 7K
- Antworten
- 0
- Aufrufe
- 4K
- Antworten
- 4
- Aufrufe
- 2K