Pregunta

Tengo un script a continuación que se lee en la información mostrada de mi base de datos MySQL en mi página web, ¿cómo puedo hacer que los resultados coincidan en negrita, por favor? Por ejemplo, si busqué en "John" cómo hacer los resultados mostrados "Juan Bloggs ". Gracias

Aquí está el guión hasta ahora,

<?
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/>';
    }
?>
¿Fue útil?

Solución

Digamos que, por ejemplo, tienes una matriz $results que contiene algunos resultados de su consulta MySQL.

Digamos que estuvo buscando dentro del campo name.

Podrías usar un muy simple str_replace lograr esto:

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

Esto reemplaza todas las instancias de $search (cuál debería ser su cadena de búsqueda) con <b>$search</b> dentro de $result['name'].

En tu caso:

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

}

Por cierto (importante)

Lo que estás haciendo aquí:

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

Es extremadamente peligroso. $_POST['term'] proviene del usuario, ¿qué pasa si este usuario se completa? ';DROP TABLE tablename --? Su consulta cambiará repentinamente a algo que dejará caer toda su mesa y eliminará toda su información.

Siempre debe verificar su entrada de usuario, aquí hay un buen tutorial que explica algunos métodos cómo:

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

Otros consejos

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

Luego, haga esto para cada campo que desee resaltar.

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

También puede resaltarlo en todos los campos una vez. ex.

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

Requiere PHP 5.3+ pero puede reescribirse a 5.2-

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top