+ All Categories
Home > Documents > Tesi di laurea Fabiano Dalla Piazza

Tesi di laurea Fabiano Dalla Piazza

Date post: 06-Dec-2014
Category:
Upload: fabiano-dalla-piazza
View: 1,361 times
Download: 2 times
Share this document with a friend
Description:
Progettazione e sviluppo di un'applicazione per commercio elettronico-Tesi di laurea triennale
69
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
Transcript
Page 1: Tesi di laurea   Fabiano Dalla Piazza

UUnniivveerrssiittàà ddeeggllii ssttuuddii ddii TTrriieessttee

TTeessii ddii llaauurreeaa ttrriieennnnaallee iinn iinnggeeggnneerriiaa iinnffoorrmmaattiiccaa

PPrrooggeettttaazziioonnee ee ssvviilluuppppoo ddii uunn’’aapppplliiccaazziioonnee ppeerr ccoommmmeerrcciioo eelleettttrroonniiccoo

LLaauurreeaannddoo RReellaattoorree FFaabbiiaannoo DDaallllaa PPiiaazzzzaa PPrreegg..mmoo pprrooff..MMaauurriizziioo FFeerrmmeegglliiaa

AAnnnnoo aaccccaaddeemmiiccoo 22001111--1122

Page 2: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 2

IInnttrroodduuzziioonnee 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.

11.. AAnnaalliissii ee pprrooggeettttaazziioonnee

Page 3: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 3

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.

DDDAAALLLLLLAAA RRREEETTTEEE:::

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.

SALDO MOSTRA PRODOTTI MOSTRA CARRELLO

MOSTRA PRODOTTI MOSTRA CARRELLO AIUTO

HOME PAGE

Figura 1

Page 4: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 4

DDDAAALLL PPPRRRIIIMMMOOO SSSTTTRRRAAATTTOOO:::

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.

DDDAAALLL SSSEEECCCOOONNNDDDOOO SSSTTTRRRAAATTTOOO:::

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.

DDDAAALLL TTTEEERRRZZZOOO SSSTTTRRRAAATTTOOO:::

MOSTRA PRODOTTI MOSTRA CARRELLO

UTENTE REGISTRATO INFORMAZIONI SPEDIZIONE

AGGIUNGI/TOGLI

Figura 2

INFORMAZIONI UTENTE INFORMAZIONI SPEDIZIONE DETTAGLIO ORDINE

INFORMAZIONI SPEDIZIONE INFORMAZIONI PAGAMENTO DETTAGLIO ORDINE

INFORMAZIONI PAGAMENTO DETTAGLIO ORDINE

Figura 3

Page 5: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 5

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.

SUCCESSO

INFORMAZIONI SPEDIZIONE

MENU ESTERNO

INFORMAZIONI UTENTE DETTAGLIO ORDINE

INFORMAZIONI PAGAMENTO

MOSTRA PRODOTTI MOSTRA CARRELLO

AIUTO

ORDINE APPROVATO SUCCESSO

Figura 4

Page 6: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 6

� 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.

Page 7: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 7

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;

HOME PAGE

CARRELLO PRODOTTI AIUTO SALDO ERRORE

SPEDIZIONE

PAGAMENTO

DETTAGLIO ORDINE

ORDINE COMPLETATO

SUCCESSO ORDINE PAGINA WEB

NUOVO UTENTE UTENTE

Figura 5

Page 8: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 8

• 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.

Page 9: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 9

Nella successiva figura 7 è invece rappresentata la costruzione delle tabelle comprensiva dei campi,chiavi primarie,chiavi esterne e i collegamenti tra loro.

EEELLLEEEMMMEEENNNTTTIII OOORRRDDDIIINNNEEE

OOORRRDDDIIINNNEEE

SSSTTTAAATTTUUUSSS OOORRRDDDIIINNNEEE

UUUTTTEEENNNTTTEEE

PPPRRROOODDDOOOTTTTTTOOO=== AAALLLBBBUUUMMM

VVVEEERRRIIIFFFIIICCCAAA CCCOOOMMMPPPOOOSSSIIIZZZIIIOOONNNEEE AAASSSSSSOOOCCCIIIAAAZZZIIIOOONNNEEE

SSSCCCEEELLLTTTAAA

GGGEEENNNEEERRREEE EEETTTIIICCCHHHEEETTTTTTAAA AAARRRTTTIIISSSTTTAAA

PPPOOOSSSSSSIIIEEEDDDEEE IIINNNCCCIIIDDDEEE PPPRRROOODDDOOOTTTTTTOOO

IIINNNFFFRRRAAASSSTTTRRRUUUTTTTTTUUURRRAAA IIINNNFFFRRRAAASSSTTTRRRUUUTTTTTTUUURRRAAA

EEESSSEEEMMMPPPIIIOOO DDDIIISSSCCCHHHIII EEESSSEEEMMMPPPIIIOOO DDDIIISSSCCCHHHIII

((11,,NN)) ((11,,NN)) ((11,,NN))

((11,,11))

((11,,NN)) ((11,,11))

(1,N)

((11,,NN))

((11,,NN))

((11,,NN)) ((11,,NN))

((11,,11))

Figura 6

(1,N)

((11,,NN))

Page 10: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 10

OOORRRDDDIIINNNEEE

PPPKKK IIIDDD___AAALLLBBBUUUMMM

FFFKKK

FFFKKK

IIIDDD___SSSTTT

IIIDDD___UUUTTT

NNNOOOMMMEEE___SSSPPPEEEDDD

AAAZZZIIIEEENNNDDDAAA___SSSPPPEEEDDD

IIINNNDDDIIIRRRIIIZZZZZZOOO111___SSSPPPEEEDDD

IIINNNDDDIIIRRRIIIZZZZZZOOO 222___SSSPPPEEEDDD

CCCIIITTTTTTAAA’’’___SSSPPPEEEDDD

SSSTTTAAATTTOOO___SSSPPPEEEDDD

CCCAAAPPP___SSSPPPEEEDDD

NNNAAAZZZIIIOOONNNEEE___SSSPPPEEEDDD

TTTEEELLLEEEFFFOOONNNOOO___SSSPPPEEEDDD

CCCOOOSSSTTTOOO___OOORRRDDD

CCCOOOSSSTTTOOO___SSSPPPEEEDDD

CCCOOOSSSTTTOOO___TTTOOOTTTAAALLLEEE

TTTIIIPPPOOO___PPPAAAGGGAAAMMMEEENNNTTTOOO

CCCOOONNNFFFEEERRRMMMAAA___PPPAAAGGGAAA

SSSTTTAAATTTOOO___OOORRRDDDIIINNNEEE

EEESSSEEECCCUUUTTTOOORRREEE___OOORRRDDD

SSSTTTAAATTTUUUSSSOOORRR

PPPKKK IIIDDD___SSSTTTAAATTTUUUSSS

SSSTTTAAATTTOOO

UUUTTTEEENNNTTTIII

PPPKKK IIIDDD___UUUTTTEEENNNTTTEEE

NNNOOOMMMEEE

AAAZZZIIIEEENNNDDDAAA

IIINNNDDDIIIRRRIIIZZZZZZOOO111

IIINNNDDDIIIRRRIIIZZZZZZOOO222

CCCIIITTTTTTAAA’’’

SSSTTTAAATTTOOO

CCCAAAPPP

NNNAAAZZZIIIOOONNNEEE

TTTEEELLLEEEFFFOOONNNOOO

EEEMMMAAAIIILLL

PPPAAASSSSSSWWW OOORRRDDD

EEELLLOOORRRDDD

PPPKKK

FFFKKK

FFFKKK

IIIDDD___EEELLLOOORRRDDD

IIIDDD___OOORRRDDD

IIIDDD___AAALLLBBB

PPPRRREEEZZZZZZOOO

PPPEEEZZZZZZIII

AAARRRTTTIIISSSTTTAAA

PPPKKK IIIDDD___AAARRRTTT

NNNOOOMMMEEE

GGGEEENNNEEERRREEE

PPPKKK IIIDDD___GGGEEENNN

NNNOOOMMMEEE

EEETTTIIICCCHHHEEETTTTTTAAA

PPPKKK IIIDDD___EEETTTIII

NNNOOOMMMEEE

PPPRRROOODDDOOOTTTTTTOOO===AAALLLBBBUUUMMM

PPPKKK

FFFKKK

FFFKKK

FFFKKK

IIIDDD___AAALLLBBBUUUMMM

IIIDDD___AAARRRTTTIIISSSTTTAAA

IIIDDD___EEETTTIIICCCHHHEEETTTTTTAAA

IIIDDD___GGGEEENNNEEERRREEE

TTTIIITTTOOOLLLOOO

DDDEEESSSCCCRRRIIIZZZIIIOOONNNEEE 1

N

N

N

1

1

LLLEEEGGGEEENNNDDDAAA:::

EEENNNTTTIIITTTYYY IIIDDD___FFFIIIEEELLLDDD PPPRRRIIIMMMAAARRRYYY KKKEEEYYY

FFFOOORRREEEIIIGGGNNN KKKEEEYYY FFFIIIEEELLLDDD

1

N

N

N

N

1 1 1

Figura 7

IIINNNFFFRRRAAASSSTTTRRRUUUTTTTTTUUURRRAAA

EEESSSEEEMMMPPPIIIOOO DDDIIISSSCCCHHHIII

IIIMMMMMMAAAGGGIIINNNEEE

PPPRRREEEZZZZZZOOO

Page 11: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 11

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)

PPPRRRIIIMMMAAARRRYYY KKKEEEYYY IIIDDD___EEELLLOOORRRDDD CCCOOONNNTTTAAATTTOOORRREEE AAA CCCHHHIIIAAAVVVEEE PPPRRRIIIMMMAAARRRIIIAAA AAAGGGGGGIIIOOORRRNNNAAATTTOOO AAAUUUTTTOOOMMMAAATTTIIICCCAAAMMMEEENNNTTTEEE... IIINNNTTTEEERRRIII ... FFFOOORRREEEIIIGGGNNN KKKEEEYYY IIIDDD___OOORRRDDD CCCOOONNNTTTAAATTTOOORRREEE AAA CCCHHHIIIAAAVVVEEE EEESSSTTTEEERRRNNNAAA PPPEEERRR VVVIIINNNCCCOOOLLLOOO DDDIII RRREEEFFFEEERRREEENNNZZZIIIAAAZZZIIIOOONNNEEE CCCOOONNN LLLAAA

TTTAAABBBEEELLLLLLAAA OOORRRDDDIIINNNEEE... IIINNNTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFOOORRREEEIIIGGGNNN KKKEEEYYY IIIDDD___AAALLLBBB CCCOOONNNTTTAAATTTOOORRREEE AAA CCCHHHIIIAAAVVVEEE EEESSSTTTEEERRRNNNAAA PPPEEERRR VVVIIINNNCCCOOOLLLOOO DDDIII RRREEEFFFEEERRREEENNNZZZIIIAAAZZZIIIOOONNNEEE CCCOOONNN LLLAAA

TTTAAABBBEEELLLLLLAAA AAALLLBBBUUUMMM(((PPPRRROOODDDOOOTTTTTTOOO))) ... IIINNNTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFIIIEEELLLDDD PPPRRREEEZZZZZZOOO CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA NNNUUUMMMEEERRRIIICCCAAA <<<===666CCCAAARRRAAATTTTTTEEERRRIII+++222 DDDEEECCCIIIMMMAAALLLIII NNNOOONNN NNNUUULLLLLLAAA... FFFIIIEEELLLDDD PPPEEEZZZZZZIII CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA NNNUUUMMMEEERRRIIICCCAAA <<<===444 CCCAAARRRAAATTTTTTEEERRRIII CCCOOONNN IIINNNTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ...

Tabella 1

TABELLA ORDINE PPPRRRIIIMMMAAARRRYYY KKKEEEYYY IIIDDD___OOORRRDDDIIINNNEEE CCCOOONNNTTTAAATTTOOORRREEE AAA CCCHHHIIIAAAVVVEEE PPPRRRIIIMMMAAARRRIIIAAA AAAGGGGGGIIIOOORRRNNNAAATTTOOO AAAUUUTTTOOOMMMAAATTTIIICCCAAAMMMEEENNNTTTEEE... IIINNNTTTEEERRRIII ... FFFOOORRREEEIIIGGGNNN KKKEEEYYY IIIDDD___UUUTTT CCCOOONNNTTTAAATTTOOORRREEE AAA CCCHHHIIIAAAVVVEEE EEESSSTTTEEERRRNNNAAA PPPEEERRR VVVIIINNNCCCOOOLLLOOO DDDIII RRREEEFFFEEERRREEENNNZZZIIIAAAZZZIIIOOONNNEEE CCCOOONNN LLLAAA

TTTAAABBBEEELLLLLLAAA UUUTTTEEENNNTTTEEE... IIINNNTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFOOORRREEEIIIGGGNNN KKKEEEYYY IIIDDD___SSSTTT CCCOOONNNTTTAAATTTOOORRREEE AAA CCCHHHIIIAAAVVVEEE EEESSSTTTEEERRRNNNAAA PPPEEERRR VVVIIINNNCCCOOOLLLOOO DDDIII RRREEEFFFEEERRREEENNNZZZIIIAAAZZZIIIOOONNNEEE CCCOOONNN LLLAAA

TTTAAABBBEEELLLLLLAAA SSSTTTAAATTTUUUSSS___OOORRR(((SSSTTTAAATTTOOO DDDEEELLLLLL’’’OOORRRDDDIIINNNEEE))) ... IIINNNTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFIIIEEELLLDDD NNNOOOMMMEEE___SSSPPPEEEDDD CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===111222000 CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFIIIEEELLLDDD AAAZZZIIIEEENNNDDDAAA___SSSPPPEEEDDD CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===111444000 CCCAAARRRAAATTTTTTEEERRRIII ... FFFIIIEEELLLDDD IIINNNDDDIIIRRRIIIZZZZZZOOO111___SSSPPPEEE

DDD CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===111555000 CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ...

FFFIIIEEELLLDDD IIINNNDDDIIIRRRIIIZZZZZZOOO222___SSSPPPEEEDDD

CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===111555000 CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ...

FFFIIIEEELLLDDD CCCIIITTTTTTAAA’’’___SSSPPPEEEDDD CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===111000000 CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFIIIEEELLLDDD SSSTTTAAATTTOOO ___SSSPPPEEEDDD CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===111000000 CCCAAARRRAAATTTTTTEEERRRIII ... FFFIIIEEELLLDDD CCCAAAPPP___SSSPPPEEEDDD CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA NNNUUUMMMEEERRRIIICCCAAA ===111000 CCCAAARRRAAATTTTTTEEERRRIII IIINNNTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFIIIEEELLLDDD NNNAAAZZZIIIOOONNNEEE___SSSPPPEEEDDD CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===111000000 CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFIIIEEELLLDDD TTTEEELLLEEEFFFOOONNNOOO___SSSPPPEEE

DDD CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA NNNUUUMMMEEERRRIIICCCAAA <<<===222000 CCCAAARRRAAATTTTTTEEERRRIII IIINNNTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ...

FFFIIIEEELLLDDD CCCOOOSSSTTTOOO___OOORRRDDDIIINNNEEE CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA NNNUUUMMMEEERRRIIICCCAAA <<<===666CCCAAARRRAAATTTTTTEEERRRIII+++222 DDDEEECCCIIIMMMAAALLLIII NNNOOONNN NNNUUULLLLLLAAA... FFFIIIEEELLLDDD CCCOOOSSSTTTOOO___SSSPPPEEEDDD CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA NNNUUUMMMEEERRRIIICCCAAA <<<===666CCCAAARRRAAATTTTTTEEERRRIII+++222 DDDEEECCCIIIMMMAAALLLIII NNNOOONNN NNNUUULLLLLLAAA... FFFIIIEEELLLDDD CCCOOOSSSTTTOOO___TTTOOOTTTAAALLLEEE CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA NNNUUUMMMEEERRRIIICCCAAA <<<===666CCCAAARRRAAATTTTTTEEERRRIII+++222 DDDEEECCCIIIMMMAAALLLIII NNNOOONNN NNNUUULLLLLLAAA... FFFIIIEEELLLDDD TTTIIIPPPOOO___PPPAAAGGGAAAMMMEEENNN

TTTOOO CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===555000 CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ...

FFFIIIEEELLLDDD CCCOOONNNFFFEEERRRMMMAAA___PPPAAAGGGAAA

CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===888000 CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ...

FFFIIIEEELLLDDD SSSTTTAAATTTOOO___OOORRRDDDIIINNNEEE CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFIIIEEELLLDDD EEESSSEEECCCUUUTTTOOORRREEE___OOO

RRRDDD CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===888000 CCCAAARRRAAATTTTTTEEERRRIII ...

Tabella 2

TABELLA STATUSOR PPPRRRIIIMMMAAARRRYYY KKKEEEYYY IIIDDD___SSSTTTAAATTTUUUSSS CCCOOONNNTTTAAATTTOOORRREEE AAA CCCHHHIIIAAAVVVEEE PPPRRRIIIMMMAAARRRIIIAAA AAAGGGGGGIIIOOORRRNNNAAATTTOOO AAAUUUTTTOOOMMMAAATTTIIICCCAAAMMMEEENNNTTTEEE... IIINNNTTTEEERRRIII ...

FFFIIIEEELLLDDD SSSTTTAAATTTOOO CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===555000 CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ...

Tabella 3

TABELLA UTENTI PPPRRRIIIMMMAAARRRYYY KKKEEEYYY IIIDDD___UUUTTTEEENNNTTTEEE CCCOOONNNTTTAAATTTOOORRREEE AAA CCCHHHIIIAAAVVVEEE PPPRRRIIIMMMAAARRRIIIAAA AAAGGGGGGIIIOOORRRNNNAAATTTOOO AAAUUUTTTOOOMMMAAATTTIIICCCAAAMMMEEENNNTTTEEE... IIINNNTTTEEERRRIII ...

FFFIIIEEELLLDDD NNNOOOMMMEEE CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===111222000 CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFIIIEEELLLDDD AAAZZZIIIEEENNNDDDAAA CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===111444000 CCCAAARRRAAATTTTTTEEERRRIII ... FFFIIIEEELLLDDD IIINNNDDDIIIRRRIIIZZZZZZOOO111 CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===111555000 CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFIIIEEELLLDDD IIINNNDDDIIIRRRIIIZZZZZZOOO222 CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===111555000 CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFIIIEEELLLDDD CCCIIITTTTTTAAA’’’ CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===111000000 CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFIIIEEELLLDDD SSSTTTAAATTTOOO CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===111000000 CCCAAARRRAAATTTTTTEEERRRIII ... FFFIIIEEELLLDDD CCCAAAPPP CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA NNNUUUMMMEEERRRIIICCCAAA ===111000 CCCAAARRRAAATTTTTTEEERRRIII IIINNNTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFIIIEEELLLDDD NNNAAAZZZIIIOOONNNEEE CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===111000000 CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFIIIEEELLLDDD TTTEEELLLEEEFFFOOONNNOOO CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA NNNUUUMMMEEERRRIIICCCAAA <<<===222000 CCCAAARRRAAATTTTTTEEERRRIII IIINNNTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFIIIEEELLLDDD EEEMMMAAAIIILLL CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===111000000 CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFIIIEEELLLDDD PPPAAASSSSSSWWW OOORRRDDD CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===111000000 CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII CCCOOONNNTTTEEENNNEEENNNTTTIII “““@@@””” ...

