Hallo,
Wie mache ich das aber nun, wenn ich je nach Auswahl des Benutzers (per Formular) verschiedene Felder wählen will? D.h. der eine Benutzer will Daten von feld_x, der andere von feld_x und feld_y, ein dritter nur von feld_y usw. Dann muss ich ja individuell bei WHERE die Felder aufführen.
klar erkannt. :-)
Wie funktioniert das?
Baue dein SQL-Statement schrittweise zusammen. Fang an mit dem konstanten Teil vor der WHERE-Klausel:
$query = "SELECT feld_x FROM table WHERE ";
Jetzt gehst du deine Auswahlkriterien durch. Da es mehrere sind, bietet sich ein Array an, um diese zu speichern. Also legen wir zunächst ein leeres Array an, das wir dann Schritt für Schritt bestücken.
$condition = array();
if (isset($_POST['feld_x']))
$condition[] = "feld_x = '" . mysql_real_escape_string($_POST['feld_x']) . "'";
if (isset($_POST['feld_y']))
$condition[] = "feld_y = '" . mysql_real_escape_string($_POST['feld_y']) . "'";
if (isset($_POST['feld_z']))
$condition[] = "feld_z = '" . mysql_real_escape_string($_POST['feld_z']) . "'";
Du erkennst die Regelmäßigkeit? - Und zum Schluss bauen wir das Statement zusammen, indem wir die gesammelten Bedingungen jeweils mit einem "AND" dazwischen zusammenfügen und an das bereits angefangene SQL-Statement anhängen:
$sql .= implode(" AND ", $condition);
Nur den Fall, dass überhaupt kein Auswahlkriterium eingegeben wurde, solltest du noch abprüfen - in diesem Fall würde das bislang sture Vorgehen natürlich einen SQL-Fehler provozieren.
Bei zwei Feldern mag das ja noch gehen - aber bei mehreren wird das doch arg lang und unübersichtlich. Da gibts ja immer 2^Feldanzahl Optionen.
Stimmt. Versuche in solchen Fällen immer, das Problem möglichst systematisch anzugehen und Regelmäßigkeiten zu finden. Sobald man solche Regelmäßigkeiten erkannt hat, ist die Realisierung meist nicht mehr so dramatisch.
So long,
Martin
--
F: Was ist wichtiger: Die Sonne oder der Mond?
A: Der Mond. Denn er scheint nachts. Die Sonne dagegen scheint tagsüber, wenn es sowieso hell ist.