Así que busqué en Internet y me registré en este sitio, ya que la mayoría de mis búsquedas en Google me llevan aquí. Casi terminé de hacer mi sitio web y usé una plantilla que amplié. Tiene una barra de búsqueda que no funciona. Lo tengo funcionando en su mayoría. el problema que tengo es que cuando pongo una palabra clave que tiene MySQL funciona bien, cuando pongo una palabra clave solitaria que sé que no existe da una respuesta adecuada sin resultados. Ahora mi problema es cuando mezclas los 2 errores en la base de datos. Aquí está mi código php que he reunido hasta ahora...
<?php $db = mysqli_connect('host','username','password') or die('Error connecting to MySQL server.'); $keyword = $_GET['keyword']; $terms = explode(" ", $keyword); $query = "SELECT * FROM searchresults WHERE "; foreach ($terms as $each) { $i=0; if ($i == 0) $query .= "pagebody LIKE '%$each%' "; else $query .= " OR pagebody LIKE '%$each%' "; } mysqli_query($db, $query) or die('Error querying database.'); $result = mysqli_query($db, $query); $row = mysqli_fetch_array($result); if ($row > 0) { while ($row = mysqli_fetch_array($result)) { $id = $row['id']; $title = $row['title']; $description = $row['description']; $pagebody = $row['pagebody']; $link = $row['link']; echo "<h2><a href='$link'>$title</a></h2></br> $description<br/><br/>"; } } else echo "No results found for.\"<b>$keyword</b>\""; ?>Cualquier ayuda sería muy apreciada. Necesito averiguar cómo hacerlo para que, si alguna de las palabras clave no se reconoce, no se produzca un error.
Esto no solucionará los problemas que tiene al escapar de su entrada de usuario, pero responderá a su pregunta para resolver el error de búsqueda; su código original mantiene $i igual a 0 a través de cada iteración del bucle foreach, por lo que la consulta sale como:
SELECT * FROM searchresults WHERE pagebody LIKE '%$each%' pagebody LIKE '%$each%' pagebody LIKE '%$each%'Necesitas modificar las siguientes líneas:
$query = "SELECT * FROM searchresults WHERE "; foreach ($terms as $each) { $i=0; if ($i == 0) $query .= "pagebody LIKE '%$each%' "; else $query .= " OR pagebody LIKE '%$each%' "; }cambiar eso a:
$i=0; $query = "SELECT * FROM searchresults WHERE"; foreach ($terms as $each) { if($i == 0){ $query .= " pagebody LIKE '%$each%'"; }else{ $query .= " OR pagebody LIKE '%$each%'"; } $i++; }