erweiterte Datenbank Suche (MySQL)

Bei Deinem Code ist das 2. WHERE falsch. Man schreibt immer nur einmal WHERE und verknüpft dann mit AND:
PHP:
        $sql="SELECT * FROM inhalt WHERE news LIKE '%$searchstring%' AND news = '$check1' ORDER BY name ASC";
Wenn ich nahezu beliebig viele Möglichkeiten zur Einschränkung habe betrachte ich die in PHP immer zuerst einzeln.
Ich suche mir also eine Eingrenzung nach der anderen und bilde dafür den Vergleich.
Diesen hänge ich dann in ein Array. Wenn ich damit Fertig bin, löse ich das Array mit [phpf]implode[/phpf] zu einem String auf:
PHP:
$whereArray=array();
if (!empty($_REQUEST['chkBoxName'])) {
    $whereArray[]="name LIKE '%".$_REQUEST['textFeldName']."%'";
}
if (!empty($_REQUEST['chkBoxNews'])) {
    $whereArray[]="news LIKE '%".$_REQUEST['textFeldNews']."%'";
}
//usw.
$whereString = implode(" AND ",$whereArray);
if (empty($whereString)) {
    $sql="SELECT * FROM inhalt ORDER BY name ASC";
} else {
    $sql="SELECT * FROM inhalt WHERE ".$whereString." ORDER BY name ASC";
}
Du kannst natürlich auch umständlichere Vergleiche nehmen. Wenn jedoch ein Teilvergleich selbst schon Teilvergleiche enthält (z.B. mit OR verknüpft) musst Du den gesamten Teilvergleich so definieren, dass er mit Klammern umschlossen ist, bevor Du ihn in das Array einhängst.

Gruß hpvw
 
Zurück