Vorrei realizzare il classico "cerca nel sito" con interfaccia ad un database. Ho trovato nella sezione tutorial questo
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:
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
HTML:
https://www.mrw.it/php/articoli/motore-ricerca-interno-php-mysql_838.html
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