[PHP / MySQL] IF-Bedingung fehlerhaft | wie richtig?

sniper.de

Grand Admiral Special
Mitglied seit
11.11.2001
Beiträge
3.122
Renomée
1
Standort
STRG + ALT +ENTF
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:
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
 
ja ne kein Thema, postet halt irgendwas, jeden Gedankengang.
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.
 
Hi,

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?
 
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:
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. ;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
PHP:
$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
PHP:
foreach($result as $key => $value) 
print ($key." = ".$value."<br>");
 
Dann ist das eine Problem ja schon mal gelöst.
Aber ich denk immer noch, dass
Code:
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:
Code:
a = b;
if ( a != "Null" ) ...
 
wie drückt man im PHP vergleich das Null von Mysql aus, also nicht NULL als String sondern den zustand Null

So gehts nicht:

PHP:
$result=$db->query("SELECT forgotpw FROM user WHERE user='".$_GET['pwuser']."'");
			if ($result[0]!= 'Null') // Wurde ein neues PW angefordert?
und so auch nicht
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
Code:
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:
Code:
a = b;
if ( a != "Null" ) ...

Müsste if( (a=b)<c ) lauten.
 
Als kleinen Workaround könntest du folgendes probieren:

PHP:
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 ;)
 
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...
phpmyadmin1.jpg


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:
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 ;):

PHP:
if ($db->fetch_array($db->query("SELECT ID FROM user WHERE forgotpw IS NOT NULL AND user='".$_GET['pwuser']."'")))
 
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]
 
Zuletzt bearbeitet:
Zurück
Oben Unten