Suchfunktion für SQL abfrage

dh571

KlickCafe.de
ID: 143596
L
12 Oktober 2008
113
9
Hallo ihr lieben,

ich habe ein kleines Problem. Ich möchte eine Datenbank suche mit mehrern feldern programmieren. Dazu habe ich ein Formular mit 9 verschiedenen feldern.
Das erste Feld ist ein Radio Feld und die anderen ausfüllbare Textfelder, die auch in der DB vorhanden sind.

Diese frage ich wie folgt ab:
$model_read = db_query("SELECT * FROM jos_models WHERE `Approved` = '1' AND `S*x` = '".$_GET['s']."' AND (`Name` = '".$_GET['name']."' OR `Nationality` = '".$_GET['natio']."' OR `Height` = '".$_GET['height']."' OR `Dress` = '".$_GET['size']."' OR `Hair` = '".$_GET['hair']."' OR `Eyes` = '".$_GET['eyes']."' OR `Residence` = '".$_GET['local']."') ORDER BY ID LIMIT ".$_GET['li'].",49");


Doch leider bekomme ich aber nicht das gewünschte Ergebniss, sondern mir wird immer irgendetwas oder gar nichts angezeigt. Was ist falsch?
 
Ohne genau zu schauen, woran es liegen könnte, könntest du mal folgendes Versuchen.

Lass dir $model_read mal per echo ausgeben und hau den sql mal per phpmyadmin oder sowas direkt auf die db. kommen meißt genauere fehlermeldungen.

Greetz Rootkilla
 
Lass dir $model_read mal per echo ausgeben und hau den sql mal per phpmyadmin oder sowas direkt auf die db. kommen meißt genauere fehlermeldungen.

Er kann auch einfach mysql_error() abfangen...

Du musst dir bewusst sein, dass die Query nur funktioniert, wenn wirklich alle benötigten Parameter übergeben werden. An deiner Stelle würde ich das SQL-Statement dynamisch zusammenbauen (in Abhängigkeit von den übergebenen Parametern).

Und noch ein Tipp: Bitte, bitte escape Request-Variablen vernünftig, bevor du sie an die DB übergibst. Momentan sieht das sehr anfällig aus.

Greetz

paddya
 
Danke für eure Antworten.
Mir ist klar, dass die Abfrage nur funktioniert, wenn alle Variablen übergeben werden. Die Frage ist, wie ich das ganze so umsetzen kann, dass wenn jemand im Feld "name" nach Jasmin sucht, alle Jasmins aus der DB gelesen werden und nicht alle Jasmins + alle die bei den anderen feldern nichts angegeben haben.

An deiner Stelle würde ich das SQL-Statement dynamisch zusammenbauen (in Abhängigkeit von den übergebenen Parametern).
Darauf wollte ich hinaus.. aber sag mir WIE??
 
Große Ge-if-e halt:
PHP:
$where = '1';

// foo
if(isset($_POST['foo']) && !empty($_POST['foo']))
  $where .= sprintf(" AND foo = '%s'", $db->secure_string($_POST['foo']));

// bar
if(isset($_POST['bar']) && !empty($_POST['bar']))
  $where .= sprintf(" AND bar = %u", $db->secure_number($_POST['bar']));

/* .... */
 
Sry, aber wie genau muss ich das einbauen? :-?
$where wahrscheinlich in die abfrage und wie weiter?
 
Das kannst du gar nicht einbauen. Das is nur die Idee, wies geht.
 
Was ich sonst gerne mach ist einfach alle conditionen in ein array zu packen so dass man einfach folgendes macht:
Code:
// Bau conditions zusammen:
for($i in $parameter_list){
  $conditions[] = sprintf("%s='%s'",$i, mysql_real_escape_string($_GET[$i]));
}
$sql = "SELECT * FROM tabelle WHERE ".implode(" AND ", $conditions);
Dass funktioniert auf meist :)

BTW: implode/explode for president :D
 
Da ist nicht so der Profi bin, wäre es cool wenn mir einer das so erklärt, dass ich es verstehe. Oder könnte jemand mir den Code bauen, ist für einen profi sicher schnell gemacht?!
 
Da ist nicht so der Profi bin, wäre es cool wenn mir einer das so erklärt, dass ich es verstehe.
Dann solltest du auch genau erklären, was du nicht verstehst. Es steht doch schon mehr oder weniger idiotensicher - sogar auf zwei unterschiedlichen Varianten - hier. Du musst schon sagen, woran es hapert.
Oder könnte jemand mir den Code bauen, ist für einen profi sicher schnell gemacht?!
Erlauben aber die Regeln nicht. Das hier is kein "Ich hab null Ahnung, wer macht es mir gratis?"-Forum.
 
Verzeihung, das war echt blöd von mir.. also den Code von Snyke baue ich jetzt ein wie er ist. Dieser Formatiert dann automatisch jede GET-Variabel die TRUE ist in eine "AND GET[x] = xyz" um richtig?

Da ich mit Querys arbeite, verändere ich die untere Zeile in:
$model_read = db_query("SELECT * FROM jos_models WHERE `Approved` = '1' AND `S*x` = '".$_GET['s']."' '".implode(" AND ", $conditions);"' ORDER BY ID LIMIT ".$_GET['li'].",49");

aber ich bekomme den Fehler:
Parse error: syntax error, unexpected T_STRING, expecting ';' in /www/htdocs/w00b63f0/components/com_start/start.php on line 66

Was habe ich falsch gemacht?
 
Habe ich getan, sieht so aus:
// Bau conditions zusammen:
for($i in $parameter_list){
$conditions[] = sprintf("%s='%s'",$i, mysql_real_escape_string($_GET[$i]));
}

$model_read = db_query("SELECT * FROM jos_models WHERE `Approved` = '1' AND `S*x` = '".$_GET['s']."' '".implode(" AND ", $conditions)."' ORDER BY ID LIMIT ".$_GET['li'].",49");

Aber immer noch der selbe Fehler:
Parse error: syntax error, unexpected T_STRING, expecting ';' in /www/htdocs/w00b63f0/components/com_start/start.php on line 66
 
Dann ist der Fehler nicht in dem Code. Welcher Code steht denn in Zeile 66?

EDIT: Im übrigen hast du den Code nicht verstanden. Und $parameter_list hast du vermutlich auch nicht gefüllt.