3

以下のスクリプトで、Webページのmysqlデータベースから表示された情報を読み取ります。一致した結果を太字にするにはどうすればよいですか?たとえば、「john」を検索した場合、表示される結果を「johnbloggs」にする方法。ありがとう

これまでのスクリプトは次のとおりです。

<?
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/>';
    }
?>
4

3 に答える 3

7

たとえば$results、MySQLクエリの結果をいくつか含む配列があるとします。

フィールド内を検索していたとしましょうname

str_replaceこれを実現するには、非常に簡単な方法を使用できます。

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

$searchこれにより、 (検索文字列である必要がある)のすべてのインスタンスが<b>$search</b>内に置き換えられます$result['name']

あなたの場合:

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/>';

}

ちなみに(重要)

ここで何をしているのか:

$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%' ");

非常に危険です。$_POST['term']ユーザーから来た場合、このユーザーが入力した場合はどうなり';DROP TABLE tablename --ますか?クエリが突然変更され、テーブル全体が削除され、すべての情報が削除されます。

ユーザー入力を常に確認する必要があります。これは、いくつかの方法を説明する優れたチュートリアルです。

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

于 2011-09-05T15:23:21.540 に答える
1
function highlight($term, $result) {
    return str_replace($term, '<strong>'.$term.'</strong>', $result);
}

次に、強調表示するフィールドごとにこれを実行します。

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/>';
}
于 2011-09-05T15:29:34.913 に答える
0

すべてのフィールドで一度に強調表示することもできます。元。

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

PHP 5.3以降が必要ですが、5.2に書き換えることができます-

于 2011-09-05T15:39:32.007 に答える