motore di ricerca interno al sito

mediasteno

Utente Attivo
25 Gen 2010
120
0
0
Vorrei realizzare il classico "cerca nel sito" con interfaccia ad un database. Ho trovato nella sezione tutorial questo
HTML:
https://www.mrw.it/php/articoli/motore-ricerca-interno-php-mysql_838.html
e lo volevo adattare alla mia esigenza. Nel mio caso la ricerca deve essere effettuata su più tabelle anche se su un unico database. Ho quindi impostato il tutorial nel seguente modo:
PHP:
<?php
   include 'connessione.php';
   $testo = htmlspecialchars(addslashes($_POST['testo']));
?>
<html><head><title>Risultati della ricerca</title></head><body>
<h2>Risultati della ricerca</h2>
<p>
<?php
    if (isset($testo) == false || $testo == "")
    {
        echo "nessun risultato!";
    }
    else
    {
        echo $testo;
    }
?>
</p>
<?php
    if (isset($testo) == false || $testo == "")
    {
?>
<p>Specificare un criterio di ricerca.</p>
<?php
    }
    else
    {
        $arr_txt = explode(" ", $testo);
        $sql = "SELECT comuni.comune, comuni.descrizione, comuni.nota, foto.alt, piattitipici.nome_piatto, piattitipici.descrizione,
                      eventi.titolo, eventi.testo, eventi.organizzazione, struttureric.denominazione, monumenti.monumento,
                      monumenti.descrizione, itinerari.itinerario, itinerari.descrizione,
                      FROM comuni
                      LEFT JOIN foto ON foto.id_comune = comuni.id
                      LEFT JOIN piattitipici ON piattitipici.id_comune = comuni.id
                      LEFT JOIN eventi ON eventi.id_comune = comuni.id
                      LEFT JOIN struttureric ON struttureric.id_comune = comuni.id
                      LEFT JOIN monumenti ON monumenti.id_comune = comuni.id
                      LEFT JOIN itinerari ON itinerari.id_regione = comuni.id_regione
                      WHERE ";

        for ($i=0; $i<count($arr_txt); $i++)
        {
            if ($i > 0)
            {
                $sql .= " AND ";
            }
            $sql .= "(comuni.comune LIKE '%" . $arr_txt[$i] . "%' OR comuni.descrizione LIKE '%" . $arr_txt[$i] . "%' OR comuni.nota LIKE '%" . $arr_txt[$i] . "%' OR
                      foto.alt LIKE '%" . $arr_txt[$i] . "%' OR
                      piattitipici.nomepiatto LIKE '%" . $arr_txt[$i] . "%' OR piattitipici.descrizione LIKE '%" . $arr_txt[$i] . "%' OR
                      eventi.titolo LIKE '%" . $arr_txt[$i] . "%' OR eventi.testo LIKE '%" . $arr_txt[$i] . "%' OR  eventi.organizzazione LIKE '%" . $arr_txt[$i] . "%' OR
                      struttureric.denominazione LIKE '%" . $arr_txt[$i] . "%' OR 
                      monumenti.monumento LIKE '%" . $arr_txt[$i] . "%' OR monumenti.descrizione LIKE '%" . $arr_txt[$i] . "%' OR
                      itinerari.itinerario LIKE '%" . $arr_txt[$i] . "%' OR itinerari.descrizione LIKE '%" . $arr_txt[$i] . "%'
                     )";
        }
        $sql .= " AND cat_id = art_categoria ORDER BY art_timestamp DESC";
        $query = mysql_query($sql, $link);
        $num_righe = mysql_num_rows($query);
        if ($num_righe == 0)
        {
?>
<p>Nessun risultato!</p>
<?php
        }
        else
        {
            for($x=0; $x<$quanti; $x++)
            {
                $rs = mysql_fetch_row($query);
                $comune = $rs[0];
                $descrizione_com = $rs[1];
                $nota_com = $rs[2];


?>
<p><a href="leggi.php?id=<?echo $comune?>"><?echo $descrizione?></a></p>
<?php
            }
        }
    }
?>

ma quando vado ad eseguire lo script mi esce il messaggio:

Risultati della ricerca
cerca nel sito


Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/vhosts/adivades000005/httpdocs/motore.php on line 58

Nessun risultato!

Ho pensato che era dovuto al fatto che facevo riferimento a più tabelle e ho riscritto lo script per una sola tabella ma ottengo lo stesso messaggio che l'argomento di mysql_num_rows() non è valido.
A questo punto non riesco a capire dove è l'errore visto che ho seguito di pari passo il tutorial.

una volta trovato l'errore in mysql_num_rows è corretto impostare lo script con le JOIN per la ricerca in più tabelle?
Grazie per l'aiuto
 
prova così:
PHP:
$query = mysql_query($sql, $link) or die(mysql_error());
che errore ti restituisce?
 
Inserendo
PHP:
 or die(mysql_error());
ho avuto conferma di ciò che intuivo, ossia che l'errore era nella riga:
PHP:
$sql .= " AND cat_id = art_categoria ORDER BY art_timestamp DESC";
a questo punto però non so come adattarlo al mio caso visto che nel tutorial non mi chiarisce a cosa fa riferimento.
Ho eliminato questa riga ma ho l'impressione che in questo modo qualsiasi parola inserisca come criterio di ricerca ottengo sempre tutti i risultati, invece io voglio solo il testo che contiene la parola '$testo'.
In questo momento sono nel buio totale :crying::(
 

Discussioni simili