PHP Suche mit mehreren Kriterien

...komplette Frage anzeigen

2 Antworten

Du suchst dich schon mit OR. Damit sollte das schon funktionieren. Kommst denn ein SQL-Fehler zurück? Hast du dir mal das produzierte SQL ausgeben lassen und damit mal direkt auf der Datenbank gesucht?

Der einzige Fehler der mir auffällt ist, dass du bei numerischen Werten auch mit LIKE suchst. Das klappt natürlich nicht und müsste so aussehen:

if (is_int($value)) $sql .= " $key=$value";

Danke, den Fehler habe ich gleich ausgewechselt, also so wie ich jetzt suche wird nur nach einem Kriterium gesucht, das produzierte SQL habe ich mir nicht ausgeben lassen, ein Fehler kommt nicht zurück.

Kennst du sonst noch eine Möglichkeit? Hier mein "neuer" Quellcode:

if ( count( $search ) > 0 ) { $sql = "SELECT * FROM kunden WHERE"; $i = 0; foreach ( $search as $key => $value ) { if (is_int($value)) $sql .= " $key=$value"; else $sql.= " $key LIKE '%" . $value . "%'"; if ( $i < count( $search ) -1 ) $sql.= " OR "; $i++; }

0
@Dragon970

Dann lass dir den erzeugten SQL-Code mal ausgeben. Ein echo $sql; deckt sicherlich schnell auf, was das schief läuft. Meine Vermutung ist, dass in $search bei dir eben nur ein Wert drin steht und deshalb nur nach einem gesucht wird.

Wie sieht denn dein Formular aus? Wenn du mehrfache Werte übergeben willst, muss das nämlich in etwa so aussehen:

<select name="search[]" multiple="multiple">

Gruß

0
@Babelfish

Sorry, das mit der Suche war eigentlich alles richtig habe mich blos gewundert , wenn ich in plz und ort beispielsweise 4 und g eingebe, dass dann alle angezeigt werden die 4 oder g drinnstehen haben. Ich wollte nämlich dass beides erfüllt ist also muss es ja AND anstatt OR heißen.

Jetzt habe ich aber noch ein kleines Problem in der Suche gibt es ein Feld (Name), dessen Inhalt in der spalte vorname und name gesucht werden soll, aber name und/oder vorname soll mit OR und der Rest aber mit AND gesucht werden. Also im Prinzip (vorname OR name) AND ...

0
@Dragon970

Du kannst doch AND und OR mischen:

"… WHERE (Vorname LIKE '%$value%' OR name LIKE '%$value%') AND …"

Wenn du nach Postleitzahlen suchst, würde ich die Überprüfung auf is_int weglassen und die Postleitzahlen auch als String behandelt, da du sonst Probleme bei ostdeutschen Postleitzahlen bekommst, die mit 0 anfangen. 04711 ist als Integer nämlich 4711. Beim Test auf die Postleitzahl sollte dann auch nur ein % im LIKE sein, damit nur der Anfang getestet wird und nicht alle Postleitzahlen gefunden werden, in denen bspw. eine 4 vorkommt:

"… WHERE plz LIKE '$value%' …"

Du wirst insgesamt nicht drumrum kommen, je nach Feld die Abfrage unterschiedlich zu gestalten. Nur zwischen Integer und String zu unterscheiden, klappt nicht bei allen Feldern.

0
@Babelfish

Danke für deine Antwort, könntest du noch schreiben, wie eine einzelne Abfrage für ein Feld aussieht?

0

Kennst du den MySQL Operator OR? Würde es mit "OR LIKE" kombinieren, aber keine Ahnung, ob das mit dem "OR LIKE" klappt.

Was möchtest Du wissen?