- Learn
- PHP e MySQL, la guida
- Un semplice motore di ricerca per il blog
Un semplice motore di ricerca per il blog
In una buona applicazione per la gestione di un blog non può mancare un motore di ricerca interno per trovare velocemente i post sulla base di parole chiavi da confrontare con il contenuto della tabella dedicata ai post; il meccanismo che permetterà il funzionamento del semplicissimo motore di ricerca proposto in questa trattazione si basa su un una query SELECT che presenta qualche differenza rispetto a quelle analizzate in precedenza.
Si immagini per esempio di voler ricercare il termine “data” all’interno del contenuto dei post:
- la chiave verrà passata all’applicazione per la ricerca sotto forma di parametro di input inviato tramite form;
- l'applicazione effettuerà un controllo sulla validità del parametro di input e lo utilizzerà come valore da associare ad una variabile ($key nell’esempio);
- a questo punto verrà effettuata una query
SELECT
sulla tabella dei post (SELECT * FROM post
); - la query verrà effettuata confrontando la parola ricercata con il contenuto dei record relativi ai titoli e al testo dei post (
WHERE (titolo_post LIKE '%" . $key . "%') OR (testo_post LIKE '%" . $key . "%'
) ; - sarà possibile ottenere un risultato valido non soltanto se la chiave sarà rilevata all’interno dei titoli e dei testi ma anche se verrà trovata in uno solo di questi termini di confronto, ciò è possibile grazie all’utilizzo dell’operatore OR al posto di AND, il primo infatti, a differenza del secondo, restituisce TRUE anche se soltanto uno degli argomenti di un confronto risulta vero;
- i risultati della query verranno ordinati in senso decrescente sulla base dei valori contenuti nel campo data_post (
ORDER BY data_post
).
Di seguito viene proposto il codice necessario per il motore di ricerca:
<html> <head> <title>MioBlog</title> </head> <body> <h1>Motore di ricerca</h1> <?php // inclusione del file di classe include "funzioni_mysql.php"; // istanza della classe $data = new MysqlClass(); // chiamata alla funzione di connessione $data->connetti(); ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST"> <input type="text" name="key" value="" /> <input type="submit" value="cerca" class="submit" /> </form> <?php if(isset($_POST['key'])&&($_POST['key']!="")&&(preg_match("/^[a-z0-9]+$/i", $_POST['key']))) { $key = $_POST['key']; $sql_cerca = $data->query("SELECT * FROM post WHERE (titolo_post LIKE '%" . $key . "%') OR (testo_post LIKE '%" . $key . "%') ORDER BY data_post"); $trovati = mysql_num_rows($sql_cerca); if($trovati > 0) { echo "<p>Trovate $trovati voci per il termine <b>".stripslashes($key)."</b></p>n"; while($cerca_obj = $data->estrai($sql_cerca)) { $id_post = $cerca_obj->id_post; $titolo_post = stripslashes($cerca_obj->titolo_post); $testo_post = stripslashes($cerca_obj->testo_post); $autore_post = stripslashes($cerca_obj->autore_post); $data_post = $cerca_obj->data_post; // visualizzazione dei dati echo "<h2>".$titolo_post."</h2>n"; echo "Autore <b>". $autore_post . "</b>n"; echo "<br />n"; echo "Pubblicato il <b>" . $data->format_data($data_post) . "</b>n"; echo "<br />n"; // link al testo completo del post $leggi_tutto = "<br /><a href="post.php?id_post=$id_post">Articolo completo</a>n"; // anteprima del testo echo "<p>".$data->preview($testo_post, 50, $leggi_tutto)."</p>n"; } }else{ // notifica in caso di mancanza di risultati echo "Al momento non sono stati pubblicati post che contengano questo termine."; } } // disconnessione $data->disconnetti(); ?>
LIKE è un operatore di confronto che permette di effettuare una comparazione tra campi simili anche se non uguali;
I due simboli percentuali (%
), vengono utilizzati dal DBMS per rilevare se prima e dopo il termine ricercato vi siano altre parole; se invece di LIKE si fosse utilizzato l’operatore di identità (ad esempio: WHERE "titolo_post =' . $key . ' OR testo_post =' . $key . '
) l’istruzione avrebbe cercato soltanto i titoli o i testi contenenti esclusivamente la chiave inviata in input.
Si noti come la chiave di ricerca, prima di partecipare alla query, sia stata validata tramite un'espressione regolare (preg_match("/^[a-z0-9]+$/i", $_POST['key']")
), questo perché per ragioni di sicurezza nella parola ricercata non devono essere presenti caratteri speciali.
Se vuoi aggiornamenti su Un semplice motore di ricerca per il blog inserisci la tua email nel box qui sotto:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
La tua iscrizione è andata a buon fine. Se vuoi ricevere informazioni personalizzate compila anche i seguenti campi opzionali:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
I Video di HTML.it
Migrare da AngularJS 1 ad Angular 2: un atto di fede?!?
Migrare applicazioni da AngularJs 1 and Angular 2 non è una rilassante passeggiata nel parco, ci sono domande da porsi […]