Dickmarkierung

Pascal Lattreuter

Grünschnabel
PHP:
while($row = mysql_fetch_object($result)) {
$Geeignet = $row->Geeignet;
$Geeignet = str_replace("".$_REQUEST['search']."", "<b>".$_REQUEST['search']."</b>", "".$Geeignet."");

echo $row->QRN;
echo "<br>";
echo $row->Art;
echo "<br>";
echo $Geeignet;
echo "<br>";
echo $row->Farbe;
echo "<br><br>";


}
Hiermit wird ein Suchwort, das in einem input eingegeben wurde dick in der Ausgabe markiert. Es wird aber nur markiert, wenn das suchwort genau vorkommt.

Wenn ich z.B. i205 eingebe, findet er i205 wieder im $row->Geeignet und macht es dick.
Wenn ich i205 asdasasdfaf eingebe, ist keine ausgabe zu sehen.

Kann man das irgendwie lösen, dass nur worte, die es nicht gibt einfach da rausgehalten werden.... und wenn ja, wie?


vielen Dank jetzt schon Mal für Eure Hilfe
 
Wie sieht denn die Suchanfrage aus ?
Im Falle mehrerer Suchwörter solltest du vllt. mit explode die Sucheingabe an den Leerzeichen zerlegen und wie 2 Suchbegriffe behandeln.
"i205 asasdasd" wird ja logischerweise in "i205" nicht gefunden,
aber "i205" allein würde einen Treffer erziehlen und "asasdasd" keinen, was du ja dann ignorieren kannst!
 
Sers so,

PHP:
$array = explode(" ", $_REQUEST['search']);

foreach ($array as $wert)
{
 $res = mysql_query($db, "SELECT irgendwas FROM irgendwem WHERE ist LIKE '$wert';");
}
 
Zunächst mal empfehle ich dir, da das Formular für die Suche vermutlich per POST übertragen wird, auch $_POST, anstatt $_REQUEST zu nutzen (bzw. $_GET, falls du das Form per GET sendest)
zum Zerlegen: angenommen die Suchworte sind "i205 foo bar"
PHP:
$suchworte = explode (' ', $_POST['search']); // packt dir die einzelnen Suchworte, am Leerzeichen
// getrennt in ein Array (hier also $suchworte)
// $suchworte[0] enthält nun 'i205',
// $suchworte[1] enthält 'foo' und
// $suchworte[2] 'bar'
Wie sieht denn der SQL-Ausdruck aus, mit dem du in der Datenbank suchen lässt ?
PHP:
$res = mysql_query("SELECT * FROM `tabelle` WHERE `spalte` LIKE '%".$suchworte[0]."%' OR '%".$suchworte[1]."%' OR '%".$suchworte[2]."%'");
sollte dir so alles zurückgeben, was auf eins der Suchworte ein Ergebnis liefert
 
Habs ma versucht einzubauen, hat aba nich get....
Hier der Code:

PHP:
$suchworte = explode (' ', $_POST['search']);
$searchstring = $_REQUEST['search'];
foreach ($suchworte as $wert)
{
if($searchstring != "" && $_REQUEST['action'] == "Suchen") {

$result = mysql_query( "
SELECT * FROM TintenShop WHERE Art = '".$_REQUEST['Art']."' && Firma = '".$_REQUEST['Firma']."' && Geeignet LIKE '%".$suchworte[0]."%';");

while($row = mysql_fetch_object($result)) {
$Geeignet = $row->Geeignet;
$Geeignet = str_replace("".$_REQUEST['search']."", "<b>".$_REQUEST['search']."</b>", "".$Geeignet."");

echo $row->QRN;
echo "<br>";
echo $row->Art;
echo "<br>";
echo $Geeignet;
echo "<br>";
echo $row->Farbe;
echo "<br><br>";


}

if($result = "FALSE") {
echo "Ihre Suchanfrage brachte keine Ergebnisse. Bitte überprüfen Sie Ihre Eingaben.";
}

}

}


Wär schön wenn jemand das ma irgendwie korrigeren würd, dann würd ich sehn was ich falsch gemacht hab
 
PHP:
$suchworte = explode(' ', $_REQUEST['search']);
$no_results = false;
if(!empty($suchworte) && $_REQUEST['action'] == "Suchen"){
   foreach ($suchworte as $wert){
      $result = mysql_query("SELECT * FROM TintenShop WHERE Art = '".mysql_real_escape_string($_REQUEST['Art'])."' 
                    AND Firma = '".mysql_real_escape_string($_REQUEST['Firma'])."' 
                    AND Geeignet LIKE '%".mysql_real_escape_String($wert)."%'");
      while($row = mysql_fetch_object($result)) {
         echo $row->QRN;
         echo "<br>";
         echo $row->Art;
         echo "<br>";
         echo str_replace($wert, "<strong>".$wert."</strong>", $row->Geeignet);
         echo "<br>";
         echo $row->Farbe;
         echo "<br><br>";
      }
      if(empty($result)) {
         $no_results = true;
      }
   }
}
if($no_results){
   echo "Ihre Suchanfrage brachte keine Ergebnisse. Bitte überprüfen Sie Ihre Eingaben.";
}
 
Zuletzt bearbeitet:
Danke schonmal, aber jetzt ist die gesamte Ausgabe dick... ich will, dass nur eines oder mehrere der eingegebenen suchworte dick erscheint.

Das ganze ist eine Tintenpatronensuche. Der Benutzer wählt die Firma aus und kann dann in einem input den Druckernamen eingeben. Dann erscheinen alle Ergebnisse, also alle möglichen Druckerpatronen. Damit der User sein eingegebenes Wort oder seine Worte wiederfindet in dem Druckernamengewusel soll das oder die passenden eingegebenen Worte dick erscheinen......
 
Ah jo, da war ich etwas voreilig ;)
Hab die Zeile geändert jetzt sollte es so sein wie du es dir vorgestellt hast!
 
Zurück