Tabella 4

Tabella 5

Page 12: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 12

TABELLA ALBUM (=PRODOTTI) PPPRRRIIIMMMAAARRRYYY KKKEEEYYY IIIDDD___AAALLLBBBUUUMMM CCCOOONNNTTTAAATTTOOORRREEE AAA CCCHHHIIIAAAVVVEEE PPPRRRIIIMMMAAARRRIIIAAA AAAGGGGGGIIIOOORRRNNNAAATTTOOO AAAUUUTTTOOOMMMAAATTTIIICCCAAAMMMEEENNNTTTEEE... IIINNNTTTEEERRRIII ... FFFOOORRREEEIIIGGGNNN KKKEEEYYY IIIDDD___AAARRRTTTIIISSSTTTAAA CCCOOONNNTTTAAATTTOOORRREEE AAA CCCHHHIIIAAAVVVEEE EEESSSTTTEEERRRNNNAAA PPPEEERRR VVVIIINNNCCCOOOLLLOOO DDDIII RRREEEFFFEEERRREEENNNZZZAAAZZZIIIOOONNNEEE CCCOOONNN LLLAAA TTTAAABBBEEELLLLLLAAA

AAARRRTTTIIISSSTTTAAA... IIINNNTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFOOORRREEEIIIGGGNNN KKKEEEYYY IIIDDD___EEETTTIIICCCHHHEEETTTTTTAAA CCCOOONNNTTTAAATTTOOORRREEE AAA CCCHHHIIIAAAVVVEEE EEESSSTTTEEERRRNNNAAA PPPEEERRR VVVIIINNNCCCOOOLLLOOO DDDIII RRREEEFFFEEERRREEENNNZZZAAAZZZIIIOOONNNEEE CCCOOONNN LLLAAA TTTAAABBBEEELLLLLLAAA

EEETTTIIICCCHHHEEETTTTTTAAA... IIINNNTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFOOORRREEEIIIGGGNNN KKKEEEYYY IIIDDD___GGGEEENNNEEERRREEE CCCOOONNNTTTAAATTTOOORRREEE AAA CCCHHHIIIAAAVVVEEE EEESSSTTTEEERRRNNNAAA PPPEEERRR VVVIIINNNCCCOOOLLLOOO DDDIII RRREEEFFFEEERRREEENNNZZZAAAZZZIIIOOONNNEEE CCCOOONNN LLLAAA TTTAAABBBEEELLLLLLAAA

GGGEEENNNEEERRREEE... IIINNNTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFIIIEEELLLDDD IIIMMMMMMAAAGGGIIINNNEEE CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===555000 CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... CCCOOONNNTTTIIIEEENNNEEE IIILLL NNNOOOMMMEEE

DDDEEELLLLLL’’’ IIIMMMMMMAAAGGGIIINNNEEE IIINNN FFFOOORRRMMMAAATTTOOO ...JJJPPPGGG... FFFIIIEEELLLDDD DDDEEESSSCCCRRRIIIZZZIIIOOONNNEEE CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA DDDEEESSSCCCRRRIIITTTTTTIIIVVVAAA DDDIII TTTEEESSSTTTOOO... FFFIIIEEELLLDDD TTTIIITTTOOOLLLOOO CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===111000000 CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ... FFFIIIEEELLLDDD PPPRRREEEZZZZZZOOO CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA NNNUUUMMMEEERRRIIICCCAAA <<<===666CCCAAARRRAAATTTTTTEEERRRIII+++222 DDDEEECCCIIIMMMAAALLLIII NNNOOONNN NNNUUULLLLLLAAA...

Tabella 6

TABELLA ARTISTA PPPRRRIIIMMMAAARRRYYY KKKEEEYYY IIIDDD___AAARRRTTT CCCOOONNNTTTAAATTTOOORRREEE AAA CCCHHHIIIAAAVVVEEE PPPRRRIIIMMMAAARRRIIIAAA AAAGGGGGGIIIOOORRRNNNAAATTTOOO AAAUUUTTTOOOMMMAAATTTIIICCCAAAMMMEEENNNTTTEEE... IIINNNTTTEEERRRIII ...

FFFIIIEEELLLDDD NNNOOOMMMEEE CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===111000000 CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ...

Tabella 7

TABELLA ETICHETTA PPPRRRIIIMMMAAARRRYYY KKKEEEYYY IIIDDD___EEETTTIII CCCOOONNNTTTAAATTTOOORRREEE AAA CCCHHHIIIAAAVVVEEE PPPRRRIIIMMMAAARRRIIIAAA AAAGGGGGGIIIOOORRRNNNAAATTTOOO AAAUUUTTTOOOMMMAAATTTIIICCCAAAMMMEEENNNTTTEEE... IIINNNTTTEEERRRIII ...

FFFIIIEEELLLDDD NNNOOOMMMEEE CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===111000000 CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ...

Tabella 8

TABELLA GENERE PPPRRRIIIMMMAAARRRYYY KKKEEEYYY IIIDDD___GGGEEENNN CCCOOONNNTTTAAATTTOOORRREEE AAA CCCHHHIIIAAAVVVEEE PPPRRRIIIMMMAAARRRIIIAAA AAAGGGGGGIIIOOORRRNNNAAATTTOOO AAAUUUTTTOOOMMMAAATTTIIICCCAAAMMMEEENNNTTTEEE... IIINNNTTTEEERRRIII ...

FFFIIIEEELLLDDD NNNOOOMMMEEE CCCAAAMMMPPPOOO:::SSSTTTRRRIIINNNGGGAAA AAALLLFFFAAANNNUUUMMMEEERRRIIICCCAAA <<<===555000 CCCAAARRRAAATTTTTTEEERRRIII NNNOOONNN NNNUUULLLLLLIII ...

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;

INFRASTRUTTURA

ESEMPIO DISCHI

Page 13: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 13

� 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.

Page 14: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 14

HHHOOOMMMEEE PPPAAAGGGEEE ...ppphhhppp

MMMOOOSSSTTTRRRAAAPPPRRROOO...ppphhhppp

NNNAAAVVVIIIGGGAAAZZZIIIOOONNNEEE

DDDAAATTTIII PPPEEERRRSSSOOONNNAAALLLIII

SSSAAALLLDDDOOO...ppphhhppp AAAIIIUUUTTTOOO...ppphhhppp MMMOOOSSSTTTRRRAAACCCAAARRR...ppphhhppp

IIINNNFFFOOOUUUTTT...ppphhhppp

IIINNNFFFOOOSSSPPPEEEDDD...ppphhhppp

IIINNNFFFOOOPPPAAAGGG...ppphhhppp

DDDAAATTTIII SSSPPPEEEDDDIIIZZZIIIOOONNNEEE

DDDAAATTTIII PPPAAAGGGAAAMMMEEENNNTTTOOO

DDDEEETTTOOORRRDDD...ppphhhppp

CCCOOONNNTTTRRROOOLLLLLLAAA SSSPPPEEESSSAAA

EEESSSIIITTTOOO

SSSUUUCCCCCCEEESSSSSSOOO...ppphhhppp

AAAUUUTTTEEENNNTTTIIICCCAAA...ppphhhppp

IIINNNVVVIIIAAAPPPAAAGGG...ppphhhppp

IIINNNVVVIIIAAASSSPPPEEEDDD...ppphhhppp

IIINNNVVVIIIAAAUUUTTT...ppphhhppp

IIINNNVVVIIIAAAOOORRRDDD...ppphhhppp

MMMOOODDDIIIFFFIIICCCAAA...ppphhhppp AAAGGGGGGIIIUUUNNNGGGIII ...ppphhhppp

EEERRRRRROOORRREEE...ppphhhppp

DDDAAA OOOGGGNNNIII MMMOOODDDUUULLLOOO

Figura 8

DDDAAAGGGLLLIII AAALLLTTTRRRIII MMMOOODDDUUULLLIII

PPPAAAGGGIIINNNEEE ...PPPHHHPPP

SSSCCCRRRIIIPPPTTT...PPPHHHPPP

AAAZZZIIIOOONNNEEE

LLLEEEGGGEEENNNDDDAAA:::

Page 15: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 15

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à.

Page 16: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 16

AAAPPPPPPLLLIIICCCAAATTTIIIVVVOOO

DDDAAATTTAAABBBAAASSSEEE

sssiiisssttteeemmmaaa... iiinnnccc

SSSIIISSSTTTEEEMMMAAA

cccooonnnnnneeetttttt iii ... iiinnnccc

EEERRRRRROOORRRIII

eeerrrrrrooorrriii ... iiinnnccc

SSSEEESSSSSSIIIOOONNNEEE UUUTTTEEENNNTTTEEE

ssseeessssssiiiooonnneee... iiinnnccc

