[FLUG] search.cgi

  • From: Gecco th Ruled <gecco@xxxxxxxxxxxx>
  • To: fanolug@xxxxxxxxxxxxx
  • Date: Sun, 16 Feb 2003 13:35:58 +0100

Mailing List del Fortunae LUG
=============================

mi e` stata commissionata questa cosa, fare un motore di ricerca per il
sito www.gnam-gnam.it, e` un sito che gira su iis, php non c`e`, c`e`
solo asp e database access, il problema era fare questa cosa usando robe
open, nell`ftp c`era una dir cgi-bin, ho provato a metterci uno script
in perl e ho visto che funzionava, quindi ho optato per il perl, non
avevo mai scritto un cgi in perl, ora, siccome non potevo appoggiarmi al
database access per motivi etici, ho optato per dei semplici file di
testo, quindi ho 4 file di testo con dentro l`elenco dei ristoranti,
pizzerie, trattorie e agriturismi, altri 5 file di testo per la cima e
il fondo della pagina, dato l`inizio pagina cambia a seconda della
sezione, pero` in perl non ho trovato una funzione tipo include del php
ho semplicemente aperto il file e printato


print "Content-type:text/html\n\n";        #dichiara il tipo, il perl ha
                                           #bisogno 
                                           #per printare roba html
@campi = split(/&/,$ENV{'QUERY_STRING'});  #prende le variabili dall'url
                                           #con get
                                           #il perl usa sto metodo qua
@var= split(/=/,@campi[0]);                #separa le variabili
@cat=split(/=/,@campi[1]);                 #prese dalla stringa dell'url
                                           #questo si capisce meglio
                                           #guardando l`url
                                           #che viene passato allo
                                           #script
                                           #in perl deve essere fatto
                                           #cosi`
if(@var[0] eq "cat")                       #guarda se c'e' prima la
categoria
{                                          #o il nome per la ricerca
  $cat=@var[1];                            #e le mette nell'ordine che
                                           #serve
  $nome=@cat[1];
}
else
{
  $cat=@cat[1];
  $nome=@var[1];
}
                                           #siccome al perl, se gli
                                           #passi due variabili
                                           #non e` come in php che gli
                                           #dici il nome della
                                           #variabile e lui capisce,
                                           #devi fare sta cosa
                                           #per capire quale roba
                                           #prendere
                                           #vabbe`, non si capisce...
                                           #andate qua
                                     #http://www.html.it/cgi/cgi_11.htm
                                           #che spiega meglio sta
                                           #cosa...
if($cat eq "ristoranti.txt")               #controlla quale categoria e'
                                           #stata selezionata
{                                          #e include gli header per
                                           #quella categoria
  open (HEAD, "<include/ristoranti.head"); #apre il file per i
                                           #ristoranti
  print <HEAD>;                            #lo printa
  close HEAD;                              #e lo chiude
}
elsif($cat eq "agriturismi.txt")           #come sopra...
{
  open (HEAD, "<include/agriturismi.head");
  print <HEAD>;
  close HEAD;
}
elsif($cat eq "pizzerie.txt")
{
  open (HEAD, "<include/pizzerie.head");
  print <HEAD>;
  close HEAD;
}
elsif($cat eq "trattorie.txt")
{
  open (HEAD, "<include/trattorie.head");
  print <HEAD>;
  close HEAD;
}

open (FILE, "<database/$cat"); #apre il "database" della categoria
                               #selezionata
@array= <FILE>;                #mette tutto in un array
close FILE;                    #chiude il file
$nome=~ s/\+/ \.\*/;           #sostituisce tutti i + che erano nella
                               #stringa
                               #dell get con uno spazio
                               #in piu' controlla se prima e dopo del
                               #non ci sia almeno uno spazio
                               #per evitare che trovi il nome
                               #all'interno di 
                               #un'altra parola
                               #es. "bar" dentro "bartolo", questo non
                               #vogliamo che succeda
$elementi=@array;              #contra quanti elementi ci sono
                               #nell'array

print "La ricerca ha dato i seguenti risultati :<br>";
print "<hr>";

for ($i=0; $i<$elementi; $i++)          #inizia il ciclo per la ricerca
del nome
                                        #dentro l'array
{
  if (@array[$i] =~ m/$nome/i)          #contronta se l'elemento
                                        #dell'array e'
                                        #uguale a nome, /i e' per il
case
                                        #insensitive
  {
  push(@result, "@array[$i]" . "<br>"); #se e' uguale mette
                                        #quell'elemento 
                                        #dentro un altro array
  }                                     #e aggiunge un <br> per il
                                        #ritorno a capo
}

if(@result)                             #se l'array risultante contiene
                                        #qualcosa
{
    print @result;                      #allora printa tutto l'array
}
else
{
  print "nessuna voce trovata...";      #senno scrive "nessuna voce
                                        #trovata"
}

open (FOOT, "<include/foot.inc");       #apre il file per l'include del
                                        #footer della pagina
print <FOOT>;                           #lo printa
close FOOT;                             #e lo chiude


#se avete migliorie da fare, fate pure...

bau
-- 
"se dio fosse cosi` potente da aver creato il mondo senza far nulla per 
correggere i problemi, perche` mai dovremo adorarlo? non sarebbe piu` 
ragionevole processarlo?" Richard Stallman

Other related posts:

  • » [FLUG] search.cgi