1. Università degli studi di Trieste
Tesi di laurea triennale in ingegneria informatica
Progettazione e sviluppo di un’applicazione per
commercio elettronico
Laureando Relatore
Fabiano Dalla Piazza Preg.mo prof.Maurizio Fermeglia
Anno accademico 2011-12
2. tesi di laurea triennale in ingegneria informatica
Introduzione
Questa tesi si occupa della costruzione,strutturazione e realizzazione di un’applicazione
per commercio elettronico. Consentirà agli utenti di visualizzare dei prodotti,di selezionarli
o restituirli se precedentemente scelti,infine di riceverli con relativa fatturazione.
Ciò che ci si prefigge è ideare una struttura informativa commerciale replicabile in scala e
potenzialmente remunerativa.
La causa scatenante è il desiderio di apprendere una metodologia per fabbricare un’utile
strumento di business potenzialmente estendibile.Tuttavia si è generata dalle esigenze di
una commercializzazione artigianale di tipo familiare.
Il commercio on-line è in continuo incremento.Si prevedono ulteriori espansioni future.Le
potenzialità sono causate dai principali fattori di comodità e convenienza economica(meno
code,meno viaggi,meno tempo perso e il tempo è denaro,riduzione della catena di
intermediazione commerciale,minor sovrapprezzo). Le attuali soluzioni modulari dei carrelli
preimpostati vanno inseriti e integrati in un sistema che non è specializzato a tal fine. Le
proposte più “compatte” prevedono la delega della gestione mediante pagamento di un
canone periodico piuttosto elevato,se raffrontato con i costi di gestione(hosting,
aggiornamenti). Questi si ammortizzano sulla quantità di siti amministrati. Tuttavia tali costi
sono inevitabilmente destinati a scendere a ragione di un maggior numero di competitori.
L’alternativa è scaricare un pacchetto software configurato,ma personalizzabile in base ai
prodotti. E’ il prodotto di questo progetto.
Ci si pongono delle tappe progressive per lo sviluppo del progetto riassumibili nei seguenti
punti:
Raccolta requisiti:i dati caratteristici vengono rilevati ponendosi le domande su cosa
sia e come si comporti un sito di e-commerce. Punto di partenza empirico è una
simulazione di navigazione con ordinativi su un diffuso sito di commercio elettronico;
Analisi:partendo dal possesso dei requisiti si individuano gli oggetti e le entità
fondamentali componenti il sistema e si studia la loro interazione;
Progettazione:si escogita il sistema basandosi sull’analisi precedentemente svolta;
Realizzazione:sfruttando la conoscenza delle tecnologie attuali si sceglie la migliore
soluzione fattibile per la realizzazione separando l’interfaccia dall’implementazione;
Test:si effettuano i test per verificare la funzionalità e la giustezza del risultato;
Porting in produzione:si attua l’esportazione del prodotto.
Vengono selezionati come sistema operativo Windows nella versione 7 perché in
dotazione all’autore,Mysql come RDBMS e utilizzati moduli in .php per fornire script di
elaborazione o pagine vere e proprie del sito,eventualmente corredato da delle include di
libreria in formato .txt ,.inc.Le motivazioni di questa scelta verranno spiegate nella fase
finale.
1. Analisi e progettazione
progettazione e sviluppo di un’applicazione per commercio elettronico 2
3. tesi di laurea triennale in ingegneria informatica
1. Requisiti:l’utente che si connette al sito naviga tra i prodotti,ne visualizza le
caratteristiche ed eventuali commenti di altri utenti. Può aggiungere un prodotto,toglierlo e
monitorare il materiale in ordinazione in ogni momento. Quando ha terminato la propria
spesa, invia i dati di fatturazione e spedizione con codice criptato,li verifica, sceglie la
modalità preferita di pagamento, lo esegue,e ne constata il successo o meno. L’utente
viene avvisato sullo stato dell’ordine.Il sistema segnala errori qualora si verifichino. E’
possibile richiedere un aiuto. Il sistema rileva se l’utente è già registrato e deve garantire
l’incolumità e la privatezza dei dati. Deve inoltre possedere facilità d’uso(aiuto),
semplicità,scalabilità,robustezza e deve essere diffondibile commercialmente(parole
chiave).
2. Analisi:il sistema consente di interagire con pagine diverse in tempi diversi.Gli utenti
giunti nel sito opereranno indifferentemente con la pagina dei prodotti che acquisteranno o
quella del carrello della spesa,da cui controlleranno l’ordine e eventualmente lo
modificheranno. L’utente può navigare come registrato. Esaminato il riepilogo d’ordine
finale il sistema chiederà il riconoscimento dell’utente;se egli è già registrato i suoi dati
sono già presenti,altrimenti se ne richiederà l’iscrizione. Se soddisfatti dei propri
acquisti,gli utenti pagheranno,inserendo le informazioni di utente,spedizione e pagamento.
Se la transazione riesce e l’ordine è accettato,l’utente ne riceve comunicazione tramite
una pagina. Accedendo dalla home page è possibile individuare degli strati gerarchici di
navigazione,ovviamente percorribili anche in direzione down-up. La segnalazione di errori
può verificarsi in ogni posizione e in questi schemi viene omessa.
PRIMO STRATO:ACCESSO DALLA HOME PAGE(fig.1):si possono visualizzare i
prodotti,richiedere un aiuto,visualizzare il contenuto del carrello tramite il mostra
carrello;da questo si può ritornare a visionare i prodotti e effettuare il saldo;dopo l’aiuto è
possibile rivedere i prodotti.
DALLA RETE::
DALLA RETE
HOME PAGE
MOSTRA PRODOTTI MOSTRA CARRELLO AIUTO
SALDO MOSTRA CARRELLO MOSTRA PRODOTTI
Figura 1
SECONDO STRATO(fig.2):provenendo dal primo strato si possono raggiungere la fase
mostra prodotti in cui si possono selezionare gli articoli aggiungendoli o togliendoli,qualora
si percorra la gerarchia al contrario e controllare il contenuto del carrello;oppure si
controlla se il cliente è registrato oppure no;se sì è possibile controllare le informazioni di
spedizione;altrimenti queste si possono inserire una volta che ci si è iscritti.
progettazione e sviluppo di un’applicazione per commercio elettronico 3
4. tesi di laurea triennale in ingegneria informatica
DAL PRIIMO STRATO::
DAL PR MO STRATO
MOSTRA PRODOTTI AGGIUNGI/TOGLI MOSTRA CARRELLO
UTENTE REGISTRATO INFORMAZIONI SPEDIZIONE
Figura 2
TERZO STRATO(fig. 3):provenendo dal secondo livello ci si accerta delle informazioni
utente,di spedizione o pagamento e passare indifferentemente da una all’altra;inoltre è
sempre possibile sincerarsi del dettaglio ordine.
DAL SECONDO STRATO::
DAL SECONDO STRATO
INFORMAZIONI UTENTE INFORMAZIONI SPEDIZIONE DETTAGLIO ORDINE
INFORMAZIONI SPEDIZIONE INFORMAZIONI PAGAMENTO DETTAGLIO ORDINE
INFORMAZIONI PAGAMENTO DETTAGLIO ORDINE
Figura 3
QUARTO STRATO(fig. 4):dopo aver verificato l’ordine lo si può effettuare o
controllare/modificare le informazioni inserite e poi eseguire l’ordine;quindi si constata il
successo di questo;oppure si può uscire con un menu esterno al carrello e tornare a
visualizzare i prodotti.
DAL TERZO STRATO::
DAL TERZO STRATO
progettazione e sviluppo di un’applicazione per commercio elettronico 4
5. tesi di laurea triennale in ingegneria informatica
DETTAGLIO ORDINE INFORMAZIONI UTENTE INFORMAZIONI SPEDIZIONE
INFORMAZIONI PAGAMENTO
SUCCESSO
SUCCESSO ORDINE APPROVATO
MENU ESTERNO MOSTRA PRODOTTI MOSTRA CARRELLO
AIUTO
Figura 4
I settori da esaminare nell’applicativo sono:
Struttura:la struttura deve essere supportata da un database che contempla tre ordini
di gestioni:lista prodotti,una lista temporanea o carrello e acquisti o lista ordinativi.
Sicurezza dei dati:rappresenta la parte delicata dell’applicativo. I dati delle carte di
credito vanno trasmessi in modo codificato. Memorizzarli sul server significa esporli in
una posizione pericolosa e soggetta ad attacchi;non farlo provoca all’utente il disagio di
dover ridigitare i dati ad ogni sessione di pagamento. Qui si è scelto di non
conservarne l’archivio storico per motivi che verranno esplicitati nelle conclusioni finali.
Per la crittografia è opportuno richiedere un certificato web(CA) e usare uno strato di
sicurezza(SSL) del protocollo di trasporto(livello 4 OSI).
Catalogo prodotti:è una lista degli articoli in vendita;l’utente li visualizza con tutte le
caratteristiche(titolo,autore,genere,etc.se è un libro;marca,tipo,etc.se è un
televisore,etc.).Lo scopo è di costruire un’infrastruttura di database scalabile ed
estendibile,non un database. In questo caso,esso conterrà una sola tipologia di
prodotto,cioè dei dischi in vinile,contraddistinti principalmente da
autore,titolo,genere,anno,etichetta.Acquisito il risultato finale,si potrà configurare il
sistema con qualsivogliano n prodotti appartenenti a x tipologie differenti,basandosi sui
numerosi esempi di database presenti in rete. L’ eventuale aggiunta di ulteriori tipologie
di prodotti arricchirà la sottocategoria della radice prodotti.
Carrello della spesa:è la lista contenente gli articoli da acquistare;se un articolo da
inserire non c’è,viene inserito;altrimenti viene incrementata la quantità dello stesso di
un’unità.Il sistema assegna un carrello diverso ad ogni utente e memorizza i dati di
questa sessione;a termine sessione si perdono i dati se non viene conclusa la
transazione,quindi non è previsto un archivio storico. Salvando la coppia carrello-
utente nel database si potrebbe assegnare lo stesso carrello all’utente in una sessione
diversa(con i cookies).Ciò comporterebbe una gestione più complessa,ma
consentirebbe anche la consultazione dell’archivio storico.Nelle conclusioni verranno
meglio specificate le motivazioni della scelta.
progettazione e sviluppo di un’applicazione per commercio elettronico 5
6. tesi di laurea triennale in ingegneria informatica
Informazioni:per concretizzare gli ordini servono tre tipi diversi di informazioni cioè di
utente,di spedizione e di pagamento;sul primo tipo sono essenziali nome e
cognome,indirizzo fisico e virtuale(E-mail),numero di telefono e password;sul secondo
tipo nome e indirizzo;sul terzo le modalità di pagamento;se si sceglie la carta di credito
la gestione dati viene affidata ad un esterno(vedi la voce Pagamenti sotto),altrimenti
sono previsti contrassegno o bonifico bancario che prevedono il pagamento off-line.
Pagamenti:avere un server dedicato per questo genere di elaborazioni presuppone
una dimensione rilevante dovuta al costo,alla manutenzione e gestione. Delegando la
gestione dei pagamenti ad un provider esterno si superano questi problemi. E’
necessario quindi avvalersi di un account da un fornitore di servizi bancari e integrare i
moduli e le librerie installandoli nel proprio sistema.
Ordini:ogni ordine è un’ entità,ha suo progressivo ed è corredato dalle informazioni
dell’importo di ogni singola voce(prodotto x,prodotto y,spedizione,tasse). La
registrazione dell’ordine nel database avviene dopo la conferma del
pagamento.Questa ha un numero d’ordine che viene memorizzato e aggiorna lo stato
dell’ordine.Quindi si comunica tramite E-mail il successo o meno dell’operazione.
Elementi dell’ordine:si stabilisce un’entità che possiede un’identificatore per ogni
elemento del catalogo e il suo prezzo unitario.Questi vengono poi associati
all’identificativo dell’ordine assieme alla quantità prescelta.
LAYOUT DELLE PAGINE
Attraverso gli schemi dei 4 strati e i settori studiati si giunge al seguente schema che
esplicita il layout delle pagine.Da questo si ricaveranno i moduli delle pagine o maschere
nella fase successiva di progettazione.Si può giungere alla pagina di errore da una
qualunque pagina qualora se ne riscontri uno.Anche gli aiuti sono raggiungibili dalla quasi
totalità delle pagine.La home page è la pagina principale da cui si accede;da essa si può
arrivare nella pagina dei prodotti,in quella del carrello o in quella del saldo.Da questa si
raggiunge la pagina utente se egli è riconosciuto dal sistema,altrimenti si viene indirizzati
alla pagina nuovo utente da cui si accede poi a quest’ultima,terminata l’acquisizione
corretta dei dati.Seguono poi l’inserimento dei dati di spedizione e pagamento e infine il
resoconto finale dell’ordine che culmina con il completamento ordine e il suo eventuale
successo comunicato all’utente.Quindi è possibile ritornare alla home page.Naturalmente
è possibile saltare indifferentemente tra ciascuna fase
dati(spedizione,utente,pagamento)purché le informazioni vengano inserite tutte.Lo
schema è rappresentato nella figura 5.
progettazione e sviluppo di un’applicazione per commercio elettronico 6
7. tesi di laurea triennale in ingegneria informatica
HOME PAGE
AIUTO PRODOTTI CARRELLO SALDO ERRORE
NUOVO UTENTE UTENTE
SPEDIZIONE
PAGAMENTO
DETTAGLIO ORDINE
ORDINE COMPLETATO
PAGINA WEB SUCCESSO ORDINE
Figura 5
Quindi si individuano le seguenti pagine necessarie:
• Home page(HOME):la pagina di inizio navigazione,la root directory;
• Aiuto(AIUTO):la pagina di informazioni per assistere l’utente;
• Errore(ERRORE):la pagina per visualizzare gli errori;
• Mostra prodotti(MOSTRAPRO):la pagina di visualizzazione dei prodotti da cui si
selezionano i prodotti;
• Mostra carrello(MOSTRACAR):la pagina di visualizzazione del contenuto dell’ordine
in tempo reale;l’utente sceglie se completare l’ordine o modificarlo;
• Saldo o checkout(SALDO):la pagina iniziale della procedura di pagamento da cui
effettuare il login se si è utenti iscritti o iscriversi come nuovi utenti;
• Informazioni utente(INFOUT):la pagina dove vengono inseriti i dati personali
dell’acquirente;
progettazione e sviluppo di un’applicazione per commercio elettronico 7
8. tesi di laurea triennale in ingegneria informatica
• Informazioni spedizione(INFOSPED):la pagina dove vengono inserite le informazioni
riguardanti l’invio delle merci comprate;
• Informazioni pagamento(INFOPAG):la pagina dove vengono inserite le informazioni
di pagamento,compresi gli estremi delle carte di credito;
• Dettaglio ordine(DETORD):la pagina che riassume l’acquisto,consultabile dall’utente
prima dello stesso;
• Successo(SUCCESSO):la pagina di conferma ordine quando è terminato.
DATABASE
Bisogna scegliere il motore di memorizzazione,ma ciò verrà attuato nella fase successiva.
Si identificano due strati,il primo concerne l’infrastruttura vera e propria adattabile ad un
qualunque negozio x,il secondo è riferito a questo particolare esempio comprensivo del
catalogo dischi.In figura 6 è riportato lo schema E-R dell’applicativo.Le due strutture
generica e particolare sono suddivise.La root directory del negozio è la tabella
prodotto,che in questo caso particolare coincide con la tabella album,poiché in questo
esempio si è scelto di vendere esclusivamente dischi.Se si desiderano vendere una
molteplicità di prodotti,la tabella prodotto fungerà da tabella radice da cui partire per
ramificare tutti gli articoli che si venderanno.Viene inoltre introdotta una tabella opzionale
carte di credito creata per effettuare la simulazione di un pagamento e testare la
correttezza del prodotto finale,ma non prevista nel prodotto finale dell’applicativo.
Infatti,come già scritto precedentemente,le procedure dei pagamenti saranno affidati ad
esterni.Le tabelle dell’infrastruttura prevedono un ordine(tabella ordine) composto da tot
articoli che ne costituiscono gli elementi(tabella elementi ordine),uno status
dell’ordine(tabella status ordine) che ne indica lo stato di avanzamento e un’utente(tabella
utente),cui questo ordine è associato. Il prodotto venduto che è in questo caso sempre un
album(tabella album) appartiene ad un genere musicale(tabella genere),è stato inciso da
uno o più artisti(tabella artista) e ed è prodotto da un’etichetta o casa discografica(tabella
etichetta).Il rapporto numerico tra tabelle è comunque indicato nello schema.
progettazione e sviluppo di un’applicazione per commercio elettronico 8
9. tesi di laurea triennale in ingegneria informatica
(1,N) ORDIINE
ORD NE (1,1)
(1,N)
VERIIFIICA
VER F CA COMPOSIIZIIONE
COMPOS Z ONE ASSOCIIAZIIONE
ASSOC AZ ONE
(1,N) (1,N) (1,N)
STATUS
STATUS ELEMENTII
ELEMENT UTENTE
UTENTE
ORDIINE
ORD NE ORDIINE
ORD NE
(1,N)
IINFRASTRUTTURA
NFRASTRUTTURA IINFRASTRUTTURA
NFRASTRUTTURA
SCELTA
SCELTA
ESEMPIIO DIISCHII
ESEMP O D SCH ESEMPIIO DIISCHII
ESEMP O D SCH
(1,N)
(1,N) PRODOTTO=
PRODOTTO= (1,1)
ALBUM
ALBUM
(1,1)
IINCIIDE
NC DE POSSIIEDE
POSS EDE PRODOTTO
PRODOTTO
(1,N) (1,N) (1,N)
ARTIISTA
ART STA GENERE
GENERE ETIICHETTA
ET CHETTA
Figura 6
Nella successiva figura 7 è invece rappresentata la costruzione delle tabelle comprensiva
dei campi,chiavi primarie,chiavi esterne e i collegamenti tra loro.
progettazione e sviluppo di un’applicazione per commercio elettronico 9
10. tesi di laurea triennale in ingegneria informatica
STATUSOR
STATUSOR
STATUSOR ORDIIINE
ORD N E
ORD NE UTENTIII
UTENT
UTENT
1 1 1
PK
PK
PK IIID_STATUS
D _STATUS
D_STATUS PK
PK
PK IIID_ALBUM
D _ALBUM
D_ALBUM PK
PK
PK IIID_UTENTE
D _UTENTE
D_UTENTE
N
STATO
STATO
STATO FK
FK
FK IIID_ST
D _ST
D_ST NOME
NOME
NOME
N
FK
FK
FK IIID_UT
D _UT
D_UT AZIIIENDA
AZ E NDA
AZ ENDA
NOME_SPED
NOME_SPED
NOME_SPED IIINDIIIRIIIZZO1
N D R Z ZO1
ND R ZZO1
AZIIIENDA_SPED
AZ E NDA_SPED
AZ ENDA_SPED IIINDIIIRIIIZZO2
N D R Z ZO2
ND R ZZO2
IIINDIIIRIIIZZO1_SPED
N D R Z ZO1_SPED
ND R ZZO1_SPED CIIITTA’’’
C T TA
C TTA
ELORD
ELORD
ELORD IIINDIIIRIIIZZO 2_SPED
N D R Z Z O 2 _ SPED
ND R ZZO 2_SPED STATO
STATO
STATO
PK
PK
PK IIID_ELORD
D _ELORD
D_ELORD CIIITTA’’’_SPED
C T TA _ SPED
C TTA _SPED CAP
CAP
CAP
N
FK
FK
FK IIID_ORD
D _ORD
D_ORD STATO_SPED
STATO_SPED
STATO_SPED NAZIIIONE
NAZ O NE
NAZ ONE
FK
FK
FK IIID_ALB
D _ALB
D_ALB CAP_SPED
CAP_SPED
CAP_SPED TELEFONO
TELEFONO
TELEFONO
N
PREZZO
PREZZO
PREZZO NAZIIIONE_SPED
NAZ O NE_SPED
NAZ ONE_SPED EMAIIIL
EMA L
EMA L
PEZZIII
PEZ Z
PEZ Z TELEFONO_SPED
TELEFONO_SPED
TELEFONO_SPED PASSW ORD
PASSW ORD
PASSW ORD
COSTO_ORD
COSTO_ORD
COSTO_ORD
COSTO_SPED
COSTO_SPED
COSTO_SPED
COSTO_TOTALE
COSTO_TOTALE
COSTO_TOTALE
TIIIPO_PAGAMENTO
T P O_PAGAMENTO
T PO_PAGAMENTO
CONFERMA_PAGA
CONFERMA_PAGA
CONFERMA_PAGA
STATO_ORDIIINE
STATO_ORD N E
STATO_ORD NE
ESECUTORE_ORD
ESECUTORE_ORD
ESECUTORE_ORD
IINFRASTRUTTURA
NFRASTRUTTURA
ESEMPIIO DIISCHII
ESEMP O D SCH
PRODOTTO=ALBUM
PRODOTTO=ALBUM
PRODOTTO=ALBUM
1
ARTIIISTA
ART S TA
ART STA PK
PK
PK IIID_ALBUM
D _ALBUM
D_ALBUM
1 N
PK
PK
PK IIID_ART
D _ART
D_ART FK
FK
FK IIID_ARTIIISTA
D _ART S TA
D_ART STA ETIIICHETTA
ET C HETTA
ET CHETTA
N 1
NOME
NOME
NOME FK
FK
FK IIID_ETIIICHETTA
D _ET C HETTA
D_ET CHETTA PK
PK
PK IIID_ETIII
D _ET
D_ET
N
FK
FK
FK IIID_GENERE
D _GENERE
D_GENERE NOME
NOME
NOME
TIIITOLO
T T OLO
T TOLO
GENERE
GENERE
GENERE DESCRIIIZIIIONE
DESCR Z O NE
DESCR Z ONE
1
PK
PK
PK IIID_GEN
D _GEN
D_GEN IIIMMAGIIINE
M MAG N E
MMAG NE
NOME
NOME
NOME PREZZO
PREZZO
PREZZO
LEGENDA:::
LEGENDA
LEGENDA
ENTIIITY
ENT T Y
ENT TY IIID_FIIIELD
D _F E LD
D_F ELD PRIIIMARY KEY
PR M ARY KEY
PR MARY KEY
FOREIIIGN KEY
FORE G N KEY
FORE GN KEY FIIIELD
F E LD
F ELD
Figura 7
progettazione e sviluppo di un’applicazione per commercio elettronico 10
11. tesi di laurea triennale in ingegneria informatica
Quindi si esplicitano le tabelle(dalla 1 alla 5 sono dell’infrastruttura;dalla 6 alla 9 sono
dell’esempio) e i loro contenuti secondo il seguente schema:
TABELLA ELORD(ELEMENTI ORDINE)
PRIIIMARY KEY
PR M ARY KEY
PR MARY KEY IIID_ELORD
D _ELORD
D_ELORD CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII..
CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER .
CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER
FOREIIIGN KEY
FORE G N KEY
FORE GN KEY IIID_ORD
D _ORD
D_ORD CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZIIIAZIIIONE CON LA
CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZ A Z O NE CON LA
CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZ AZ ONE CON LA
TABELLA ORDIIINE...IINTERIII NON NULLIII..
TABELLA ORD N E IN TER NON NULL .
TABELLA ORD NE NTER NON NULL
FOREIIIGN KEY
FORE G N KEY
FORE GN KEY IIID_ALB
D _ALB
D_ALB CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZIIIAZIIIONE CON LA
CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZ A Z O NE CON LA
CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZ AZ ONE CON LA
TABELLA ALBUM((PRODOTTO))..IINTERIII NON NULLIII..
TABELLA ALBUM(P RODOTTO).IN TER NON NULL .
TABELLA ALBUM PRODOTTO NTER NON NULL
FIIIELD
F E LD
F ELD PREZZO
PREZZO
PREZZO CAMPO:::STRIIINGA NUMERIIICA <=6CARATTERIII+2 DECIIIMALIII NON NULLA...
CAMPO S TR N GA NUMER C A <=6CARATTER + 2 DEC M AL NON NULLA
CAMPO STR NGA NUMER CA <=6CARATTER +2 DEC MAL NON NULLA
FIIIELD
F E LD
F ELD PEZZIII
PEZZ
PEZZ CAMPO:::STRIIINGA NUMERIIICA <=4 CARATTERIII CON IIINTERIII NON NULLIII..
CAMPO S TR N GA NUMER C A <=4 CARATTER CON N TER NON NULL .
CAMPO STR NGA NUMER CA <=4 CARATTER CON NTER NON NULL
Tabella 1
TABELLA ORDINE
PRIIIMARY KEY
PR M ARY KEY
PR MARY KEY IIID_ORDIIINE
D _ORD N E
D_ORD NE CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII..
CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER .
CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER
FOREIIIGN KEY
FORE G N KEY
FORE GN KEY IIID_UT
D _UT
D_UT CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZIIIAZIIIONE CON LA
CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZ A Z O NE CON LA
CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZ AZ ONE CON LA
TABELLA UTENTE...IINTERIII NON NULLIII..
TABELLA UTENTE IN TER NON NULL .
TABELLA UTENTE NTER NON NULL
FOREIIIGN KEY
FORE G N KEY
FORE GN KEY IIID_ST
D _ST
D_ST CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZIIIAZIIIONE CON LA
CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZ A Z O NE CON LA
CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZ AZ ONE CON LA
TABELLA STATUS_OR((STATO DELL’’ORDIIINE))..IINTERIII NON NULLIII..
TABELLA STATUS_OR(S TATO DELL ’ORD N E).IN TER NON NULL .
TABELLA STATUS_OR STATO DELL ORD NE NTER NON NULL
FIIIELD
F E LD
F ELD NOME_SPED
NOME_SPED
NOME_SPED CAMPO:::STRIIINGA ALFANUMERIIICA <=120 CARATTERIII NON NULLIII..
CAMPO S TR N GA ALFANUMER C A <=120 CARATTER NON NULL .
CAMPO STR NGA ALFANUMER CA <=120 CARATTER NON NULL
FIIIELD
F E LD
F ELD AZIIIENDA_SPED
AZ E NDA_SPED
AZ ENDA_SPED CAMPO:::STRIIINGA ALFANUMERIIICA <=140 CARATTERIII..
CAMPO S TR N GA ALFANUMER C A <=140 CARATTER .
CAMPO STR NGA ALFANUMER CA <=140 CARATTER
FIIIELD
F E LD
F ELD IIINDIIIRIIIZZO1_SPE
N D R Z ZO1_SPE
ND R ZZO1_SPE CAMPO:::STRIIINGA ALFANUMERIIICA <=150 CARATTERIII NON NULLIII..
CAMPO S TR N GA ALFANUMER C A <=150 CARATTER NON NULL .
CAMPO STR NGA ALFANUMER CA <=150 CARATTER NON NULL
DD
D
FIIIELD
F E LD
F ELD IIINDIIIRIIIZZO2_SPE
N D R Z ZO2_SPE
ND R ZZO2_SPE CAMPO:::STRIIINGA ALFANUMERIIICA <=150 CARATTERIII NON NULLIII..
CAMPO S TR N GA ALFANUMER C A <=150 CARATTER NON NULL .
CAMPO STR NGA ALFANUMER CA <=150 CARATTER NON NULL
DD
D
FIIIELD
F E LD
F ELD CIIITTA’’_SPED
C T TA ’_SPED
C TTA _SPED CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII..
CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL .
CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL
FIIIELD
F E LD
F ELD STATO _SPED
STATO _SPED
STATO _SPED CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII..
CAMPO S TR N GA ALFANUMER C A <=100 CARATTER .
CAMPO STR NGA ALFANUMER CA <=100 CARATTER
FIIIELD
F E LD
F ELD CAP_SPED
CAP_SPED
CAP_SPED CAMPO:::STRIIINGA NUMERIIICA =10 CARATTERIII IIINTERIII NON NULLIII..
CAMPO S TR N GA NUMER C A =10 CARATTER N TER NON NULL .
CAMPO STR NGA NUMER CA =10 CARATTER NTER NON NULL
FIIIELD
F E LD
F ELD NAZIIIONE_SPED
NAZ O NE_SPED
NAZ ONE_SPED CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII..
CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL .
CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL
FIIIELD
F E LD
F ELD TELEFONO_SPE
TELEFONO_SPE
TELEFONO_SPE CAMPO:::STRIIINGA NUMERIIICA <=20 CARATTERIII IIINTERIII NON NULLIII..
CAMPO S TR N GA NUMER C A <=20 CARATTER N TER NON NULL .
CAMPO STR NGA NUMER CA <=20 CARATTER NTER NON NULL
DD
D
FIIIELD
F E LD
F ELD COSTO_ORDIIINE
COSTO_ORD N E
COSTO_ORD NE CAMPO:::STRIIINGA NUMERIIICA <=6CARATTERIII+2 DECIIIMALIII NON NULLA...
CAMPO S TR N GA NUMER C A <=6CARATTER + 2 DEC M AL NON NULLA
CAMPO STR NGA NUMER CA <=6CARATTER +2 DEC MAL NON NULLA
FIIIELD
F E LD
F ELD COSTO_SPED
COSTO_SPED
COSTO_SPED CAMPO:::STRIIINGA NUMERIIICA <=6CARATTERIII+2 DECIIIMALIII NON NULLA...
CAMPO S TR N GA NUMER C A <=6CARATTER + 2 DEC M AL NON NULLA
CAMPO STR NGA NUMER CA <=6CARATTER +2 DEC MAL NON NULLA
FIIIELD
F E LD
F ELD COSTO_TOTALE
COSTO_TOTALE
COSTO_TOTALE CAMPO:::STRIIINGA NUMERIIICA <=6CARATTERIII+2 DECIIIMALIII NON NULLA...
CAMPO S TR N GA NUMER C A <=6CARATTER + 2 DEC M AL NON NULLA
CAMPO STR NGA NUMER CA <=6CARATTER +2 DEC MAL NON NULLA
FIIIELD
F E LD
F ELD TIIIPO_PAGAMEN
T P O_PAGAMEN
T PO_PAGAMEN CAMPO:::STRIIINGA ALFANUMERIIICA <=50 CARATTERIII NON NULLIII..
CAMPO S TR N GA ALFANUMER C A <=50 CARATTER NON NULL .
CAMPO STR NGA ALFANUMER CA <=50 CARATTER NON NULL
TO
TO
TO
FIIIELD
F E LD
F ELD CONFERMA_PA
CONFERMA_PA
CONFERMA_PA CAMPO:::STRIIINGA ALFANUMERIIICA <=80 CARATTERIII NON NULLIII..
CAMPO S TR N GA ALFANUMER C A <=80 CARATTER NON NULL .
CAMPO STR NGA ALFANUMER CA <=80 CARATTER NON NULL
GA
GA
GA
FIIIELD
F E LD
F ELD STATO_ORDIIINE
STATO_ORD N E
STATO_ORD NE CAMPO:::STRIIINGA ALFANUMERIIICA CARATTERIII NON NULLIII..
CAMPO S TR N GA ALFANUMER C A CARATTER NON NULL .
CAMPO STR NGA ALFANUMER CA CARATTER NON NULL
FIIIELD
F E LD
F ELD ESECUTORE_O
ESECUTORE_O
ESECUTORE_O CAMPO:::STRIIINGA ALFANUMERIIICA <=80 CARATTERIII..
CAMPO S TR N GA ALFANUMER C A <=80 CARATTER .
CAMPO STR NGA ALFANUMER CA <=80 CARATTER
RD
RD
RD
Tabella 2
TABELLA STATUSOR
PRIIIMARY KEY
PR M ARY KEY
PR MARY KEY IIID_STATUS
D _STATUS
D_STATUS CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII..
CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER .
CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER
FIIIELD
F E LD
F ELD STATO
STATO
STATO CAMPO:::STRIIINGA ALFANUMERIIICA <=50 CARATTERIII NON NULLIII..
CAMPO S TR N GA ALFANUMER C A <=50 CARATTER NON NULL .
CAMPO STR NGA ALFANUMER CA <=50 CARATTER NON NULL
Tabella 3
TABELLA UTENTI
PRIIIMARY KEY
PR M ARY KEY
PR MARY KEY IIID_UTENTE
D _UTENTE
D_UTENTE CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII..
CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER .
CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER
FIIIELD
F E LD
F ELD NOME
NOME
NOME CAMPO:::STRIIINGA ALFANUMERIIICA <=120 CARATTERIII NON NULLIII..
CAMPO S TR N GA ALFANUMER C A <=120 CARATTER NON NULL .
CAMPO STR NGA ALFANUMER CA <=120 CARATTER NON NULL
FIIIELD
F E LD
F ELD AZIIIENDA
AZ E NDA
AZ ENDA CAMPO:::STRIIINGA ALFANUMERIIICA <=140 CARATTERIII..
CAMPO S TR N GA ALFANUMER C A <=140 CARATTER .
CAMPO STR NGA ALFANUMER CA <=140 CARATTER
FIIIELD
F E LD
F ELD IIINDIIIRIIIZZO1
N D R Z ZO1
ND R ZZO1 CAMPO:::STRIIINGA ALFANUMERIIICA <=150 CARATTERIII NON NULLIII..
CAMPO S TR N GA ALFANUMER C A <=150 CARATTER NON NULL .
CAMPO STR NGA ALFANUMER CA <=150 CARATTER NON NULL
FIIIELD
F E LD
F ELD IIINDIIIRIIIZZO2
N D R Z ZO2
ND R ZZO2 CAMPO:::STRIIINGA ALFANUMERIIICA <=150 CARATTERIII NON NULLIII..
CAMPO S TR N GA ALFANUMER C A <=150 CARATTER NON NULL .
CAMPO STR NGA ALFANUMER CA <=150 CARATTER NON NULL
FIIIELD
F E LD
F ELD CIIITTA’’’
C T TA
C TTA CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII..
CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL .
CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL
FIIIELD
F E LD
F ELD STATO
STATO
STATO CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII..
CAMPO S TR N GA ALFANUMER C A <=100 CARATTER .
CAMPO STR NGA ALFANUMER CA <=100 CARATTER
FIIIELD
F E LD
F ELD CAP
CAP
CAP CAMPO:::STRIIINGA NUMERIIICA =10 CARATTERIII IIINTERIII NON NULLIII..
CAMPO S TR N GA NUMER C A =10 CARATTER N TER NON NULL .
CAMPO STR NGA NUMER CA =10 CARATTER NTER NON NULL
FIIIELD
F E LD
F ELD NAZIIIONE
NAZ O NE
NAZ ONE CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII..
CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL .
CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL
FIIIELD
F E LD
F ELD TELEFONO
TELEFONO
TELEFONO CAMPO:::STRIIINGA NUMERIIICA <=20 CARATTERIII IIINTERIII NON NULLIII..
CAMPO S TR N GA NUMER C A <=20 CARATTER N TER NON NULL .
CAMPO STR NGA NUMER CA <=20 CARATTER NTER NON NULL
FIIIELD
F E LD
F ELD EMAIIIL
EMA L
EMA L CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII..
CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL .
CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL
FIIIELD
F E LD
F ELD PASSWORD
PASSWORD
PASSWORD CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII CONTENENTIII ““@””..
CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL CONTENENT “@ ”.
CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL CONTENENT @
Tabella 4
Tabella 5
progettazione e sviluppo di un’applicazione per commercio elettronico 11
12. tesi di laurea triennale in ingegneria informatica
INFRASTRUTTURA
ESEMPIO DISCHI
TABELLA ALBUM(=PRODOTTI)
PRIIIMARY KEY
PR M ARY KEY
PR MARY KEY IIID_ALBUM
D _ALBUM
D_ALBUM CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII..
CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER .
CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER
FOREIIIGN KEY
FORE G N KEY
FORE GN KEY IIID_ARTIIISTA
D _ART S TA
D_ART STA CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZAZIIIONE CON LA TABELLA
CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZAZ O NE CON LA TABELLA
CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZAZ ONE CON LA TABELLA
ARTIIISTA...IINTERIII NON NULLIII..
ART S TA IN TER NON NULL .
ART STA NTER NON NULL
FOREIIIGN KEY
FORE G N KEY
FORE GN KEY IIID_ETIIICHETTA
D _ET C HETTA
D_ET CHETTA CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZAZIIIONE CON LA TABELLA
CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZAZ O NE CON LA TABELLA
CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZAZ ONE CON LA TABELLA
ETIIICHETTA...IINTERIII NON NULLIII..
ET C HETTA IN TER NON NULL .
ET CHETTA NTER NON NULL
FOREIIIGN KEY
FORE G N KEY
FORE GN KEY IIID_GENERE
D _GENERE
D_GENERE CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZAZIIIONE CON LA TABELLA
CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZAZ O NE CON LA TABELLA
CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZAZ ONE CON LA TABELLA
GENERE...IINTERIII NON NULLIII..
GENERE IN TER NON NULL .
GENERE NTER NON NULL
FIIIELD
F E LD
F ELD IIIMMAGIIINE
M MAG N E
MMAG NE CAMPO:::STRIIINGA ALFANUMERIIICA <=50 CARATTERIII NON NULLIII.. CONTIIIENE IIIL NOME
CAMPO S TR N GA ALFANUMER C A <=50 CARATTER NON NULL . CONT E NE L NOME
CAMPO STR NGA ALFANUMER CA <=50 CARATTER NON NULL CONT ENE L NOME
DELL’’IIIMMAGIIINE IIIN FORMATO ...JPG...
DELL ’ M MAG N E N FORMATO J PG
DELL MMAG NE N FORMATO JPG
FIIIELD
F E LD
F ELD DESCRIIIZIIIONE
DESCR Z O NE
DESCR Z ONE CAMPO:::STRIIINGA DESCRIIITTIIIVA DIII TESTO...
CAMPO S TR N GA DESCR T T V A D TESTO
CAMPO STR NGA DESCR TT VA D TESTO
FIIIELD
F E LD
F ELD TIIITOLO
T T OLO
T TOLO CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII..
CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL .
CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL
FIIIELD
F E LD
F ELD PREZZO
PREZZO
PREZZO CAMPO:::STRIIINGA NUMERIIICA <=6CARATTERIII+2 DECIIIMALIII NON NULLA...
CAMPO S TR N GA NUMER C A <=6CARATTER + 2 DEC M AL NON NULLA
CAMPO STR NGA NUMER CA <=6CARATTER +2 DEC MAL NON NULLA
Tabella 6
TABELLA ARTISTA
PRIIIMARY KEY
PR M ARY KEY
PR MARY KEY IIID_ART
D _ART
D_ART CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII..
CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER .
CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER
FIIIELD
F E LD
F ELD NOME
NOME
NOME CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII..
CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL .
CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL
Tabella 7
TABELLA ETICHETTA
PRIIIMARY KEY
PR M ARY KEY
PR MARY KEY IIID_ETIII
D _ET
D_ET CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII..
CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER .
CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER
FIIIELD
F E LD
F ELD NOME
NOME
NOME CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII..
CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL .
CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL
Tabella 8
TABELLA GENERE
PRIIIMARY KEY
PR M ARY KEY
PR MARY KEY IIID_GEN
D _GEN
D_GEN CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII..
CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER .
CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER
FIIIELD
F E LD
F ELD NOME
NOME
NOME CAMPO:::STRIIINGA ALFANUMERIIICA <=50 CARATTERIII NON NULLIII..
CAMPO S TR N GA ALFANUMER C A <=50 CARATTER NON NULL .
CAMPO STR NGA ALFANUMER CA <=50 CARATTER NON NULL
Tabella 9
3. Progettazione:la composizione dei campi delle tabelle avrebbe potuto anche
rientrare nella fase di progettazione,tuttavia si è preferito aggiungerla alla fase di analisi
poiché diretta conseguenza dei requisiti posseduti dalle stesse e per rendere più compatta
la descrizione del database.
Partendo dall’individuazione,al passo precedente,delle pagine costituenti la struttura se ne
individuano i file relativi che saranno implementati in moduli con linguaggio .php.Il titolo in
testa maiuscolo si riferisce alle pagine determinate nella fase di analisi:
HOME PAGE(home.php):la pagina iniziale da cui l’utente parte per la
navigazione nel sito;
AIUTO(aiuto.php):la pagina per richiedere aiuto;
ERRORE(errore.php):la pagina dedicata alla visualizzazione degli errori;
progettazione e sviluppo di un’applicazione per commercio elettronico 12
13. tesi di laurea triennale in ingegneria informatica
MOSTRAPRO(mostrapro.php):la pagina da cui si visualizzano i prodotti da
acquistare;
MOSTRACAR(mostracar.php):la pagina di visualizzazione del contenuto
carrello;qui alternativamente si decide di continuare l’ordine o completarlo
pagando;
SALDO(saldo.php):la pagina dove effettuare il login se registrati o
alternativamente dove registrarsi;è la quietanza del pagamento;
INFOUT(infout.php):la pagina in cui inserire i dati personali e di fatturazione;
INFOSPED(infosped.php):la pagina in cui inserire le informazioni a cui spedire
l’ordine;
INFOPAG(infopag.php):la pagina in cui vengono inserite le informazioni di
pagamento;
DETORD(detord.php):la pagina in cui vengono riassunte le informazioni
dell’ordine anche prima del pagamento;l’utente sceglie se confermare l’ordine o
modificarlo;
SUCCESSO(successo.php):la pagina in cui si visualizza il successo
dell’operazione ordine.
Accanto ai file di pagina utente sono previsti dei file sempre in linguaggio .php utilizzabili
come script di elaborazione.Essi riguardano:
AGGIUNGI(aggiungi.php):l’utente che desidera un prodotto clicca su un
pulsante a lato dello stesso e attiva questo script che inserisce l’articolo nel
carrello;
MODIFICA(modifica.php):l’utente che desidera togliere un articolo o modificarne
la quantità aziona questo script che agisce sul carrello;
AUTENTICAZIONE(autentica.php):l’utente si autentica con questo script
inserendo il suo nome utente e la password;
INVIO ORDINE(inviaord.php):l’utente invia l’ordine premendo il pulsante
invio;esso può essere convalidato e in tal caso l’utente accede alla pagina con
la conferma(successo);in caso contrario viene indirizzato ad una pagina che
segnala l’errore;
INVIO INFORMAZIONI DI UTENTE(inviaut):questo script si occupa di registrare
le informazioni personali e di fatturazione di utente e di verificarne contenuti e
l’autenticità.
INVIO INFORMAZIONI DI SPEDIZIONE(inviasped):questo script si occupa di
registrare le informazioni di spedizione dell’ utente e di verificarne contenuti e
l’autenticità.
INVIO INFORMAZIONI DI PAGAMENTO(inviapag): questo script si occupa di
registrare le informazioni di pagamento dell’ utente e di verificarne contenuti e
l’autenticità.
Nella successiva fig.8 vengono rappresentati tutti i moduli realizzabili in linguaggio .php
comprensivi degli script e i collegamenti esistenti tra loro.
progettazione e sviluppo di un’applicazione per commercio elettronico 13
14. tesi di laurea triennale in ingegneria informatica
HOME PAGE..php
HOME PAGE php
NAVIIGAZIIONE
NAV GAZ ONE
MOSTRACAR..php
MOSTRACAR php MOSTRAPRO..php
MOSTRAPRO php SALDO..php
SALDO php AIIUTO..php
A UTO php
AGGIIUNGII..php
AGG UNG php MODIIFIICA..php
MOD F CA php AUTENTIICA..php
AUTENT CA php DAGLII ALTRII
DAGL ALTR
MODULII
MODUL
DATII PERSONALII
DAT PERSONAL
IINFOUT..php
NFOUT php IINVIIAUT..php
NV AUT php
DA OGNII MODULO
DA OGN MODULO DATII SPEDIIZIIONE
DAT SPED Z ONE
ERRORE..php
ERRORE php IINFOSPED..php
NFOSPED php IINVIIASPED..php
NV ASPED php
DATII PAGAMENTO
DAT PAGAMENTO
IINFOPAG..php
NFOPAG php IINVIIAPAG..php
NV APAG php
CONTROLLA
CONTROLLA
LEGENDA::
LEGENDA SPESA
SPESA
PAGIINE ..PHP
PAG NE PHP DETORD..php
DETORD php IINVIIAORD..php
NV AORD php
SCRIIPT..PHP
SCR PT PHP ESIITO
ES TO
SUCCESSO..php
SUCCESSO php
AZIIONE
AZ ONE
Figura 8
progettazione e sviluppo di un’applicazione per commercio elettronico 14
15. tesi di laurea triennale in ingegneria informatica
Bisogna inoltre predisporre dei file inclusivi di libreria con estensione .inc per la definizione
delle classi. In particolare servono:
CONNETTI(connetti.inc):è il file contenente le informazioni per connettersi al
database;
CONNESSIONE AL DB(connesdb.inc):è il file impiegato per l’apertura della
sessione col database;
ERRORI(errori.inc):è il file contenenti le varie tipologie di errori e in caso questi
si verifichino ne informa l’utente e lo indirizza alla pagina più adatta per risolverli;
SISTEMA(sistema.inc):è il file contenente l’inclusione degli altri file che gestisce
il sistema e lo fa funzionare correttamente;
SESSIONE(sessione.inc):è il file contenente i dati di sessione acquisto;
GESTIONE CARRELLO(gestcar.inc):è il file che associa i dati della sessione
utente agli articoli del carrello;
GESTIONE ORDINE(gestord.inc):è il file che gestisce gli ordini;
GESTIONE CATALOGO(gestcat.inc):è il file necessario per visualizzare e
ottenere i prodotti;
GESTIONE UTENTI(gestut.inc):è il file per registrare i nuovi utenti o richiamare
le informazioni di quelli già registrati;
CONTROLLO(controllo.inc):è il file contenente delle procedure di controllo della
correttezza dei dati utente.
Nella figura 9 vengono illustrati i file e le relative funzioni da essi svolte.Vengono inoltre
messi in luce i principali capisaldi dell’applicativo.Il catalogo,gli ordini,il carrello,le
informazioni utente vengono immagazzinati nel database.Questo deve effettuare una
procedura di connessione al sistema e aprire una sessione utente.Il database può
memorizzare le immagini relative ai prodotti oppure contenere dei link per accedere alle
stesse immagazzinate in un file o cartella a parte.La gestione delle parti “separate”del
database è affidato ai relativi file .inc che sono dei file di libreria con la definizione di
oggetti e classi.Il file sistema.inc collocato a monte del sistema ha il compito di
monitorarlo.Quello controllo.inc invece esegue dei controlli sull’inserimento dati,che
eventualmente sarebbe estendibile anche al controllo trasmissione dati pagamento con
carte di credito.Tuttavia si è scelto,in questo progetto, di delegare tale operazione ad
esterni. Opzionalmente è possibile creare tali routine in questo file per poi testarne la
correttezza nella fase di collaudo.
La scelta di adoperare i file in formato .inc(o .txt) potrebbe generare delle criticità
nell’ambito della sicurezza. Infatti un utente a conoscenza del metodo di programmazione
dell’autore potrebbe inserire il path e accedere al contenuto dei file più sensibili.Problema
superabile modificando eventualmente l’estensione a .php(o .asp in dipendenza della
piattaforma di lavoro).La preferenza all’impiego dei moduli restanti .php è dettata da motivi
di ordine economico,che ne decretano inoltre la maggiore popolarità.
progettazione e sviluppo di un’applicazione per commercio elettronico 15
16. tesi di laurea triennale in ingegneria informatica
APPLIICATIIVO
APPL CAT VO
siisttema..iinc
s s em a nc
SIISTEMA
S STEMA connesdb..iinc
connesdb nc
errrrorrii..iinc
e o nc connettttii..iinc
conne nc sessiione..iinc
se ss o n e n c
ERRORII
ERROR DATABASE
DATABASE SESSIIONE
SESS ONE
UTENTE
UTENTE
gestt_catt..iinc
ges _ca nc gestt_orrd..iinc
ges _o d nc gestt_carr..iinc
ges _ca nc
CATALOGO
CATALOGO ORDIINII
ORD N CARRELLO
CARRELLO
gestt_utt..iinc
ges _u nc
UTENTII
UTENT
conttrrolllo..iinc
co n o o n c
CONTROLLO
CONTROLLO
Figura 9
progettazione e sviluppo di un’applicazione per commercio elettronico 16
17. tesi di laurea triennale in ingegneria informatica
2. Realizzazione
1. Implementazione:la descrizione si articola per aree tematiche.
DATABASE
Per motivi di ordine economico,la scelta del DB individua come strumento l’ open source
attualmente più popolare MySql che presenta inoltre il pregio di essere
scalabile(caratteristica utile in questo progetto). La seconda scelta che si deve attuare
riguarda il motore di memorizzazione.E’ stato scelto InnoDB. E’ più lento del tipo BDB e
richiede più memoria e spazio su disco,tuttavia supporta i savepoint e le transazioni di tipo
XA. Anche rispetto a MyIsam le capacità di memoria richieste sono superiori,ma se ne
preferiscono il vantaggio del maggior svincolo dalle dimensioni del sistema in caso di
recupero dati a seguito di crash e la maggior rapidità di modifica dati grazie alla gestione
autonoma del caching. Quindi si creano il database Negozio e le autorizzazioni per
l’amministratore e l’utente. Nella Tab.10 è riportato il codice in SQL del DB :
CREATE DATABASE negozio
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
GRANT CREATE, DROP, SELECT, UPDATE, INSERT, DELETE
ON negozio.*
TO 'dischi_admin'@'localhost'
IDENTIFIED BY 'dischi_admin';
GRANT SELECT, UPDATE, INSERT, DELETE
ON negozio.*
TO 'dischi_utente'@'localhost'
IDENTIFIED BY 'dischi_utente';
USE negozio;
SET NAMES 'utf8'; Figura 10
Per gli ordini vengono predisposte tre tabelle:Elord,Ordine e Statusor che esprimono
rispettivamente gli elementi costitutivi l’ordine,l’ordine vero e proprio e lo stato
dell’ordine.Nel primo il collegamento con chiavi esterne è verso l’ordine e l’articolo(in
questo caso l’album);nel secondo il collegamento relaziona l’ordine al suo stato e all’utente
cui appartiene.Nella Tab.11 è visualizzato il codice:
progettazione e sviluppo di un’applicazione per commercio elettronico 17
18. tesi di laurea triennale in ingegneria informatica
CREATE TABLE Elord
(
id_elord INTEGER AUTO_INCREMENT PRIMARY KEY,
id_ord INTEGER NOT NULL,
id_alb INTEGER NOT NULL,
prezzo DECIMAL(6,2) NOT NULL,
pezzi INTEGER(4) NOT NULL,
FOREIGN KEY (id_ord) REFERENCES Ordine (id_ordine),
FOREIGN KEY (id_alb) REFERENCES Album (id_album)
)
ENGINE = InnoDB;
CREATE TABLE Ordine
(
id_ordine INTEGER AUTO_INCREMENT PRIMARY KEY,
id_ut INTEGER NOT NULL,
id_st INTEGER NOT NULL,
nome_sped VARCHAR(120) NOT NULL,
azienda_sped VARCHAR(140) NOT NULL,
indirizzo1_sped VARCHAR(150) NOT NULL,
indirizzo2_sped VARCHAR(150) NOT NULL,
città VARCHAR(100) NOT NULL,
stato VARCHAR(150),
cap INTEGER(10) NOT NULL,
nazione VARCHAR(100) NOT NULL,
telefono INTEGER(20) NOT NULL,
costo_ordine DECIMAL(6,2) NOT NULL,
costo_sped DECIMAL(6,2) NOT NULL,
costo_totale DECIMAL(6,2) NOT NULL,
tipo_pagamento VARCHAR(50) NOT NULL,
conferma_paga VARCHAR(80) NOT NULL,
stato_ordine INTEGER NOT NULL,
esecutore_ord VARCHAR(80) NOT NULL,
FOREIGN KEY (id_ut) REFERENCES Utenti (id_utente),
FOREIGN KEY (id_st) REFERENCES Statusor (id_status)
)
ENGINE = InnoDB;
CREATE TABLE Statusor
(
id_status INTEGER AUTO_INCREMENT PRIMARY KEY,
stato VARCHAR(50) NOT NULL
)
Figura 11
ENGINE = InnoDB;
L’ultima componente dell’infrastruttura è la tabella Utenti che detiene le informazioni
personali e di login,specificatamente con i campi email e password.Viene inoltre creato un
indice per il campo email;quando l’utente cercherà di eseguire il login il sistema effettuerà
una ricerca dati su questo. Il codice di questa è scritto nella tabella 12.
CREATE TABLE Utenti
progettazione e sviluppo di un’applicazione per commercio elettronico 18
19. tesi di laurea triennale in ingegneria informatica
(
id_utente INTEGER AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(120) NOT NULL,
azienda VARCHAR(140) NOT NULL,
indirizzo1 VARCHAR(150) NOT NULL,
indirizzo2 VARCHAR(150) NOT NULL,
città VARCHAR(100) NOT NULL,
stato VARCHAR(150),
cap INTEGER(10) NOT NULL,
nazione VARCHAR(100) NOT NULL,
telefono INTEGER(20) NOT NULL,
email VARCHAR(100) NOT NULL,
password VARCHAR(100) NOT NULL,
INDEX(email)
)
ENGINE = InnoDB; Figura 12
Terminata la parte infrastrutturale, rimangono le tabelle dell’esempio:Album che collega
tramite chiavi esterne le altre tabelle Artista,Genere e Etichetta.IL codice viene mostrato
nella figura 13:
CREATE TABLE Album
(
id_album INTEGER AUTO_INCREMENT PRIMARY KEY,
id_artista INTEGER NOT NULL,
id_etichetta INTEGER NOT NULL,
id_genere INTEGER NOT NULL,
titolo VARCHAR(100) NOT NULL,
immagine VARCHAR(50),
descrizione TEXT,
prezzo DECIMAL(6,2) NOT NULL,
FOREIGN KEY (id_artista) REFERENCES Artista (id_art),
FOREIGN KEY (id_etichetta) REFERENCES Etichetta (id_eti),
FOREIGN KEY (id_genere) REFERENCES Genere (id_gen)
)
ENGINE = InnoDB;
CREATE TABLE Artista
(
id_art INTEGER AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(100) NOT NULL
)
ENGINE = InnoDB;
CREATE TABLE Etichetta
(
id_eti INTEGER AUTO_INCREMENT PRIMARY KEY,
progettazione e sviluppo di un’applicazione per commercio elettronico 19
20. tesi di laurea triennale in ingegneria informatica
nome VARCHAR(100) NOT NULL
)
ENGINE = InnoDB;
CREATE TABLE Genere
(
id_gen INTEGER AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(100) NOT NULL
)
ENGINE = InnoDB; Figura 13
A chiusura di ogni tabella c’è la dichiarazione del motore di memorizzazione,così come a
fine file c’è il comando di caricamento dei dati nelle varie tabelle(fig.14).
LOAD DATA LOCAL INFILE 'negozio.data.statusor.mysql'
INTO TABLE Status_or
FIELDS ENCLOSED BY '''
LINES TERMINATED BY 'rn'
(stato);
LOAD DATA LOCAL INFILE 'negozio.data.album.mysql'
INTO TABLE Album
FIELDS OPTIONALLY ENCLOSED BY '''
LINES TERMINATED BY 'rn'
(titolo, immagine, descrizione, prezzo);
LOAD DATA LOCAL INFILE 'negozio.data.artista.mysql'
INTO TABLE Artista
FIELDS ENCLOSED BY '''
LINES TERMINATED BY 'rn'
(id_art,nome);
LOAD DATA LOCAL INFILE 'negozio.data.etichetta.mysql'
INTO TABLE Etichetta
FIELDS ENCLOSED BY '''
LINES TERMINATED BY 'rn'
(id_eti,nome);
LOAD DATA LOCAL INFILE 'negozio.data.genere.mysql'
INTO TABLE Genere
FIELDS ENCLOSED BY '''
LINES TERMINATED BY 'rn'
(id_gen,nome); Figura 14
PIANO PER L’INTERFACCIA
Come base per il layout viene utilizzato un foglio di stile foglio.css il cui codice è mostrato
nella figura 15.
progettazione e sviluppo di un’applicazione per commercio elettronico 20
21. tesi di laurea triennale in ingegneria informatica
/**
* File foglio.css
*
* Questo file contiene il foglio base per l'applicativo negozio.
* La sua realizzazione è semplice e basilare perché
* la sua utilizzazione in questo ambito non deve essere
* commerciale e accattivante.
*/
/*
* Il sottofondo è di colore bianco
*/
body { background-color: white }
/**
* Questo font è usato per i testi dei pulsanti e i piccoli link.
*/
.smallPrint { font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #000088 }
.smallLink { font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #000088 }
/**
* Il font per la barra del menu in alto e lo stile dei link.
*/
.topMenuBar { background-color: #97c53d }
.topMenuBarFont { font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #000088 }
.topMenuLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #000088; text-
decoration: none }
/**
* Il font per il titolo pagina
*/
.bigTitle { font-family: Arial, Hevletica, sans-serif; font-size: 32px; font-weight: 800; color: white;
text-decoration: none }
/**
* Il font per il testo della pagina
*/
.pageBody { font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000079 }
.normalTable {font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #000079 }
.tableLabel {font-family: Arial, Helvetica, sans-serif; font-size: 24px; color: #000079 }
.tableLabelSmall {font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #000079 }
.tableLabelTiny {font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000079 }
.errSmall {font-family: Arial, Helvetica, sans-serif; font-size: 12; color: #dd0000 }
/**
* Qui si sovrascrivono i fogli base forniti dal browser
*/
progettazione e sviluppo di un’applicazione per commercio elettronico 21
22. tesi di laurea triennale in ingegneria informatica
h1 {font-family: Arial, Helvetica, sans-serif; color: #000089 }
h2 {font-family: Arial, Helvetica, sans-serif; color: #000089 }
Figura 15
L’interfaccia utente opera con l’inclusione dei file contenenti il markup XHTML delle
pagine. Sono state predisposte al riguardo due pagine che verranno caricate nelle pagine
di visualizzazione:
Pagetesta.inc;
Pagefondo.inc.
Il nome indica la loro collocazione nel layout. I link relativi inviano rispettivamente alla
visualizzazione del carrello('mostracar.php'),la pagina di aiuto('aiuto.php') e la navigazione
tra gli articoli('mostrapro.php') per il primo file;per il secondo c’ è il rinvio a due moduli
'privacy.php' per il trattamento dei dati e 'chisiamo.php' che indirizza a una pagina
informativa sull’ azienda(moduli non realizzati in questo applicativo). La strategia è,durante
il processo di pagamento, evitare la visita ad altri siti o,peggio,di interromperne una delle
fasi. Pertanto è opportuno visualizzare solo il menu superiore o la barra di navigazione
delle pagine non coinvolte in tale processo. La barra è controllabile con la variabile
booleana $g_nonMosBarNav. Infine c’è una chiamata al modulo homepage.php. La
pagetesta è la seguente(fig.16):
<!DOCTYPE html PUBLIC "~//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
<title><?php echo $page_title; ?></title>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" href="foglio.css" type="text/css"/>
</head>
<body class='pageBody'>
<table width='100%' border='0' cellspacing='0' cellpadding='0'>
<tr>
<td align='right'>
<?php
if (!isset($g_nonMosBarNav))
{
?>
<font class='topMenuBarFont'>
<a class='topMenuLink' href='mostracar.php'>Vedi carrello</a> |
<a class='topMenuLink' href='aiuto.php'>Aiuto</a> |
<a class='topMenuLink' href='mostrapro.php'>Naviga tra i prodotti</a>
</font>
<?php
}
else
{
?>
<?php
progettazione e sviluppo di un’applicazione per commercio elettronico 22
24. tesi di laurea triennale in ingegneria informatica
echo <<<EOHTML
<td align='center' width='50%'>
<font class='pageBody'>
<img src='immagini/$img' border='3'/><br/>
$msg <br/>
Album artista: <b>$artista</b><br/>
<b>£$prezzo</b>
Album etichetta: <b>$etichetta</b><br/>
<b>£$prezzo</b>
Album genere: <b>$genere</b><br/>
<b>£$prezzo</b>
<form action='aggiungi.php' method='post'>
<input type='hidden' name='albumid' value='$aid'/>
<input type='submit' value='Ordina'/>
</form>
</font>
</td>
EOHTML; Figura 18
Nel form viene incluso un secondo input di tipo 'hidden' impostato sull’identificativo
dell’album. In tal modo il valore del vero identificativo dell’album visualizzato farà confluire
tutti i pulsanti nel modulo 'aggiungi.php'. Quest’ultimo cercherà quindi,con la direttiva isset
in $_post il valore dell’ identificativo album da aggiungere al carrello. Di seguito(fig. 19)
viene fornito il codice del file 'aggiungi.php':
<?php
/**
*----------------
* aggiungi.php
*----------------
*
* Questa pagina prende un articolo id e aggiunge l'appropriato
* articolo nel carrello della spesa utente,memorizzato nei dati di sessione.
* Bisogna inoltre verificare che l' id articolo sia valido.
*
*/
/*
* Si ottiene l'articolo che deve essere aggiunto
*/
if (isset($_POST['albumid']))
{
/*
* Si forza nel formato int
*/
$aid = intval($_POST['albumid']);
}
progettazione e sviluppo di un’applicazione per commercio elettronico 24
25. tesi di laurea triennale in ingegneria informatica
/*
* Poi,la gestcar aggiunge una voce per questo aid
* nel carrello della spesa. Se la voce è già presente
* nel carrello incrementa il numero di elementi se esistenti.
*
*
*/
$gc = GestCar::ottieniIstanza();
$gc->AggiungiArticoloCarrelloUtente($aid);
/*
* Redirezione alla pagina che mostra il contenuto del carrello
*/
header('Location: mostracar.php');
?>
Figura 19
Il file si avvale di un’istanza dell’oggetto GestCar definita nelle librerie e della procedura
AggiungiArticoloCarrelloUtente che controlla la validità sessione e che l’articolo esista nel
catalogo con l’ausilio di un’ oggetto di libreria GestCat mediante la procedura
earticolovalido. Poi discrimina se l’articolo è già presente nel carrello;se sì ne incrementa il
numero(npe),viceversa crea il nuovo elemento,ne ottiene le caratteristiche e lo memorizza
nel carrello.Il richiamo alla procedura è visibile nella figura 20:
/*
*----------------------------------------
* AggiungiArticoloCarrelloUtente
*----------------------------------------
* Questa procedura aggiunge un album agli elementi
* identificati nel carrello associato alla sessione corrente.
* Se c'è già,ne viene aggiornata la quantità
*
*
* Parametri
* $in_aid - id dell'articolo da aggiungere
*/
public function AggiungiArticoloCarrelloUtente($in_aid)
{
/*
* si controlla la validità della sessione
*/
$sid = session_id();
/*
* Ci si accerta che l'articolo sia valido
* Lo eseguirà il gestcat(gestione catalogo)
*/
$gc = GestCat::ottieniIstanza();
$valido = $gc->earticolovalido($in_aid);
progettazione e sviluppo di un’applicazione per commercio elettronico 25
26. tesi di laurea triennale in ingegneria informatica
/*
* Si controlla se ci sono già dati nella sessione
* per questo aid
*/
if (isset($_SESSION['carrello'])
and isset($_SESSION['carrello']["$in_aid"]))
{
$elemcarrello = &$_SESSION['carrello']["$in_aid"];
$elemcarrello['npe']++;
}
else
{
/*
* ottieni il prezzo e titolo dell'articolo da gestcat
* da inserire nel carrello
*/
$album = $gc->ottieniInfoArticolo($in_aid);
$elemcarrello = new elemcarrello($in_aid, $album->ottieniTitolo(),
$album->ottieniPrezzoPerUnita(), 1);
/*
* memorizza questa nuova voce nei dati di sessione,
* creando l'array del carrello se necessario
*/
if (!isset($_SESSION['carrello']))
$_SESSION['carrello'] = array();
$_SESSION['carrello']["$in_aid"] = $elemcarrello;
} Figura 20
}
Come si può vedere,l’oggetto gc della classe GestCat sfrutta due procedure di libreria:
earticolovalido(fig.21);
ottieniInfoArticolo(fig.22).
/*
*-------------------
* earticolovalido
*------------------
* questa procedura prende un id album e ne controlla
* la validità.
*
* Parametri:
* $in_albumid - articolo da controllare
*
* Output:
* Booleano - TRUE se è valido,FALSE altrimenti.
*
*
progettazione e sviluppo di un’applicazione per commercio elettronico 26
27. tesi di laurea triennale in ingegneria informatica
*
*
*/
public function earticolovalido($in_albumid)
{
/*
* se è una stringa va trasformata in intero
*/
$in_albumid = intval($in_albumid);
/*
* connessione al database
*/
$conn = Connesdb::ottieniConnessione();
/*
* query per trovare l'id album
*/
$query = <<<EOQ
SELECT id_album FROM Album
WHERE id_album = $in_albumid
EOQ;
/*
* query
*/
$results = @$conn->query($query);
/*
* azzera e indica se c'è 1 solo riscontro
*/
$output = ($results->num_rows == 1) ? TRUE : FALSE;
$results->close();
return $output; Figura 21
}
/*
*-----------------------
* ottieniInfoArticolo
*-----------------------
* restituisce le informazioni del dato album id
*
* Parametri:
* $in_albumid - informazioni richieste sull'articolo
*
* Output:
* istanza della classe album con relative informazioni
*
*
*
progettazione e sviluppo di un’applicazione per commercio elettronico 27
28. tesi di laurea triennale in ingegneria informatica
*
*/
public function ottieniInfoAlbum($in_albumid)
{
/*
* trasforma la stringa in intero
*/
$in_albumid = intval($in_albumid);
/*
* connessione
*/
$conn = Connesdb::ottieniConnessione();
/*
* query dell'elemento
*/
$query = <<<EOQ
SELECT id_album,titolo,descrizione,nome,
prezzo,immagine
FROM Album
INNER JOIN Artista
WHERE Album.id_artista = Artista.id_art
AND id_album = $in_albumid
EOQ;
/*
* esegue la query e fornisce i risultati
*/
$result = @$conn->query($query);
/*
* per ciascuna riga in uscita, crea un oggetto di classe
* album e lo aggiunge all'array in uscita
*/
$output = array();
$row = @$result->fetch_assoc();
$alb = new Album(
$row['id_album'],
$row['titolo'],
$row['descrizione'],
$row['nome'],
$row['prezzo'],
$row['immagine']
);
return $alb; Figura 22
progettazione e sviluppo di un’applicazione per commercio elettronico 28
29. tesi di laurea triennale in ingegneria informatica
}
ALBUM
In generale gli album in vendita sono fondamentalmente racchiusi nell’omonima tabella del
database che ne descrive titolo,immagine,descrizione e prezzo.Il nome dell’album viene
memorizzato per la stampa e visualizzato nelle pagine del listino e la tabella è gestita dalla
classe GestCat(gestione catalogo). Oltre ai sottoprogrammi già descritti,la libreria
comprende le procedure per ottenere i principali campi prodotto(fig.23) e le routine per
effettuare le ricerche(fig.24).
/*
*---------
* Album
*---------
* questa classe rappresenta tutti i dettagli di un articolo.
* Si utilizzano solo variabili di membri privati e metodi pubblici.
* Così si concede l'accesso di sola lettura ai membri.
*/
class Album
{
/*
* queste variabili confrontano i dati della tabella Album
* del database.Viene restituito un array di oggetti album
* nonostante le chiamate di funzioni non agiscono direttamente
* sulle tabelle del database
*/
private $albumid;
private $titolo;
private $descrizione;
private $artista;
private $etichetta;
private $genere;
private $prezzo;
private $immagine;
/*
*---------------
* __construct
*---------------
* Crea una nuova istanza della classe Album
*
*
* Parametri:
* $in_albumid - campo identificativo da Album
* $in_titolo - campo titolo
* $in_descrizione - campo descrizione
* $in_artista - campo artista
* $in_etichetta - campo etichetta
* $in_genere - campo genere
progettazione e sviluppo di un’applicazione per commercio elettronico 29
30. tesi di laurea triennale in ingegneria informatica
* $in_prezzo - campo prezzo
* $in_immagine - campo immagine
*/
function __construct
(
$in_albumid,
$in_titolo,
$in_descrizione,
$in_artista,
$in_etichetta,
$in_genere,
$in_prezzo,
$in_immagine
)
{
$this->albumid = $in_albumid;
$this->titolo = $in_titolo;
$this->descrizione = $in_descrizione;
$this->artista = $in_artista;
$this->etichetta = $in_etichetta;
$this->genere = $in_genere;
$this->prezzo = $in_prezzo;
$this->immagine = $in_immagine;
}
/*
* queste procedure sono usate in modalità accesso sola lettura
* sui dati
*/
public function ottieniAlbumID() { return $this->albumid; }
public function ottieniTitolo() { return $this->titolo; }
public function ottieniDescrizione() {return $this->descrizione;}
public function ottieniArtista() { return $this->artista; }
public function ottieniEtichetta() { return $this->etichetta; }
public function ottieniGenere() { return $this->genere; }
public function ottieniPrezzoPerUnita() { return $this->prezzo; }
public function ottieniImmagine() { return $this->immagine; }
} Figura 23
Nell’esempio sottoriportato è mostrata la ricerca album per artista. Nel file è stato scritto
anche il codice per ricercare gli album per genere ed etichetta,ma qui non verrà riportato
perché concettualmente simile a questa realizzazione.
/*
*----------------------------
* ottieniRiscontroAlbArt
*----------------------------
* restituisce una lista degli articoli riscontrati
* Tutti indica tutti gli articoli disponibili
*
progettazione e sviluppo di un’applicazione per commercio elettronico 30
31. tesi di laurea triennale in ingegneria informatica
*
* Parametri:
* $in_artista
*
*
* Output:array della classe Album
*
*/
public function ottieniRiscontroAlbArt($in_artista = 'tutti')
{
/*
* connessione al database
*
*/
$conn = Connesdb::ottieniConnessione();
/*
* query
*/
$query = <<<EOQ
SELECT id_album,titolo,descrizione,nome,
prezzo,immagine
FROM Album
INNER JOIN Artista
ON Artista.id_art = Album.id_artista
EOQ;
if (strtolower($in_artista) != 'tutti')
{
$artista = intval($in_artista);
$query .= " WHERE artista = $artista";
}
/*
* ordina i risultati per titolo e li stampa
*
*
*/
$query .= ' ORDINA PER titolo';
/*
* esegue la query e fornisce
*/
$result = @$conn->query($query);
/*
* per ciascuna riga in uscita crea un oggetto di classe
* album e lo aggiunge all'array in uscita
*/
$output = array();
while (($row = @$result->fetch_assoc()) !== NULL)
progettazione e sviluppo di un’applicazione per commercio elettronico 31
32. tesi di laurea triennale in ingegneria informatica
{
$alb = new Album(
$row['id_album'],
$row['titolo'],
$row['descrizione'],
$row['nome'],
$row['prezzo'],
$row['immagine']
);
$output[] = $alb;
}
/*
* azzera i risultati.Non serve resettare la connessione,
* sarà azzerata quando si chiude l'istanza
*
*/
$result->close();
/*
* Restituisce l'array risultante
*/
return $output;
Figura 24
}
La routine ottieniRiscontroAlbArt,come peraltro le similari ottieniRiscontroAlbEti e
ottieniRiscontroAlbGen,vengono chiamate dal modulo mostrapro.php che crea l’oggetto di
libreria GestCat,passa la variabile al pulsante di scelta,scarica i valori dei campi dal
database e infine aggiunge gli articoli se selezionati col modulo aggiungi.php. Le parti
fondamentali del codice sono rappresentate nelle figure 25(oggetto), 26(lista) e 27(loading
dati).
/**
* Se non si specificano parametri, si visualizzano
* tutti i prodotti
*/
if (!isset($_POST['MostraArtista']) or $_POST['MostraArtista'] == '')
{
$MostraArtista = 'Tutti';
}
else
{
$MostraArtista = $_POST['MostraArtista'];
}
/**
* Crea un' istanza dell'oggetto GestCat e lo usa
* per ottenere il riscontro del voluto artista
*
*/
progettazione e sviluppo di un’applicazione per commercio elettronico 32