CCCAAARRRRRREEELLLLLLOOO OOORRRDDDIIINNNIII CCCAAATTTAAALLLOOOGGGOOO

UUUTTTEEENNNTTTIII

CCCOOONNNTTTRRROOOLLLLLLOOO

gggeeesssttt___ooorrrddd... iiinnnccc gggeeesssttt___cccaaarrr... iiinnnccc gggeeesssttt___cccaaattt... iiinnnccc

gggeeesssttt___uuuttt... iiinnnccc

cccooonnntttrrrooolll lllooo... iiinnnccc

Figura 9

cccooonnnnnneeesssdddbbb... iiinnnccc

Page 17: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 17

22.. RReeaalliizzzzaazziioonnee

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';

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:

Figura 10

Page 18: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 18

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 ) 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

Figura 11

Page 19: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 19

( 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;

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,

Figura 12

Page 20: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 20

nome VARCHAR(100) NOT NULL ) ENGINE = InnoDB; CREATE TABLE Genere ( id_gen INTEGER AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(100) NOT NULL ) ENGINE = InnoDB;

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 '\r\n' (stato); LOAD DATA LOCAL INFILE 'negozio.data.album.mysql' INTO TABLE Album FIELDS OPTIONALLY ENCLOSED BY '\'' LINES TERMINATED BY '\r\n' (titolo, immagine, descrizione, prezzo); LOAD DATA LOCAL INFILE 'negozio.data.artista.mysql' INTO TABLE Artista FIELDS ENCLOSED BY '\'' LINES TERMINATED BY '\r\n' (id_art,nome); LOAD DATA LOCAL INFILE 'negozio.data.etichetta.mysql' INTO TABLE Etichetta FIELDS ENCLOSED BY '\'' LINES TERMINATED BY '\r\n' (id_eti,nome); LOAD DATA LOCAL INFILE 'negozio.data.genere.mysql' INTO TABLE Genere FIELDS ENCLOSED BY '\'' LINES TERMINATED BY '\r\n' (id_gen,nome);

PIANO PER L’INTERFACCIA Come base per il layout viene utilizzato un foglio di stile foglio.css il cui codice è mostrato nella figura 15.

Figura 13

Figura 14

Page 21: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 21

/** * 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 */

Page 22: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 22

h1 {font-family: Arial, Helvetica, sans-serif; color: #000089 } h2 {font-family: Arial, Helvetica, sans-serif; color: #000089 }

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 { ?> &nbsp; <?php

Figura 15

Page 23: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 23

} ?> </td> </tr> </table> <table width='100%' border='0' cellspacing='0' cellpadding='0' class='topMenuBar'> <tr> <td><hr size='1'/> </tr> <tr> </td> <td> &nbsp; <a class='bigTitle' href='homepage.php'> Casa del vinile </a> </td> </tr> <tr> <td><hr size='1'/> </tr> </table>

Mentre il codice della pagefondo è visualizzato in fig.17:

<p align='center'> <font class='smallPrint'> Copyright &copy; 2012 Negozio spa. Tutti i diritti riservati.<br/> <a class='smallLink' href='privacy.php'>Trattamento dei dati</a> | <a class='smallLink' href='chisiamo.php'>Chi siamo</a> </font> </p> </body> </html>

NAVIGARE TRA I PRODOTTI

Gli articoli disponibili dono gestiti dalla classe gestcat(gestione catalogo) che è collegata con la tabella Album del database. Essa costruisce una lista di tutti i prodotti o di determinati prodotti ricercati che vengono successivamente caricati e visualizzati su comando dello script mostrapro(mostra prodotti).Ogni articolo raffigurato è un considerato come un elemento HTML form.In particolare la parte di codice in figura 18(segue) ha l’effetto di rimandare al modulo 'aggiungi.php' l’eventuale ordine dell’articolo visualizzato.

Figura 16

Figura 17

Page 24: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 24

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;

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']); }

Figura 18

Page 25: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 25

/* * 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');

?>

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);

Figura 19

Page 26: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 26

/* * 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; } }

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. * *

Figura 20

Page 27: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 27

* * */ 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; } /* *----------------------- * ottieniInfoArticolo *----------------------- * restituisce le informazioni del dato album id * * Parametri: * $in_albumid - informazioni richieste sull'articolo * * Output: * istanza della classe album con relative informazioni * * *

Figura 21

Page 28: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 28

* */ 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

Page 29: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 29

}

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

Page 30: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 30

* $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; } }

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 *

Figura 23

Page 31: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 31

* * 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)

Page 32: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 32

{ $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; }

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 * */

Figura 24

Page 33: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 33

$gc = GestCat::ottieniIstanza(); $albums = $gc->ottieniRiscontroAlbArt($MostraArtista);

<!-- Fornisce agli utenti una lista da cui selezionare gli album dell'artista --> <font class='pageBody'> <table width='100%' border='0'> <tr> <td align='right'> <form align='center' action='mostrapro.php' method='post'> Mostra album disponibili dell'artista: <select name='MostraArtista'> <option value='Tutti'/>Mostra tutti gli artisti <option value='1'/>the who <option value='2'/>fairport convention <option value='3'/>genesis <option value='4'/>joe cocker <option value='1'/>king crimson <option value='1'/>pink floyd <option value='1'/>santana </select> </form>

