SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen
Hilfe Community Kalender Heutige Beiträge Suchen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 26.10.2011, 18:27:05
gelogelo gelogelo ist offline
Anfänger
 
Registriert seit: May 2011
Alter: 69
Beiträge: 9
mehrdimensionales array ausfiltern

Hi,
ich habe eine html form in der 8 Dropdown Wahlfelder anklickbar sind.

Hat man eine DB setzt man sich einfach einen Query-String zusammen und das Ergebnis wird sauber geliefert.

Habe ich ein mehrdimensionales php-Array zu durchsuchen hat man diese einfache Möglichkeit nicht.
Ich habe versucht mit
Code:
eval ( string $code_str )
einen String zusammenzusetzen der dann in einer
Code:
if ( eval ( $code_str ) )
ausgewertet wird und dann eine saubere Bedingungsabfrage liefert.

Das ist alles gescheitert.
Beispielcode
Code:
$code_str_bedingung = 'true ';
if ($standort != '') {  $code_str_bedingung.= "&& stristr($immobilien[$c]['geo']['ort'] "; }  
if ($mietenkaufen != '')  { $code_str_bedingung.= "&& $immobilien[$c]['objektkategorie']['vermarktungsart']['@attributes']['KAUF'] == $mietenkaufen " ; }
if ($preis != 0) {  $code_str_bedingung.= "'&& $immobilien[$id]['preise']['kaufpreis'] >= $preis" ; }
Danach soll das so behandelt werden:
Code:
if (eval( $code_str_bedingung)) {
   // hier code
}
Hat jemand für dieses Problem einen Lösungsvorschlag.

Das Problem liegt darin, daß der User beliebige Dropdowns aus oder auch nichtauswählen kann.
Damit beinhaltet die Abfrage stets unterschiedlich viele Felder (Dropdowns).
Diejenigen, die nicht ausgewählt wurden, müssen unberücksichtigt bleiben.

Für Ratschläge dankbar,
Gruß GELO
Mit Zitat antworten
  #2  
Alt 26.10.2011, 19:27:09
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: mehrdimensionales array ausfiltern

Eval ist böse!
Und überhaupt nicht für solche Zwecke geeignet.

Du suchst vermutlich array_diff()


Ansonsten:
Ich habe höchstens 20% von dem was du da schreibst verstanden
Mit Zitat antworten
  #3  
Alt 27.10.2011, 15:44:24
gelogelo gelogelo ist offline
Anfänger
 
Registriert seit: May 2011
Alter: 69
Beiträge: 9
AW: mehrdimensionales array ausfiltern

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">&uuml;ber 5.000 m²</option>'; 
				$grundstuecksflaeche_lower = 500; $grundstuecksflaeche_upper = 100000; break;
			default:
				print '<option selected="selected" value="leer">keine Pr&auml;ferenz</option>'; 
				$grundstuecksflaeche_lower = 0; $grundstuecksflaeche_upper = 100000; break;
			}
			?>
				<option value="leer">keine Pr&auml;ferenz</option>
				<option value="0-1000">bis 1.000 m²</option>
				<option value="1000-5000">1.000 - 5.000 m²</option>
				<option value=">5000">&uuml;ber 5.000 m²</option>
			</select>
Vielleich kann man das noch eleganter lösen?
Mit Zitat antworten
  #4  
Alt 29.10.2011, 11:53:37
gelogelo gelogelo ist offline
Anfänger
 
Registriert seit: May 2011
Alter: 69
Beiträge: 9
AW: mehrdimensionales array ausfiltern

Zitat:
Zitat von DokuLeseHemmung Beitrag anzeigen
Eval ist böse!
Und überhaupt nicht für solche Zwecke geeignet.

Du suchst vermutlich array_diff()


Ansonsten:
Ich habe höchstens 20% von dem was du da schreibst verstanden
Hi, danke für den Hinweis auf eval() und array_diff().
Sowewit ich sehe kann ich mit array_diff() nicht das erreichen was ich brauche.
Mein Problem war kurz gesagt:
Ich brauche ein Äquivalent zu einem MySQL Select String der nach Kriterien (Form-Feld mit Wert gefüllt oder nicht gefüllt/default) zusammengesetzt wird.
Code:
$query = 'SELECT * from table WHERE field_a = value_a ';

if (S_REQUEST['field_b'] != '') $query.= "&& field_b = value_b ';
if (S_REQUEST['field_c'] != '') $query.= "&& field_c = value_c ';
Und das durch alle 8 felder meines Formulares.

Also wenn es dafür was besseres gibt als eval(), bitte gern!

Gruß GELO
Mit Zitat antworten
  #5  
Alt 01.11.2011, 13:02:21
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: mehrdimensionales array ausfiltern

Zitat:
Zitat von DokuLeseHemmung Beitrag anzeigen
Ansonsten:
Ich habe höchstens 20% von dem was du da schreibst verstanden
Soviel... Ich bin schon damit überfordert:
PHP-Code:
return true && false == true && 4900000 >= 1000000 
wahr UND falsch GLEICH wahr UND fasel GROESSER GLEICH weniger fasel
Mit Zitat antworten
  #6  
Alt 03.11.2011, 12:28:45
gelogelo gelogelo ist offline
Anfänger
 
Registriert seit: May 2011
Alter: 69
Beiträge: 9
AW: mehrdimensionales array ausfiltern

Hi,

Zitat:
wahr UND falsch GLEICH wahr UND fasel GROESSER GLEICH weniger fasel
return true = wahr
return false = falsch
return true && true = wahr
return true && false= falsch
return true == fals = falsch
return 49 >= 10 = wahr
return true && false == true && 4900000 >= 1000000 = falsch

return gibt den boolschen Wert des Ausdrucks
( true && false == true && 4900000 >= 1000000 )
zurück. Und der ist hier fals, weil ein Teilstück (false == true) falsch ist.

Gruß GELO
Mit Zitat antworten
  #7  
Alt 03.11.2011, 12:35:30
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: mehrdimensionales array ausfiltern

Zitat:
Und der ist hier fals, weil ein Teilstück (false == true) falsch ist.
Genau!
Und warum machst du dann solch einen Unsinn?
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Arrayblind tlang78 PHP Grundlagen 2 30.06.2009 15:08:33
Array formatiert ausgeben Faang PHP Grundlagen 3 15.08.2008 01:47:43
Doppelte einträge aus einem Mehrdimensionalen Array aussortieren und löschen PHoenix_KM PHP für Fortgeschrittene und Experten 2 17.04.2008 18:19:53
Mehrdimensionales Array sortieren MrLongbaugh PHP Grundlagen 10 06.03.2008 12:02:47
Einzelne Daten aus Textdatei Auslesen azubinator PHP Grundlagen 153 17.12.2004 13:36:58


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:52:08 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt