Problem mit Wildcards in Suchformular

TheKar

Grünschnabel
Hallo allerseits,


ich bin noch relativ neu in PHP und habe ein Problem mit folgendem Code.
Es handelt sich um eine Suchfunktion, die auf einer Website ermöglichen soll Personen zu durchsuchen.

Die Suchfunktion funktioniert komplett. Die Klammerung ist nicht ideal, (linksprioritär), aber darum geht es hier nicht(auch wenn Vorschläge gerne willkommen sind). Das Problem ist, dass wenn in der Suchabfrage "-" als erster Buchstabe angegeben wird Wildcards % nicht funktionieren und "thomas" ungleich "thomas1" ist.

PHP:
		if(isset($_GET['sucheadressen'])) {
		$suchworte = $_GET['sucheadressen'];
		$suchwortsave = $suchworte;

		$suchstrings = explode(" ", $suchworte);

		$ergebnis = '';
		for ($i =0; $i<count($suchstrings); $i++) {
		// jeden beginn der schleife eine klammer setzen
		$orforquery = 'or';
		$ergebnis .= ' ( ';
		$verbindung = '  ';
			// if erster buchstabe = +, dann verbindung auf and setzen und das + löschen
		if ($suchstrings[$i]{0} == '+') { $verbindung = ' and '; $suchstrings[$i] = substr($suchstrings[$i], 1); }

		// if erster buchstabe = -, dann verbindung auf and, -löschen
		if ($suchstrings[$i]{0} == '-') {
		$verbindung = ' and ';
		$suchstrings[$i] = substr($suchstrings[$i], 1);
		$suchstrings[$i] =
			"(`AdressID` NOT IN ('{$suchstrings[$i]}')
		      and   `Nachname`   NOT IN ('{$suchstrings[$i]}')
		      and  `Vorname`  NOT IN ('{$suchstrings[$i]}')
		      and  `Strasse` NOT IN ('{$suchstrings[$i]}')
		      and `Ort`    NOT IN ('{$suchstrings[$i]}')
		      and `Zusatz`  NOT IN ('{$suchstrings[$i]}')
		      and `PLZ`   NOT IN ('{$suchstrings[$i]}') )";
		      // if letztes element des arrays
		   if (($i == count($suchstrings) - 1)) { $verbindung = '';}
			$ergebnis .= $suchstrings[$i] . " " . $verbindung . " ";
				continue;

		}


			$suchstrings[$i] =

						"(   `AdressID` LIKE '%".$suchstrings[$i]."%'
		                or  `Nachname`   LIKE '%".$suchstrings[$i]."%'
		                or  `Vorname`  LIKE '%".$suchstrings[$i]."%'
		                or  `Strasse` LIKE '%".$suchstrings[$i]."%'
		                or  `Ort`    LIKE '%".$suchstrings[$i]."%'
		                or `Zusatz`    LIKE '%".$suchstrings[$i]."%'
		                or `PLZ`   LIKE '%".$suchstrings[$i]."%')
		                ";
		// if  letztes element des arrays
			if (($i == count($suchstrings) - 1)) { $verbindung = '';}
		$ergebnis .= $suchstrings[$i] . " " . $verbindung . " ";
		}
		// i-viele ) am ende hinzufügen
		for ($i =0; $i<count($suchstrings); $i++) {
		$ergebnis .= ' ) ';
		}

		$ergebnis = $notin . $ergebnis;
		echo $ergebnis;
		$sql = "SELECT  AdressID, Nachname, Vorname, Strasse, Ort, Zusatz, PLZ
		    FROM    `adressen`
		    WHERE   {$ergebnis}";

		$res = mysql_query($sql) or die(mysql_error());


Das Problem ist also in folgendem Codeabschnitt zu finden. Wenn ich im Suchfeld "-thomas" eingebe, dann werden alle einträge mit "thomas" entfernt, aber einträge, die z.b. "thomas1" haben, nicht. .
Ich hatte versucht Wildcards hier einzusetzen wie im folgenden Beispiel zu sehen. Das wird aber rigoros ignoriert ^^

PHP:
$suchstrings[$i] =
			"(`AdressID` NOT IN ('%{$suchstrings[$i]}%')
		      and   `Nachname`   NOT IN ('%{$suchstrings[$i]}%')
		      and  `Vorname`  NOT IN ('%{$suchstrings[$i]}%')
		      and  `Strasse` NOT IN ('%{$suchstrings[$i]}%')
		      and `Ort`    NOT IN ('%{$suchstrings[$i]}%')
		      and `Zusatz`  NOT IN ('%{$suchstrings[$i]}%')
		      and `PLZ`   NOT IN ('%{$suchstrings[$i]}%') )";

Ich danke schonmal im Voraus für die Hilfe.
 
Zurück