foreach ($albums as $album) { /** * La variabile $x conserva traccia se l'utente sia * nella prima o seconda voce in una riga( FALSE == prima). * Si vogliono ottenere due risultati per riga. */ if ($x === FALSE) { echo "<tr>\n"; } /** * Scarica i valori e allega il pulsante "aggiungi al carrello' */ $img = $album->ottieniImmagine(); $msg = $album->ottieniDescrizione(); $aid = $album->ottieniAlbumID(); $artista = $album->ottieniArtista(); $etichetta = $album->ottieniEtichetta(); $genere = $album->ottieniGenere(); $prezzo = $album->ottieniPrezzoPerUnita(); /** * Il form contiene un input di tipo nascosto. Questo * elemento passa al nuovo script l'album id che l'utente

Figura 25

Figura 26

Page 34: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 34

* desidera aggiungere al carrello. Senza questo,il nuovo * script non conoscerebbe l'album da selezionare. */ 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;

ATTIVAZIONE CARRELLO

Il carrello della spesa è un array di oggetti Elemcarrello(elementi carrello) gestiti dalla classe GestCar(gestione carrello). I dati vengono salvati nella sessione dal codice di gestione php e il richiamo al contenuto è eseguito con la direttiva $_session[‘carrello’].La chiusura del browser provoca la perdita di tutti i dati di sessione. In fig.28 è riportato il codice costitutivo degli oggetti Elemcarrello manipolati dalla classe GestCar.

/* * ---------------- * ElemCarrello * ---------------- * * Il carrello è sostanzialmente un array di oggetti ElemCarrello. * La chiave dell'array sono gli identificativi dell'articolo * del prodotto rappresentato sull' ElemCarrello. */ class ElemCarrello { /* * I dati disponibili per il ElemCarrello */ public $ArticoloID; public $Titolo; public $PrezzoPerUnita; public $NumeroPezzi; /*

Figura 27

Page 35: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 35

* * funzione pubblica __construct=costruttore * inizializza una nuova istanza di classe * * Parametri: * $in_aid - articolo id * $in_titolo - titolo dell'album * $in_ppu - prezzo per unità * $in_npe - numero dei pezzi */ public function __construct ( $in_aid, $in_titolo, $in_ppu, $in_npe ) { $this->ArticoloID = $in_aid; $this->Titolo = $in_titolo; $this->PrezzoPerUnita = $in_ppu; $this->NumeroPezzi = $in_npe; } }

Oltre alla procedura di aggiunta elementi già esplicata in figura 20,la medesima classe predispone delle procedure di esplorazione contenuto carrello(ottieniContCarrello)raffigurata in fig.29 la cui chiamata è eseguita nei moduli detord.php o mostracar.php per visualizzare il dettaglio ordine.

/* *------------------------ * ottieniContCarrello *------------------------ * * Restituisce tutti gli elementi del carrello contenuti * nella sessione corrente * * Restituisce gli oggetti dell'array InfoCarrello: * */ public function ottieniContCarrello() { if(!isset($_SESSION['carrello'])) return array(); else return $_SESSION['carrello']; }

Figura 28

Figura 29

Page 36: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 36

Se l’utente desidera invece modificare la quantità degli articoli la libreria predispone la procedura AggiornaQuantitaArticolo su chiamata dello script modifica.php,attivato nella pagina mostracar.php. Nella successiva figure 30 è indicato il codice della procedura in oggetto della libreria GestCar.

/* *-------------------------------- * AggiornaQuantitaArticolo *-------------------------------- * Predispone il numero di elementi di una tipologia * nel carrello della spesa * * Parametri: * $in_aid - elemento del carrello aggiornato * $in_quantita - nuovo numero dell'elemento di questo tipo * * */ public function AggiornaQuantitaArticolo($in_aid, $in_quantita) { /* * se il carrello è vuoto */ if ($in_quantita == 0) { unset($_SESSION['carrello']["$in_aid"]); } else { /** * Altrimenti, aggiorna il numero di elementi e * azzera le voci nell'array(passaggio di variabile per riferimento) */ $ce = &$_SESSION['carrello']["$in_aid"]; $ce->NumeroPezzi = $in_quantita; } }

PAGAMENTO

Gli utenti che decidono di acquistare effettuano la procedura di pagamento devono fornire le informazioni personali,quelle di spedizione e i sistemi di pagamento.Successivamente si riassumerà l’ordine detord.php(dettaglio ordine) offrendo la possibilità di visualizzare per confermarlo o eventualmente correggerlo(modifica.php).Le informazioni utente e la fattura vengono memorizzate nella tabella utente e gestite dalla classe GestUt(gestione utente).Il processo di pagamento si snoda in una serie di form compilati dall’utente,ciascuno dei quali richiede una conferma complessiva prima del passaggio al successivo modulo.Se si riscontrano errori,allora l’utente viene rinviato al modulo di competenza.Infine viene caricata nella pagina una tabella riassuntiva con tutti i dettagli dell’ordine(detord.php).Da qui se l’utente si accorge di un’errore su di un qualunque modulo,può raggiungerlo e

Figura 30

Page 37: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 37

apportare le desiderate modifiche.Infine ritorna a questo modulo finale.Le tre pagine infout.php,infosped.php e infopag.php sono dedicate rispettivamente a queste funzioni negli ambiti,rispettivamente,delle informazioni utente,di spedizione e di pagamento. Il codice che gestisce questi tre moduli accetta una variabile GET chiamata from.Se questa è impostata su rev,viene passato a inviaut.php,inviasped.php e inviapag.php,che lo invia a inviaord.php invece che al modulo successivo alla serie.Naturalmente gli ultimi quattro script si occupano di elaborare i dati relativi rispettivamente alle informazioni personali e di fatturazione,di spedizione,di pagamento e globali d’ordine.Infine,se il pagamento ha successo si ha una chiamata al file successo.php. In figura 31 viene riportata la parte di codice di infosped.php relativa alla gestione del form sopra descritta.Per gli altri due form similari,cambia solo il riferimento alla direttiva $form_target.

$form_target = 'inviasped.php'; if (isset($_GET['from']) and strtolower($_GET['from']) == 'rev') { $form_target .= '?from=rev'; }

Nella figura 32 invece si può vedere il codice del file inviasped.php relativo alla gestione delle pagine di arrivo e di indirizzamento.

/** * Indica da dove arriva. Si usa per decidere * a quale pagina andare dopo questa. */ if (isset($_GET['from']) and strtolower($_GET['from']) == 'rev') { $from_page = '&from=rev'; } else { $from_page = ''; }

In figura 33 è raffigurato il codice di inviasped.php in cui si sceglie effettivamente il percorso a cui sarà diretto l’utente.Il codice resta invariato per gli altri due file similari,tranne la parte riguardante la seconda location(che per inviaut.php sarà infosped.php,etc.).

** * Si continua alla pagina successiva. Può essere la * pagina con le informazioni di spedizione o quella * della visualizzazione ordine. */ if (isset($_GET['from']) and strtolower($_GET['from']) == 'rev') { header('Location: detord.php');

Figura 31

Figura 32

Page 38: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 38

} else { header('Location: infopag.php'); }

Tutti gli script con radice iniziale invia inseriranno i dati nell’ array $_SESSION,a prescindere dal successo dell’operazione.Se non ci sono errori i dati saranno memorizzati,diversamente l’utente ricompierà il form precedente,ma la sessione non verrà soppressa.Comunque sia,sono accomunati dalle tre sostanziali fasi di inserimento dati,loro convalida e reindirizzo alla pagina adeguata.Nella figura 34 di seguito viene esplicitato il codice relativo al file inviaut.php,privato della parte già descritta precedentemente.

/** * Inserisce le informazioni nei dati di sessione, * poi li verifica. */ if (!isset($_SESSION['infoutente'])) { $_SESSION['infoutente'] = new InfoUtente(); } $iu = &$_SESSION['infoutente']; if (isset($_POST['nome'])) $iu->Nome = trim($_POST['nome']); if (isset($_POST['azienda'])) $iu->Azienda = trim($_POST['azienda']); if (isset($_POST['indirizzo1'])) $iu->Indirizzo1 = trim($_POST['indirizzo1']); if (isset($_POST['indirizzo2'])) $iu->Indirizzo2 = trim($_POST['indirizzo2']); if (isset($_POST['città'])) $iu->Città = trim($_POST['città']); if (isset($_POST['stato'])) $iu->Stato = trim($_POST['stato']); if (isset($_POST['cap'])) $iu->Cap = trim($_POST['cap']); if (isset($_POST['nazione'])) $iu->Nazione = trim($_POST['nazione']); if (isset($_POST['telefono'])) $iu->Telefono = trim($_POST['telefono']); if (isset($_POST['email'])) $iu->Email = trim($_POST['email']); if (isset($_POST['password1'])) $iu->Password1 = trim($_POST['password1']); if (isset($_POST['password2'])) $iu->Password2 = trim($_POST['password2']); /**

Figura 33

Page 39: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 39

* Convalida i dati uno alla volta. Se ci sono problemi, * redireziona l'utente alla pagina di input. */ if (!isset($iu->Nome) or !OrdineValido::valStr($iu->Nome, OrdineValido::MAX_NOME_LEN)) { header("Location: infout.php?ef=nome$from_page"); ob_end_clean(); exit; } if (isset($iu->Azienda) and !OrdineValido::valVuoto($iu->Azienda, OrdineValido::MAX_AZIENDA_LEN)) { header("Location: infout.php?ef=azienda$from_page"); ob_end_clean(); exit; } if (!isset($iu->Indirizzo1) or !OrdineValido::valStr($iu->Indirizzo1, OrdineValido::MAX_INDIRIZZO_LEN)) { header("Location: infout.php?ef=indirizzo1$from_page"); ob_end_clean(); exit; } if (isset($iu->Indirizzo2) and !OrdineValido::valVuoto($iu->Indirizzo2, OrdineValido::MAX_INDIRIZZO_LEN)) { header("Location: infout.php?ef=indirizzo2$from_page"); ob_end_clean(); exit; } if (!isset($iu->Città) or !OrdineValido::valStr($iu->Città, OrdineValido::MAX_CITTA_LEN)) { header("Location: infout.php?ef=città$from_page"); ob_end_clean(); exit; } if (!isset($iu->Stato) or !OrdineValido::valStr($iu->Stato, OrdineValido::MAX_STATO_LEN)) { header("Location: infout.php?ef=stato$from_page"); ob_end_clean(); exit; } if (!isset($iu->Cap) or !OrdineValido::valStr($iu->Cap, OrdineValido::MAX_CAP_LEN)) { header("Location: infout.php?ef=cap$from_page"); ob_end_clean(); exit;

Page 40: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 40

} if (!isset($iu->Nazione) or !OrdineValido::valStr($iu->Nazione, OrdineValido::MAX_NAZIONE_LEN)) { header("Location: infout.php?ef=nazione$from_page"); ob_end_clean(); exit; } if (isset($iu->Telefono) and !OrdineValido::valTelefono($iu->Telefono, $iu->Nazione)) { header("Location: infout.php?ef=telefono$from_page"); ob_end_clean(); exit; } if (!isset($iu->Email) or !OrdineValido::valIndEmail($iu->Email)) { header("Location: infout.php?ef=email$from_page"); ob_end_clean(); exit; } if (!isset($iu->Password1) or $iu->Password1 == '' or strlen($iu->Password1) < 8 or !isset($iu->Password2) or $iu->Password1 != $iu->Password2) { header("Location: infout.php?ef=password$from_page"); ob_end_clean(); exit; }

Mentre i file con radice iniziale info(infout,infosped,infopag) sono sono accomunati da un’iniziale ricerca dei dati esistenti nella $_SESSION,da un controllo dati e conseguente messaggio di errore per individuarne il campo di pertinenza e una visione finale del form.Nella figura 35 seguente viene riportato il codice del file infopag.php,depurato delle parti già descritte sopra.

/** * Se c'è qualche informazione nella sessione,allora * riempie i campi */ $tipocarta = ''; $numerocarta = ''; $expmesecarta = ''; $expannocarta = ''; $cardholder = ''; if (isset($_SESSION['infopag'])) { $ip = &$_SESSION['infopag']; $tipocarta = isset($ip['tipocarta']) ? $ip['tipocarta'] : ''; $numerocarta = isset($ip['numerocarta']) ? $ip['numerocarta'] : '';

Figura 34

Page 41: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 41

$expmesecarta = isset($ip['expmesecarta']) ? $ip['expmesecarta'] : ''; $expannocarta = isset($ip['expannocarta']) ? $ip['expannocarta'] : ''; $cardholder = isset($ip['cardholder']) ? $ip['cardholder'] : ''; } <!-- Mostra il titolo della pagina e una piccola descrizione di cosa l'utente deve fare. Se c'è un errore di input,viene mostrato il messaggio di errore. --> <br/> <table align='center' width='70%' border='0' cellspacing='0' cellpadding='4'> <tr> <td align='center' width='100%' class='tableLabelTiny'> Informazioni di fatturazione &gt;&gt; Informazioni di spedizione &gt;&gt; <b><u>Informazioni di pagamento</u></b> &gt;&gt; Rivedi e conferma <br/><br/> </td> </tr> <tr> <td align='center' width='100%' class='tableLabel'> Informazioni di spedizione </td> </tr> <tr> <td align='center' width='100%' class='tableLabelSmall'> Per favore inserisci il numero di carta di credito, la data di validità, e il nome del possessore(cardholder) della carta con cui intende acquistare. <br/> <?php /** * Se c'è un messaggio di errore associato alla pagina ed è * necessario che l'utente lo corregga, lo visualizza * con carattere rosso */ if (isset($_GET['ef']) and $_GET['ef'] != '') { switch ($_GET['ef']) { case 'tipocarta': $msg = 'Il tipo di carta specificato non è valido.'; break; case 'numerocarta': $msg = 'Il numero di carta specificato non è valido.'; break; case 'expcarta'; $msg = 'La carta non è valida.';

Page 42: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 42

break; case 'cardholder': $msg = 'Il nome del possessore di carta non è valido.'; break; } /** * Mostra il messaggio di errore */ echo <<<EOM <font class='errSmall'> <br/> Per favore correggi i seguenti errori verificatisi:<br/> <br/> $msg </font> EOM; } ?> <br/> </td> </tr> </table> <!-- Mostra la tabella in cui l'utente inserirà le informazioni di pagamento. Sarà annidato dentro il form che tratta l'inserimento dei dati. --> <form action='<?php echo $form_target ?>' method='POST'> <table align='center' width='70%' border='0' cellspacing='4' cellpadding='2'> <tr> <td width='40%' align='right' class='normalTable'> Tipo carta: </td> <td class='normalTable'> <select name='tipocarta' value='<?php echo $tipocarta ?>'> <option value='non valido'/>Per favore seleziona <?php /** * Si mantiene una lista in cartacredito.inc con alcune * carte di credito supportate. Riempie i campi attingendo * da questa lista. */ $cartac = CarteCredito::ottieniInfoCarta(); foreach ($cartac as $infocarta) { $sel = ($infocarta->Codice == $tipocarta) ? ' selected="selezionata"' : ''; echo <<<EOOPT

Page 43: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 43

<option value='{$infocarta->Codice}'{$sel}/> {$infocarta->Nome} EOOPT; } ?> </select> </td> </tr> <tr> <td width='40%' align='right' class='normalTable'> Numero carta: </td> <td class='normalTable'> <input type='text' size='30' name='numero carta' value='<?php echo $numerocarta ?>'/> </td> </tr> <tr> <td width='40%' align='right' class='normalTable'> Data di validità: </td> <td class='normalTable'> <?php $mval = ($expmesecarta != '') ? $expmesecarta : 'mm'; $aval = ($expannocarta != '') ? $expannocarta : 'aaaa'; ?> <input type='text' size='4' name='expmesecarta' value='<?php echo $mval ?>'/> / <input type='text' size='4' name='expannocarta' value='<?php echo $aval ?>'/> </td> </tr> <tr> <td width='40%' align='right' class='normalTable'> Nome possessore(cardholder): </td> <td class='normalTable'> <input type='text' size='30' name='cardholder' value='<?php echo $cardholder ?>'/> </td> </tr> <tr> <td colspan='2' align='center'> <input type='submit' value='Visualizza ordine'/> </td> </tr> </table> </form>

Figura 35

Page 44: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 44

E’ da notare che,per poter effettuare una simulazione di pagamento,sono stati creati due file di libreria:cartacredito.inc e gestpag.inc ed è stata definita una tabella cartedicredito nel file del database. Naturalmente,essendo solo file creati per test e non comprensivi nel progetto,la loro struttura non sarà qui rivelata.E’ tuttavia disponibile nella sottocartella librerie(i primi due) e inclusa nel file Negozio(la tabella).

ORDINE

Come già esplicato,l’avallo dell’ordine si snoda in due passi principali.La creazione di una voce ordine nell’omonima tabella gestita dalla classe GestOrd(gestione ordine) e la sua associazione tra l’ id ordine e i suoi elementi costituenti.I dati di utente sono gestiti dalla classe GestUt(gestione utente) che si occupa di verificare la validità di uno user, aggiornandolo o eventualmente creandolo qualora non ci fosse.Completato l’ordine, si registra il record nella tabella Ordine con relativo numero progressivo e se ne da comunicazione all’utente con una pagina dedicata(successo).Di seguito viene proposto il codice del modulo inviaord.php (fig.36)il vero responsabile della trasmissione ordine.

/** * Crea un account utente o aggiorna * quello già esistente */ $iu = &$_SESSION['infoutente']; $gu = GestUt::ottieniIstanza(); if (isset($iu->UtenteID) and $iu->UtenteID != -1) { $gu->aggiornaAccountUtente($iu); } else { $iu->UtenteID = $gu->creaNuovoAccount($iu); } /** * Crea le voci nella tabella Ordine e crea * le singole voci nella tabella Elord */ $gc = GestioneCarrello::ottieniIstanza(); $carrello = $gc->ottieniContCarrello(); $go = GestOrd::ottieniIstanza(); $ordine_num = $go->aggiungiOrdine($iu->UtenteID, $carrello, $_SESSION['infosped'], $_SESSION['infopag']); /** * Esegue l'ordine di pagamento */ $gp = GestPag::ottieniIstanza(); $pmt_conf_num = $gp->eseguiPag($ip['tipocarta'], $ip['numerocarta'], $ip['expmesecarta'],

Page 45: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 45

$ip['expannocarta'], $ip['cardholder'], $ip['costo_totale']); if ($pmt_conf_num == -1) { header('Location: infopag.php?pe=1'); ob_end_clean(); exit; } else { /** * Pagamento avvenuto */ $_SESSION['ordine_num'] = $ordine_num; $_SESSION['costo_totale'] = $_SESSION['infopag']['costo_totale']; $go->ConfermaPagamento($ordine_num, $pmt_conf_num); } /** * cancella il carrello relative informazioni * prima di andare alla pagina di successo */ $gc->CancellaCarrelloSpesa(); $_SESSION['infosped'] = array(); $_SESSION['infopag']= array();

header('Location: successo.php');

Come si desume dal codice sopra riportato GestUt utilizza due procedure alternative a seconda che l’utente sia già esistente(aggiornaAccountUtente)(fig.37) oppure no(creaNuovoAccount)(fig.38).Entrambe le procedure si avvalgono di una funzione manipolastringa definita nel file connesdb.inc che rende le stringhe adatte per l’inserimento nel database e la visualizzazione nelle pagine. /* *----------------------------- * aggiornaAccountUtente *----------------------------- * Aggiorna le informazioni utente su un account esistente * * * Parametri: * $in_iu - oggetto InfoUtente * * * * */ public function aggiornaAccountUtente(InfoUtente $in_iu) { /* * Connessione

Figura 36

Page 46: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 46

*/ $conn = Connesdb::ottieniConnessione(); /* * Ottiene i valori dei parametri per l'aggiornamento e li * salva per l'inserimento */ $email = Connesdb::manipolastringa($in_iu->Email); $nome = Connesdb::manipolastringa($in_iu->Nome); $azienda = Connesdb::manipolastringa($in_iu->Azienda); $indirizzo1 = Connesdb::manipolastringa($in_iu->Indirizzo1); $indirizzo2 = Connesdb::manipolastringa($in_iu->Indirizzo2); $città = Connesdb::manipolastringa($in_iu->Città); $stato = Connesdb::manipolastringa($in_iu->Stato); $cap = Connesdb::manipolastringa($in_iu->Cap); $nazione = Connesdb::manipolastringa($in_iu->Nazione); $telefono = Connesdb::manipolastringa($in_iu->Telefono); $password = Connesdb::manipolastringa($in_iu->Password1); /* * query */ $query = <<<EOQ UPDATE Utenti SET nome = '$nome', azienda = '$azienda', indirizzo1 = '$indirizzo1', indirizzo2 = '$indirizzo2', città = '$città', stato = '$stato', cap = '$cap', nazione = '$nazione', telefono = '$telefono', password = '$password' WHERE email = '$email' EOQ; /** * La esegue */ $result = @$conn->query($query); }

/* *------------------------ * creaNuovoAccount *------------------------ * Crea un nuovo account nella tabella Utenti del db * con le relative informazioni fornite *

Figura 37

Page 47: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 47

* Parametri: * $in_iu - informazioni utente del nuovo account * * * * */ public function creaNuovoAccount(InfoUtente $in_iu) { /* * Connessione */ $conn = Connesdb::ottieniConnessione(); /* * Ottiene i valori dei parametri per l'aggiornamento e li * salva per l'inserimento */ $nome = Connesdb::manipolastringa($in_iu->Nome); $azienda = Connesdb::manipolastringa($in_iu->Azienda); $indirizzo1 = Connesdb::manipolastringa($in_iu->Indirizzo1); $indirizzo2 = Connesdb::manipolastringa($in_iu->Indirizzo2); $città = Connesdb::manipolastringa($in_iu->Città); $stato = Connesdb::manipolastringa($in_iu->Stato); $cap = Connesdb::manipolastringa($in_iu->Cap); $nazione = Connesdb::manipolastringa($in_iu->Nazione); $telefono = Connesdb::manipolastringa($in_iu->Telefono); $email = Connesdb::manipolastringa($in_iu->Email); $password = Connesdb::manipolastringa($in_iu->Password1); /* * query */ $query = <<<EOQ INSERT INTO Utenti (nome, azienda, indirizzo1, indirizzo2, città, stato, cap, nazione, telefono, email, password) VALUES('$nome','$azienda','$indirizzo1','$indirizzo2', '$città','$stato','$cap','$nazione','$telefono', '$email', '$password') EOQ; /* * La esegue */ $result = @$conn->query($query); /* * operazione completata */ Figura 38

Page 48: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 48

return $conn->insert_id; }

Sempre riguardo all’invio ordine,la classe GesOrd prevede le procedure aggiungiOrdine e ConfermaPagamento(fig.39).Inoltre i dati carrello vengono cancellati non appena l’ordine è registrato con la routine CancellaCarrelloSpesa(fig.40) definito come oggetto GestCarrello in GestCar.inc. Può accadere che sia già stato generato un ordine con relativo id nella tabella Ordine del database,ma a causa di un errore occorso,non si riescono a crearne le singole voci nella tabella Elord. L’ordine risulta così incompleto,non possedendo di tutti i riferimenti necessari. Per ovviare a questo potenziale inconveniente,si ricorre alle transazioni SQL,ben supportate dal motore InnoDB impiegato.Cioè si riterrà conclusa la transazione se entrambe le operazioni hanno successo sulla procedura aggiungiOrdine. Per il primo step del processo la procedura effettua una chiamata alla funzione creaOrdine(fig.41),per il secondo chiama invece creaOrdineElem(fig.42),entrambe appartenenti alla classe GestOrd del file Gestord.inc.

/* *------------------- * aggiungiOrdine *------------------- * *Questa procedura prende le informazioni dal carrello della spesa *e aggiunge l'ordine al database.Gli articoli nel carrello * sono aggiunti all' Elord del database mentre l'ordine completo * è aggiunto alla tabella ordine * * Parametri: * $in_clienteid - identificativo cliente * $in_carrello - il carrello da aggiungere * $in_si - le informazioni di spedizione utente * $in_pmt - le informazioni di pagamento * * Restituisce: * integer - il numero d'ordine del database */ public function aggiungiOrdine ( $in_clienteid, $in_carrello, $in_si, $in_pmt ) { /* * connessione al database */ $conn = Connesdb::ottieniConnessione(); /*

Page 49: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 49

* comincia la transazione */ $conn->autocommit(FALSE); try { /* * crea l'ordine nel database */ $ordine_id = $this->creaOrdine($in_clienteid, $in_si, $in_pmt, $conn); /* * crea la singola voce per elemento */ $this->creaOrdineElem($order_id, $in_cart); } catch (Exception $ec) { /* * Se c'è un problema, "riavvolge" la transazione * e segnala l'eccezione */ $conn->rollback(); $conn->autocommit(TRUE); throw $ec; } /* * Altrimenti effettua la transazione */ $conn->commit(); $conn->autocommit(TRUE); return $ordine_id; } /* *-------------------------- * ConfermaPagamento *-------------------------- * * il pagamento dell'ordine è stato completato e c'è un numero * di conferma di questo.Viene inserito nella tabella ordine * * Parametri: * $in_ordineid - ordine da aggiornare * $in_conf - numero di conferma pagamento * * */ public function ConfermaPagamento($in_ordineid, $in_conf)

Page 50: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 50

{ /* * connessione al database */ $conn = Connesdb::ottieniConnessione(); /* * query */ $query = <<<EOQUERY UPDATE Ordine SET conferma_paga = $in_conf WHERE id_ordine = $in_ordineid EOQUERY; /* * Esegue */ $results = @$conn->query($query); }

*-------------- * creaOrdine *-------------- * * crea una voce nella tabella ordine per l'ordine utente. * Si sottoporranno le informazioni,tranne il numero di * conferma che si otterrà successivamente.Quindi verrà aggiunto * alla tabella.Ciascun elemento nell'ordine viene inserito nella * tabella Elord e possiede il riferimento all'identificativo * dell'ordine di questa voce. * * Parametri: * $in_clienteid - identificativo cliente dell'ordinativo * $in_si - informazioni di spedizione

*---------------------------- * CancellaCarrelloSpesa *---------------------------- * Azzera il carrello della spesa */ public function CancellaCarrelloSpesa() { if (isset($_SESSION) and isset($_SESSION['carrello'])) { unset($_SESSION['carrello']); } }

Figura 39

Figura 40

Page 51: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 51

* $in_pmt - informazioni di pagamento * * Restituisce: * intero con l'identificativo ordine * * * */ private function creaOrdine ( $in_clienteid, $in_si, $in_pmt ) { /* * connessione al database. */ $conn = Connesdb::ottieniConnessione(); /* * si salvano i parametri */ $nomesped = Connesdb::manipolastringa($in_si['nomesped']); $aziendasped = Connesdb::manipolastringa($in_si['aziendasped']); $indirizzo1 = Connesdb::manipolastringa($in_si['indirizzo1']); $indirizzo2 = Connesdb::manipolastringa($in_si['indirizzo2']); $citta = Connesdb::manipolastringa($in_si['citta']); $stato = Connesdb::manipolastringa($in_si['stato']); $cap = Connesdb::manipolastringa($in_si['cap']); $nazione = Connesdb::manipolastringa($in_si['nazione']); $telefono = Connesdb::manipolastringa($in_si['telefono']); /* * query */ $query = <<<EOQUERY INSERT INTO Ordine (id_ut,nome_sped,azienda_sped,indirizzo1_sped, indirizzo2_sped,città,stato,cap, nazione,telefono,costo_ordine,costo_sped, costo_totale,tipo_pagamento,stato_ordine) VALUES($in_clienteid,'$nomesped','$aziendasped','$indirizzo1', '$indirizzo2','$città','$stato','$cap','$nazione', '$telefono','{$in_pmt['costo_ordine']}', '{$in_pmt['spedizione']}','{$in_pmt['totale_ordine']}', '{$in_pmt['tipocarta']}',2) EOQUERY; /* * Inserimento nuova riga

Page 52: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 52

*/ $result = @$conn->query($query); /* * ottiene il valore dell'identificativo ordine creato */ return $conn->insert_id; }

