Suchabfrage mit und u n d und/oder?

markberg

Erfahrenes Mitglied
Hi,
ich habe eine Suchabfrage erstellt. Funktioniert... Habe jetzt mit AND, OR etc. gebastelt,da man in meinem Kalender (Partykalender) entweder nur mit der musikrichtung o d e r nur nach dem bezirk suchen soll, aber auch mit beiden variablen... Kann mir jemand den Fehler erklären warum er das nicht macht oder einen Tipp geben... Vielen Dank...

Mein Formular:

PHP:
<form action="eventfilter/partyfilter_ergebnis.php" method="post" name="musikfilter" target="_top">
<br>
<input type="text" name="musikrichtung" size="12" border="0"> oder...<br>
<br>
<input type="text" name="bezirk" value="" size="12" border="0"><br>
<input type="submit" name="button" value="und los..." border="0">
</form>

Meine Abfrage (Ergebnis)

PHP:
$musikrichtung = $_POST["musikrichtung"];
$bezirk = $_POST["bezirk"];

$SQLString = "SELECT * FROM DB.kalender WHERE musik LIKE '%$musikrichtung%' OR ort LIKE '%$bezirk%' LIMIT 20"; 
$Ergebnis = mysql_query($SQLString, $Verbindung); //usw.

PS: Wenn nur eine Variable übergeben wird, dann erhalte ich als Ergebnis alle eingetragene Partys, gibt man zwie Daten an, funktioniert's?
 
Zuletzt bearbeitet:
PHP:
$musikrichtung = $_POST["musikrichtung"];
$bezirk = $_POST["bezirk"];

$where = "`musik` LIKE '%".$musikrichtung."%' OR `ort` LIKE '%".$bezirk."%'";
if (empty($musikrichtung) && !empty($bezirk)) {
  $where = "`ort` LIKE '%":$bezirk."%'";
}
if (!empty($musikrichtung) && empty($bezirk)) {
  $where = "`musik` LIKE '%".$musikrichtung."%'";
}
$SQLString = "SELECT * FROM DB.`kalender` WHERE ".$where." LIMIT 20"; 
$Ergebnis = mysql_query($SQLString, $Verbindung); //usw.
 
wenn du 2 Variablen übergibst, und nach beiden gleichzeitig suchst kannst du ja nicht mehr mit 'or' suchen.
Prüfe doch anfangs, ob beide Variablen gesetzt sind
PHP:
if(isset($_POST['bezirk'] AND isset($_POST['musikrichtung))] {
    $sql= "SELECT * FROM DB.kalender WHERE musik LIKE '%$musikrichtung%' AND ort LIKE '%$bezirk%' LIMIT 20"; 
}
else {
    $sql="SELECT * FROM DB.kalender WHERE musik LIKE '%$musikrichtung%' OR ort LIKE '%$bezirk%' LIMIT 20"; 
}
Wäre es nicht vielleicht besser, statt Eingabefelder selectfelder (Dropdownmenus) einzurichten ?
 
Du könntest die Abfrage auch wie folgt zusammensetzen:
PHP:
<?php

	$query = "SELECT * FROM `DB`.`kalender` WHERE 0 ";
	if( !empty($_POST['musikrichtung']) ) {
		$query .= " OR `musik` LIKE '%".mysql_real_escape_string($_POST['musik'])."%' ";
	}
	if( !empty($_POST['bezirk']) ) {
		$query .= " OR `ort` LIKE '%".mysql_real_escape_string($_POST['bezirk'])."%' ";
	}
	$query .= " LIMIT 20";

?>
 
MissPiggy hat gesagt.:
wenn du 2 Variablen übergibst, und nach beiden gleichzeitig suchst kannst du ja nicht mehr mit 'or' suchen.
Prüfe doch anfangs, ob beide Variablen gesetzt sind
PHP:
if(isset($_POST['bezirk'] AND isset($_POST['musikrichtung))] {
    $sql= "SELECT * FROM DB.kalender WHERE musik LIKE '%$musikrichtung%' AND ort LIKE '%$bezirk%' LIMIT 20"; 
}
else {
    $sql="SELECT * FROM DB.kalender WHERE musik LIKE '%$musikrichtung%' OR ort LIKE '%$bezirk%' LIMIT 20"; 
}
Wäre es nicht vielleicht besser, statt Eingabefelder selectfelder (Dropdownmenus) einzurichten ?


Das mit dem OR war ja klar, habe soviel rumexperimentiert, hatte jetzt nur das OR mitgepostet. DropdownMenü geht ja auch, aber dachte, so ist's für die User am Einfachsten...
 
markberg hat gesagt.:
entweder nur mit der musikrichtung o d e r nur nach dem bezirk suchen soll, aber auch mit beiden variablen...

hatte ich falsch verstanden...

ich halte das mit den Textfelder nicht für einfacher für den user, gerade Musikrichtung ist bestimmt anfällig für unterschiedliche Schreibweisen. Wenn du einfach 2 dropdownmenus machst: Suche nach Bezirk , Suche nach Musikrichtung, wäre das nicht viel bequemer als wenn man den Text selber eingeben muss ? Zumal der User auch gleich alle Auswahlmöglichkeiten sieht
 
Zurück