Richtig Filter mit PHP/MySQL und Select Box
Momentan habe ich eine große Tabelle in MySQL mit mehreren Feldern. Ich bin derzeit versucht, dem Benutzer zu ermöglichen, filter, indem Sie jedes Feld, über Select-Boxen.
Habe ich 4 Felder: Schule, Division und Staat.
Ich habe kein problem mit PHP, wie Sie filter basierend auf welche option der Benutzer wählt in der Auswahlbox.
Beispielsweise, wenn diese 3 eingereicht werden:
<select id="school">
<option value="13">John Brown School</option>
</select>
<select id="division">
<option value="I">I</option>
</select>
<select id="state">
<option value="NY">New York</option>
</select>
Ich würde in der Lage sein, Abfragen basierend auf jede option, wie:
$school= $_POST['school'];
$division= $_POST['division'];
$state = $_POST['state'];
Query: SELECT * from table WHERE school=$school AND division=$division and state=$state
Jedoch, wenn ich eine option "Alle" (in der select-box), wie würde ich das umsetzen dieser in der Abfrage oder in der WHERE-Klausel, so dass es nicht zu filtern, die bestimmten Bereich?
- Ich hoffe, du bist mit prepared statements SQL-injections zu vermeiden.
- Ich bin, ich hielt es prägnant zu halten die 'Frage' so einfach wie möglich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte man einfach machen, eine option, die Sie speziell suchen. In der Tat, in diesem Fall, es klingt wie die beste Wahl wäre, um Ihre Felder auswählen, eine option "Alle", oder nur lassen Sie leer. Die leere Auswahl, es kann Ihre Standard. Ich hätte es als:
Nun, beim einrichten des query-Variablen, Sie dies tun:
Nun, wenn jeder wählen Sie Optionen ausgewählt werden, mit der blank-Werte (dh. verwenden Sie alle), Sie werden nicht Teil der WHERE-Klausel.
Sind Sie offen für SQL-injection-Angriffe, wenn Sie nicht entkommen können Sie Ihre eingehenden $_POST Daten da auch gut, also eine Sache, die Sie tun müssen, ist laufen mysql_real_escape_string() auf dein $_POST-Werte, die ich Hinzugefügt, um das Beispiel. Es klingt wie Sie bereits sind sich bewusst, dass, obwohl.
Nicht Buchhaltung für sql-injection, etc, hier ist die grundlegende Logik, ein Weg, es zu tun. Psudo-code, oder natürlich.
Diese Weise, mit 1=1, Sie müssen nicht, sorgen zu machen, ob append/prepend 'und' basierend auf, ob einige oder alle von Ihnen anwesend sind. Wählen Sie alle (leeren Wert wählen) standardmäßig, und filter, basierend auf der Anwesenheit von jedem wählen.
Natürlich, werden Sie brauchen, um es sauber ein bisschen, sichern Sie es, legen Sie Werte in Variablen, etc., aber dies ist die grundlegende Logik.