Hi,
inzwischen habe ich selbst eine Lösung erarbeitet:
Man zerlegt das ganze in folgende Codebestandteile:
Code:
$passend = eval ($code_str_bedingung);
if ($passend) {
// code im Erfolgsfalle
}
Das Entscheidende ist der Aufbau des Strings
Code:
$code_str_bedingung
Dieser muß letztlich als true oder false resultieren.
Also dem Prinzip nach:
Code:
$test = eval("return 1==1;");
if($test)
{
echo 'abc';
}
Dieses snippet habe ich hier gefunden:
http://stackoverflow.com/questions/3...-with-eval-php. Es hat mir den Hinweis gegeben, wie $code_str_bedingung formal auszusehen hat.
Von da an war es nur noch Fleißarbeit.
Bei mir sieht das dann so aus:
Wie bei einer SELECT Abfrage den query-String setze ich hier den Bedingungs-String zusammen.
Code:
$code_str_bedingung = 'return true ';
if ($standort != '') {
if ($immobilien[$c]['geo']['ort'] == $standort) {
$code_str_bedingung.= "&& true == true ";
} else {
$code_str_bedingung.= "&& false == true ";
}
}
if ($mietenkaufen != '') { $code_str_bedingung.= "&& ".$immobilien[$c]['objektkategorie']['vermarktungsart']['@attributes']['KAUF']." == $mietenkaufen " ; }
if ($preis != '') { $code_str_bedingung.= "&& ".$immobilien[$c]['preise']['kaufpreis']." >= $limit_lower && ".$immobilien[$c]['preise']['kaufpreis']." <= $limit_upper "; }
if ($zimmer != '') { $code_str_bedingung.= "&& ".$immobilien[$c]['flaechen']['anzahl_zimmer']." >= $zimmer_lower && ".$immobilien[$c]['flaechen']['anzahl_zimmer']." <= $zimmer_upper "; }
if ($wohnflaeche != '') { $code_str_bedingung.= "&& ".$immobilien[$c]['flaechen']['wohnflaeche']." >= $wohnflaeche_lower && ".$immobilien[$c]['flaechen']['wohnflaeche']." <= $wohnflaeche_upper "; }
if ($grundstuecksflaeche != '') { $code_str_bedingung.= "&& ".$immobilien[$c]['flaechen']['grundstuecksflaeche']." >= $grundstuecksflaeche_lower && ".$immobilien[$c]['flaechen']['grundstuecksflaeche']." <= $grundstuecksflaeche_upper "; }
$code_str_bedingung.= ";";
Indem ich den String mit 'return true '; beginne #, stelle ich sicher, daß er immer funktioniert und die Reihenfolge der Abfrage unerheblich ist.
Ein $code_str_bedingung kann so aussehen:
Code:
return true && true == true && 1390000 >= 1000000 && 1390000 <= 2000000 && 4.0 >= 0 && 4.0 <= 5 && 600.00 >= 500 && 600.00 <= 100000 && 10000.00 >= 500 && 10000.00 <= 100000 ;
ergibt: true.
Dies hier
Code:
return true && false == true && 4900000 >= 1000000 && 4900000 <= 2000000 && 7.0 >= 0 && 7.0 <= 5 && 750.00 >= 500 && 750.00 <= 100000 && 2500.00 >= 500 && 2500.00 <= 100000 ;
ergibt false.
Ein zugehöriges html-select sieht dann so aus:
Code:
<select name="grundstuecksflaeche" tabindex="<?php echo $tabindex++; ?>" size="1" style="width:129px;">
<?php
switch ($grundstuecksflaeche) {
case "0-1000":
print '<option selected="selected" value="0-1000">bis 1.000 m²</option>';
$wuhnflaeche_lower = 0; $grundstuecksflaeche_upper = 200; break;
case "1000-5000":
print '<option selected="selected" value="1000-5000">1.000 - 5.000 m²</option>';
$grundstuecksflaeche_lower = 200; $grundstuecksflaeche_upper = 500; break;
case ">5000":
print '<option selected="selected" value=">5000">über 5.000 m²</option>';
$grundstuecksflaeche_lower = 500; $grundstuecksflaeche_upper = 100000; break;
default:
print '<option selected="selected" value="leer">keine Präferenz</option>';
$grundstuecksflaeche_lower = 0; $grundstuecksflaeche_upper = 100000; break;
}
?>
<option value="leer">keine Präferenz</option>
<option value="0-1000">bis 1.000 m²</option>
<option value="1000-5000">1.000 - 5.000 m²</option>
<option value=">5000">über 5.000 m²</option>
</select>
Vielleich kann man das noch eleganter lösen?