markieren mehrerer Suchwörter

consch

Grünschnabel
Hallo,
ich möchte gern ein Suchformular erstellen. Es sollen Datensätze aus einer Datenbank ausgelesen werden. In den ausgegebenen Datensätzen sollen jeweils die gefundenen Suchwörter markiert werden.
Ich habe es auch schon versucht, aber es wird nur markiert, wenn es ein Suchwort gibt - ab zwei Suchwörtern gar keins. Wenn ich es mit zählen der einzelnen Wörter mache, erfolgt die Ausgabe von Datensätzen doppelt, sobald mehr als ein Suchwort in dem Datensatz gefunden wurde. Kann mir bitte jem. helfen, wie ich das anstellen kann, dass alle Suchwörter im Text markiert werden und der Datensatz nur einmal ausgegeben wird?

Mein bisheriger Code:
PHP:
<?
$search = $_POST["search"];

if(isset($_POST["search"])){
 //Suchewörter aufsplitten
 $searchstring = $search; 
 $array = explode(' ',$searchstring); 
 for($x = 0; $x < count($array); $x++) {
  if ($x > 0 && $x < count($array)) { 
   $sqlsearchstring .= " AND"; //nur Datensätze, in denen alle Suchwörter vorkommen
  }
  $sqlsearchstring .= " (name LIKE '%".$array[$x]."%' OR strasse LIKE '%".$array[$x]."%' OR ort LIKE '%".$array[$x]."%' OR zweck LIKE '%".$array[$x]."%')";
 }
 
 //Daten aus MySql-Datenbank holen
 $abfrage = "SELECT id, name, strasse, plz, ort, zweck FROM stiftungsdaten WHERE $sqlsearchstring";
 $ergebnis = mysql_query($abfrage) or die (mysql_error());
 while($row = mysql_fetch_object($ergebnis)) {
  //for($x = 0; $x < count($array); $x++) {
   $data_id  = $row->id;
   $data_name  = $row->name;
   $data_name   = eregi_replace($search, "<font color=red>".$search."</font>", $data_name);
  // $data_name  = eregi_replace($array[$x], "<b><font color = ".$color[$x].">".$array[$x]."</font></b>", $row->name);

 }
 }
?>
 
Zuletzt bearbeitet:
Hi,

ich würde sagen der Fehler liegt in der IF-Bedingung innerhalb der FOR-Schleife:

Richtig müsste es meiner Meinung nach heißen:

PHP:
for($x = 0; $x < count($array); $x++) { 
  if ($x > 0 && $x < (count($array)-1)) {  
   $sqlsearchstring .= " AND"; //nur Datensätze, in denen alle Suchwörter vorkommen 
  } 
  $sqlsearchstring .= " (name LIKE '%".$array[$x]."%' OR strasse LIKE '%".$array[$x]."%' OR ort LIKE '%".$array[$x]."%' OR zweck LIKE '%".$array[$x]."%')"; 
 }
 
Der Fehler an den auskommentierten Zeilen:
PHP:
 //for($x = 0; $x < count($array); $x++) { 
   $data_id  = $row->id; 
   $data_name  = $row->name; 
   $data_name   = eregi_replace($search, "<font color=red>".$search."</font>", $data_name); 
  // $data_name  = eregi_replace($array[$x], "<b><font color = ".$color[$x].">".$array[$x]."</font></b>", $row->name);
Habe es nun aber anders gelöst, habe eine function benutzt/umgeschrieben und nun geht es :) Danke trotzdem, dass Du noch mal geschaut hasttest.
 
Zurück