*---------------------- * creaOrdineElem *-------------------- * inserisce gli elementinel carrello utente nella tabella * Elord nel database.Ciascuno di questi elementi è associato * con un'identificativo ordine della tabella ordine * * Parametri: * $in_ordineid - ordine id associato * $in_carrello - carrello contenente gli elementi da inserire */ private function creaOrdineElem ( $in_ordineid, $in_carrello ) { /* * connessione al database */ $conn = Connesdb::ottieniConnessione(); /* * per ogni elemento nel carrello crea una voce ordine * e la inserisce nella tabella */ foreach ($in_carrello as $elemcarrello) { /* * query. */ $query = <<<EOQUERY INSERT INTO Elord (id_ord,id_alb,prezzo,pezzi) VALUES($in_ordineid,{$elemcarrello->ArticoloID}, {$elemcarrello->PrezzoPerUnita},{$elemcarrello->NumeroPezzi}) EOQUERY; /* * inserimento */ $results = @$conn->query($query);

Figura 41

Page 53: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 53

} }

Le funzioni citate non esauriscono tutte quelle presenti nei file.Tuttavia sono state descritte le principali indispensabili per il funzionamento.In ogni caso,i file sono ben commentati.

2. Interfaccia:riguarda l’utilizzo dell’applicativo nelle varie fasi sequenziali. CONFIGURAZIONE DIRECTORIES

