Moin!
meine bevorzugte Variante ist der dynamische Zusammenbau des SQL-Statements - Achtung, PHP-Fähigkeiten stark eingerostet...
(Angenommen die Checkboxen "heißen" so und senden den Wert "true")$spalte1 = ($checkbox1 == "true") ? "OR spalte1 LIKE '%$suche%'" : "";
$spalte2 = ($checkbox2 == "true") ? "OR spalte2 LIKE '%$suche%'" : "";$sql = "SELECT ... FROM ... WHERE 0=1 $spalte1 $spalte2 ..."
(0=1 nur für den Fall, das keine Checkbox gesetzt ist; in diesem Fall werden keine Sätze zurück gegeben)
Das einzige, was hier zwingend verbessert werden muß: $suche muß durch mysql_real_escape_string() gejagt werden, um SQL-Injections zu verhindern - das gilt außerdem für alle anderen Werte, die vom Benutzer übernommen werden.
Sollte magic_quotes_gpc eingeschaltet sein, ist vorher bei allen Feldern stripslashes() anzuwenden, da sonst das Escaping unnötig verdoppelt und nach den falschen Strings gesucht wird.
Als Schönheitsmaßnahme könnte man das Erscheinen von "WHERE 0=1" auch noch eliminieren, indem man "WHERE" mit IF reinsetzt - und die Spaltendefinitionen könnten flexibler in ein Array geschrieben und mit implode() zusammengesetzt werden.
$spalte = array();
if ($_POST['checkbox1'] == "true") {$spalte[] = "spalte1 LIKE '%".mysql_real_escape_string($_POST['suche'])."%'"};
if ($_POST['checkbox2'] == "true") {$spalte[] = "spalte2 LIKE '%".mysql_real_escape_string($_POST['suche'])."%'"};
$sql = "SELECT ... FROM ... ".(!empty($spalte)?"WHERE ".implode(" OR ",$spalte):"") ..."
- Sven Rautenberg
My sssignature, my preciousssss!