BACHECA ELETTRONICA

© 1998 Briozzi Enrico, Manea Mirko
Live Ref.: http://arena.sci.univr.it/~manea/tele/bacheca.html

Sommario

  1. Il progetto
  2. Struttura della bacheca
  3. Gestione programmi CGI
  4. Interfaccia web - Oracle

1. IL PROGETTO

Si intende realizzare una bacheca elettronica, ovvero un mercatino su Internet gestito tramite interfaccia Web. Si vuole dare la possibilità di inserire annunci economici di varia natura (compro, vendo, affitto, etc…) e fornire anche un metodo veloce per la consultazione di tale banca dati.

2. STRUTTURA DELLA BACHECA

La bacheca si basa sull’accesso ad una base di dati relazionale (Oracle 7) tramite interfaccia CGI.

L’inserimento consiste in una pagine HTML in cui sono presenti alcuni form da compilare:

è possibile selezionare dal un menu di scelta multipla la voce che interessa (vendo, compro, affitto)

breve descrizione

rappresenta il termine entro il quale il messaggio viene rimosso automaticamente dal sistema. L’utente inserisce un numero di giorni di validità del messaggio e il sistema lo traduce in una data derivante da quella attuale aggiungendo i giorni indicati.

persona alla quale ci si può rivolgere per rispondere all’annuncio

serve per rappresentare l'oggetto in questione

 

Da notare che un apposito script Perl provvede giornalmente a controllare le date inserite nella tabella e a cancellare gli annunci che non sono più validi (data odierna maggiore della data memorizzata).

La ricerca negli annunci della bacheca, avviene tramite la selezione in un apposito form di un’area di interesse (eventualmente tutte) e attiva una ricerca su Oracle. Come risposta viene visualizzata tutta una serie di messaggi organizzati in tabelle.

3. GESTIONE PROGRAMMI CGI

Per la gestione degli script CGI, ci si appoggia ad una libreria del Perl, la CGI.pm, che fornisce degli strumenti sia per creare pagine con form per gli inserimenti di dati, sia per analizzare il contenuto di tali form.

Per creare una pagina HTML ci si puo' appoggiare quindi ad un set di funzioni perl predefinite, oltre ad avere la possibilità di inserire direttamente del codice html preparato in precedenza.

E' sufficiente istanziare un oggetto CGI, per poi utilizzare dei metodi che prelevano i parametri passati con metodo GET e/o POST:

# Utilizziamo la libreria CGI.pm

use CGI;

# Istanziamo un oggetto CGI

my $query = new CGI;

# Assegnamo alla variabile $test il parametro passato dal form

my $test = $query->param("test");

4. INTERFACCIA WEB - ORACLE

Per la memorizzazione degli annunci ci si avvale di una base di dati Oracle con il seguente schema:

TABLE BACHECA (

ID INTEGER,

PRIMARY KEY (ID),

AREA CHAR(20) NOT NULL,

MSG CHAR(200) NOT NULL,

SCADENZA DATE NOT NULL,

EMAIL CHAR(20) NOT NULL,

URL_IMG CHAR(80)

)

Gli script CGI che effettuano l’inserimento sono stati scritti in perl 5. Tale linguaggio si è prestato molto bene all'interazione tra l'interfaccia html e il database.

La gestione dell’acquisizione dati da perl risulta molto semplice, in quanto non vengono fatte distinzioni tra un passaggio di parametri di tipo GET e uno POST. Si è scelto comunque il passaggio di parametri di tipo POST dato che non è affetto dalle limitazioni sulla lunghezza delle stringhe che si possono inviare al server HTTP (poiché il passaggio avviene tramite variabili di ambiente).

La consultazione avviene tramite interrogazione SQL mediante l’inserimento dell’area di interesse:

SELECT * FROM BACHECA WHERE AREA = $area

Dove $area è l'area passata allo script CGI.

Le interrogazioni con Oracle avvengono tramite l’utilizzo della DBI (Data Base Interface) del Perl. Questa rappresenta uno strato di astrazione tra il driver del database (DBD) e le primitive utilizzate per colloquiare con il DBMS (allo stesso modo con cui una open() rappresenta una operazione di apertura file su un filesystem in un modella a VFS).

In questo modo otteniamo che semplicemente modificando il tipo di base di dati (Oracle, Informix, DB2, etc..) riusciamo a lasciare inalterato il codice CGI.

Il codice per la gestione del database, si riduce quindi alla semplice gestione del perl:

my $database = "apollo"; # l’istanza del nostro Oracle

my $user = "utente";

my $password = "password";

my $dbtype = "Oracle"; # si specifica di caricare il driver per Oracle

# apriamo la connessione

my $dbh = DBI->connect($database, $user, $password, $dbtype);

# query da eseguire

my $comando = "SELECT * FROM BACHECA WHERE AREA = $area";

# prepariamo l’interrogazione

my $sth = $dbh->prepare($comando);

# eseguiamo la query

my $rc = $sth->execute;

# estraiamo le tuple ritornate

while ( ($area, $mesg, $email, $url) = $sth->fetchrow() )

{

print ("L’area $area contiene il messaggio $mesg.\n");

print ("Vi potete rivolgere a $email\n");

print ("Se ne volete sapere di più cliccare su <A HREF="$url">$url</A>"\n);

}

# Chiudiamo la connessione al DBMS

$sth->finish;


Codice disponibile: bacheca.tar.gz
Per provare la bacheca: http://chrome.sci.univr.it:9999/~in000071/bacheca [non più on-line]
Requisiti: Interprete Perl 5 e DBMS Oracle 7