Tesi di laurea Fabiano Dalla Piazza

  • 1,218 views
Uploaded on

Progettazione e sviluppo di un'applicazione per commercio elettronico-Tesi di laurea triennale

Progettazione e sviluppo di un'applicazione per commercio elettronico-Tesi di laurea triennale

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,218
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
18
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Università degli studi di Trieste Tesi di laurea triennale in ingegneria informatica Progettazione e sviluppo di un’applicazione per commercio elettronico Laureando RelatoreFabiano Dalla Piazza Preg.mo prof.Maurizio Fermeglia Anno accademico 2011-12
  • 2. tesi di laurea triennale in ingegneria informatica IntroduzioneQuesta tesi si occupa della costruzione,strutturazione e realizzazione di un’applicazioneper commercio elettronico. Consentirà agli utenti di visualizzare dei prodotti,di selezionarlio restituirli se precedentemente scelti,infine di riceverli con relativa fatturazione.Ciò che ci si prefigge è ideare una struttura informativa commerciale replicabile in scala epotenzialmente remunerativa.La causa scatenante è il desiderio di apprendere una metodologia per fabbricare un’utilestrumento di business potenzialmente estendibile.Tuttavia si è generata dalle esigenze diuna commercializzazione artigianale di tipo familiare.Il commercio on-line è in continuo incremento.Si prevedono ulteriori espansioni future.Lepotenzialità sono causate dai principali fattori di comodità e convenienza economica(menocode,meno viaggi,meno tempo perso e il tempo è denaro,riduzione della catena diintermediazione commerciale,minor sovrapprezzo). Le attuali soluzioni modulari dei carrellipreimpostati vanno inseriti e integrati in un sistema che non è specializzato a tal fine. Leproposte più “compatte” prevedono la delega della gestione mediante pagamento di uncanone periodico piuttosto elevato,se raffrontato con i costi di gestione(hosting,aggiornamenti). Questi si ammortizzano sulla quantità di siti amministrati. Tuttavia tali costisono inevitabilmente destinati a scendere a ragione di un maggior numero di competitori.L’alternativa è scaricare un pacchetto software configurato,ma personalizzabile in base aiprodotti. E’ il prodotto di questo progetto.Ci si pongono delle tappe progressive per lo sviluppo del progetto riassumibili nei seguentipunti: 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é indotazione all’autore,Mysql come RDBMS e utilizzati moduli in .php per fornire script dielaborazione o pagine vere e proprie del sito,eventualmente corredato da delle include dilibreria in formato .txt ,.inc.Le motivazioni di questa scelta verranno spiegate nella fasefinale. 1. Analisi e progettazione progettazione e sviluppo di un’applicazione per commercio elettronico 2
  • 3. tesi di laurea triennale in ingegneria informatica1. Requisiti:l’utente che si connette al sito naviga tra i prodotti,ne visualizza lecaratteristiche ed eventuali commenti di altri utenti. Può aggiungere un prodotto,toglierlo emonitorare il materiale in ordinazione in ogni momento. Quando ha terminato la propriaspesa, invia i dati di fatturazione e spedizione con codice criptato,li verifica, sceglie lamodalità preferita di pagamento, lo esegue,e ne constata il successo o meno. L’utenteviene 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 garantirel’incolumità e la privatezza dei dati. Deve inoltre possedere facilità d’uso(aiuto),semplicità,scalabilità,robustezza e deve essere diffondibile commercialmente(parolechiave).2. Analisi:il sistema consente di interagire con pagine diverse in tempi diversi.Gli utentigiunti nel sito opereranno indifferentemente con la pagina dei prodotti che acquisteranno oquella del carrello della spesa,da cui controlleranno l’ordine e eventualmente lomodificheranno. L’utente può navigare come registrato. Esaminato il riepilogo d’ordinefinale il sistema chiederà il riconoscimento dell’utente;se egli è già registrato i suoi datisono già presenti,altrimenti se ne richiederà l’iscrizione. Se soddisfatti dei propriacquisti,gli utenti pagheranno,inserendo le informazioni di utente,spedizione e pagamento.Se la transazione riesce e l’ordine è accettato,l’utente ne riceve comunicazione tramiteuna pagina. Accedendo dalla home page è possibile individuare degli strati gerarchici dinavigazione,ovviamente percorribili anche in direzione down-up. La segnalazione di erroripuò verificarsi in ogni posizione e in questi schemi viene omessa.PRIMO STRATO:ACCESSO DALLA HOME PAGE(fig.1):si possono visualizzare iprodotti,richiedere un aiuto,visualizzare il contenuto del carrello tramite il mostracarrello;da questo si può ritornare a visionare i prodotti e effettuare il saldo;dopo l’aiuto èpossibile rivedere i prodotti. DALLA RETE:: DALLA RETE HOME PAGE MOSTRA PRODOTTI MOSTRA CARRELLO AIUTO SALDO MOSTRA CARRELLO MOSTRA PRODOTTI Figura 1SECONDO STRATO(fig.2):provenendo dal primo strato si possono raggiungere la fasemostra prodotti in cui si possono selezionare gli articoli aggiungendoli o togliendoli,qualorasi percorra la gerarchia al contrario e controllare il contenuto del carrello;oppure sicontrolla se il cliente è registrato oppure no;se sì è possibile controllare le informazioni dispedizione;altrimenti queste si possono inserire una volta che ci si è iscritti. progettazione e sviluppo di un’applicazione per commercio elettronico 3
  • 4. tesi di laurea triennale in ingegneria informatica DAL PRIIMO STRATO:: DAL PR MO STRATO MOSTRA PRODOTTI AGGIUNGI/TOGLI MOSTRA CARRELLO UTENTE REGISTRATO INFORMAZIONI SPEDIZIONE Figura 2TERZO STRATO(fig. 3):provenendo dal secondo livello ci si accerta delle informazioniutente,di spedizione o pagamento e passare indifferentemente da una all’altra;inoltre èsempre possibile sincerarsi del dettaglio ordine. DAL SECONDO STRATO:: DAL SECONDO STRATO INFORMAZIONI UTENTE INFORMAZIONI SPEDIZIONE DETTAGLIO ORDINE INFORMAZIONI SPEDIZIONE INFORMAZIONI PAGAMENTO DETTAGLIO ORDINE INFORMAZIONI PAGAMENTO DETTAGLIO ORDINE Figura 3QUARTO STRATO(fig. 4):dopo aver verificato l’ordine lo si può effettuare ocontrollare/modificare le informazioni inserite e poi eseguire l’ordine;quindi si constata ilsuccesso di questo;oppure si può uscire con un menu esterno al carrello e tornare avisualizzare i prodotti. DAL TERZO STRATO:: DAL TERZO STRATO progettazione e sviluppo di un’applicazione per commercio elettronico 4
  • 5. tesi di laurea triennale in ingegneria informatica DETTAGLIO ORDINE INFORMAZIONI UTENTE INFORMAZIONI SPEDIZIONE INFORMAZIONI PAGAMENTO SUCCESSO SUCCESSO ORDINE APPROVATO MENU ESTERNO MOSTRA PRODOTTI MOSTRA CARRELLO AIUTO Figura 4I settori da esaminare nell’applicativo sono: Struttura:la struttura deve essere supportata da un database che contempla tre ordini di gestioni:lista prodotti,una lista temporanea o carrello e acquisti o lista ordinativi. Sicurezza dei dati:rappresenta la parte delicata dell’applicativo. I dati delle carte di credito vanno trasmessi in modo codificato. Memorizzarli sul server significa esporli in una posizione pericolosa e soggetta ad attacchi;non farlo provoca all’utente il disagio di dover ridigitare i dati ad ogni sessione di pagamento. Qui si è scelto di non conservarne l’archivio storico per motivi che verranno esplicitati nelle conclusioni finali. Per la crittografia è opportuno richiedere un certificato web(CA) e usare uno strato di sicurezza(SSL) del protocollo di trasporto(livello 4 OSI). Catalogo prodotti:è una lista degli articoli in vendita;l’utente li visualizza con tutte le caratteristiche(titolo,autore,genere,etc.se è un libro;marca,tipo,etc.se è un televisore,etc.).Lo scopo è di costruire un’infrastruttura di database scalabile ed estendibile,non un database. In questo caso,esso conterrà una sola tipologia di prodotto,cioè dei dischi in vinile,contraddistinti principalmente da autore,titolo,genere,anno,etichetta.Acquisito il risultato finale,si potrà configurare il sistema con qualsivogliano n prodotti appartenenti a x tipologie differenti,basandosi sui numerosi esempi di database presenti in rete. L’ eventuale aggiunta di ulteriori tipologie di prodotti arricchirà la sottocategoria della radice prodotti. Carrello della spesa:è la lista contenente gli articoli da acquistare;se un articolo da inserire non c’è,viene inserito;altrimenti viene incrementata la quantità dello stesso di un’unità.Il sistema assegna un carrello diverso ad ogni utente e memorizza i dati di questa sessione;a termine sessione si perdono i dati se non viene conclusa la transazione,quindi non è previsto un archivio storico. Salvando la coppia carrello- utente nel database si potrebbe assegnare lo stesso carrello all’utente in una sessione diversa(con i cookies).Ciò comporterebbe una gestione più complessa,ma consentirebbe anche la consultazione dell’archivio storico.Nelle conclusioni verranno meglio specificate le motivazioni della scelta. progettazione e sviluppo di un’applicazione per commercio elettronico 5
  • 6. tesi di laurea triennale in ingegneria informatica Informazioni:per concretizzare gli ordini servono tre tipi diversi di informazioni cioè di utente,di spedizione e di pagamento;sul primo tipo sono essenziali nome e cognome,indirizzo fisico e virtuale(E-mail),numero di telefono e password;sul secondo tipo nome e indirizzo;sul terzo le modalità di pagamento;se si sceglie la carta di credito la gestione dati viene affidata ad un esterno(vedi la voce Pagamenti sotto),altrimenti sono previsti contrassegno o bonifico bancario che prevedono il pagamento off-line. Pagamenti:avere un server dedicato per questo genere di elaborazioni presuppone una dimensione rilevante dovuta al costo,alla manutenzione e gestione. Delegando la gestione dei pagamenti ad un provider esterno si superano questi problemi. E’ necessario quindi avvalersi di un account da un fornitore di servizi bancari e integrare i moduli e le librerie installandoli nel proprio sistema. Ordini:ogni ordine è un’ entità,ha suo progressivo ed è corredato dalle informazioni dell’importo di ogni singola voce(prodotto x,prodotto y,spedizione,tasse). La registrazione dell’ordine nel database avviene dopo la conferma del pagamento.Questa ha un numero d’ordine che viene memorizzato e aggiorna lo stato dell’ordine.Quindi si comunica tramite E-mail il successo o meno dell’operazione. Elementi dell’ordine:si stabilisce un’entità che possiede un’identificatore per ogni elemento del catalogo e il suo prezzo unitario.Questi vengono poi associati all’identificativo dell’ordine assieme alla quantità prescelta.LAYOUT DELLE PAGINEAttraverso gli schemi dei 4 strati e i settori studiati si giunge al seguente schema cheesplicita il layout delle pagine.Da questo si ricaveranno i moduli delle pagine o mascherenella fase successiva di progettazione.Si può giungere alla pagina di errore da unaqualunque pagina qualora se ne riscontri uno.Anche gli aiuti sono raggiungibili dalla quasitotalità 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 siraggiunge la pagina utente se egli è riconosciuto dal sistema,altrimenti si viene indirizzatialla pagina nuovo utente da cui si accede poi a quest’ultima,terminata l’acquisizionecorretta dei dati.Seguono poi l’inserimento dei dati di spedizione e pagamento e infine ilresoconto finale dell’ordine che culmina con il completamento ordine e il suo eventualesuccesso comunicato all’utente.Quindi è possibile ritornare alla home page.Naturalmenteè possibile saltare indifferentemente tra ciascuna fasedati(spedizione,utente,pagamento)purché le informazioni vengano inserite tutte.Loschema è rappresentato nella figura 5. progettazione e sviluppo di un’applicazione per commercio elettronico 6
  • 7. tesi di laurea triennale in ingegneria informatica HOME PAGE AIUTO PRODOTTI CARRELLO SALDO ERRORE NUOVO UTENTE UTENTE SPEDIZIONE PAGAMENTO DETTAGLIO ORDINE ORDINE COMPLETATO PAGINA WEB SUCCESSO ORDINE Figura 5Quindi si individuano le seguenti pagine necessarie:• Home page(HOME):la pagina di inizio navigazione,la root directory;• Aiuto(AIUTO):la pagina di informazioni per assistere l’utente;• Errore(ERRORE):la pagina per visualizzare gli errori;• Mostra prodotti(MOSTRAPRO):la pagina di visualizzazione dei prodotti da cui si selezionano i prodotti;• Mostra carrello(MOSTRACAR):la pagina di visualizzazione del contenuto dell’ordine in tempo reale;l’utente sceglie se completare l’ordine o modificarlo;• Saldo o checkout(SALDO):la pagina iniziale della procedura di pagamento da cui effettuare il login se si è utenti iscritti o iscriversi come nuovi utenti;• Informazioni utente(INFOUT):la pagina dove vengono inseriti i dati personali dell’acquirente; progettazione e sviluppo di un’applicazione per commercio elettronico 7
  • 8. tesi di laurea triennale in ingegneria informatica• Informazioni spedizione(INFOSPED):la pagina dove vengono inserite le informazioni riguardanti l’invio delle merci comprate;• Informazioni pagamento(INFOPAG):la pagina dove vengono inserite le informazioni di pagamento,compresi gli estremi delle carte di credito;• Dettaglio ordine(DETORD):la pagina che riassume l’acquisto,consultabile dall’utente prima dello stesso;• Successo(SUCCESSO):la pagina di conferma ordine quando è terminato.DATABASEBisogna 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 unqualunque negozio x,il secondo è riferito a questo particolare esempio comprensivo delcatalogo dischi.In figura 6 è riportato lo schema E-R dell’applicativo.Le due strutturegenerica e particolare sono suddivise.La root directory del negozio è la tabellaprodotto,che in questo caso particolare coincide con la tabella album,poiché in questoesempio si è scelto di vendere esclusivamente dischi.Se si desiderano vendere unamolteplicità di prodotti,la tabella prodotto fungerà da tabella radice da cui partire perramificare tutti gli articoli che si venderanno.Viene inoltre introdotta una tabella opzionalecarte di credito creata per effettuare la simulazione di un pagamento e testare lacorrettezza del prodotto finale,ma non prevista nel prodotto finale dell’applicativo.Infatti,come già scritto precedentemente,le procedure dei pagamenti saranno affidati adesterni.Le tabelle dell’infrastruttura prevedono un ordine(tabella ordine) composto da totarticoli che ne costituiscono gli elementi(tabella elementi ordine),uno statusdell’ordine(tabella status ordine) che ne indica lo stato di avanzamento e un’utente(tabellautente),cui questo ordine è associato. Il prodotto venduto che è in questo caso sempre unalbum(tabella album) appartiene ad un genere musicale(tabella genere),è stato inciso dauno o più artisti(tabella artista) e ed è prodotto da un’etichetta o casa discografica(tabellaetichetta).Il rapporto numerico tra tabelle è comunque indicato nello schema. progettazione e sviluppo di un’applicazione per commercio elettronico 8
  • 9. tesi di laurea triennale in ingegneria informatica (1,N) ORDIINE ORD NE (1,1) (1,N) VERIIFIICA VER F CA COMPOSIIZIIONE COMPOS Z ONE ASSOCIIAZIIONE ASSOC AZ ONE (1,N) (1,N) (1,N) STATUS STATUS ELEMENTII ELEMENT UTENTE UTENTE ORDIINE ORD NE ORDIINE ORD NE (1,N) IINFRASTRUTTURA NFRASTRUTTURA IINFRASTRUTTURA NFRASTRUTTURA SCELTA SCELTA ESEMPIIO DIISCHII ESEMP O D SCH ESEMPIIO DIISCHII ESEMP O D SCH (1,N) (1,N) PRODOTTO= PRODOTTO= (1,1) ALBUM ALBUM (1,1) IINCIIDE NC DE POSSIIEDE POSS EDE PRODOTTO PRODOTTO (1,N) (1,N) (1,N) ARTIISTA ART STA GENERE GENERE ETIICHETTA ET CHETTA Figura 6Nella successiva figura 7 è invece rappresentata la costruzione delle tabelle comprensivadei campi,chiavi primarie,chiavi esterne e i collegamenti tra loro. progettazione e sviluppo di un’applicazione per commercio elettronico 9
  • 10. tesi di laurea triennale in ingegneria informatica STATUSOR STATUSOR STATUSOR ORDIIINE ORD N E ORD NE UTENTIII UTENT UTENT 1 1 1 PK PK PK IIID_STATUS D _STATUS D_STATUS PK PK PK IIID_ALBUM D _ALBUM D_ALBUM PK PK PK IIID_UTENTE D _UTENTE D_UTENTE N STATO STATO STATO FK FK FK IIID_ST D _ST D_ST NOME NOME NOME N FK FK FK IIID_UT D _UT D_UT AZIIIENDA AZ E NDA AZ ENDA NOME_SPED NOME_SPED NOME_SPED IIINDIIIRIIIZZO1 N D R Z ZO1 ND R ZZO1 AZIIIENDA_SPED AZ E NDA_SPED AZ ENDA_SPED IIINDIIIRIIIZZO2 N D R Z ZO2 ND R ZZO2 IIINDIIIRIIIZZO1_SPED N D R Z ZO1_SPED ND R ZZO1_SPED CIIITTA’’’ C T TA C TTA ELORD ELORD ELORD IIINDIIIRIIIZZO 2_SPED N D R Z Z O 2 _ SPED ND R ZZO 2_SPED STATO STATO STATO PK PK PK IIID_ELORD D _ELORD D_ELORD CIIITTA’’’_SPED C T TA _ SPED C TTA _SPED CAP CAP CAP N FK FK FK IIID_ORD D _ORD D_ORD STATO_SPED STATO_SPED STATO_SPED NAZIIIONE NAZ O NE NAZ ONE FK FK FK IIID_ALB D _ALB D_ALB CAP_SPED CAP_SPED CAP_SPED TELEFONO TELEFONO TELEFONO N PREZZO PREZZO PREZZO NAZIIIONE_SPED NAZ O NE_SPED NAZ ONE_SPED EMAIIIL EMA L EMA L PEZZIII PEZ Z PEZ Z TELEFONO_SPED TELEFONO_SPED TELEFONO_SPED PASSW ORD PASSW ORD PASSW ORD COSTO_ORD COSTO_ORD COSTO_ORD COSTO_SPED COSTO_SPED COSTO_SPED COSTO_TOTALE COSTO_TOTALE COSTO_TOTALE TIIIPO_PAGAMENTO T P O_PAGAMENTO T PO_PAGAMENTO CONFERMA_PAGA CONFERMA_PAGA CONFERMA_PAGA STATO_ORDIIINE STATO_ORD N E STATO_ORD NE ESECUTORE_ORD ESECUTORE_ORD ESECUTORE_ORDIINFRASTRUTTURA NFRASTRUTTURAESEMPIIO DIISCHII ESEMP O D SCH PRODOTTO=ALBUM PRODOTTO=ALBUM PRODOTTO=ALBUM 1 ARTIIISTA ART S TA ART STA PK PK PK IIID_ALBUM D _ALBUM D_ALBUM 1 NPKPKPK IIID_ART D _ART D_ART FK FK FK IIID_ARTIIISTA D _ART S TA D_ART STA ETIIICHETTA ET C HETTA ET CHETTA N 1 NOME NOME NOME FK FK FK IIID_ETIIICHETTA D _ET C HETTA D_ET CHETTA PK PK PK IIID_ETIII D _ET D_ET N FK FK FK IIID_GENERE D _GENERE D_GENERE NOME NOME NOME TIIITOLO T T OLO T TOLO GENERE GENERE GENERE DESCRIIIZIIIONE DESCR Z O NE DESCR Z ONE 1PKPKPK IIID_GEN D _GEN D_GEN IIIMMAGIIINE M MAG N E MMAG NE NOME NOME NOME PREZZO PREZZO PREZZO LEGENDA::: LEGENDA LEGENDA ENTIIITY ENT T Y ENT TY IIID_FIIIELD D _F E LD D_F ELD PRIIIMARY KEY PR M ARY KEY PR MARY KEY FOREIIIGN KEY FORE G N KEY FORE GN KEY FIIIELD F E LD F ELD Figura 7 progettazione e sviluppo di un’applicazione per commercio elettronico 10
  • 11. tesi di laurea triennale in ingegneria informaticaQuindi si esplicitano le tabelle(dalla 1 alla 5 sono dell’infrastruttura;dalla 6 alla 9 sonodell’esempio) e i loro contenuti secondo il seguente schema: TABELLA ELORD(ELEMENTI ORDINE)PRIIIMARY KEYPR M ARY KEYPR MARY KEY IIID_ELORD D _ELORD D_ELORD CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII.. CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER . CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTERFOREIIIGN KEYFORE G N KEYFORE GN KEY IIID_ORD D _ORD D_ORD CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZIIIAZIIIONE CON LA CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZ A Z O NE CON LA CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZ AZ ONE CON LA TABELLA ORDIIINE...IINTERIII NON NULLIII.. TABELLA ORD N E IN TER NON NULL . TABELLA ORD NE NTER NON NULLFOREIIIGN KEYFORE G N KEYFORE GN KEY IIID_ALB D _ALB D_ALB CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZIIIAZIIIONE CON LA CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZ A Z O NE CON LA CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZ AZ ONE CON LA TABELLA ALBUM((PRODOTTO))..IINTERIII NON NULLIII.. TABELLA ALBUM(P RODOTTO).IN TER NON NULL . TABELLA ALBUM PRODOTTO NTER NON NULL FIIIELD F E LD F ELD PREZZO PREZZO PREZZO CAMPO:::STRIIINGA NUMERIIICA <=6CARATTERIII+2 DECIIIMALIII NON NULLA... CAMPO S TR N GA NUMER C A <=6CARATTER + 2 DEC M AL NON NULLA CAMPO STR NGA NUMER CA <=6CARATTER +2 DEC MAL NON NULLA FIIIELD F E LD F ELD PEZZIII PEZZ PEZZ CAMPO:::STRIIINGA NUMERIIICA <=4 CARATTERIII CON IIINTERIII NON NULLIII.. CAMPO S TR N GA NUMER C A <=4 CARATTER CON N TER NON NULL . CAMPO STR NGA NUMER CA <=4 CARATTER CON NTER NON NULLTabella 1 TABELLA ORDINEPRIIIMARY KEYPR M ARY KEYPR MARY KEY IIID_ORDIIINE D _ORD N E D_ORD NE CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII.. CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER . CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTERFOREIIIGN KEYFORE G N KEYFORE GN KEY IIID_UT D _UT D_UT CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZIIIAZIIIONE CON LA CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZ A Z O NE CON LA CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZ AZ ONE CON LA TABELLA UTENTE...IINTERIII NON NULLIII.. TABELLA UTENTE IN TER NON NULL . TABELLA UTENTE NTER NON NULLFOREIIIGN KEYFORE G N KEYFORE GN KEY IIID_ST D _ST D_ST CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZIIIAZIIIONE CON LA CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZ A Z O NE CON LA CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZ AZ ONE CON LA TABELLA STATUS_OR((STATO DELL’’ORDIIINE))..IINTERIII NON NULLIII.. TABELLA STATUS_OR(S TATO DELL ’ORD N E).IN TER NON NULL . TABELLA STATUS_OR STATO DELL ORD NE NTER NON NULL FIIIELD F E LD F ELD NOME_SPED NOME_SPED NOME_SPED CAMPO:::STRIIINGA ALFANUMERIIICA <=120 CARATTERIII NON NULLIII.. CAMPO S TR N GA ALFANUMER C A <=120 CARATTER NON NULL . CAMPO STR NGA ALFANUMER CA <=120 CARATTER NON NULL FIIIELD F E LD F ELD AZIIIENDA_SPED AZ E NDA_SPED AZ ENDA_SPED CAMPO:::STRIIINGA ALFANUMERIIICA <=140 CARATTERIII.. CAMPO S TR N GA ALFANUMER C A <=140 CARATTER . CAMPO STR NGA ALFANUMER CA <=140 CARATTER FIIIELD F E LD F ELD IIINDIIIRIIIZZO1_SPE N D R Z ZO1_SPE ND R ZZO1_SPE CAMPO:::STRIIINGA ALFANUMERIIICA <=150 CARATTERIII NON NULLIII.. CAMPO S TR N GA ALFANUMER C A <=150 CARATTER NON NULL . CAMPO STR NGA ALFANUMER CA <=150 CARATTER NON NULL DD D FIIIELD F E LD F ELD IIINDIIIRIIIZZO2_SPE N D R Z ZO2_SPE ND R ZZO2_SPE CAMPO:::STRIIINGA ALFANUMERIIICA <=150 CARATTERIII NON NULLIII.. CAMPO S TR N GA ALFANUMER C A <=150 CARATTER NON NULL . CAMPO STR NGA ALFANUMER CA <=150 CARATTER NON NULL DD D FIIIELD F E LD F ELD CIIITTA’’_SPED C T TA ’_SPED C TTA _SPED CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII.. CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL . CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL FIIIELD F E LD F ELD STATO _SPED STATO _SPED STATO _SPED CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII.. CAMPO S TR N GA ALFANUMER C A <=100 CARATTER . CAMPO STR NGA ALFANUMER CA <=100 CARATTER FIIIELD F E LD F ELD CAP_SPED CAP_SPED CAP_SPED CAMPO:::STRIIINGA NUMERIIICA =10 CARATTERIII IIINTERIII NON NULLIII.. CAMPO S TR N GA NUMER C A =10 CARATTER N TER NON NULL . CAMPO STR NGA NUMER CA =10 CARATTER NTER NON NULL FIIIELD F E LD F ELD NAZIIIONE_SPED NAZ O NE_SPED NAZ ONE_SPED CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII.. CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL . CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL FIIIELD F E LD F ELD TELEFONO_SPE TELEFONO_SPE TELEFONO_SPE CAMPO:::STRIIINGA NUMERIIICA <=20 CARATTERIII IIINTERIII NON NULLIII.. CAMPO S TR N GA NUMER C A <=20 CARATTER N TER NON NULL . CAMPO STR NGA NUMER CA <=20 CARATTER NTER NON NULL DD D FIIIELD F E LD F ELD COSTO_ORDIIINE COSTO_ORD N E COSTO_ORD NE CAMPO:::STRIIINGA NUMERIIICA <=6CARATTERIII+2 DECIIIMALIII NON NULLA... CAMPO S TR N GA NUMER C A <=6CARATTER + 2 DEC M AL NON NULLA CAMPO STR NGA NUMER CA <=6CARATTER +2 DEC MAL NON NULLA FIIIELD F E LD F ELD COSTO_SPED COSTO_SPED COSTO_SPED CAMPO:::STRIIINGA NUMERIIICA <=6CARATTERIII+2 DECIIIMALIII NON NULLA... CAMPO S TR N GA NUMER C A <=6CARATTER + 2 DEC M AL NON NULLA CAMPO STR NGA NUMER CA <=6CARATTER +2 DEC MAL NON NULLA FIIIELD F E LD F ELD COSTO_TOTALE COSTO_TOTALE COSTO_TOTALE CAMPO:::STRIIINGA NUMERIIICA <=6CARATTERIII+2 DECIIIMALIII NON NULLA... CAMPO S TR N GA NUMER C A <=6CARATTER + 2 DEC M AL NON NULLA CAMPO STR NGA NUMER CA <=6CARATTER +2 DEC MAL NON NULLA FIIIELD F E LD F ELD TIIIPO_PAGAMEN T P O_PAGAMEN T PO_PAGAMEN CAMPO:::STRIIINGA ALFANUMERIIICA <=50 CARATTERIII NON NULLIII.. CAMPO S TR N GA ALFANUMER C A <=50 CARATTER NON NULL . CAMPO STR NGA ALFANUMER CA <=50 CARATTER NON NULL TO TO TO FIIIELD F E LD F ELD CONFERMA_PA CONFERMA_PA CONFERMA_PA CAMPO:::STRIIINGA ALFANUMERIIICA <=80 CARATTERIII NON NULLIII.. CAMPO S TR N GA ALFANUMER C A <=80 CARATTER NON NULL . CAMPO STR NGA ALFANUMER CA <=80 CARATTER NON NULL GA GA GA FIIIELD F E LD F ELD STATO_ORDIIINE STATO_ORD N E STATO_ORD NE CAMPO:::STRIIINGA ALFANUMERIIICA CARATTERIII NON NULLIII.. CAMPO S TR N GA ALFANUMER C A CARATTER NON NULL . CAMPO STR NGA ALFANUMER CA CARATTER NON NULL FIIIELD F E LD F ELD ESECUTORE_O ESECUTORE_O ESECUTORE_O CAMPO:::STRIIINGA ALFANUMERIIICA <=80 CARATTERIII.. CAMPO S TR N GA ALFANUMER C A <=80 CARATTER . CAMPO STR NGA ALFANUMER CA <=80 CARATTER RD RD RDTabella 2 TABELLA STATUSORPRIIIMARY KEYPR M ARY KEYPR MARY KEY IIID_STATUS D _STATUS D_STATUS CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII.. CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER . CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER FIIIELD F E LD F ELD STATO STATO STATO CAMPO:::STRIIINGA ALFANUMERIIICA <=50 CARATTERIII NON NULLIII.. CAMPO S TR N GA ALFANUMER C A <=50 CARATTER NON NULL . CAMPO STR NGA ALFANUMER CA <=50 CARATTER NON NULLTabella 3 TABELLA UTENTIPRIIIMARY KEYPR M ARY KEYPR MARY KEY IIID_UTENTE D _UTENTE D_UTENTE CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII.. CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER . CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER FIIIELD F E LD F ELD NOME NOME NOME CAMPO:::STRIIINGA ALFANUMERIIICA <=120 CARATTERIII NON NULLIII.. CAMPO S TR N GA ALFANUMER C A <=120 CARATTER NON NULL . CAMPO STR NGA ALFANUMER CA <=120 CARATTER NON NULL FIIIELD F E LD F ELD AZIIIENDA AZ E NDA AZ ENDA CAMPO:::STRIIINGA ALFANUMERIIICA <=140 CARATTERIII.. CAMPO S TR N GA ALFANUMER C A <=140 CARATTER . CAMPO STR NGA ALFANUMER CA <=140 CARATTER FIIIELD F E LD F ELD IIINDIIIRIIIZZO1 N D R Z ZO1 ND R ZZO1 CAMPO:::STRIIINGA ALFANUMERIIICA <=150 CARATTERIII NON NULLIII.. CAMPO S TR N GA ALFANUMER C A <=150 CARATTER NON NULL . CAMPO STR NGA ALFANUMER CA <=150 CARATTER NON NULL FIIIELD F E LD F ELD IIINDIIIRIIIZZO2 N D R Z ZO2 ND R ZZO2 CAMPO:::STRIIINGA ALFANUMERIIICA <=150 CARATTERIII NON NULLIII.. CAMPO S TR N GA ALFANUMER C A <=150 CARATTER NON NULL . CAMPO STR NGA ALFANUMER CA <=150 CARATTER NON NULL FIIIELD F E LD F ELD CIIITTA’’’ C T TA C TTA CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII.. CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL . CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL FIIIELD F E LD F ELD STATO STATO STATO CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII.. CAMPO S TR N GA ALFANUMER C A <=100 CARATTER . CAMPO STR NGA ALFANUMER CA <=100 CARATTER FIIIELD F E LD F ELD CAP CAP CAP CAMPO:::STRIIINGA NUMERIIICA =10 CARATTERIII IIINTERIII NON NULLIII.. CAMPO S TR N GA NUMER C A =10 CARATTER N TER NON NULL . CAMPO STR NGA NUMER CA =10 CARATTER NTER NON NULL FIIIELD F E LD F ELD NAZIIIONE NAZ O NE NAZ ONE CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII.. CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL . CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL FIIIELD F E LD F ELD TELEFONO TELEFONO TELEFONO CAMPO:::STRIIINGA NUMERIIICA <=20 CARATTERIII IIINTERIII NON NULLIII.. CAMPO S TR N GA NUMER C A <=20 CARATTER N TER NON NULL . CAMPO STR NGA NUMER CA <=20 CARATTER NTER NON NULL FIIIELD F E LD F ELD EMAIIIL EMA L EMA L CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII.. CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL . CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL FIIIELD F E LD F ELD PASSWORD PASSWORD PASSWORD CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII CONTENENTIII ““@””.. CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL CONTENENT “@ ”. CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL CONTENENT @Tabella 4Tabella 5 progettazione e sviluppo di un’applicazione per commercio elettronico 11
  • 12. tesi di laurea triennale in ingegneria informatica INFRASTRUTTURA ESEMPIO DISCHI TABELLA ALBUM(=PRODOTTI)PRIIIMARY KEYPR M ARY KEYPR MARY KEY IIID_ALBUM D _ALBUM D_ALBUM CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII.. CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER . CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTERFOREIIIGN KEYFORE G N KEYFORE GN KEY IIID_ARTIIISTA D _ART S TA D_ART STA CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZAZIIIONE CON LA TABELLA CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZAZ O NE CON LA TABELLA CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZAZ ONE CON LA TABELLA ARTIIISTA...IINTERIII NON NULLIII.. ART S TA IN TER NON NULL . ART STA NTER NON NULLFOREIIIGN KEYFORE G N KEYFORE GN KEY IIID_ETIIICHETTA D _ET C HETTA D_ET CHETTA CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZAZIIIONE CON LA TABELLA CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZAZ O NE CON LA TABELLA CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZAZ ONE CON LA TABELLA ETIIICHETTA...IINTERIII NON NULLIII.. ET C HETTA IN TER NON NULL . ET CHETTA NTER NON NULLFOREIIIGN KEYFORE G N KEYFORE GN KEY IIID_GENERE D _GENERE D_GENERE CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZAZIIIONE CON LA TABELLA CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZAZ O NE CON LA TABELLA CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZAZ ONE CON LA TABELLA GENERE...IINTERIII NON NULLIII.. GENERE IN TER NON NULL . GENERE NTER NON NULL FIIIELD F E LD F ELD IIIMMAGIIINE M MAG N E MMAG NE CAMPO:::STRIIINGA ALFANUMERIIICA <=50 CARATTERIII NON NULLIII.. CONTIIIENE IIIL NOME CAMPO S TR N GA ALFANUMER C A <=50 CARATTER NON NULL . CONT E NE L NOME CAMPO STR NGA ALFANUMER CA <=50 CARATTER NON NULL CONT ENE L NOME DELL’’IIIMMAGIIINE IIIN FORMATO ...JPG... DELL ’ M MAG N E N FORMATO J PG DELL MMAG NE N FORMATO JPG FIIIELD F E LD F ELD DESCRIIIZIIIONE DESCR Z O NE DESCR Z ONE CAMPO:::STRIIINGA DESCRIIITTIIIVA DIII TESTO... CAMPO S TR N GA DESCR T T V A D TESTO CAMPO STR NGA DESCR TT VA D TESTO FIIIELD F E LD F ELD TIIITOLO T T OLO T TOLO CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII.. CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL . CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL FIIIELD F E LD F ELD PREZZO PREZZO PREZZO CAMPO:::STRIIINGA NUMERIIICA <=6CARATTERIII+2 DECIIIMALIII NON NULLA... CAMPO S TR N GA NUMER C A <=6CARATTER + 2 DEC M AL NON NULLA CAMPO STR NGA NUMER CA <=6CARATTER +2 DEC MAL NON NULLATabella 6 TABELLA ARTISTAPRIIIMARY KEYPR M ARY KEYPR MARY KEY IIID_ART D _ART D_ART CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII.. CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER . CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER FIIIELD F E LD F ELD NOME NOME NOME CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII.. CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL . CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULLTabella 7 TABELLA ETICHETTAPRIIIMARY KEYPR M ARY KEYPR MARY KEY IIID_ETIII D _ET D_ET CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII.. CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER . CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER FIIIELD F E LD F ELD NOME NOME NOME CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII.. CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL . CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULLTabella 8 TABELLA GENEREPRIIIMARY KEYPR M ARY KEYPR MARY KEY IIID_GEN D _GEN D_GEN CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII.. CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER . CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER FIIIELD F E LD F ELD NOME NOME NOME CAMPO:::STRIIINGA ALFANUMERIIICA <=50 CARATTERIII NON NULLIII.. CAMPO S TR N GA ALFANUMER C A <=50 CARATTER NON NULL . CAMPO STR NGA ALFANUMER CA <=50 CARATTER NON NULLTabella 93. Progettazione:la composizione dei campi delle tabelle avrebbe potuto ancherientrare nella fase di progettazione,tuttavia si è preferito aggiungerla alla fase di analisipoiché diretta conseguenza dei requisiti posseduti dalle stesse e per rendere più compattala descrizione del database.Partendo dall’individuazione,al passo precedente,delle pagine costituenti la struttura se neindividuano i file relativi che saranno implementati in moduli con linguaggio .php.Il titolo intesta maiuscolo si riferisce alle pagine determinate nella fase di analisi: HOME PAGE(home.php):la pagina iniziale da cui l’utente parte per la navigazione nel sito; AIUTO(aiuto.php):la pagina per richiedere aiuto; ERRORE(errore.php):la pagina dedicata alla visualizzazione degli errori; progettazione e sviluppo di un’applicazione per commercio elettronico 12
  • 13. tesi di laurea triennale in ingegneria informatica MOSTRAPRO(mostrapro.php):la pagina da cui si visualizzano i prodotti da acquistare; MOSTRACAR(mostracar.php):la pagina di visualizzazione del contenuto carrello;qui alternativamente si decide di continuare l’ordine o completarlo pagando; SALDO(saldo.php):la pagina dove effettuare il login se registrati o alternativamente dove registrarsi;è la quietanza del pagamento; INFOUT(infout.php):la pagina in cui inserire i dati personali e di fatturazione; INFOSPED(infosped.php):la pagina in cui inserire le informazioni a cui spedire l’ordine; INFOPAG(infopag.php):la pagina in cui vengono inserite le informazioni di pagamento; DETORD(detord.php):la pagina in cui vengono riassunte le informazioni dell’ordine anche prima del pagamento;l’utente sceglie se confermare l’ordine o modificarlo; SUCCESSO(successo.php):la pagina in cui si visualizza il successo dell’operazione ordine.Accanto ai file di pagina utente sono previsti dei file sempre in linguaggio .php utilizzabilicome 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 .phpcomprensivi degli script e i collegamenti esistenti tra loro. progettazione e sviluppo di un’applicazione per commercio elettronico 13
  • 14. tesi di laurea triennale in ingegneria informatica HOME PAGE..php HOME PAGE php NAVIIGAZIIONE NAV GAZ ONEMOSTRACAR..phpMOSTRACAR php MOSTRAPRO..php MOSTRAPRO php SALDO..php SALDO php AIIUTO..php A UTO php AGGIIUNGII..php AGG UNG php MODIIFIICA..php MOD F CA php AUTENTIICA..php AUTENT CA php DAGLII ALTRII DAGL ALTR MODULII MODUL DATII PERSONALII DAT PERSONAL IINFOUT..php NFOUT php IINVIIAUT..php NV AUT php DA OGNII MODULO DA OGN MODULO DATII SPEDIIZIIONE DAT SPED Z ONE ERRORE..php ERRORE php IINFOSPED..php NFOSPED php IINVIIASPED..php NV ASPED php DATII PAGAMENTO DAT PAGAMENTO IINFOPAG..php NFOPAG php IINVIIAPAG..php NV APAG php CONTROLLA CONTROLLA LEGENDA:: LEGENDA SPESA SPESA PAGIINE ..PHP PAG NE PHP DETORD..php DETORD php IINVIIAORD..php NV AORD php SCRIIPT..PHP SCR PT PHP ESIITO ES TO SUCCESSO..php SUCCESSO php AZIIONE AZ ONE Figura 8 progettazione e sviluppo di un’applicazione per commercio elettronico 14
  • 15. tesi di laurea triennale in ingegneria informaticaBisogna inoltre predisporre dei file inclusivi di libreria con estensione .inc per la definizionedelle 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 inoltremessi in luce i principali capisaldi dell’applicativo.Il catalogo,gli ordini,il carrello,leinformazioni utente vengono immagazzinati nel database.Questo deve effettuare unaprocedura di connessione al sistema e aprire una sessione utente.Il database puòmemorizzare le immagini relative ai prodotti oppure contenere dei link per accedere allestesse immagazzinate in un file o cartella a parte.La gestione delle parti “separate”deldatabase è affidato ai relativi file .inc che sono dei file di libreria con la definizione dioggetti e classi.Il file sistema.inc collocato a monte del sistema ha il compito dimonitorarlo.Quello controllo.inc invece esegue dei controlli sull’inserimento dati,cheeventualmente sarebbe estendibile anche al controllo trasmissione dati pagamento concarte di credito.Tuttavia si è scelto,in questo progetto, di delegare tale operazione adesterni. Opzionalmente è possibile creare tali routine in questo file per poi testarne lacorrettezza 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 programmazionedell’autore potrebbe inserire il path e accedere al contenuto dei file più sensibili.Problemasuperabile modificando eventualmente l’estensione a .php(o .asp in dipendenza dellapiattaforma di lavoro).La preferenza all’impiego dei moduli restanti .php è dettata da motividi ordine economico,che ne decretano inoltre la maggiore popolarità. progettazione e sviluppo di un’applicazione per commercio elettronico 15
  • 16. tesi di laurea triennale in ingegneria informatica APPLIICATIIVO APPL CAT VO siisttema..iinc s s em a nc SIISTEMA S STEMA connesdb..iinc connesdb nc errrrorrii..iinc e o nc connettttii..iinc conne nc sessiione..iinc se ss o n e n c ERRORII ERROR DATABASE DATABASE SESSIIONE SESS ONE UTENTE UTENTEgestt_catt..iincges _ca nc gestt_orrd..iinc ges _o d nc gestt_carr..iinc ges _ca ncCATALOGOCATALOGO ORDIINII ORD N CARRELLO CARRELLO gestt_utt..iinc ges _u nc UTENTII UTENT conttrrolllo..iinc co n o o n c CONTROLLO CONTROLLO Figura 9 progettazione e sviluppo di un’applicazione per commercio elettronico 16
  • 17. tesi di laurea triennale in ingegneria informatica 2. Realizzazione1. Implementazione:la descrizione si articola per aree tematiche.DATABASEPer motivi di ordine economico,la scelta del DB individua come strumento l’ open sourceattualmente più popolare MySql che presenta inoltre il pregio di esserescalabile(caratteristica utile in questo progetto). La seconda scelta che si deve attuareriguarda il motore di memorizzazione.E’ stato scelto InnoDB. E’ più lento del tipo BDB erichiede più memoria e spazio su disco,tuttavia supporta i savepoint e le transazioni di tipoXA. Anche rispetto a MyIsam le capacità di memoria richieste sono superiori,ma se nepreferiscono il vantaggio del maggior svincolo dalle dimensioni del sistema in caso direcupero dati a seguito di crash e la maggior rapidità di modifica dati grazie alla gestioneautonoma del caching. Quindi si creano il database Negozio e le autorizzazioni perl’amministratore e l’utente. Nella Tab.10 è riportato il codice in SQL del DB :CREATE DATABASE negozio DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;GRANT CREATE, DROP, SELECT, UPDATE, INSERT, DELETE ON negozio.* TO dischi_admin@localhost IDENTIFIED BY dischi_admin;GRANT SELECT, UPDATE, INSERT, DELETE ON negozio.* TO dischi_utente@localhost IDENTIFIED BY dischi_utente;USE negozio;SET NAMES utf8; Figura 10Per gli ordini vengono predisposte tre tabelle:Elord,Ordine e Statusor che esprimonorispettivamente gli elementi costitutivi l’ordine,l’ordine vero e proprio e lo statodell’ordine.Nel primo il collegamento con chiavi esterne è verso l’ordine e l’articolo(inquesto caso l’album);nel secondo il collegamento relaziona l’ordine al suo stato e all’utentecui appartiene.Nella Tab.11 è visualizzato il codice: progettazione e sviluppo di un’applicazione per commercio elettronico 17
  • 18. tesi di laurea triennale in ingegneria informaticaCREATE TABLE Elord(id_elord INTEGER AUTO_INCREMENT PRIMARY KEY,id_ord INTEGER NOT NULL,id_alb INTEGER NOT NULL,prezzo DECIMAL(6,2) NOT NULL,pezzi INTEGER(4) NOT NULL,FOREIGN KEY (id_ord) REFERENCES Ordine (id_ordine),FOREIGN KEY (id_alb) REFERENCES Album (id_album))ENGINE = InnoDB;CREATE TABLE Ordine( id_ordine INTEGER AUTO_INCREMENT PRIMARY KEY, id_ut INTEGER NOT NULL, id_st INTEGER NOT NULL, nome_sped VARCHAR(120) NOT NULL, azienda_sped VARCHAR(140) NOT NULL, indirizzo1_sped VARCHAR(150) NOT NULL, indirizzo2_sped VARCHAR(150) NOT NULL, città VARCHAR(100) NOT NULL, stato VARCHAR(150), cap INTEGER(10) NOT NULL, nazione VARCHAR(100) NOT NULL, telefono INTEGER(20) NOT NULL, costo_ordine DECIMAL(6,2) NOT NULL, costo_sped DECIMAL(6,2) NOT NULL, costo_totale DECIMAL(6,2) NOT NULL, tipo_pagamento VARCHAR(50) NOT NULL, conferma_paga VARCHAR(80) NOT NULL, stato_ordine INTEGER NOT NULL, esecutore_ord VARCHAR(80) NOT NULL, FOREIGN KEY (id_ut) REFERENCES Utenti (id_utente), FOREIGN KEY (id_st) REFERENCES Statusor (id_status))ENGINE = InnoDB;CREATE TABLE Statusor( id_status INTEGER AUTO_INCREMENT PRIMARY KEY, stato VARCHAR(50) NOT NULL) Figura 11ENGINE = InnoDB;L’ultima componente dell’infrastruttura è la tabella Utenti che detiene le informazionipersonali e di login,specificatamente con i campi email e password.Viene inoltre creato unindice per il campo email;quando l’utente cercherà di eseguire il login il sistema effettueràuna ricerca dati su questo. Il codice di questa è scritto nella tabella 12.CREATE TABLE Utenti progettazione e sviluppo di un’applicazione per commercio elettronico 18
  • 19. tesi di laurea triennale in ingegneria informatica( id_utente INTEGER AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(120) NOT NULL, azienda VARCHAR(140) NOT NULL, indirizzo1 VARCHAR(150) NOT NULL, indirizzo2 VARCHAR(150) NOT NULL, città VARCHAR(100) NOT NULL, stato VARCHAR(150), cap INTEGER(10) NOT NULL, nazione VARCHAR(100) NOT NULL, telefono INTEGER(20) NOT NULL, email VARCHAR(100) NOT NULL, password VARCHAR(100) NOT NULL, INDEX(email))ENGINE = InnoDB; Figura 12Terminata la parte infrastrutturale, rimangono le tabelle dell’esempio:Album che collegatramite chiavi esterne le altre tabelle Artista,Genere e Etichetta.IL codice viene mostratonella figura 13:CREATE TABLE Album( id_album INTEGER AUTO_INCREMENT PRIMARY KEY, id_artista INTEGER NOT NULL, id_etichetta INTEGER NOT NULL, id_genere INTEGER NOT NULL, titolo VARCHAR(100) NOT NULL, immagine VARCHAR(50), descrizione TEXT, prezzo DECIMAL(6,2) NOT NULL, FOREIGN KEY (id_artista) REFERENCES Artista (id_art), FOREIGN KEY (id_etichetta) REFERENCES Etichetta (id_eti), FOREIGN KEY (id_genere) REFERENCES Genere (id_gen))ENGINE = InnoDB;CREATE TABLE Artista( id_art INTEGER AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(100) NOT NULL)ENGINE = InnoDB;CREATE TABLE Etichetta( id_eti INTEGER AUTO_INCREMENT PRIMARY KEY, progettazione e sviluppo di un’applicazione per commercio elettronico 19
  • 20. tesi di laurea triennale in ingegneria informatica nome VARCHAR(100) NOT NULL)ENGINE = InnoDB;CREATE TABLE Genere( id_gen INTEGER AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(100) NOT NULL)ENGINE = InnoDB; Figura 13A chiusura di ogni tabella c’è la dichiarazione del motore di memorizzazione,così come afine file c’è il comando di caricamento dei dati nelle varie tabelle(fig.14).LOAD DATA LOCAL INFILE negozio.data.statusor.mysql INTO TABLE Status_or FIELDS ENCLOSED BY LINES TERMINATED BY rn (stato);LOAD DATA LOCAL INFILE negozio.data.album.mysql INTO TABLE Album FIELDS OPTIONALLY ENCLOSED BY LINES TERMINATED BY rn (titolo, immagine, descrizione, prezzo);LOAD DATA LOCAL INFILE negozio.data.artista.mysql INTO TABLE Artista FIELDS ENCLOSED BY LINES TERMINATED BY rn (id_art,nome);LOAD DATA LOCAL INFILE negozio.data.etichetta.mysql INTO TABLE Etichetta FIELDS ENCLOSED BY LINES TERMINATED BY rn (id_eti,nome);LOAD DATA LOCAL INFILE negozio.data.genere.mysql INTO TABLE Genere FIELDS ENCLOSED BY LINES TERMINATED BY rn (id_gen,nome); Figura 14PIANO PER L’INTERFACCIACome base per il layout viene utilizzato un foglio di stile foglio.css il cui codice è mostratonella figura 15. progettazione e sviluppo di un’applicazione per commercio elettronico 20
  • 21. tesi di laurea triennale in ingegneria informatica/** * File foglio.css * * Questo file contiene il foglio base per lapplicativo negozio. * La sua realizzazione è semplice e basilare perché * la sua utilizzazione in questo ambito non deve essere * commerciale e accattivante. *//* * Il sottofondo è di colore bianco */body { background-color: white }/** * Questo font è usato per i testi dei pulsanti e i piccoli link. */.smallPrint { font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #000088 }.smallLink { font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #000088 }/** * Il font per la barra del menu in alto e lo stile dei link. */.topMenuBar { background-color: #97c53d }.topMenuBarFont { font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #000088 }.topMenuLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #000088; text-decoration: none }/** * Il font per il titolo pagina */.bigTitle { font-family: Arial, Hevletica, sans-serif; font-size: 32px; font-weight: 800; color: white;text-decoration: none }/** * Il font per il testo della pagina */.pageBody { font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000079 }.normalTable {font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #000079 }.tableLabel {font-family: Arial, Helvetica, sans-serif; font-size: 24px; color: #000079 }.tableLabelSmall {font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #000079 }.tableLabelTiny {font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000079 }.errSmall {font-family: Arial, Helvetica, sans-serif; font-size: 12; color: #dd0000 }/** * Qui si sovrascrivono i fogli base forniti dal browser */ progettazione e sviluppo di un’applicazione per commercio elettronico 21
  • 22. tesi di laurea triennale in ingegneria informaticah1 {font-family: Arial, Helvetica, sans-serif; color: #000089 }h2 {font-family: Arial, Helvetica, sans-serif; color: #000089 } Figura 15 L’interfaccia utente opera con l’inclusione dei file contenenti il markup XHTML dellepagine. Sono state predisposte al riguardo due pagine che verranno caricate nelle paginedi visualizzazione: Pagetesta.inc; Pagefondo.inc.Il nome indica la loro collocazione nel layout. I link relativi inviano rispettivamente allavisualizzazione del carrello(mostracar.php),la pagina di aiuto(aiuto.php) e la navigazionetra gli articoli(mostrapro.php) per il primo file;per il secondo c’ è il rinvio a due moduliprivacy.php per il trattamento dei dati e chisiamo.php che indirizza a una paginainformativa sull’ azienda(moduli non realizzati in questo applicativo). La strategia è,duranteil processo di pagamento, evitare la visita ad altri siti o,peggio,di interromperne una dellefasi. Pertanto è opportuno visualizzare solo il menu superiore o la barra di navigazionedelle pagine non coinvolte in tale processo. La barra è controllabile con la variabilebooleana $g_nonMosBarNav. Infine c’è una chiamata al modulo homepage.php. Lapagetesta è 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><?phpif (!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 progettazione e sviluppo di un’applicazione per commercio elettronico 22
  • 23. tesi di laurea triennale in ingegneria informatica}?> </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> Figura 16Mentre 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> Figura 17</html>NAVIGARE TRA I PRODOTTIGli articoli disponibili dono gestiti dalla classe gestcat(gestione catalogo) che è collegatacon la tabella Album del database. Essa costruisce una lista di tutti i prodotti o dideterminati prodotti ricercati che vengono successivamente caricati e visualizzati sucomando dello script mostrapro(mostra prodotti).Ogni articolo raffigurato è un consideratocome un elemento HTML form.In particolare la parte di codice in figura 18(segue) hal’effetto di rimandare al modulo aggiungi.php l’eventuale ordine dell’articolo visualizzato. progettazione e sviluppo di un’applicazione per commercio elettronico 23
  • 24. tesi di laurea triennale in ingegneria informatica echo <<<EOHTML <td align=center width=50%> <font class=pageBody> <img src=immagini/$img border=3/><br/> $msg <br/> Album artista: <b>$artista</b><br/> <b>£$prezzo</b> Album etichetta: <b>$etichetta</b><br/> <b>£$prezzo</b> Album genere: <b>$genere</b><br/> <b>£$prezzo</b> <form action=aggiungi.php method=post> <input type=hidden name=albumid value=$aid/> <input type=submit value=Ordina/> </form> </font> </td>EOHTML; Figura 18Nel form viene incluso un secondo input di tipo hidden impostato sull’identificativodell’album. In tal modo il valore del vero identificativo dell’album visualizzato farà confluiretutti i pulsanti nel modulo aggiungi.php. Quest’ultimo cercherà quindi,con la direttiva issetin $_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 lappropriato * articolo nel carrello della spesa utente,memorizzato nei dati di sessione. * Bisogna inoltre verificare che l id articolo sia valido. * */ /* * Si ottiene larticolo che deve essere aggiunto */ if (isset($_POST[albumid])) { /* * Si forza nel formato int */ $aid = intval($_POST[albumid]); } progettazione e sviluppo di un’applicazione per commercio elettronico 24
  • 25. tesi di laurea triennale in ingegneria informatica /* * Poi,la gestcar aggiunge una voce per questo aid * nel carrello della spesa. Se la voce è già presente * nel carrello incrementa il numero di elementi se esistenti. * * */ $gc = GestCar::ottieniIstanza(); $gc->AggiungiArticoloCarrelloUtente($aid); /* * Redirezione alla pagina che mostra il contenuto del carrello */ header(Location: mostracar.php); ?> Figura 19Il file si avvale di un’istanza dell’oggetto GestCar definita nelle librerie e della proceduraAggiungiArticoloCarrelloUtente che controlla la validità sessione e che l’articolo esista nelcatalogo con l’ausilio di un’ oggetto di libreria GestCat mediante la proceduraearticolovalido. Poi discrimina se l’articolo è già presente nel carrello;se sì ne incrementa ilnumero(npe),viceversa crea il nuovo elemento,ne ottiene le caratteristiche e lo memorizzanel 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 dellarticolo da aggiungere */ public function AggiungiArticoloCarrelloUtente($in_aid) { /* * si controlla la validità della sessione */ $sid = session_id(); /* * Ci si accerta che larticolo sia valido * Lo eseguirà il gestcat(gestione catalogo) */ $gc = GestCat::ottieniIstanza(); $valido = $gc->earticolovalido($in_aid); progettazione e sviluppo di un’applicazione per commercio elettronico 25
  • 26. tesi di laurea triennale in ingegneria informatica /* * Si controlla se ci sono già dati nella sessione * per questo aid */ if (isset($_SESSION[carrello]) and isset($_SESSION[carrello]["$in_aid"])) { $elemcarrello = &$_SESSION[carrello]["$in_aid"]; $elemcarrello[npe]++; } else { /* * ottieni il prezzo e titolo dellarticolo 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 larray del carrello se necessario */ if (!isset($_SESSION[carrello])) $_SESSION[carrello] = array(); $_SESSION[carrello]["$in_aid"] = $elemcarrello; } Figura 20 }Come si può vedere,l’oggetto gc della classe GestCat sfrutta due procedure di libreria: earticolovalido(fig.21); ottieniInfoArticolo(fig.22). /* *------------------- * earticolovalido *------------------ * questa procedura prende un id album e ne controlla * la validità. * * Parametri: * $in_albumid - articolo da controllare * * Output: * Booleano - TRUE se è valido,FALSE altrimenti. * * progettazione e sviluppo di un’applicazione per commercio elettronico 26
  • 27. tesi di laurea triennale in ingegneria informatica * * */ public function earticolovalido($in_albumid) { /* * se è una stringa va trasformata in intero */ $in_albumid = intval($in_albumid); /* * connessione al database */ $conn = Connesdb::ottieniConnessione(); /* * query per trovare lid album */ $query = <<<EOQSELECT id_album FROM Album WHERE id_album = $in_albumidEOQ; /* * query */ $results = @$conn->query($query); /* * azzera e indica se cè 1 solo riscontro */ $output = ($results->num_rows == 1) ? TRUE : FALSE; $results->close(); return $output; Figura 21 }/* *----------------------- * ottieniInfoArticolo *----------------------- * restituisce le informazioni del dato album id * * Parametri: * $in_albumid - informazioni richieste sullarticolo * * Output: * istanza della classe album con relative informazioni * * * progettazione e sviluppo di un’applicazione per commercio elettronico 27
  • 28. tesi di laurea triennale in ingegneria informatica * */ public function ottieniInfoAlbum($in_albumid) { /* * trasforma la stringa in intero */ $in_albumid = intval($in_albumid); /* * connessione */ $conn = Connesdb::ottieniConnessione(); /* * query dellelemento */ $query = <<<EOQSELECT id_album,titolo,descrizione,nome, prezzo,immagine FROM Album INNER JOIN Artista WHERE Album.id_artista = Artista.id_art AND id_album = $in_albumidEOQ; /* * 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 allarray in uscita */ $output = array(); $row = @$result->fetch_assoc(); $alb = new Album( $row[id_album], $row[titolo], $row[descrizione], $row[nome], $row[prezzo], $row[immagine] ); return $alb; Figura 22 progettazione e sviluppo di un’applicazione per commercio elettronico 28
  • 29. tesi di laurea triennale in ingegneria informatica }ALBUMIn generale gli album in vendita sono fondamentalmente racchiusi nell’omonima tabella deldatabase che ne descrive titolo,immagine,descrizione e prezzo.Il nome dell’album vienememorizzato per la stampa e visualizzato nelle pagine del listino e la tabella è gestita dallaclasse GestCat(gestione catalogo). Oltre ai sottoprogrammi già descritti,la libreriacomprende le procedure per ottenere i principali campi prodotto(fig.23) e le routine pereffettuare 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 laccesso di sola lettura ai membri. */class Album{ /* * queste variabili confrontano i dati della tabella Album * del database.Viene restituito un array di oggetti album * nonostante le chiamate di funzioni non agiscono direttamente * sulle tabelle del database */ private $albumid; private $titolo; private $descrizione; private $artista; private $etichetta; private $genere; private $prezzo; private $immagine; /* *--------------- * __construct *--------------- * Crea una nuova istanza della classe Album * * * Parametri: * $in_albumid - campo identificativo da Album * $in_titolo - campo titolo * $in_descrizione - campo descrizione * $in_artista - campo artista * $in_etichetta - campo etichetta * $in_genere - campo genere progettazione e sviluppo di un’applicazione per commercio elettronico 29
  • 30. tesi di laurea triennale in ingegneria informatica * $in_prezzo - campo prezzo * $in_immagine - campo immagine */ function __construct ( $in_albumid, $in_titolo, $in_descrizione, $in_artista, $in_etichetta, $in_genere, $in_prezzo, $in_immagine ) { $this->albumid = $in_albumid; $this->titolo = $in_titolo; $this->descrizione = $in_descrizione; $this->artista = $in_artista; $this->etichetta = $in_etichetta; $this->genere = $in_genere; $this->prezzo = $in_prezzo; $this->immagine = $in_immagine; } /* * queste procedure sono usate in modalità accesso sola lettura * sui dati */ public function ottieniAlbumID() { return $this->albumid; } public function ottieniTitolo() { return $this->titolo; } public function ottieniDescrizione() {return $this->descrizione;} public function ottieniArtista() { return $this->artista; } public function ottieniEtichetta() { return $this->etichetta; } public function ottieniGenere() { return $this->genere; } public function ottieniPrezzoPerUnita() { return $this->prezzo; } public function ottieniImmagine() { return $this->immagine; }} Figura 23Nell’esempio sottoriportato è mostrata la ricerca album per artista. Nel file è stato scrittoanche il codice per ricercare gli album per genere ed etichetta,ma qui non verrà riportatoperché concettualmente simile a questa realizzazione./* *---------------------------- * ottieniRiscontroAlbArt *---------------------------- * restituisce una lista degli articoli riscontrati * Tutti indica tutti gli articoli disponibili * progettazione e sviluppo di un’applicazione per commercio elettronico 30
  • 31. tesi di laurea triennale in ingegneria informatica * * Parametri: * $in_artista * * * Output:array della classe Album * */ public function ottieniRiscontroAlbArt($in_artista = tutti) { /* * connessione al database * */ $conn = Connesdb::ottieniConnessione(); /* * query */ $query = <<<EOQSELECT id_album,titolo,descrizione,nome, prezzo,immagine FROM Album INNER JOIN Artista ON Artista.id_art = Album.id_artistaEOQ; 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 allarray in uscita */ $output = array(); while (($row = @$result->fetch_assoc()) !== NULL) progettazione e sviluppo di un’applicazione per commercio elettronico 31
  • 32. tesi di laurea triennale in ingegneria informatica { $alb = new Album( $row[id_album], $row[titolo], $row[descrizione], $row[nome], $row[prezzo], $row[immagine] ); $output[] = $alb; } /* * azzera i risultati.Non serve resettare la connessione, * sarà azzerata quando si chiude listanza * */ $result->close(); /* * Restituisce larray risultante */ return $output; Figura 24 }La routine ottieniRiscontroAlbArt,come peraltro le similari ottieniRiscontroAlbEti eottieniRiscontroAlbGen,vengono chiamate dal modulo mostrapro.php che crea l’oggetto dilibreria GestCat,passa la variabile al pulsante di scelta,scarica i valori dei campi daldatabase e infine aggiunge gli articoli se selezionati col modulo aggiungi.php. Le partifondamentali del codice sono rappresentate nelle figure 25(oggetto), 26(lista) e 27(loadingdati)./** * 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 delloggetto GestCat e lo usa * per ottenere il riscontro del voluto artista * */ progettazione e sviluppo di un’applicazione per commercio elettronico 32
  • 33. tesi di laurea triennale in ingegneria informatica$gc = GestCat::ottieniIstanza();$albums = $gc->ottieniRiscontroAlbArt($MostraArtista); Figura 25<!-- Fornisce agli utenti una lista da cui selezionare gli album dellartista--><font class=pageBody><table width=100% border=0><tr> <td align=right> <form align=center action=mostrapro.php method=post> Mostra album disponibili dellartista: <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> Figura 26 </form>foreach ($albums as $album){ /** * La variabile $x conserva traccia se lutente 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 lalbum id che lutente progettazione e sviluppo di un’applicazione per commercio elettronico 33
  • 34. tesi di laurea triennale in ingegneria informatica * desidera aggiungere al carrello. Senza questo,il nuovo * script non conoscerebbe lalbum 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> Figura 27EOHTML;ATTIVAZIONE CARRELLOIl carrello della spesa è un array di oggetti Elemcarrello(elementi carrello) gestiti dallaclasse GestCar(gestione carrello). I dati vengono salvati nella sessione dal codice digestione php e il richiamo al contenuto è eseguito con la direttiva $_session[‘carrello’].Lachiusura del browser provoca la perdita di tutti i dati di sessione. In fig.28 è riportato ilcodice costitutivo degli oggetti Elemcarrello manipolati dalla classe GestCar./* * ---------------- * ElemCarrello * ---------------- * * Il carrello è sostanzialmente un array di oggetti ElemCarrello. * La chiave dellarray sono gli identificativi dellarticolo * del prodotto rappresentato sull ElemCarrello. */class ElemCarrello{ /* * I dati disponibili per il ElemCarrello */ public $ArticoloID; public $Titolo; public $PrezzoPerUnita; public $NumeroPezzi; /* progettazione e sviluppo di un’applicazione per commercio elettronico 34
  • 35. tesi di laurea triennale in ingegneria informatica * * funzione pubblica __construct=costruttore * inizializza una nuova istanza di classe * * Parametri: * $in_aid - articolo id * $in_titolo - titolo dellalbum * $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; } Figura 28}Oltre alla procedura di aggiunta elementi già esplicata in figura 20,la medesima classepredispone delle procedure di esplorazione contenutocarrello(ottieniContCarrello)raffigurata in fig.29 la cui chiamata è eseguita nei modulidetord.php o mostracar.php per visualizzare il dettaglio ordine./* *------------------------ * ottieniContCarrello *------------------------ * * Restituisce tutti gli elementi del carrello contenuti * nella sessione corrente * * Restituisce gli oggetti dellarray InfoCarrello: * */ public function ottieniContCarrello() { if(!isset($_SESSION[carrello])) return array(); else return $_SESSION[carrello]; } Figura 29 progettazione e sviluppo di un’applicazione per commercio elettronico 35
  • 36. tesi di laurea triennale in ingegneria informaticaSe l’utente desidera invece modificare la quantità degli articoli la libreria predispone laprocedura AggiornaQuantitaArticolo su chiamata dello script modifica.php,attivato nellapagina mostracar.php. Nella successiva figure 30 è indicato il codice della procedura inoggetto 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 dellelemento 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 nellarray(passaggio di variabile per riferimento) */ $ce = &$_SESSION[carrello]["$in_aid"]; $ce->NumeroPezzi = $in_quantita; } Figura 30 }PAGAMENTOGli utenti che decidono di acquistare effettuano la procedura di pagamento devono fornirele informazioni personali,quelle di spedizione e i sistemi di pagamento.Successivamente siriassumerà l’ordine detord.php(dettaglio ordine) offrendo la possibilità di visualizzare perconfermarlo o eventualmente correggerlo(modifica.php).Le informazioni utente e la fatturavengono memorizzate nella tabella utente e gestite dalla classe GestUt(gestione utente).Ilprocesso di pagamento si snoda in una serie di form compilati dall’utente,ciascuno deiquali richiede una conferma complessiva prima del passaggio al successivo modulo.Se siriscontrano errori,allora l’utente viene rinviato al modulo di competenza.Infine vienecaricata nella pagina una tabella riassuntiva con tutti i dettagli dell’ordine(detord.php).Daqui se l’utente si accorge di un’errore su di un qualunque modulo,può raggiungerlo e progettazione e sviluppo di un’applicazione per commercio elettronico 36
  • 37. tesi di laurea triennale in ingegneria informaticaapportare le desiderate modifiche.Infine ritorna a questo modulo finale.Le tre pagineinfout.php,infosped.php e infopag.php sono dedicate rispettivamente a queste funzioninegli ambiti,rispettivamente,delle informazioni utente,di spedizione e di pagamento.Il codice che gestisce questi tre moduli accetta una variabile GET chiamata from.Sequesta è impostata su rev,viene passato a inviaut.php,inviasped.php e inviapag.php,che loinvia a inviaord.php invece che al modulo successivo alla serie.Naturalmente gli ultimiquattro script si occupano di elaborare i dati relativi rispettivamente alle informazionipersonali e di fatturazione,di spedizione,di pagamento e globali d’ordine.Infine,se ilpagamento 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 formsopra 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;} Figura 31Nella figura 32 invece si può vedere il codice del file inviasped.php relativo alla gestionedelle 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 = ;} Figura 32In figura 33 è raffigurato il codice di inviasped.php in cui si sceglie effettivamente ilpercorso a cui sarà diretto l’utente.Il codice resta invariato per gli altri due filesimilari,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); progettazione e sviluppo di un’applicazione per commercio elettronico 37
  • 38. tesi di laurea triennale in ingegneria informatica}else{ header(Location: infopag.php); Figura 33}Tutti gli script con radice iniziale invia inseriranno i dati nell’ array $_SESSION,aprescindere dal successo dell’operazione.Se non ci sono errori i dati sarannomemorizzati,diversamente l’utente ricompierà il form precedente,ma la sessione non verràsoppressa.Comunque sia,sono accomunati dalle tre sostanziali fasi di inserimento dati,loroconvalida e reindirizzo alla pagina adeguata.Nella figura 34 di seguito viene esplicitato ilcodice 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]);/** progettazione e sviluppo di un’applicazione per commercio elettronico 38
  • 39. tesi di laurea triennale in ingegneria informatica * Convalida i dati uno alla volta. Se ci sono problemi, * redireziona lutente 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; progettazione e sviluppo di un’applicazione per commercio elettronico 39
  • 40. tesi di laurea triennale in ingegneria informatica}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;} Figura 34Mentre i file con radice iniziale info(infout,infosped,infopag) sono sono accomunati daun’iniziale ricerca dei dati esistenti nella $_SESSION,da un controllo dati e conseguentemessaggio di errore per individuarne il campo di pertinenza e una visione finale delform.Nella figura 35 seguente viene riportato il codice del file infopag.php,depurato delleparti 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] : ; progettazione e sviluppo di un’applicazione per commercio elettronico 40
  • 41. tesi di laurea triennale in ingegneria informatica $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 lutente 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 lutente 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.; progettazione e sviluppo di un’applicazione per commercio elettronico 41
  • 42. tesi di laurea triennale in ingegneria informatica 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 lutente inserirà le informazioni di pagamento. Sarà annidato dentro il form che tratta linserimento 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 progettazione e sviluppo di un’applicazione per commercio elettronico 42
  • 43. tesi di laurea triennale in ingegneria informatica <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 progettazione e sviluppo di un’applicazione per commercio elettronico 43
  • 44. tesi di laurea triennale in ingegneria informaticaE’ da notare che,per poter effettuare una simulazione di pagamento,sono stati creati duefile di libreria:cartacredito.inc e gestpag.inc ed è stata definita una tabella cartedicredito nelfile del database. Naturalmente,essendo solo file creati per test e non comprensivi nelprogetto,la loro struttura non sarà qui rivelata.E’ tuttavia disponibile nella sottocartellalibrerie(i primi due) e inclusa nel file Negozio(la tabella).ORDINECome già esplicato,l’avallo dell’ordine si snoda in due passi principali.La creazione di unavoce ordine nell’omonima tabella gestita dalla classe GestOrd(gestione ordine) e la suaassociazione tra l’ id ordine e i suoi elementi costituenti.I dati di utente sono gestiti dallaclasse GestUt(gestione utente) che si occupa di verificare la validità di uno user,aggiornandolo o eventualmente creandolo qualora non ci fosse.Completato l’ordine, siregistra il record nella tabella Ordine con relativo numero progressivo e se ne dacomunicazione all’utente con una pagina dedicata(successo).Di seguito viene proposto ilcodice 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 lordine di pagamento */ $gp = GestPag::ottieniIstanza(); $pmt_conf_num = $gp->eseguiPag($ip[tipocarta], $ip[numerocarta], $ip[expmesecarta], progettazione e sviluppo di un’applicazione per commercio elettronico 44
  • 45. tesi di laurea triennale in ingegneria informatica $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); Figura 36Come si desume dal codice sopra riportato GestUt utilizza due procedure alternative aseconda che l’utente sia già esistente(aggiornaAccountUtente)(fig.37) oppureno(creaNuovoAccount)(fig.38).Entrambe le procedure si avvalgono di una funzionemanipolastringa definita nel file connesdb.inc che rende le stringhe adatte perl’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 progettazione e sviluppo di un’applicazione per commercio elettronico 45
  • 46. tesi di laurea triennale in ingegneria informatica */ $conn = Connesdb::ottieniConnessione(); /* * Ottiene i valori dei parametri per laggiornamento e li * salva per linserimento */ $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 = <<<EOQUPDATE Utenti SET nome = $nome, azienda = $azienda, indirizzo1 = $indirizzo1, indirizzo2 = $indirizzo2, città = $città, stato = $stato, cap = $cap, nazione = $nazione, telefono = $telefono, password = $password WHERE email = $emailEOQ; /** * La esegue */ $result = @$conn->query($query); } Figura 37 /* *------------------------ * creaNuovoAccount *------------------------ * Crea un nuovo account nella tabella Utenti del db * con le relative informazioni fornite * progettazione e sviluppo di un’applicazione per commercio elettronico 46
  • 47. tesi di laurea triennale in ingegneria informatica * Parametri: * $in_iu - informazioni utente del nuovo account * * * * */ public function creaNuovoAccount(InfoUtente $in_iu) { /* * Connessione */ $conn = Connesdb::ottieniConnessione(); /* * Ottiene i valori dei parametri per laggiornamento e li * salva per linserimento */ $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 = <<<EOQINSERT 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 progettazione e sviluppo di un’applicazione per commercio elettronico 47
  • 48. tesi di laurea triennale in ingegneria informatica return $conn->insert_id; }Sempre riguardo all’invio ordine,la classe GesOrd prevede le procedure aggiungiOrdine eConfermaPagamento(fig.39).Inoltre i dati carrello vengono cancellati non appena l’ordine èregistrato con la routine CancellaCarrelloSpesa(fig.40) definito come oggetto GestCarrelloin GestCar.inc. Può accadere che sia già stato generato un ordine con relativo id nellatabella Ordine del database,ma a causa di un errore occorso,non si riescono a crearne lesingole voci nella tabella Elord. L’ordine risulta così incompleto,non possedendo di tutti iriferimenti necessari. Per ovviare a questo potenziale inconveniente,si ricorre alletransazioni SQL,ben supportate dal motore InnoDB impiegato.Cioè si riterrà conclusa latransazione se entrambe le operazioni hanno successo sulla procedura aggiungiOrdine.Per il primo step del processo la procedura effettua una chiamata alla funzionecreaOrdine(fig.41),per il secondo chiama invece creaOrdineElem(fig.42),entrambeappartenenti alla classe GestOrd del file Gestord.inc./* *------------------- * aggiungiOrdine *------------------- * *Questa procedura prende le informazioni dal carrello della spesa *e aggiunge lordine al database.Gli articoli nel carrello * sono aggiunti all Elord del database mentre lordine 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 dordine del database */ public function aggiungiOrdine ( $in_clienteid, $in_carrello, $in_si, $in_pmt ) { /* * connessione al database */ $conn = Connesdb::ottieniConnessione(); /* progettazione e sviluppo di un’applicazione per commercio elettronico 48
  • 49. tesi di laurea triennale in ingegneria informatica * comincia la transazione */ $conn->autocommit(FALSE); try { /* * crea lordine 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 leccezione */ $conn->rollback(); $conn->autocommit(TRUE); throw $ec; } /* * Altrimenti effettua la transazione */ $conn->commit(); $conn->autocommit(TRUE); return $ordine_id;}/* *-------------------------- * ConfermaPagamento *-------------------------- * * il pagamento dellordine è 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) progettazione e sviluppo di un’applicazione per commercio elettronico 49
  • 50. tesi di laurea triennale in ingegneria informatica { /* * connessione al database */ $conn = Connesdb::ottieniConnessione(); /* * query */ $query = <<<EOQUERYUPDATE Ordine SET conferma_paga = $in_conf WHERE id_ordine = $in_ordineidEOQUERY; /* * Esegue */ $results = @$conn->query($query); Figura 39 } *---------------------------- * CancellaCarrelloSpesa *---------------------------- * Azzera il carrello della spesa */ public function CancellaCarrelloSpesa() { if (isset($_SESSION) and isset($_SESSION[carrello])) { unset($_SESSION[carrello]); } } Figura 40 *-------------- * creaOrdine *-------------- * * crea una voce nella tabella ordine per lordine utente. * Si sottoporranno le informazioni,tranne il numero di * conferma che si otterrà successivamente.Quindi verrà aggiunto * alla tabella.Ciascun elemento nellordine viene inserito nella * tabella Elord e possiede il riferimento allidentificativo * dellordine di questa voce. * * Parametri: * $in_clienteid - identificativo cliente dellordinativo * $in_si - informazioni di spedizione progettazione e sviluppo di un’applicazione per commercio elettronico 50
  • 51. tesi di laurea triennale in ingegneria informatica * $in_pmt - informazioni di pagamento * * Restituisce: * intero con lidentificativo 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 = <<<EOQUERYINSERT 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 progettazione e sviluppo di un’applicazione per commercio elettronico 51
  • 52. tesi di laurea triennale in ingegneria informatica */ $result = @$conn->query($query); /* * ottiene il valore dellidentificativo ordine creato */ return $conn->insert_id; Figura 41 }*---------------------- * creaOrdineElem *-------------------- * inserisce gli elementinel carrello utente nella tabella * Elord nel database.Ciascuno di questi elementi è associato * con unidentificativo 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 = <<<EOQUERYINSERT INTO Elord (id_ord,id_alb,prezzo,pezzi) VALUES($in_ordineid,{$elemcarrello->ArticoloID}, {$elemcarrello->PrezzoPerUnita},{$elemcarrello->NumeroPezzi})EOQUERY; /* * inserimento */ $results = @$conn->query($query); progettazione e sviluppo di un’applicazione per commercio elettronico 52
  • 53. tesi di laurea triennale in ingegneria informatica } Figura 42 }Le funzioni citate non esauriscono tutte quelle presenti nei file.Tuttavia sono statedescritte le principali indispensabili per il funzionamento.In ogni caso,i file sono bencommentati.2. Interfaccia:riguarda l’utilizzo dell’applicativo nelle varie fasi sequenziali.CONFIGURAZIONE DIRECTORIESIl 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 compilatain php nell’ambiente in cui l’applicazione lavora(Windows o Unix),così come è beneaccertarsi 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)perfarlo girare su server Apache(in localhost). Il percorso è stato: C:ProgrammiEasyPHP-5.3.3.1www(……….).Bisognerebbe quindi sostituire questa directory con una opportunaper la propria configurazione.Secondariamente sarebbe necessario eseguire uno script neldatabase server per predisporre il database,le tabelle e gli account utente. Infine i file sonoda collocare nelle posizioni opportune.In particolare,tutti i file in formato .php e .inc recanonelle include di libreria,il percorso usato per la simulazione,che quindi andrebbe variato. Inseguito 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:Applicazioniphpweb su Windows si esegue: pushd C:Applicazioniphpwebcasaviniledatabase c:usrmysqlbinmysql.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 progettazione e sviluppo di un’applicazione per commercio elettronico 53
  • 54. tesi di laurea triennale in ingegneria informatica d:WebAppincludes (di libreria) d:WebAppwww (root del server web) INCLUDE_PATH:ci si assicura che l’include_path nel proprio file php.ini sia include_path=".;c:phpincludes;c:phppear; d:WebAppincludes" COPIARE I FILE DA LIBRERIE:creare una sottodirectory per questa nuova directory includes chiamata negozio/ e copiare i file dalla directory librerie: pushd d:Webappincludes mkdir negozio chdir negozio xcopy c:Applicazioniphpwebcasavinilelibrerie 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:WebAppincludes,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:WebAppwww mkdir immagini cd immagini xcopy c:Applicazioniphpwebcasavinileimmagini Controllare i permessi dei file appena copiati. IMPOSTAZIONE DEI FILE PHP:si copiano i file dell’applicazione nella root directory.Cioè: pushd d:WebAppwww xcopy c:Applicazioniphpwebcasavinilemoduli 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’USOEntrando nel sito si viene indirizzati alla homepage(fig.43)in cui i prodotti da ricercarepossono essere filtrati per artista,etichetta o genere. progettazione e sviluppo di un’applicazione per commercio elettronico 54
  • 55. tesi di laurea triennale in ingegneria informatica Figura 43Quindi il risultato di una ricerca può fornire il risultato visibile in fig.44.Vi compaiono leimmagini dei prodotti disposti in massimo di due per riga con sette diverse righesottostanti.La prima riporta il titolo dell’album e prodotto,la seconda un breve commentoe l’anno di uscita,la terza l’artista,la quarta l’etichetta di produzione,la quinta il genere cuiappartiene,la sesta il prezzo e la settima predispone il pulsante per selezionare ilprodotto. La parte bassa della pagina resta uguale alla precedente,con filtri, pulsante dicomando ricerca e i due link “Trattamento dei dati” e “Chi siamo”.Come del resto la partealta della pagina che verrà mostrata in altre successive. progettazione e sviluppo di un’applicazione per commercio elettronico 55
  • 56. tesi di laurea triennale in ingegneria informatica Figura 44Dopo ogni ordine o in qualunque istante della navigazione è possibile visualizzare ilcontenuto della spesa e scegliere se eventualmente completare l’ordine,procedere alsaldo,cercare altri articoli o,eventualmente,chiedere un aiuto.In fig.45 è rappresentata laschermata qui esplicitata,in cui si vede anche la parte alta comune a tutte le pagineinserite finora. progettazione e sviluppo di un’applicazione per commercio elettronico 56
  • 57. tesi di laurea triennale in ingegneria informatica Figura 45Se si vuole richiedere un aiuto ciccando nella parte alta destra dello schermo siottiene(fig.46): progettazione e sviluppo di un’applicazione per commercio elettronico 57
  • 58. tesi di laurea triennale in ingegneria informatica Figura 46Se si incorresse in qualche errore potrebbe capitare di imbattersi in questimessaggi(fig.47): progettazione e sviluppo di un’applicazione per commercio elettronico 58
  • 59. tesi di laurea triennale in ingegneria informatica Figura 47Si potrebbe decidere a un certo punto di ordinare gli articoli prescelti.Quindi non restache visualizzare il contenuto del carrello e raggiungerlo ciccando nell’apposita voce inalto a destra e da qui eseguire l’ordine.Quindi sul computer compare(fig.48): progettazione e sviluppo di un’applicazione per commercio elettronico 59
  • 60. tesi di laurea triennale in ingegneria informatica Figura 48Dove ci si fa riconoscere e successivamente si può procedere con l’inserimento dei datipersonali e di fatturazione(fig.49),di spedizione(fig.50) e di pagamento(fig.51). progettazione e sviluppo di un’applicazione per commercio elettronico 60
  • 61. tesi di laurea triennale in ingegneria informatica Figura 49progettazione e sviluppo di un’applicazione per commercio elettronico 61
  • 62. tesi di laurea triennale in ingegneria informatica Figura 50progettazione e sviluppo di un’applicazione per commercio elettronico 62
  • 63. tesi di laurea triennale in ingegneria informatica Figura 51Infine,prima di prendere una decisione definitiva è bene ricontrollare tutte le informazionie,eventualmente,variarle ciccando su cambia(fig.52 e 53,ma la schermata è la stessa). progettazione e sviluppo di un’applicazione per commercio elettronico 63
  • 64. tesi di laurea triennale in ingegneria informatica Figura 52progettazione e sviluppo di un’applicazione per commercio elettronico 64
  • 65. tesi di laurea triennale in ingegneria informatica Figura 53Finalmente l’ordine è stato completato con successo e quindi si assiste al messaggio difigura 54. progettazione e sviluppo di un’applicazione per commercio elettronico 65
  • 66. tesi di laurea triennale in ingegneria informatica Figura 54progettazione e sviluppo di un’applicazione per commercio elettronico 66
  • 67. tesi di laurea triennale in ingegneria informatica 3. ConclusioniCiò che ci si prefiggeva nella fase iniziale era creare un sistema elastico ed adattabile a xtipologie di commercio elettronico.Il lavoro svolto si è rivelato soddisfacente per gli obiettiviposti. I moduli realizzati sono flessibili e configurabili dall’utente,che può anche adattarli adaltri tipi di applicativi nello stesso ambito. Anche se nell’applicazione sviluppata il databaseé finalizzato alla stessa,esso potrà venire generalizzato adottando una metodologia digeneralizzazione dello stesso basata sulle tabelle di applicazione il cui concetto è moltosimile alle system tables di database.Alcune scelte di partenza sono naturalmente migliorabili. Per esempio,la scelta dinominare file, comandi, librerie e variabili prevalentemente in italiano presenta qualchedifficoltà in un’eventuale fruizione dell’applicativo dall’/all’ estero. Oltretutto ciò haprovocato delle errate visualizzazioni caratteri sulle pagine caricate dal browser(quadratianziché termini con vocali accentate). Un altro miglioramento può prevedere l’inserimentodi un campo vuoto generico che svolge attività di ricerca su tutte le tabelle della paroladigitata dall’utente.Il layout non è graficamente molto gradevole.Questo non è un progetto di grafica, tuttavia ilsuccesso 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 sonostate definite 12 classi e 50 tra funzioni e procedure;un foglio di stile formato .css di 2kb di51 righe di codice;18 file in formato .php per complessivi 69kb;1 file in formato Mysql di4kb 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 dielaborazione,che sono più difficilmente verificabili in tutte le situazioni. Inoltre il progettonon include l’ espletamento dei pagamenti che sarà demandato ad esterni e ciò potrebbeinficiare alcuni dei test sviluppati in precedenza. progettazione e sviluppo di un’applicazione per commercio elettronico 67
  • 68. tesi di laurea triennale in ingegneria informaticaBIBLIOGRAFIA LIBRI:DANIELE VIETRI,GIOVANNI CAPPELLOTTO:”e-Commerce” –HOEPLIROBERTO GHISLANDI:”Il manuale dell’e-commerce”-APOGEOANDREA TARR:”Sviluppare siti dinamici con PHP e MySQL”-HOEPLIMICHELE E. DAVIS,JON A. PHILIPS:”Programmare in PHP e MySQL”-HOPSMARK WANDSCHNEIDER:”Sviluppare applicazioni web con PHP e MySQL”-APOGEOANTONIO GHU:”Programmare con PHP”-FAGBIBLIOGRAFIA IN RETE:http://www.wikipedia.orghttp://www.html.ithttp://www.w3schools.comhttp://www.phpfraks.comhttp://www.php.nethttp://www.phpclasses.orghttp://www.mysql.comhttp://www.apache.org progettazione e sviluppo di un’applicazione per commercio elettronico 68
  • 69. tesi di laurea triennale in ingegneria informatica I ndi c eIntroduzione……………………………………………………………………………………… 21 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………………………………………………………………………... 152 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…………………………………………………………………………… 543 Conclusioni…………………………………………………………………………………… 67Bibliografia……………………………………………………………………………………… 68Indice……………………………………………………………………………………………...69 progettazione e sviluppo di un’applicazione per commercio elettronico 69