Per realizzare uno script in grado di eseguire una ricerca all’interno di un database è necessario ricorrere all’ormai inseparabile coppia Php – MySQL.
Come potete immaginare lo script sarà diviso in due sezioni:
- Input: il visitatore inserirà i parametri di ricerca all’interno di un form;
- Ricerca nel database: lo script elabora l’input dell’utente,crea la query e interroga il database;
La prima sezione sarà logicamente un form che prenderà in input i parametri di ricerca e li invierà alla pagina di elaborazione che chiamiamo magari search.php.
HTML
<form method="get" action="search.php">
<input type="text" name="str" maxlength="32" value="Cerca..." id="searchtf" />
<input type="submit" id="str" value="Cerca" />
</form>
Passiamo ora allo script vero e proprio, quello che ci permette di elaborare l’input e interrogare il database. Nel file search.php
PHP
// search.php
$db = connessione_al_database(); // creiamo una funzione per connetterci al databaseif (isset($_GET['str']) & trim($_GET['str']) != ''){
if (strlen(trim($_GET['str'])) < 3){ die ('Errore. Il parametro di ricerca � troppo corto.') }else {$result_query = search($db, trim($_GET['str']));}
}
function search($db, $string){
$query = "SELECT titolo, testo, autore FROM articolo WHERE “;// Bisogna eseguire controlli di sicurezza sugli input, questo � il minimo!
$string = mysql_real_escape_string($string);$trimmed_array = explode(" ",$string);foreach($trimmed_array as $trimm){
$query .= "`titolo` LIKE '%".$trimm."%' OR `testo` LIKE '%".$trimm."%' OR `autore` LIKE '%".$trimm."%' OR ";}
$query .="1=0;";return mysql_query($query, $db);}
Alla funzione passiamo come parametri il database che interrogherò e la stringa inserita dal visitatore, successivamente preparo la parte iniziale della stringa a cui, successivamente, concatenerò il resto.
Prima di elaborare la stringa sono necessari dei controlli basilari per evitare scherzetti di visitatori poco simpatici, un esempio è proprio il mysql_real_escape_string. (E’ il minimo, ne sono necessari altri per una massima sicurezza)
Bene, una volta assicurata la sicurezza della stringa la esplodiamo in un array che conterrà le singole parole, è un passaggio necessario per completare la query.
La query MySQL sfrutterà la funzione LIKE che ha il compito di effettuare una comparazione tra campi simili, non necessariamente identici! Questa è la struttura finale della query:
MYSQL
SELECT titolo, testo, autore FROM articolo WHERE `titolo` LIKE '%parametro1%' OR `testo` LIKE '%parametro1%' OR `autore` LIKE '%parametro1%' OR `titolo` LIKE '%parametro2%' OR `testo` LIKE '% parametro2%' OR `autore` LIKE '% parametro2%' OR 1=0;