...Personalizza la tua HomePage...

Questa Sezione è Dedicata a Tutti i Webmaster Nofiti e Non

Versione Stampabile Versione PDF Versione .DOC Versione .ZIP Scrivimi i tuoi Commenti

Il Motore di Ricerca
Autore :   Linguaggio :  PHP - Hypertext Preprocessor
Data :  07/11/2003 15:02:10 Accessi :  26
Finalmente in questa lezione sfruttiamo fino in fondo le potenzialità del database.
Inseriremo un motore di ricerca che, in base alle parole chiave inserite dall'utente, cercherà gli articoli che le contengono.
Iniziamo come sempre crando la pagina search.php con l'intestazione:


<?
include("top_foot.inc.php");
include("config.inc.php");
top();
?>

Quindi dovremo creare un form che contenga un campo di testo per immettere le parole da cercare:


<form method=post action=result.php>
<input type=text name=chiave>
<input type=submit value=cerca><br>
</form>

e infine chiudiamo la pagina:

<? foot(); ?>

A questo punto possiamo venire alla pagina result.php che avrà il compito di elaborare la stringa inserita dall'utente:


<?
include("top_foot.inc.php");
include("config.inc.php");
top();
$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE) die ("Errore nella connessione.
Verificare i parametri nel file config.inc.php");
mysql_select_db($db_name, $db) or die ("Errore nella selezione del database.
Verificare i parametri nel file config.inc.php");

Per prima cosa dovremo suddividere la stringa nelle chiavi da ricercare.

Noi supporremo che le diverse chiavi siano suddivise da virgole.

Quindi le inseriremo in un array di nome $keys:


$keys = explode (",", $chiave);

Tramite questa operazione abbiamo spezzato la stringa $chiave in corrispondenza di ogni virgola e inserito i frammenti all'interno dell'array $keys.
A questo punto possiamo creare la query.

In questo caso non possiamo utilizzare una semplice uguaglianza, ma dobbiamo specificare che le celle devono solo contenere le parole.
Vedremo quindi un nuovo metodo:


$query = ""; reset ($keys);

while (list(,$parola) = each ($keys)) {
$parola = trim($parola);
if ($parola != "") $query .= "titolo LIKE '%$parola%' OR testo LIKE '%$parola%' OR autore LIKE '%$parola%' OR ";
}

$query .= "0";

Prima di tutto abbiamo definito $query una stringa vuota.

In seguito attraverso la seconda e la terza riga abbiamo indicato che vogliamo manovrare un solo elemento dell'array alla volta.

Avremmo potuto usare foreach e semplificare il codice, ma questa funzione esiste solo a partire dalla versione 4 di Php.
Ogni elemento dell'array sarà quindi disponibile uno alla volta con il nome $parola.
Da questa eliminiamo gli spazi a sinistra e a destra tramite trim e, se la parola non è vuota, creiamo la query.
Tutto quello che vedete tra le virgolette, verrà aggiunto in fondo alla query già esistente.
Prendiamo per il momento in considerazione il caso in cui l'utente abbia immesso due sole parole chiave e vediamo quali sono le operazioni che vengono compiute passo passo.

Consideriamo per esempio che le parole inserite siano "articolo" e "freephp":


- Prima di tutto viene definita la query vuota: $query = "";
- Con le prime due righe si ottiene la prima parola ("articolo") all'interno di $parola
- Eliminiamo gli spazi alle estremità di "articolo" che in questo caso resta tale e quale
- Verifichiamo che $parola non sia vuota.
- Modifichiamo la stringa $query che diventerà "titolo LIKE '%articolo%' OR testo LIKE '%articolo%' OR autore LIKE '%articolo%' OR "
- Passimao alla parola successiva, quindi $parola assume il valore "freephp".
- Eliminiamo gli spazi e verichiamo che non sia vuota
- Aggiungiamo la stringa in fondo alla query che diventa: "titolo LIKE '%articolo%' OR testo LIKE '%articolo%' OR autore LIKE '%articolo%' OR titolo LIKE '%freephp%' OR testo LIKE '%freephp%' OR autore LIKE '%freephp%' OR "
- Le parole chiave sono finite, ma la stringa finisce ancora con un OR.
Per annullare il suo effetto aggiungiamo in fondo uno 0.
Avremmo potuto eliminare l'OR, ma avremmo dovuto fare una serie di verifiche.
Risulta invece molto più semplice e immediato usare questa scorciatoia per "neutralizzare" il suo effetto senza eliminarlo.


Fatto tutto questo possimao inserire la prima parte della stringa:


$query = "SELECT id, titolo, data FROM news WHERE " .
$query;

Quindi la stringa diventerà:
"SELECT id, titolo, data FROM news WHERE titolo LIKE '%articolo%' OR ...
OR autore LIKE '%freephp%' OR 0"
Come vedete LIKE ha sostituito l'operatore di uguaglianza che abbiamo usato in tutte le altre query.

Prendiamo in considerazione un singolo blocco LIKE: titolo LIKE '%articolo%'
LIKE indica che titolo deve contenere articolo e non che deve essere uguale a titolo.
% all'inizio indica che prima di "articolo" possono comparire altri caratteri.

Quindi "articolo" non deve necesariamente trovarsi all'inizio della cella.

Stessa cosa indica il simbolo % alla fine.

Quindi inserendo questi due simboli abbiamo indicato di verificare se la cella titolo contiene la parola "articolo" in una qualunque posizione: all'inizio, al centro o alla fine.


Una volta definita la query possiamo inviarla a MySQL ed elencare i risultati:


$result = mysql_query($query, $db);

while ($row = mysql_fetch_array($result)) {
echo "<a href=\"view.php?id=$row[id]\">" .
date("j/n/y", $row[data]) .
" - $row[titolo]</a><br>";
}


Infine, come sempre, chiudiamo la pagina:

foot()
?>

Ritorna


 NEWS 
12/09/2007 13:08:14
PAURA
Marco Travaglio con Gomez e Crozza ed Elio

11/09/2007 14:44:48
IL V-DAY: un evento NUOVO !!!!!
Aria fresca in Parlamento articolo del Sole24ore: http://www.ilsole24ore.com/art/SoleOnLine4/At...


28/06/2007 14:20:55
LEOPARDI SALUTI i 500
Certo ragazzi, anche noi nel nostro piccolo cresciamo, e Leopardi è il cinquecentesimo saggio nella ...


12/04/2007 11:31:15
ATTENZIONE A CheckMessenger.NET! , è una TRUFFA
Ennesito sito truffaldino: si chiama CheckMessenger e vi promette di mostrarvi se i vostri contatti ...


26/01/2007 11:58:34
AGGIORNATE TUTTE LE SEZIONI
AGGIORNATE TUTTE LE SEZIONI Sì, cari amici. Ho provveduto ad aggiornare le principali sazioni de...


:: ELENCO NEWS ::

  
Valid XHTML 1.0! Valid CSS!