Salve, ho il seguente motore di ricerca alla pagina:
http://www.libriantichicavallero.com/cerca.php
digitando ad es "dante" o ad es "roma" l'esito della ricerca restituisce i titoli che contengono la stringa ricercata ma senza visualizzare tale termine, come mai ?
Se invece digito ad es "Padova" esso compare.
Non comprendo da che cosa dipenda.
Questo il file "search.php":
<form name "cerca1" method="post" action="result.php">
<input TYPE="hidden" NAME="submitted" VALUE="base">
<b>Ricerca per:</b>
<br />
<input TYPE="radio" NAME="criterio" VALUE="autore">
Autore
<br />
<input TYPE="radio" CHECKED NAME="criterio" VALUE="titolo">
Titolo
<br />
<input TYPE="radio" NAME="criterio" VALUE="descrizione">
Descrizione
<br />
<input TYPE="radio" NAME="criterio" VALUE="editore">
Editore
<br />
<input TYPE="radio" NAME="criterio" VALUE="anno">
Anno
<br />
<input TYPE="TEXT" onfocus="this.value='';" SIZE="35" NAME="chiave" value="Inserisci un termine di ricerca...">
<br />
<input TYPE="submit" ACTION="result.php" VALUE="cerca" METHOD="get" NAME="search">
</form>
e questo il file "result_sub.php":
<?
include("config.inc.php");
include("stile.php");
$stringa = "<table border=\"1\"><tr><td valign=\"top\" style=\"color:red\">N</td><td valign=\"top\" style=\"color:red\">AUTORE</td><td valign=\"top\" style=\"color:red\">TITOLO</td><td valign=\"top\" align=\"center\" style=\"color:red\">ANNO</td></tr>";
$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri nel file config.inc.php");
$sql="SELECT * FROM articoli WHERE ";
$where="";
// serve per eliminare gli spazi prima e dopo la parola cercata
$str=strip_tags(trim($_POST['chiave']));
// fine
// serve per evidenziare la parola cercata
$search = explode(" ", trim($_POST['chiave']));
for ($i=0; $i<count($search); $i++)
$search[$i] = "/(".trim($search[$i]).")/i";
// fine
// esplode le parole cercate mettendole in un array
$words=explode(" ",$str);
// fine
while (list($key,$value) = each($words)) {
$words[$key] = "{$_POST['criterio']} LIKE '%". $words[$key] ."%'";
}
$where = implode(" AND ", $words);
$result = mysql_query($sql.$where, $db);
// conteggia i risultati
$num_righe=mysql_num_rows($result);
echo"Ricerca per: <i>{$_POST['criterio']}</i><br>";
echo"Chiave di ricerca: <i>$chiave</i><br>";
echo"Risultati: <i>$num_righe</i><br><br>";
// fine
$i = 0;
while ($row=mysql_fetch_array($result))
{
$i++;
$stringa .= "<tr><td valign=\"top\"><b>$row[N]</b></td><td valign=\"top\" align=\"left\">$row[AUTORE] </td>
<td valign=\"top\" align=\"left\"><a href=\"view.php?N=$row[N]\" title=\"Dettagli\">$row[TITOLO]</a></td>
<td valign=\"top\" align=\"right\"> $row[ANNO]</td>
</tr>";
// rimpiazza la parola cercata con la stessa parola ma evidenziata
foreach ($search as $k) {
if (strlen(ereg_replace("/\((.*)\)/","\\1", $k)) > 3) {
$stringa = preg_replace($k,"<b><span style='color:green'>\\1</span></b>",$stringa);
}
}
// fine
}
if ($i == 0)
{
$stringa = "<table><tr><td><i>Spiacente, non abbiamo trovato elementi corrispondenti!<br><br>Prova ad inserire un minor numero di termini.</i><br><br>Oppure <a href=form/indexpostadesiderata.php title=Desiderata>comunicaci la tua richiesta.</a></td></tr>";
}
$stringa .= "</table>";
echo $stringa;
mysql_close();
?>
<p align="center">
<?
echo "<a href=\"#\" onclick=\"history.go(-1)\">Indietro</a>";
?>
</p>
Grazie sin d'ora a chi mi vorrà aiutare.
Pier Mario