Ergebnisse von MySQL formatieren
Hallo allerseits. Habe eine Frage zu meinem Neugriechisch Lexikon. Und zwar: Wenn jemand nach einem Begriff sucht, soll in allen Ergebnissen, die gefunden werden, der Teil in Bold erscheinen, nach dem gesucht wurde. Wenn z.B. jemand nach "Haus" sucht, soll da kommen: Kranken
hausHabe dazu folgendes:
$data['deutsch'] = str_replace($_GET['search'], "<b>".$_GET['search']."</b>", $data['deutsch']);
Problem dabei ist aber, dass er zwar dann Kranken
hausanzeigt, aber das exakte Ergebnis, nämlich "Haus" wird nicht in Bold angezeigt. Liegt wohl an der Großschreibung.
Kann mir jemand helfen?
Grüße und Dank,
Üsch
Antwort schreiben
Antwort 1 von gresti vom 29.01.2020, 01:02 Options
Hi Üsch,
ich bin da der Meinung das du da noch was in deiner Table hinterlegen musst,
Ich würde da ne PHP Lösung anstreben,
SQL ist ja lediglich eine Datenbank.
lg gresti
Antwort 2 von katy vom 29.01.2020, 14:23 Options
Hallo Üsch,
da böte sich dann natürlich
preg-replace an mit einem entsprechenden Suchmuster, das Groß/Kleinschreibung ignoriert.
katy
Antwort 3 von Uesch vom 29.01.2020, 15:20 Options
@gresti: Danke, aber was meinst du mit PHP-Lösung?
Gruß,
Üsch
Antwort 4 von katy vom 29.01.2020, 20:53 Options
@gresti und Üsch
verstehe ich euch nur falsch? Meiner Ansicht nach dreht es sich doch nur um PHP. MySQL hat mit dem beschriebenen Problem nichts zu tun, das ist doch lediglich PHP-Stringverarbeitung. Oder? Ich verstehe nämlich weder was grestis Antwort mit dem Problem zu tun hat (Table?) noch Üschs Nachfrage.
katy
Antwort 5 von Uesch vom 29.01.2020, 21:01 Options
Ja eben genau deshalb hab ich ja nachgefragt, weil das, was ich im ersten Beitrag geschrieben habe, ja PHP ist. MySQL hat nix mit dem Problem zu tun, es geht nur darum, wie man in PHP am besten den gesuchten Teil in Bold darstellen kann. Das mit dem preg_replace hab ich nicht ganz verstanden, kann mir da jemand ein Beispiel geben?
Antwort 6 von katy vom 30.01.2020, 06:05 Options
Hallo Üsch,
irgendwie beruhigt mich deine Antwort.
Ein Versuch wäre erst einmal folgendes:
$suchmuster = '/('.$_GET['search'].')/gi';
$ersetzungen = '<b>'.$1.'</b>';
$data['deutsch'] = preg_replace($suchmuster, $ersetzungen, $data['deutsch']);
ohne Garantie, da meine PHP-Kenntnisse noch mangelhaft sind.
Viel Erfolg
katy
Antwort 7 von katy vom 30.01.2020, 07:04 Options
hm, habe gerade noch ein wenig darüber gegrübelt, ich glaube Ersetzungen muss ein bisschen anders aussehen:
$ersetzungen = '<b>$1</b>
';
($1 ist das was im Suchmuster als zutreffend gefunden wird, dort besagen die Parameter gi dass alle Vorkommen des Ausdrucks unabhängig von Groß/Kleinschreibung ersetzt werden soll. Die / begrenzen ein Suchmuster, die () besagen, dass das was darin steht dem $1 entspricht.
Zumindest habe ich das so verstanden und ich hoffe, dass es stimmt und du meinen Ausführungen folgen kannst.
katy
Antwort 8 von Uesch vom 30.01.2020, 19:39 Options
Ah, ok, ich verstehe.
Ich werde es morgen mal ausprobieren und melde mich dann.
Vielen Dank,
Üsch
Antwort 9 von Uesch vom 31.01.2020, 14:29 Options
Da kommt:
Warning: preg_replace() [function.preg-replace]: Unknown modifier 'g' in index.php on line...
also in der Zeile
$data['deutsch'] = preg_replace($suchmuster, $ersetzungen, $data['deutsch']);
Was ist mit dem Modifier g gemeint?
Antwort 10 von katy vom 31.01.2020, 16:29 Options
Hallo Uesch,
g bedeutet "alle Vorkommen".
Aber vielleicht interpretiert preg_replace das so nicht (ist eigentlich PERL-Syntax), also lass das g mal weg.
katy
Antwort 11 von Uesch vom 31.01.2020, 19:23 Options
Absolut genial,
vielen Dank Katy!
Ohne das g klappt es wunderbar.
Schönen Gruß,
Üsch