URGENTE ! Database e ricerche mirate

Avrei la necessità di fare delle ricerche mirate nel database ma non riesco nell'impresa .

In pratica vorrei che mi venisse visualizzato solo il testo dell'articolo il cui titolo sia uguale alla frase che è stata digitata nel Form .

Invece mi vengono visualizzati tutti i testi abbinati ai titoli che contengono uno o più termini di ricerca .

Faccio un esempio :

La tabella news contiene i seguenti campi :

id     -     titolo     -     data     -    testo    -    autore

titolo                       

L'arte in Australia     

testo

L'Australia è un paese .... ecc ....

titolo

Un viaggio in Australia     

testo

John era appena partito .. ecc ....

Bene -  adesso  se digito L'arte in Australia  mi viene visualizzato il testo  L'Australia è un paese .... ecc ....

Se però digito nel Form solo Australia  ricevo come risultato :

 L'Australia è un paese .... ecc ....

John era appena partito .. ecc ....

Invece vorrei che digitando solo Australia mi venisse visualizzato il messaggio :

Si prega di digitare il titolo esatto dell'articolo ma non ho capito come impostare e dove mettere or die

E digitando   Un viaggio in Australia     mi venisse visualizzato solo il testo di quest'articolo e non anche quello di altri                 

Ho provato in molti modi ma niente da fare  !

Ad esempio così  mi visualizza tutti gli articoli contenuti nel database :

$query = "SELECT id, testo, data FROM news WHERE titolo=".$parola."" . $query;

Quest'altra modifica invece mi cerca il testo uguale alla digitazione  :

$query .= "titolo = '%$parola%' OR testo LIKE '%$parola%' OR autore LIKE '%$parola%' OR ";

Questo e il sorgente

  [ codice php ]     

<?php

$chiave=$_REQUEST['chiave']; 

top();

$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");

$keys = explode (",", $chiave);

$query = "";

reset ($keys);

while (list(,$parola) = each ($keys))

{ $parola = trim($parola);

if ($parola != "")

$query .= "titolo LIKE '%$parola%' OR testo LIKE '%$parola%' OR autore LIKE '%$parola%' OR ";

}

$query .= " 0";

$query = "SELECT id, testo, data FROM news WHERE " . $query;

$result = mysql_query($query, $db);

if ($query == FALSE)

die ("Questo die e sbagliato ma se lo tolgo non va");

while ($row = mysql_fetch_array($result))

{

echo "<a> .date("",$row['data']) . "&nbsp  {$row['testo']}</a><br>";

}

mysql_close($db);

foot();

?>

[ / codice php ]

Inoltre vorrei sapere se e possibile dare un effetto di testo al risultato che viene visualizzato

Ringrazio in anticipo per un eventuale risposta che possa essermi di aiuto per risolvere

il problema .

inviato 7 anni fa
Exe
Exe
1
X 0 X

Lo script che hai riportato è piuttosto macchinoso proprio perché cerca una qualsiasi parola digitata sia nel titolo che nel testo che nel nome dell'autore. Infatti il testo inserito dall'utente viene diviso in tante parole e per ciascuna di queste viene creato un pezzo si query che ne permette la ricerca in questi tre campi.

Ma mi sembra di aver capito che questo comportamento non è quello che desideri. Allora ti basta buttare via tutto quel codice ed eseguire una semplice query:

$query = 'SELECT id, testo, data FROM news WHERE titolo= "'. $chiave . '"';

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

Grazie Gianni !!

Però il codice può funzionare , un amico mi ha suggerito di sostituire LIKE con =

e adesso funziona !!

Rimane comunque il problema legato all'effetto di testo tipo macchina da scrivere , o qualcosa del genere ...

Ne ho diversi  a disposizione ma sono in javascript .

risposto 7 anni fa
Exe
Exe
1
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda