Frage

Ich habe unten ein Skript, in dem auf meiner Webseite Informationen aus meiner MySQL -Datenbank angezeigt werden. Wie kann ich bitte übereinstimmende Ergebnisse fett machen? Wenn ich beispielsweise "John" durchsuchte, wie die angezeigten Ergebnisse erzielt werden "John Bloggs ". Danke

Hier ist das Skript bisher,

<?
mysql_connect ("localhost", "user","pass")  or die (mysql_error());
mysql_select_db ("databasename");

$term = $_POST['term'];

$sql = mysql_query("select * from tablename where category like '%$term%' or title like '%$term%' or postcode like '%$term%' or info like '%$term%' ");

while ($row = mysql_fetch_array($sql)){
    echo '<br/> Category: '.$row['category'];
    echo '<br/> Title: '.$row['title'];
    echo '<br/> Address: '.$row['add1'];
    echo '<br/> Street: '.$row['street'];
    echo '<br/> City: '.$row['city'];
    echo '<br/> Postcode: '.$row['postcode'];
    echo '<br/> Phone: '.$row['phone'];
    echo '<br/> E-Mail: '.$row['email'];
    echo '<br/> Website: '.$row['website'];
    echo '<br/><br/>';
    }
?>
War es hilfreich?

Lösung

Nehmen wir zum Beispiel an, Sie haben ein Array $results Das enthält einige Ergebnisse aus Ihrer MySQL -Abfrage.

Nehmen wir an, Sie suchen im Feld name.

Sie könnten eine sehr einfache verwenden str_replace um das zu erreichen:

foreach($results as $result)
    echo str_replace($search,'<b>'.$search.'</b>',$result['name']);

Dies ersetzt alle Fälle von $search (Welches sollte Ihre Suchzeichenfolge sein) mit <b>$search</b> innerhalb $result['name'].

In Ihrem Fall:

while ($row = mysql_fetch_array($sql)){

    echo '<br/> Category: '.str_replace($term,'<b>'.$term.'</b>',$row['category']);
    echo '<br/> Title:    '.str_replace($term,'<b>'.$term.'</b>',$row['title']);
    echo '<br/> Address:  '.$row['add1'];
    echo '<br/> Street:   '.$row['street'];
    echo '<br/> City:     '.$row['city'];
    echo '<br/> Postcode: '.str_replace($term,'<b>'.$term.'</b>',$row['postcode']);
    echo '<br/> Phone:    '.$row['phone'];
    echo '<br/> E-Mail:   '.$row['email'];
    echo '<br/> Website:  '.$row['website'];
    echo '<br/><br/>';

}

Übrigens (wichtig)

Was du hier machst:

$term = $_POST['term'];

$sql = mysql_query("select * from tablename where category like '%$term%' or title like '%$term%' or postcode like '%$term%' or info like '%$term%' ");

Ist äußerst gefährlich. $_POST['term'] kommt vom Benutzer, was ist, wenn dieser Benutzer ausfüllt ';DROP TABLE tablename --? Ihre Abfrage ändert sich plötzlich zu etwas, das Ihre gesamte Tabelle fallen lässt und alle Ihre Informationen löscht.

Sie sollten immer Ihre Benutzereingabe überprüfen. Hier ist ein schönes Tutorial, in dem einige Methoden erklärt werden, wie:

http://www.tizag.com/mysqltutorial/mysql-php-sql-injection.php

Andere Tipps

function highlight($term, $result) {
    return str_replace($term, '<strong>'.$term.'</strong>', $result);
}

Dann tun Sie dies einfach für jedes Feld, das Sie hervorheben möchten.

while ($row = mysql_fetch_array($sql)){
echo '<br/> Category: '.highlight($term, $row['category']);
echo '<br/> Title: '.highlight($term, $row['title']);
echo '<br/> Address: '.$row['add1'];
echo '<br/> Street: '.$row['street'];
echo '<br/> City: '.$row['city'];
echo '<br/> Postcode: '.highlight($term, $row['postcode']);
echo '<br/> Phone: '.$row['phone'];
echo '<br/> E-Mail: '.$row['email'];
echo '<br/> Website: '.$row['website'];
echo '<br/><br/>';
}

Sie können es auch einmal in allen Bereichen hervorheben. ex.

while ($row = array_map(function($res) use ($search){
        str_replace($search,'<b>'.$search.'</b>',$res);
    },mysql_fetch_array($sql))){
    //your print
}

Es erfordert PHP 5.3+, kann aber auf 5.2- umschreiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top