Meiner Einer: MySQL Abfrage mit Checkboxen und 2 Tabellen...

Guten Abend!

ich sitze seit Stunden mit einem riesigen Brett vor dem Kopf an folgender Aufgabenstellung:

Ich erstelle gerade ein Suchscript in PHP, welches (vereinfacht gesagt) zwei Tabellen durchsucht, eine davon mithilfe von Checkboxen.

Hier ein (aufs wesentliche reduziertes) Abbild:

MYSQL-TABELLE "kategorie": person_id, kat_id

MYSQL-TABELLE "person": person_id, name, plz, ort

FORMULAR(form.php):

  
<form action="suche.php" method="post" name="suche">  
  <input name="query_name" type="text" value="" />  
  <!-- Die folgenden Kategorien werden im Original ebenfalls dynamisch aus der DB ausgelesen... -->  
  <input name='query_katid[]' type='checkbox' value='1'>Kategorie 1  
  <input name='query_katid[]' type='checkbox' value='2'>Kategorie 2  
  <input name='query_katid[]' type='checkbox' value='3'>Kategorie 3  
  <input name="submit" type="submit" value="senden" />  
</form>  

SCRIPTVERARBEITUNG (suche.php):

  
$WHERE=" WHERE a.person_id>0 ";  
if(isset($_POST["submit"])) {  
	if($_POST['query_name']) $WHERE.=" AND (a.name LIKE '%$query_name%') ";  
			  
	if($_POST['query_katid']) {  
		$WHERE.=" AND (a.person_id = b.person_id) ";  
		foreach ($_POST['query_katid'] as $key => $value) {  
			$WHERE.=" AND (b.kat_id = '$value') ";  
		}  
	}	  
	  
}  
// Auslesen  
$result = mysql_query("SELECT a.person_id,a.name  
  FROM person AS a, kategorie AS b  
  $WHERE  
  GROUP BY a.person_id");  
if(mysql_num_rows($result)) {  
   while($zeige = mysql_fetch_assoc($result)) {  
	$person_id = $zeige["person_id"];  
	$name= $zeige["name"];  
  
        echo "$name ($person_id)<br />";  
   }  
}  
  

Dabei habe ich nun folgendes Problem: wenn ich eine Kategorie markiere, die mit einer Person verknüpft ist spuckt das Skript diese Person richtigerweise aus.
Ebenso wenn mehrere Personen gefunden werden, auf die diese einge Kategorie zutrifft.

Sobald ich aber zwei oder mehrere Kategorien markiere, die mit dieser Person verknüpft sind, wird kein Ergebnis gefunden.
Wo liegt mein Denkfehler?
Freu mich über jeden Input!

  1. Tach,

    Ich erstelle gerade ein Suchscript in PHP, welches (vereinfacht gesagt) zwei Tabellen durchsucht, eine davon mithilfe von Checkboxen.

    bitte als erstes ganz dringend den Artikel zu Kontextwechseln durcharbeiten und die SQL-Injection-Lücken aus deinem Code entfernen.

      foreach ($\_POST['query\_katid'] as $key => $value) {  
      	$WHERE.=" AND (b.kat\_id = '$value') ";  
    

    Sobald ich aber zwei oder mehrere Kategorien markiere, die mit dieser Person verknüpft sind, wird kein Ergebnis gefunden.
    Wo liegt mein Denkfehler?

    In deinem Join hast du in jeder Zeile der Ergebnismenge nur eine Kategorie, du fragst aber mehrere ab (b.kat_id kann nicht zwei unterschiedliche Werte haben).

    mfg
    Woodfighter