PHP Suche gestalten

Tipp-ex

Cadet 3rd Year
Registriert
Okt. 2008
Beiträge
55
Hallo zusammen,

Ich muss für ein Schulprojekt eine Internetseite gestalten so wie z.B. immobilienscout24.de.
Da habe ich aber nun folgendes Problem ich muss wie ihr euch vieleicht vorstellen könnt da natürlich eine Suche einbauen damit der Besucher sein Objekt schnell finden kann.
Ich beachte hier Kriterien wie Ort,Fläche,Preis,Typ des Objektes (z.B. Haus, Wohnung) u.s.w.

if ( ((isset($_POST['Typen'])) and (mysql_result($result,$i,'dtType') == $_POST['Typen'])) and ((isset($_POST['Flaeche'])) and (mysql_result($result,$i,'dtFlaeche') >= $_POST['Flaeche'])) )

Hier ist nun mein if der nur die Objekte anzeigen soll die der Sucher auch möchte (Im if sind noch nicht alle Kriterien eingebaut). Jedoch wenn der Benutzer die Felder ausfüllt so muss er zB keinen Typen angeben, aber die Suche sollte jedoch funktionieren und nach den anderen Kriterien suchen.

Darum habe ich mir gedacht ich benutze isset um zu testen ob der Type überhaubt angegeben wurde wenn nicht so ignoriert er einfach den if-Teil mit dem Typen und geht zum Teil mit der Fläche über.

Jedoch soviel zu Therorie aber in der Umsetzung scheitert es etwas.

Ich bitte euch um Hilfe und bedanke mich schon mal im Voraus

Tipp-ex
 
Normalerweise sucht die Datenbank für dich mittels SELECT...WHERE Typen = X AND Flaeche >= Y... Abfrage. Und du zeigst die Ergebnisse der Abfrage nur noch an. Besser als deine Suche per Hand in PHP zu programmieren..
 
Oder du benutzt eine Suchengine, denn eine alleine wirst du es bei deinen Kenntnissen in den nächsten XX Jahren nicht hinkriegen.
 
@ Mumpitzelchen

Ja das war auch meine erste Idee aber bei dieser Methode stößt man jedoch auf ein Problem was ist wenn der Besucher nun keinen Typen oder keine Fläche angibt dann funktioniert die Query nicht mehr ;)
 
Dann musst du das VORHER abfangen. Du kannst doch nicht einfach Userinput direkt in die Query schreiben, denn sonst überlebt deine Seite keine 5 Minuten ohne Hack.
 
Hier ist noch ein kleiner Screenshot der Suche falls irgendeiner es sich so besser vorstellen kann :)

Suche.JPG
Ergänzung ()

@ GrinderFX Ja deshalb habe ich ja die Methode mit dem if gewählt
 
Aber dann müsstest du ja ALL deine Einträge in der Datenbank durchgehen und das OHNE Index. Schon alleine alle zu holen ist ziemlich dumm, weil dadurch ja bei jeder Suchanfrage eine Menge Speicher benötigt wird. Bei größeren Datensätzen wäre das das Ende vom Server.
Wie schon geschrieben, lass es die Datenbank machen und bei einer Textsuche nutzt eventuell eine fertige Searchengine.
 
Hi,

Ja das war auch meine erste Idee aber bei dieser Methode stößt man jedoch auf ein Problem was ist wenn der Besucher nun keinen Typen oder keine Fläche angibt dann funktioniert die Query nicht mehr

Käse, dann baust du das Select-Statement eben dynamisch auf. "SELECT * FROM tabA WHERE valA = 'X' and valB = 'Y'" wenn "valA" und "valB" übergeben wurden, "SELECT * FROM tabA WHERE valA = 'X'" wenn "valB" nicht übergeben wurde usw. Das sind ein paar Zeilen, die dir das SELECT-Statement dynamisch zusammenbauen und fertig.

Wie schon geschrieben, lass es die Datenbank machen und bei einer Textsuche nutzt eventuell eine fertige Searchengine.
Ganz genau! :)

VG,
Mad
 
@Mad
Ja ok aber es können ja sehr viele Kombinationen auftreten bei der Suche (siehe Foto) dann müsste ich ja wenn ich deine Methode richtig verstanden habe für jede Kombination eine Query anfertigen
 
Hi,

du fertigst einen Query-String an, der eben dynamisch um ein "AND 'xyz' = [user-auswahl]" ergänzt wird, sofern der entsprechende Wert gesetzt ist. Und diesen Query-String setzt du am Ende ab und erhältst die Auswahl.

VG,
Mad
 
Natürlich hast du viele Variablen. Was denkst du, wie das andere Leute schreiben? Du sammelst alle Variablen, die der User haben will, zusammen und konkatenierst den Query String dann wie du ihn für den jeweiligen Input brauchst. Wenn du keinen guten Überblick hast, dann heißt das:
$qry = "SELECT * FROM table";
if(wertA)
{
$qry .= " AND wertA = '".mysql_real_escape_string($wertA)."'";
}
Erfahrenere Programmierer nutzen die Kurz-Schreibweise mit ? : ;

Sei lieber froh, dass du wahrscheinlich ne winzige Datenmenge haben wirst. Ich musste mal eine komplexe Suche über einige Millionen Einträge (inklusive Volltext-Suche) schreiben. Wenn du bei so etwas keinen Index bzw. Such-Cache schreibst, dann bist du am Arsch. Dann dauert jeder Query locker ne Minute.
 
Zurück
Oben