Il file applicativo “casavinile” è una cartella comprensiva delle seguenti sottodirectories:

• Database: comprende il file Negozio in formato MySql; • Immagini: comprende le immagini in formato .jpg dei prodotti in vendita.Ne è stata

inserita qualcuna per esempio; • Logs: è una cartella inclusiva del file errori.log dove vengono registrati i vari errori

susseguitisi; • Librerie: comprende i file di libreria con estensione .inc con le definizioni delle classi

e delle loro procedure e routine; • Moduli: comprende i moduli di pagina ,script di elaborazione in formato .php e un

foglio di stile foglio.css.

Per l’installazione è bene,prima di tutto,accertarsi che l’estensione mysql venga compilata in php nell’ambiente in cui l’applicazione lavora(Windows o Unix),così come è bene accertarsi che il server web integri i moduli in php. Per esempio,in questo applicativo si è utilizzato per alcuni test EasyPHP versione 5.3.3.1(con integrazioni già predisposte)per farlo girare su server Apache(in localhost). Il percorso è stato: C:\Programmi\EasyPHP-5.3.3.1\www\(……….).Bisognerebbe quindi sostituire questa directory con una opportuna per la propria configurazione.Secondariamente sarebbe necessario eseguire uno script nel database server per predisporre il database,le tabelle e gli account utente. Infine i file sono da collocare nelle posizioni opportune.In particolare,tutti i file in formato .php e .inc recano nelle include di libreria,il percorso usato per la simulazione,che quindi andrebbe variato. In seguito si indicano i passi da eseguire per trasportare l’applicativo in ambiente Windows.

� IMPOSTAZIONE DEL DATABASE: nella sottodirectory database/ di “casavinile” si trova il file negozio.mysql che può essere eseguito(run casavinile/negozio.mysql). Servono un nome utente e una password per creare il database e bisogna conoscere la posizione del client mysql.Se si inserisce “casavinile” in C:\Applicazioni\phpweb su Windows si esegue: pushd C:\Applicazioni\phpweb\casavinile\database c:\usr\mysql\bin\mysql.exe -u root -p enter password: ******** poi mysql> \. negozio.mysql

� IMPOSTAZIONE DELLE LIBRERIE: I percorsi dipendono dal modo in cui si vuole organizzare la propria directory root sul server web.Una soluzione è creare: d:\WebApp

Figura 42

Page 54: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 54

d:\WebApp\includes (di libreria) d:\WebApp\www (root del server web)

� INCLUDE_PATH: ci si assicura che l’include_path nel proprio file php.ini sia include_path=".;c:\php\includes;c:\php\pear; d:\WebApp\includes"

