suchfunktion

sipoh

Erfahrenes Mitglied
Hallo, na?

Ich habe mal ne Frage.

Ich habe ein Select-Feld

Code:
<select name="obst">
<option value="tomate">Tomate</option>
<option value="gurke">Gurke</option>
<option value="1">egal</option>
</select>

und die Suchabfrage geht so:

Code:
..
$obst = $_GET['obst'];
query = $db->query("Select * from obst where obstart=$obst");

In der DB sieht das so aus:
obst || obstart | geschmack
tomate | blöd
gurke | gut

suche ich nach tomate oder gurke, ist das klar. Ist es mir aber egal, soll beides ausgewählt werden.

Geht das mit LIKE? setze ich den Suchparameter zwischen %-Zeichen und lasse den Suchstring bei "egal" leer, sucht er aber nicht alles.
 
ich würde es so machen:

PHP:
$obst = $_GET['obst'];
if ($obst != 1)  { $obst = "where obstart={$obst}";}
else { $obst ="";}
query = $db->query("Select * from obst $obst");
 
Zuletzt bearbeitet:
Oh, vielen Dank. Mir ist klar, dass das alles kein Obst ist, aber:

Wenn ich jetzt zusätzlich noch nach weiteren Sachen suchen möchte. Also:

DB:

obst || obstart | kerne | farbe
tomate 6 rot
gurke 12 grün
apfel 3 grün
banane 4 gelb

ich möchte also die obstart wissen, die 6-12 kerne hat und grün ist.

mache ich also so:

Code:
$obst = $_GET['obst'];
$kerne = $_GET['kerne'];
$farbe = $_GET['farbe'];

if ($kerne != 1)  { $kerne = "where kerne={$kerne}";}
else { $kerne ="";}

query = $db->query("Select obstart from obst $kerne");

Aber wie hänge ich das zweite Suchkriterium (farbe) per AND an die Query? statisch ist das ja kein Thema, aber das Problem liegt darin, dass es sein kann, dass die Farbe nicht expl ausgewählt wird, somit egal ist. Müsste also Obstart und Farbe mit zb 6-12 kernen ausgegeben werden. Analog Obstart mit 6-12 kernen und der Farbe grün.
 
Du könntest das Query Stück für Stück zusammensetzen:
PHP:
$query = "SELECT obstart FROM obst"; // gibt alles aus --> keine auswahlkriterien angegeben
if(isset($_GET['obst'])){
 $query .= " WHERE obstart = ".mysql_real_escape_string($_GET['obst']);
}
if(isset($_GET['kerne'])){
 if(isset($_GET['obst'])){
  $query .= " AND kerne = ".mysql_real_escape_string($_GET['kerne']);
 }
 else{
  $query .= " WHERE kerne = ".mysql_real_escape_string($_GET['kerne']);
 }
}
if(isset($_GET['farbe'])){
 if(isset($_GET['obst']) || isset($_GET['kerne'])){
  $query .= " AND farbe = ".mysql_real_escape_string($_GET['farbe']);
 }
 else{
  $query .= " WHERE farbe = ".mysql_real_escape_string($_GET['farbe']);
 }
}
...sieht irgendwie murksig aus aber sollte gehn ;)

MfG
 
Oh je, es sind an die 6 Sachen, um die Suche zu bestimmen/verfeinern. Das wird ein hartes Stück arbeit. :/

Ich danke dir und lasse wissen, wenn´s Erfolg gebracht hat.
 
moin

der vorschlag von drucko sollte so klappen nur setzt ambesten in der SQL Abfrage immer so:

WHERE name = 'BEGRIFF';


damit der du die Funktionalität gewehrleisten kannst, mache die Anführungszeichen aber nicht inner halb den mysql_real_escape_sting()...
 
Zurück