Salve a tutti,
sto cercando di creare un semplice motore di ricerca interno per il mio sito. Quello che sono riuscito a fare finora però è un po' troppo semplice e presenta un po' di problemi...
Cliccando sul pulsante 'cerca' si viene indirizzati alla pagina cerca.php (di cui riporto il codice qui sotto).
La ricerca serve per trovare delle 'schede' costituite da un'immagine, un titolo e una descrizione. Vorrei che se vengono scritte una o più parole presenti nel titolo o nella descrizione le schede interessate siano presenti nei risultati, possibilmente in ordine di rilevanza.
- Il problema principale è che se scrivo ad esempio due parole, separate da spazio, ed entrambe le parole compaiono nello stesso record, quel record me lo scriverà due volte...
- non riesco a limitare la ricerca con LIMIT. Se scrivessi una parola che è presente in tutti i risultati per assurdo, mi scrive tutti i risultati, fregandosene del LIMIT. Tanto meno riesco a dare una rilevanza accettabile usando ORDER BY e LIKE.
- non riesco a far accettare i caratteri accentati tra i caratteri ammessi nella ricerca.
- mi fermo qui anche se potrei andare avanti con l'elenco....
Se qualcuno ha voglia e tempo di darmi qualche suggerimento ne sarei davvero molto grato!!
Sarei disposto anche a rifarlo tutto da capo, ma con un senso però, perché così com'è proprio non va....
sto cercando di creare un semplice motore di ricerca interno per il mio sito. Quello che sono riuscito a fare finora però è un po' troppo semplice e presenta un po' di problemi...
Cliccando sul pulsante 'cerca' si viene indirizzati alla pagina cerca.php (di cui riporto il codice qui sotto).
La ricerca serve per trovare delle 'schede' costituite da un'immagine, un titolo e una descrizione. Vorrei che se vengono scritte una o più parole presenti nel titolo o nella descrizione le schede interessate siano presenti nei risultati, possibilmente in ordine di rilevanza.
- Il problema principale è che se scrivo ad esempio due parole, separate da spazio, ed entrambe le parole compaiono nello stesso record, quel record me lo scriverà due volte...
- non riesco a limitare la ricerca con LIMIT. Se scrivessi una parola che è presente in tutti i risultati per assurdo, mi scrive tutti i risultati, fregandosene del LIMIT. Tanto meno riesco a dare una rilevanza accettabile usando ORDER BY e LIKE.
- non riesco a far accettare i caratteri accentati tra i caratteri ammessi nella ricerca.
- mi fermo qui anche se potrei andare avanti con l'elenco....
Se qualcuno ha voglia e tempo di darmi qualche suggerimento ne sarei davvero molto grato!!
Sarei disposto anche a rifarlo tutto da capo, ma con un senso però, perché così com'è proprio non va....
PHP:
if ($_POST['search']){
if (!empty($_POST['keywords'])) {
$searchStr = $_POST['keywords'];
if (ereg("^[0-9a-zA-Zà-ù,&,'.' ]+$", $searchStr)) {
require ("db/db.php");
print "<div class='risultati'>Risultati della ricerca per \"<b>$searchStr</b>\":</div><br>";
$keys = explode(" ", $searchStr);
for ($x = 0; $x < count($keys); $x++) {
$querystr = "SELECT img,link,numclick,descrizione,ordine FROM totale_tabelle WHERE descrizione = \"$keys[$x]\" OR descrizione LIKE \"%$keys[$x]%\" OR ordine = \"$keys[$x]\" OR ordine LIKE \"%$keys[$x]%\"";
$result = mysql_query($querystr);
if ($frow = mysql_fetch_array($result)) {
$found = true;
do {
$words = $frow["descrizione"];
$boldwords = str_replace($searchStr,"<b>".$searchStr."</b>",$words);
echo "<div class='grid_8'><div class='screen'>".$frow["img"]."</div><div class='text'><h2>".$frow["link"]."<span class='visite'> - ".$frow["numclick"]." visite</span></h2>".$boldwords."</div></div>"."<br>";
} while ($frow = mysql_fetch_array($result));
}
}
if (!$found) {
print("<div class='risultati'><b>Nessun risultato correlato alla ricerca è stato trovato.</b></div><br>");
}
}
else {
print("<div class='risultati'><br><b>La tua stringa di ricerca contiene caratteri non ammessi.</b></div><br>");
}
}
else {
print("<div class='risultati'><br><b>Devi inserire almeno una parola chiave per effettuare la ricerca.</b></div><br>");
}
}