Semplice Motore di Ricerca con PHP & Mysql

Ipotizziamo il caso in cui un visitatore si ricordasse di me per una news in particolare , o avesse bisogno di trovare una news contente uno script , ma sia passato troppo tempo dall’ultima visita, e quindi sia stata seppellita da altri 500 milioni di articoli, Come farebbe ? Proverebbe pagina per pagina ? Cercherebbe l’aiuto da casa ?
No , basterebbe soltanto un semplice motore di ricerca interno al database , contente le nostre news.
A differenza di quello che si pensa, è molto facile realizzare un semplice motore di ricerca con PHP e MYSQL, e in questo articolo vi spiego come si fa
.
Il motore di ricerca che vi propongo oggi è molto semplice infatti si basa su una sola pagina e una tabella mysql da perlustrare alla ricerca delle nostre news.
Creiamo la tabella mysql da PhpMyAdmin
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | CREATE TABLE `tabella_news` ( `id` INT( 40 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , `titolo` VARCHAR( 255 ) NOT NULL , `data` VARCHAR( 255 ) NOT NULL , `testo` TEXT NOT NULL ) ENGINE = MYISAM INSERT INTO `tabella_news` ( `id` , `titolo` , `testo` `data` ) VALUES ( NULL , 'Giornata Blog', 'testo di prova', '14-02-10' ), ( NULL , 'Bis articolo 10', 'testo di prova', '15-02-10' ); |
Creiamo la pagina cerca.php e inseriamogli questo codice:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | <form action='cerca.php?ricerca=ok' method='POST'> <b>Ricerca</b><br> <input type='text' name='cerca'><br> <input type='submit' value='Invia'> </form> </form> <?php // connettiamoci il nostro database $db_host = "localhost"; $db_user = "root"; $db_password = "pass"; $db_name = "my_db"; //connetto il database $db = mysql_connect($db_host, $db_user, $db_password) or die ('Errore durante la connessione'); mysql_select_db($db_name, $db) or die ('Errore durante la selezione del db'); // recuperiamo il valore ricerca inviato con get $ricerca = $_GET['ricerca']; // vediamo se è stato inviato, e quindi uguale a ok if ( $ricerca == 'ok' ) { // recuperiamo ora cerca inviato con post $cerca = $_POST['cerca']; // vediamo se è stato compilato il campo if ( $cerca == TRUE && $cerca != "" ) { // ora vediamo se supera i tre caratteri if ( strlen($cerca) >= 3 ) { // ora depuriamo la stringa da cercare sul database $cerca = mysql_escape_string(stripslashes($cerca)); // ora possiamo effettuare la nostra ricerca sul db, state attenti alla sintassi $query = "SELECT * FROM tabella_news WHERE testo LIKE '%$circa%' OR titolo LIKE '%$circa%' OR data LIKE '%$circa%'"; $risultato = mysql_query($query) or die (mysql_error()); $risposta = mysql_query($query) or die ("Utilizza termini più specifici!"); $dentro_la_query= mysql_fetch_assoc($risposta); if ( $dentro_la_query == TRUE ) { while($row= mysql_fetch_assoc($risultato)) { $titolo = $row['titolo']; $testo = $row['testo']; $data = $row['data']; $id = $row['id']; // stampiamo i nostri dati echo "Titolo: $titolo<br>"; echo "Data : $data<br>"; echo "Testo : $testo<br>"; } } else { echo "Nessun temine alla ricerca trovato"; } } else { echo "Devi inserire almeno 3 caratteri"; } } else { echo "Non hai compilato il modulo ricerca"; } } ?> |
Come avrete visto nella query ho utilizzato l’operatore LIKE di SQL , utilissimo strumento offertoci dal database per poter cerca termini simili all’interno del database. Infatti se noi cercassimo ‘Giornata’ o ‘blog’ troveremmo lo stesso la news. Infatti la sintassi:
1 | colonna LIKE '%cerca%' |
ci permette di perlustrare una intera stringa che comincia , contiene o finisce con il termine che stiamo cercando. Se invece volessimo cercare una news che cominciasse soltanto per ‘Giornata’ dovremmo scrivere:
1 | colonna LIKE '%cerca' |
Io ho aggiunto due controlli molto importanti : quello sul numero dei caratteri minimo da inserire per effettuare la ricerca e quello se il carattere è presente nel db.
Il primo lo trovo molto utile , infatti far ricercare al visitatore una stringa composta da due caratteri non è molto furbo , perché faremmo affaticare molto mysql estraendo inutilmente news superflue.
Per il resto come al solito vi consiglio di implementare i miei script , perché molto semplici, utili per chi è alle prime armi con php.
Uno dei tanti consigli :
- Potreste aggiungere un controllo sul numero di ricerca da effettuare entro un tot di tempo.
Alla prossima e buona ricerca





5 maggio 2010

ciao, complimenti per lo script…
perchè facendo tutto per come è scritto mi restituisce sempre “Non hai compilato il modulo ricerca”???
Grazie in anticipo per la risposta