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.
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 ^^
Ich danke schonmal im Voraus für die Hilfe.
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.