Resaltar Resultados Buscados en MYSQL con PHP
Probablemente haya visto estos sitios web elegantes con funciones de búsqueda que resaltan la cadena de texto que está buscando. En este tutorial, aprenderá cómo buscar una cadena en particular en su base de datos MySQL, imprimir todos los resultados y resaltar todas las cadenas dentro del texto. Puede probar esta demostración y buscar una cadena que se encuentre en cualquiera de las noticias enumeradas. Tras la búsqueda, verá la cadena resaltada dentro de los resultados. Primero comenzaremos con la configuración de los detalles de la conexión MySQL para su base de datos.
Puede probar esta demostración y buscar una cadena que se encuentre en cualquiera de las
noticias enumeradas. Tras la búsqueda, verá la cadena resaltada dentro de los resultados.
Primero comenzaremos con la configuración de los detalles de la conexión MySQL para su base de datos.
<?php
error_reporting(0);
$servername = "localhost";
$username = "REPLACE";
$password = "REPLACE";
$dbname = "REPLACE";
$datatable = "search_and_highlight";
Nuestra tabla MySQL se llama 'search_and_highlight' y solo tiene dos columnas: ID y content.
CREATE TABLE `search_and_highlight` (
`id` int(11) NOT NULL,
`content` text NOT NULL
)
El texto que buscaremos se encuentra en el campo 'content'. A continuación,
crearemos una función que resaltará la cadena que buscamos.
function highlight_word( $content, $word) {
$replace = '' . $word . ''; // create replacement
$content = str_replace( $word, $replace, $content ); // replace content
return $content; // return highlighted data
}
Más tarde, cuando imprimamos los resultados después de la consulta SQL SELECT usaremos esta función,
que colocará todas las cadenas encontradas dentro de un intervalo con un color de fondo amarillo.
Si desea cambiar el color, simplemente reemplace el código de color # FF0. Ahora crearemos el formulario de búsqueda:
<form action="search-and-highlight.php" method="get">
Search: <input type="text" name="findme" value="<?php echo $_GET["findme"]; ?>" /><input type="submit" value="Search" />
<input name="show" type="radio" value="1"<?php if ($_GET["show"] == '1' or !isset($_GET["show"])) echo ' checked="checked"'; ?> />Show all news
<input name="show" type="radio" value="2"<?php if ($_GET["show"] == '2') echo ' checked="checked"'; ?> />Show news that match search criteria
</form>
Agregamos una opción que le permite seleccionar si desea que se muestren todos los resultados o solo aquellos que coinciden con los criterios de búsqueda. En cualquier caso, las cadenas encontradas se resaltarán dentro de los resultados.
Y finalmente, crearemos la búsqueda real de MySQL y mostraremos los resultados:
<?php
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if ($_GET["show"] == '2') {
$sql = "SELECT * FROM " . $datatable . " WHERE content LIKE '%" . $conn->real_escape_string($_GET["findme"]) . "%'";
} else {
$sql = "SELECT * FROM " . $datatable;
}
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while ($row = $result->fetch_assoc()) {
if ($_GET["findme"] <> '') {
echo highlight_word($row["content"], $_GET["findme"]);
} else {
echo $row["content"];
}
echo "<hr>";
}
} else {
echo "0 results";
}
$conn->close();
?>
Puede ver arriba que si buscamos una cadena en lugar de simplemente imprimir el resultado, usamos la función highlight_word () definida anteriormente. Colocará todas las instancias de la cadena que buscamos en un contenedor de intervalo resaltado.
Puede descargar el código anterior junto con una base de datos de muestra aquí. La demostración está disponible aquí.
Mi Web
$1000 / mes
- Incluye hosting
- Optimización para buscadores
- Hasta 5 paginas
- Incluye Blog
- Apto para móviles y tablets
- Hasta 2 Modificaciones Mensuales
- Catalogo Online
CYSTEC