Creare un piccolo motore di ricerca ( by Sevenjeak )

« Older   Newer »
  Share  
sevenjeak
view post Posted on 29/3/2012, 17:05     +1   -1




Ho appena finito di scrivere il mio script, composto solo da due pagine per fare solamente un esempio.

Si tratta di un piccolo motore di ricerca che:

1. Cerca all'interno di una tabella i risultate della chiave, nel caso divisa separandola in spazi

2. Elimina i duplicati trovati, nel caso che, più chiavi trovino lo stesso risultato

3. Evidenzia in grassetto le parole trovate all'interno dei risultati.

Bene, come al solito, per evitare di allungare la discussione ho inserito dei commenti all'interno del codice che presumo vi aiutino a capire lo script.

Iniziamo con lo scrivere la nostra index.php, contenente il form e che sotto include la pagina dei risultati, result.php ( ho voluto come al solito dare un po ti stile alla pagina ):

CODICE
<style type="text/css">
  body {
     margin:0;
  }
 
  input {
     padding:5px;
         border:solid #d6d6d6 1px;
         outline:none;
         -webkit-border-radius:5px;
         -moz-border-radius:5px;
         border-radius:5px;
  }
 
  input:focus {
     border:solid #969696 1px;
  }
 
  input[type=submit] {
     padding-left:30px;
         padding-right:30px;
         background:#f6f6f6;
  }
 
  div#head {
     background:#f4f4f4;
         padding:20px;
         border-bottom:solid #e6e6e6 1px;
  }
 
  form {
     margin:0;
  }
 
  div#cont {
     padding:5px;
  }
</style>
<div id="head">
<form method="get">
  <input type="text" name="k" size="90" />&nbsp;&nbsp;<input type="submit" value=" Cerca " />
</form>
</div>
<div id="cont">
<?php
if (isset($_GET["k"])) {
  include("result.php");
}
?>
</div>


Come vedete il form di ricerca non a action, ma usa il metodo get in moto che il valore del campo sia passato tramite url in questo modo:

CODICE
http://...?k=valore_key


E sotto, abbiamo il codice che include la pagina dei risultati, se esiste $_GET["k"], bhe.. spero che abbiate capito perché non ho messo l'action al form, ma ora passiamo alla pagina dei risultati.

La pagina result.php contiene questo codice:

CODICE
<?php
$keys = htmlspecialchars($_GET["k"]);

// Se $keys è vuoto esco dallo script.
if (empty($keys)) {
  exit();
}

echo "<strong>Risultati di ricerca per</strong>: $keys</strong><p />";

// Connessione al database ( sostituiti i parametri qui sotto, con i vostri parametri di connessione )
mysql_connect(HOST", USER, PASSWORD);
mysql_select_db(NOME_DB);

// Explode sulla chiave di ricerca, con separatore lo spazio, nel caso la chiave contenesse più palore
$key = explode(" ", $keys);
// Array che conterra i risultati di ricerca.
$result = array();

// Query di selezione della tabella dei risultati ( result )
$query = mysql_query("SELECT * FROM result");

// Ciclo wile di lettura della tabella result.
while ($rs = mysql_fetch_array($query))
{
  // Ciclo for di ricerca chiave/i, non facendo distinzione tra maiuscole e minuscole, nel campi titolo del record corrente
  for ($i = 0; $i < count($key); $i++)
  {
     $k = $key[$i];
         
         // Se trova la chiave corrente, sempre non facendo distinzione tra maiuscole e minuscole ( convertento tutto in minuscolo ), nel campo titolo, mettendo il risultato trovato ( contenente il valore del campo titolo e descrizione ) nell'array result
     if (strstr(strtolower($rs["titolo"]), strtolower($k))) {
            $result[] = array(
                   "titolo" => $rs["titolo"],
                       "descrizione" => $rs["descrizione"]
                );
         }
  }
}

// Rimozione duplicati nei risultati ( nel caso che, più chiavi trovino lo stesso risultato )
$result = array_unique($result);

// Evidenziatura ( con testo scritto in grassetto ) chiave/i presente nell'array dei risultati
for ($i = 0; $i < count($result); $i++)
{
  for ($j = 0; $j < count($key); $j++)
  {
     $k = $key[$j];
         
     $result[$i]["titolo"] = preg_replace("/($k)/i", "<strong>$1</strong>", $result[$i]["titolo"]);
         $result[$i]["descrizione"] =preg_replace("/($k)/i", "<strong>$1</strong>", $result[$i]["descrizione"]);
  }
}

// Restituzione in output dei risultati ( presente nell'array result )
for ($i = 0; $i < count($result); $i++)
{
  echo "<u>" . $result[$i]["titolo"] . "</u>
  <p />
  " . $result[$i]["descrizione"] . "<p />";
}
?>


Non credo che abbia bisogno di spiegazione, visto che il codice è tutto commentato, ma nel caso contrario non esitate a domandare spiegazioni qui sotto, ovviamente prima di provarlo campiate i parametri di connessione al database, e create, all'interno del database che utilizzerete per lo script questa tabella, contenente i risultati nel mio esempio:

CODICE
CREATE TABLE result (
  id INTEGER AUTO_INCREMENT,
  titolo VARCHAR,
  descrizione VARCHAR,
  PRIMARY KEY(id)
)


Dopo averla creata ovviamente inserite al proprio interno dei record.

Premetto che la query dovrà essere creata da voi, visto che è solo un'esempio di prova non ho inserito la paginazione ai risultati, ma potrete modificarlo come meglio vogliate.

Credo di avervi detto tutto per il corretto funzionamento dello script, metto qui sotto, in allegato lo script.

Download attachment
motore_di_ricerca.zip ( Number of downloads: 44 )

 
Top
0 replies since 29/3/2012, 17:05   90 views
  Share