Realizzare un motore di ricerca nei siti web – Php, MySQL

Creato il 12 luglio 2012 da Ketek @CarloVentrella

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 database
if (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 &ldquo;;
          // 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;
 


Potrebbero interessarti anche :

Possono interessarti anche questi articoli :