Tom: richtigen Query erstellen <-- bitte ist wichtig

Beitrag lesen

Hello,

na, ganz so einfach sollte man sich das aber nicht machen, wenn einem seine Datenbank lieb ist.

Vorgehensweise:
Erstmal entscheiden, ob alle Felder in Frage kommen sollen, oder nur die indizierten. Ich würde für zweiteres plädieren, da man ja ohnehin
irgendwann festlegen muss, welche Felder in Frage kommen

1. Man beschafft sich mit "show columns from $table" die Spaltennamen
   Typen, und welche Spalten einen Index haben. Da steht dann in
   KEY (PRI,MUL,UNI). Man muss das ein bisschen umstapeln. Die
   funktion get_info() müsste hier im Archiv zu finden sein (von mir)

2. Man baut sich ein Filterformular auf

<input type="text" name="filter[$spaltenname]>

das kann man in einer foreach() Schleife generieren lassen für alle
   Felder des $info-Records, die einen KEY-Eintrag haben.

3. Wenn der POST jetzt die Daten im Script abliefert, muss man nur
   für alle $_POST["filter"] schauen, ob die Felder existieren durch
   Abgleich mit get_info(). Wenn eins dabei ist, dass im $info-Record
   nicht existiert, muss das Script wegen Fake cancelled werden.
   Sonst baut man sich nun die Where-Bedingung auf:

$where = "";
   $filter = strip($_POST["filter"]);   ## Funktion strip() siehe Archiv

foreach($filter as $key => $value)
   {
     if ((strlen(trim($value))>0) and in_array($key,$info))
     {
       ## hier kann man noch einen Typ-Abgleich machen!
       ## if (checktype($key,&$val,$info) ## habe ich noch nicht fertig
       $where .= " $key = '".mysql_escape_string($value)."',";
     }
   }

if (strlen($where)>0)
   {
     $where = " where ".substr($where,0,-1);
   }

$sql = "Select $fields from $table $where";

Und Schuss.

So müsste es klappen
Verbesserungsvorschläge erwünscht.

Liebe Grüße aus http://www.braunschweig.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen