Link sponsorizzati

Un motore di ricerca interno con PHP e MySQL

Articolo scritto da Luca Ruggiero

Vediamo in questo tutorial come creare un motore di ricerca interno al proprio sito in PHP, effettuando la ricerca su di un database MySQL.

Simuliamo la ricerca tra gli articoli del sito, quindi creiamo una tabella chiamata articoli composta dai campi id (Integer 20, primary key, autoincrement), titolo (Varchar 100) e descrizione (Longtext).

(L'articolo continua più sotto...)

Il database MySQL si chiamerà mio_database ed avrà username mia_username, password mia_password e lo richiameremo da localhost.

Creiamo innanzitutto il modulo di ricerca che richiameremo in tutte le pagine del sito, utilizzando magari le inclusioni lato server del PHP.

Segue il codice HTML:

<form method="post" action="cerca.php">
<input type="text" name="testo">
<input type="submit" value="Cerca">
</form>
Il form punta, utilizzando il metodo post per l'invio dei dati, al file cerca.php di cui segue il codice:
<?
    $cn = mysql_connect("localhost", "mia_username", "mia_password");
    @mysql_select_db("mio_database", $cn);
    $testo = htmlspecialchars(addslashes($_POST["testo"]));
?>
<html><head><title>Risultati della ricerca</title></head><body>
<p>
<b>Risultati della ricerca:</b>
<?
    if (isset($testo) == false || $testo == "")
    {
        echo "nessun risultato!";
    }
    else
    {
        echo $testo;
    }
?>
</p>
<?
    if (isset($testo) == false || $testo == "")
    {
?>
<p>Specificare un criterio di ricerca.</p>
<?
    }
    else
    {
        $arr_txt = explode(" ", $testo);
        $sql = "SELECT * FROM articoli WHERE ";
        for ($i=0; $i<count($arr_txt); $i++)
        {
            if ($i > 0)
            {
                $sql .= " AND ";
            }
            $sql .= "(titolo LIKE '%" . $arr_txt[$i] . "%' OR descrizione LIKE '%" . $arr_txt[$i] . "%')";
        }
        $sql .= " AND cat_id = art_categoria ORDER BY art_timestamp DESC";
        $query = mysql_query($sql, $cn);
        $quanti = mysql_num_rows($query);
        if ($quanti == 0)
        {
?>
<p>Nessun risultato!</p>
<?
        }
        else
        {
            for($x=0; $x<$quanti; $x++)
            {
                $rs = mysql_fetch_row($query);
                $id = $rs[0];
                $titolo = $rs[1];
?>
<p><a href="leggi.php?id=<?echo $id?>"><?echo $titolo?></a></p>
<?
            }
        }
    }
?>
</body></html>
Lo script funziona in maniera molto semplice come segue.

Recuperiamo il testo da ricercare e ci connettiamo a MySQL, filtrando il testo con tutti i controlli del caso.

Verifichiamo che il testo non sia vuoto e che sia settato; se è vuoto lanciamo un messaggio di avviso, altrimenti procediamo.

Dividiamo il testo in un array di stringa e creiamo dinamicamente la stringa SQL per interrogare il database: se ci sono risultati li mostriamo a video, altrimenti lanciamo un messaggio che avvisa che, per quella chiave di ricerca, non ci sono record corrispondenti.

Nella stessa categoria...
E-Learning
Corso LinuxCorso Linux
Guida completa al sistema open-source. A partire da 39 €.
Corso MySQLCorso MySQL
Gestione del database open-source. A partire da 49 €.
Corso PHPCorso PHP
Corso completo per la creazione di siti Web dinamici. Sconto -25% sino al 15/02/2012.
Link sponsorizzati