Dynamische if-Anweisung
christian
- php
Hallo,
ich hab ein Problem und bisher nirgendwo eine passable Lösung gefunden.
Ich will eine "Dynamische" If-Abfrage schreiben:
if((empty($haus))||(empty($auto)|| usw....){}
die abzufragenden Variablen und deren Anzahl (also in diesem Fall $haus, $auto, ...) stehen in einer Datenbank
Die If-Abfrage kann also mal länger sein (mit sehr vielen Bedingungen), aber -falls in der Datenbank nur ein passender Eintrag vorhanden ist- nur eine einzige Bedingung.
Wie schreib ich jetzt die If-Anweisung?
Wie schreib ich jetzt die If-Anweisung?
Schreib eine Funktion mit Rückgabewert vom Typ Bool, die im IF-Block aufgerufen wird.
Lieber King^Lully,
Schreib eine Funktion mit Rückgabewert vom Typ Bool, die im IF-Block aufgerufen wird.
dazu könnte man ja meinen obigen Code "umbauen"...
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Lieber christian,
if((empty($haus))||(empty($auto)|| usw....){}
[...] aber -falls in der Datenbank nur ein passender Eintrag vorhanden ist- nur eine einzige Bedingung.
Dazu kannst Du eval() benutzen. Definiere doch eine boolsche Variable $ok, die Du per eval() berechnen lässt. Der eval zu übergebende String muss korrekte PHP-Syntax sein!
Ich könnte mir das so vorstellen:
$dbStr = "haus,auto,pool,pferd,pferdepflegerin";
$variablen = explode($dbStr, ',');
/* Du kannst Deine Liste an Variablen auch anders ermitteln,
aber Du wirst sie wohl besser in ein Array packen, um sie
einzeln zu durchlaufen. */
$str = '(';
for ($i = 0; $i < count($variablen); i++) {
if ($str != '(')
$str .= ' || '; // Oder-Operator nicht vor die erste Variable...
$str .= 'empty($'.$variablen[$i].')';
}
$str .= ')';
eval('$ok = '.$str);
if ($ok)
echo 'alles erfüllt!';
else
echo 'nicht alles erfüllt!';
Obiges ist natürlich ungetestet!
Liebe Grüße aus Ellwangen,
Felix Riesterer.
echo $begrüßung;
if((empty($haus))||(empty($auto)|| usw....){}
die abzufragenden Variablen und deren Anzahl (also in diesem Fall $haus, $auto, ...) stehen in einer Datenbank
Code in einer Datenbank halte ich für einen Design-Fehler. Aber wie auch imer ...
Die If-Abfrage kann also mal länger sein (mit sehr vielen Bedingungen), aber -falls in der Datenbank nur ein passender Eintrag vorhanden ist- nur eine einzige Bedingung.
Wie schreib ich jetzt die If-Anweisung?
Definiere eine Variable, die als Flag funktioniert. Je nach deiner Logik belegst du sie zunächst mit true oder false. Lasse dann in einer Schleife die gewünschten Variablen, Ausdrücke, wasauchimmer prüfen und ziehe dann die Flag-Variable in die deiner Logik entsprechenden Richtung oder lass sie unverändert. Am Ende sollte das Flag das Prüfergebnis anzeigen. Falls es schon während einer der Prüfungen eindeutig wird, kannst du die Schleife auch an der Stelle abbrechen. (Dieses Kurzschlussverfahen kommt bei logischen Verknüpfungen (and, or) zur Anwendung. Sobald feststeht, dass sich am Ergebnis nichts mehr ändert, z.B. einer der and-Partner false ergibt, werden nachfolgende Ausdrücke nicht mehr ausgewertet.)
echo "$verabschiedung $name";