� COPIARE I FILE DA LIBRERIE: creare una sottodirectory per questa nuova directory includes chiamata negozio/ e copiare i file dalla directory librerie: pushd d:\Webapp\includes mkdir negozio chdir negozio xcopy c:\Applicazioni\phpweb\casavinile\librerie

� CONTROLLO PERMESSI FILE: ci si accerta che il server web abbia i permessi necessari per accedere alla directory. Si dovrà definire l’utente che usa il server web come anonimo e avrà facoltà di lettura su tutte le directory. Quindi si accedono alle impostazioni su d:\WebApp\includes,si seleziona la scheda protezione e si aggiunge UTENTE_HOSTNAME. Poi si seleziona questo nome in “nomi gruppo” o “utenti” e si assegnano i permessi di “lettura ed esecuzione”.

� IMPOSTAZIONE FILE DI IMMAGINE: si crea una directory nella root che immagazzini i file di immagine dei prodotti. Per convenzione le immagini sono rintracciabili in una sottodirectory denominata immagini della directory in cui agiscono i moduli php. I file di immagine da copiare sono pochi,fungevano solo da esempio.Se l’applicativo viene sfruttato,le immagini verranno memorizzate ex novo. Quindi: pushd d:\WebApp\www mkdir immagini cd immagini xcopy c:\Applicazioni\phpweb\casavinile\immagini Controllare i permessi dei file appena copiati.

� IMPOSTAZIONE DEI FILE PHP: si copiano i file dell’applicazione nella root directory.Cioè: pushd d:\WebApp\www xcopy c:\Applicazioni\phpweb\casavinile\moduli Verificare comunque che il percorso dei file da includere presente sulla testa dei file sia corretto.

� ESEGUIRE L’APPLICAZIONE: si attiva un browser web e sulla barra degli indirizzi si chiama il protocollo http:// e si digita il nome dell’host che può essere localhost se il server web è lo stesso che si usa per navigare. In definitiva: http://localhost/homepage.php.

ESEMPIO D’USO

Entrando nel sito si viene indirizzati alla homepage(fig.43)in cui i prodotti da ricercare possono essere filtrati per artista,etichetta o genere.

Page 55: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 55

Quindi il risultato di una ricerca può fornire il risultato visibile in fig.44.Vi compaiono le immagini dei prodotti disposti in massimo di due per riga con sette diverse righe sottostanti.La prima riporta il titolo dell’album e prodotto,la seconda un breve commento e l’anno di uscita,la terza l’artista,la quarta l’etichetta di produzione,la quinta il genere cui appartiene,la sesta il prezzo e la settima predispone il pulsante per selezionare il prodotto. La parte bassa della pagina resta uguale alla precedente,con filtri, pulsante di comando ricerca e i due link “Trattamento dei dati” e “Chi siamo”.Come del resto la parte alta della pagina che verrà mostrata in altre successive.

Figura 43

Page 56: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 56

Dopo ogni ordine o in qualunque istante della navigazione è possibile visualizzare il contenuto della spesa e scegliere se eventualmente completare l’ordine,procedere al saldo,cercare altri articoli o,eventualmente,chiedere un aiuto.In fig.45 è rappresentata la schermata qui esplicitata,in cui si vede anche la parte alta comune a tutte le pagine inserite finora.

Figura 44

Page 57: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 57

Se si vuole richiedere un aiuto ciccando nella parte alta destra dello schermo si ottiene(fig.46):

Figura 45

Page 58: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 58

Se si incorresse in qualche errore potrebbe capitare di imbattersi in questi messaggi(fig.47):

Figura 46

Page 59: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 59

Si potrebbe decidere a un certo punto di ordinare gli articoli prescelti.Quindi non resta che visualizzare il contenuto del carrello e raggiungerlo ciccando nell’apposita voce in alto a destra e da qui eseguire l’ordine.Quindi sul computer compare(fig.48):

Figura 47

Page 60: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 60

Dove ci si fa riconoscere e successivamente si può procedere con l’inserimento dei dati personali e di fatturazione(fig.49),di spedizione(fig.50) e di pagamento(fig.51).

Figura 48

Page 61: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 61

Figura 49

Page 62: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 62

Figura 50

Page 63: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 63

Infine,prima di prendere una decisione definitiva è bene ricontrollare tutte le informazioni e,eventualmente,variarle ciccando su cambia(fig.52 e 53,ma la schermata è la stessa).

Figura 51

Page 64: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 64

Figura 52

Page 65: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 65

Finalmente l’ordine è stato completato con successo e quindi si assiste al messaggio di figura 54.

Figura 53

Page 66: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 66

Figura 54

Page 67: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 67

33.. CCoonncclluussiioonnii

Ciò che ci si prefiggeva nella fase iniziale era creare un sistema elastico ed adattabile a x tipologie di commercio elettronico.Il lavoro svolto si è rivelato soddisfacente per gli obiettivi posti. I moduli realizzati sono flessibili e configurabili dall’utente,che può anche adattarli ad altri tipi di applicativi nello stesso ambito. Anche se nell’applicazione sviluppata il database é finalizzato alla stessa,esso potrà venire generalizzato adottando una metodologia di generalizzazione dello stesso basata sulle tabelle di applicazione il cui concetto è molto simile alle system tables di database. Alcune scelte di partenza sono naturalmente migliorabili. Per esempio,la scelta di nominare file, comandi, librerie e variabili prevalentemente in italiano presenta qualche difficoltà in un’eventuale fruizione dell’applicativo dall’/all’ estero. Oltretutto ciò ha provocato delle errate visualizzazioni caratteri sulle pagine caricate dal browser(quadrati anziché termini con vocali accentate). Un altro miglioramento può prevedere l’inserimento di un campo vuoto generico che svolge attività di ricerca su tutte le tabelle della parola digitata dall’utente. Il layout non è graficamente molto gradevole.Questo non è un progetto di grafica, tuttavia il successo dell’esportazione prodotto dipende anche da questo fattore. L’inserimento della gestione errori non standard è stata predisposta(exception). Andrebbero quindi costruite delle routine apposite,purché non compromettano la stabilità del sistema. Per questo lavoro stati compilati 14 file in formato .inc per complessivi 58kb,in cui sono state definite 12 classi e 50 tra funzioni e procedure;un foglio di stile formato .css di 2kb di 51 righe di codice;18 file in formato .php per complessivi 69kb;1 file in formato Mysql di 4kb comprensivo di 9 tabelle;la copia di 7 file in formato .jpg per complessivi 70kb. L’autore esprime soddisfazione per il lavoro svolto. Il lavoro è stato testato parzialmente sui moduli e il risultato conseguito è stato positivo. Molti errori sui file sono stati corretti proprio dal feedback ricevuto sull’esecuzione dei test. Tuttavia,bisognerebbe compierne di più approfonditi,soprattutto sulla correttezza dei file di elaborazione,che sono più difficilmente verificabili in tutte le situazioni. Inoltre il progetto non include l’ espletamento dei pagamenti che sarà demandato ad esterni e ciò potrebbe inficiare alcuni dei test sviluppati in precedenza.

Page 68: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 68

BIBLIOGRAFIA LIBRI: DANIELE VIETRI,GIOVANNI CAPPELLOTTO:”e-Commerce” –HOEPLI ROBERTO GHISLANDI:”Il manuale dell’e-commerce”-APOGEO ANDREA TARR:”Sviluppare siti dinamici con PHP e MySQL”-HOEPLI MICHELE E. DAVIS,JON A. PHILIPS:”Programmare in PHP e MySQL”-HOPS MARK WANDSCHNEIDER:”Sviluppare applicazioni web con PHP e MySQL”-APOGEO ANTONIO GHU:”Programmare con PHP”-FAG BIBLIOGRAFIA IN RETE: http://www.wikipedia.org http://www.html.it http://www.w3schools.com http://www.phpfraks.com http://www.php.net http://www.phpclasses.org http://www.mysql.com http://www.apache.org

Page 69: Tesi di laurea   Fabiano Dalla Piazza

tesi di laurea triennale in ingegneria informatica

progettazione e sviluppo di un’applicazione per commercio elettronico 69

IInnddiiccee

Introduzione……………………………………………………………………………………… 2 1 Analisi e progettazione…………………………………………………………………… …. 2 1 Requisiti……………………………………………………………………………………… 3 2 Analisi………………………………………………………………………………………… 3 primo strato………………………………………………………………………………...3 secondo strato……………………………………………………………………………..3 terzo strato………………………………………………………………………………… 4 quarto strato………………………………………………………………………………. 4 settori………………………………………………………………………………………. 5 layout delle pagine……………………………………………………………………….. 6 database……………………………………………………………………………………8 3 Progettazione……………………………………………………………………………….12 file pagine PHP………………………………………………………………………….. 12 file script PHP…………………………………………………………………………….13 file di libreria INC………………………………………………………………………... 15 2 Realizzazione…………………………………………………………………………………. 17 1 Implementazione………………………………………………………………………….. 17 database…………………………………………………………………………………..17 piano per l’interfaccia…………………………………………………………………… 20 navigare tra i prodotti…………………………………………………………………… 23 album……………………………………………………………………………………... 29 attivazione carrello………………………………………………………………………. 34 pagamento……………………………………………………………………………….. 36 ordine……………………………………………………………………………………... 44 2 Interfaccia………………………………………………………………………………….. 53 configurazione directories……………………………………………………………….53 esempio d’uso…………………………………………………………………………… 54 3 Conclusioni…………………………………………………………………………………… 67 Bibliografia……………………………………………………………………………………… 68 Indice……………………………………………………………………………………………... 69


Recommended