PHP скрипт поиска MySQL, как сделать сопоставленные результаты жирным шрифтом - PullRequest
3 голосов
/ 05 сентября 2011

У меня есть скрипт ниже, который считывает отображаемую информацию из моей базы данных mysql на моей веб-странице, как я могу сделать соответствующие результаты жирным шрифтом, пожалуйста?например, если я искал "john", как сделать отображаемые результаты " john bloggs".спасибо

вот сценарий, пока

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

Ответы [ 3 ]

7 голосов
/ 05 сентября 2011

Допустим, например, у вас есть массив $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

1 голос
/ 05 сентября 2011
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/>';
}
0 голосов
/ 05 сентября 2011

Вы также можете выделить его во ВСЕХ полях один раз. напр.

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-

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...