MySQL Abfrage mit Checkboxen und 2 Tabellen...
Meiner Einer
- datenbank
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!
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