Syntax: Mehrere Bedingungen gleichzeitig bei IF-Abrage

Don Stefano

Erfahrenes Mitglied
Hallo zusammen,

ich habe folgende Aufgabenstellung:

Ein Formular soll dazu dienen, dass man im geschützen Bereich seinen Usernamen, seine E-Mail oder sein Passwort ändern kann. Dies geschieht mit einfachen Texteingabefeldern.

Zuerst werden die ursprünglichen Einstellungen aus der Datenbank gelesen und erscheinen dann mittels value in den Formulartextfeldern (als Vorauswahl).

Nach dem Ausfüllen des Formulars überprüft dann eine weitere php-Datei die Eingaben und speichert ggf. Änderungen in der Datenbank.

Um es zu verkürzen:

In dieser Datei soll eine Variable nur dann in der Datenbank gespeichert werden, wenn Sie auch Inhalt hat (also nicht leer (Null) ist) und sich von dem Eintrag, der bereits in der Datenbank gespeichert steht unterscheidet. Anders: Ein neues Login soll nur dann gespeichert werden, wenn es sich vom aktuellen unterscheidet und der Inhalt nicht leer ist.

Das wollte ich folgendermaßen lösen:

PHP:
 IF (($_POST["loginneu"]) !=0 AND ($_POST["loginneu"]) != $login){
           ... ($loginneu jetzt speichern)...
    }

Leider scheint das nicht zu funktionieren, denn auch wenn die Variable $_POST["loginneu"] einen Wert hat, wird sie nicht gespeichert.

Ist etwas an der Syntax falsch (AND?) oder woran kanns liegen?
 
Hi

Probier es doch mal so:
PHP:
if ( isset($HTTP_POST_VARS["loginneu"]) AND ($HTTP_POST_VARS["loginneu"] !== $login) {
  	...ersetze den alten Wert durch $login
  }
Falls das auch nicht funktioniert dann probier es doch mit einer Verschachtelten if-Abfrage:
PHP:
 if (isset($HTTP_POST_VARS["loginneu"])) {
 	if ($HTTP_POST_VARS["loginneu"] !== $login) {
 	   ...ersetze den alten Wert durch $login
 	}
 }

Gruß
exed
 
Zuletzt bearbeitet:
Ich verwende übrigens "Update". Macht das einen Sicherheitsunterschied aus, oder warum fragst Du?

Konkret sieht es folgendermaßen aus:

PHP:
 $ergebnis = mysql_query("update tabelle SET login='".mysql_real_escape_string($loginneu)."' where `id`= '".intval($id)."'"); 
         if(!$result) die("Datenbankverbindung konnte nicht hergestellt werden. Fehler " . mysql_errno() .": ". mysql_error());

Mit den anderen Vorschlägen experimentiere ich jetzt einmal herum.
Aber müßte der Vergleich: $x != 0 nicht zum selben Ergebnis führen, wie: ISSET($x) ?
 
Hallo,

zunächst möchte ich zu meinem Vorredner sagen, dass && und AND den gleichen Zweck erfüllen. Anstelle von $HTTP_POST_VARS u.s.w. sind die neuen Schreibweisen $_POST (wie du bereits verwendest) zu verwenden. Die alte Schreibweise wird nur noch aus Gründen der Abwärtskompatibilität mitgeschleppt und wird früher oder später wegfallen.

Um einen String auf Null zu prüfen empfielt es sich, dass auch wirklich zu tun:
PHP:
if (trim($string) != null) {
   // mache was
}

Um einen String auf eine bestimmte Länge zu prüfen redundant dazu:
PHP:
// minimale Laenge des Strings
$minLength = 6;
if (strlen(trim($string)) >= $minLength) {
   // mache was
}

Davon abgesehen sieht deine Bedingung nicht verkehrt aus, was einerseits bedeuten kann, dass die Bedingung erfüllt ist und ein anderer Fehlerteufel innerhalb des Zweiges versteckt ist oder aber $login nimmt zuvor an irgend einer Stelle deines Codes den Wert der Post Variablen an.

mfg Bloddy
 
Zurück