Search code examples
phpmysqlsearchhighlighting

highlighting search results in php/mysql


how do i highlight search results from mysql query using php?

this is my [modified] code:

$search_result = "";

$search_result = $_GET["q"];

$result = mysql_query('SELECT cQuotes, vAuthor, cArabic, vReference FROM thquotes WHERE cQuotes LIKE "%' . $search_result .'%" ORDER BY idQuotes DESC', $conn)
  or die ('Error: '.mysql_error());


function h($s) {
    echo htmlspecialchars($s, ENT_QUOTES);
} 


?>

    <div class="caption">Search Results</div>
<div class="center_div">
<table>
    <?php while ($row= mysql_fetch_array($result)) { ?>
    <?php $cQuotes = preg_replace($search_result, "<div class='highlight'>".$search_result."</div>", $row['cQuotes']); ?>
        <tr>
            <td style="text-align:right; font-size:15px;"><?php h($row['cArabic']) ?></td>
            <td style="font-size:16px;"><?php h($cQuotes) ?></td>
            <td style="font-size:12px;"><?php h($row['vAuthor']) ?></td>
            <td style="font-size:12px; font-style:italic; text-align:right;"><?php h($row['vReference']) ?></td>
        </tr>
    <?php } ?>
</table>
</div>

Solution

  • you could use preg_replace();, when it finds a match in your text you could place a div with a class of highlight around the matching word. You would then add a background color and border to the highlight class to make it stand out

    preg_replace expect 3 parameters;

    1. the first one is what you are looking for
    2. second one is what should it be changed to
    3. The string of text he should search and replace from

    so for example

    <div class="center_div">
        <table>
        <caption>Search Results</caption>
        <?php while ($row= mysql_fetch_array($result)) { ?>
    <?php $arabic = preg_replace("/".$search_result."/", "<div class='highlight'>".$search_result."</div>", h($row['cArabic'])); ?>
                <tr>
                    <td style="text-align:right; font-size:15px;"><?php $arabic ?></td>
                    <td style="font-size:16px;"><?php h($row['cQuotes']) ?></td>
                    <td style="font-size:12px;"><?php h($row['vAuthor']) ?></td>
                    <td style="font-size:12px; font-style:italic; text-align:right;"><?php h($row['vReference']) ?></td>
                </tr>
            <?php } ?>
        </table>
        </div>
    

    I only did it for arabic but you might need to do that for cQuotes, vAuthor and vReference as well.