SlideShare ist ein Scribd-Unternehmen logo
1 von 69
Downloaden Sie, um offline zu lesen
Università degli studi di Trieste


    Tesi di laurea triennale in ingegneria informatica




    Progettazione e sviluppo di un’applicazione per
                commercio elettronico




    Laureando                                      Relatore
Fabiano Dalla Piazza                    Preg.mo prof.Maurizio Fermeglia



                       Anno accademico 2011-12
tesi di laurea triennale in ingegneria informatica


                                  Introduzione
Questa tesi si occupa della costruzione,strutturazione e realizzazione di un’applicazione
per commercio elettronico. Consentirà agli utenti di visualizzare dei prodotti,di selezionarli
o restituirli se precedentemente scelti,infine di riceverli con relativa fatturazione.

Ciò che ci si prefigge è ideare una struttura informativa commerciale replicabile in scala e
potenzialmente remunerativa.

La causa scatenante è il desiderio di apprendere una metodologia per fabbricare un’utile
strumento di business potenzialmente estendibile.Tuttavia si è generata dalle esigenze di
una commercializzazione artigianale di tipo familiare.

Il commercio on-line è in continuo incremento.Si prevedono ulteriori espansioni future.Le
potenzialità sono causate dai principali fattori di comodità e convenienza economica(meno
code,meno viaggi,meno tempo perso e il tempo è denaro,riduzione della catena di
intermediazione commerciale,minor sovrapprezzo). Le attuali soluzioni modulari dei carrelli
preimpostati vanno inseriti e integrati in un sistema che non è specializzato a tal fine. Le
proposte più “compatte” prevedono la delega della gestione mediante pagamento di un
canone periodico piuttosto elevato,se raffrontato con i costi di gestione(hosting,
aggiornamenti). Questi si ammortizzano sulla quantità di siti amministrati. Tuttavia tali costi
sono inevitabilmente destinati a scendere a ragione di un maggior numero di competitori.
L’alternativa è scaricare un pacchetto software configurato,ma personalizzabile in base ai
prodotti. E’ il prodotto di questo progetto.

Ci si pongono delle tappe progressive per lo sviluppo del progetto riassumibili nei seguenti
punti:
      Raccolta requisiti:i dati caratteristici vengono rilevati ponendosi le domande su cosa
      sia e come si comporti un sito di e-commerce. Punto di partenza empirico è una
      simulazione di navigazione con ordinativi su un diffuso sito di commercio elettronico;
      Analisi:partendo dal possesso dei requisiti si individuano gli oggetti e le entità
      fondamentali componenti il sistema e si studia la loro interazione;
      Progettazione:si escogita il sistema basandosi sull’analisi precedentemente svolta;
      Realizzazione:sfruttando la conoscenza delle tecnologie attuali si sceglie la migliore
      soluzione fattibile per la realizzazione separando l’interfaccia dall’implementazione;
      Test:si effettuano i test per verificare la funzionalità e la giustezza del risultato;
      Porting in produzione:si attua l’esportazione del prodotto.

Vengono selezionati come sistema operativo Windows nella versione 7 perché in
dotazione all’autore,Mysql come RDBMS e utilizzati moduli in .php per fornire script di
elaborazione o pagine vere e proprie del sito,eventualmente corredato da delle include di
libreria in formato .txt ,.inc.Le motivazioni di questa scelta verranno spiegate nella fase
finale.



                   1.          Analisi e progettazione

            progettazione e sviluppo di un’applicazione per commercio elettronico                2
tesi di laurea triennale in ingegneria informatica


1. Requisiti:l’utente che si connette al sito naviga tra i prodotti,ne visualizza le
caratteristiche ed eventuali commenti di altri utenti. Può aggiungere un prodotto,toglierlo e
monitorare il materiale in ordinazione in ogni momento. Quando ha terminato la propria
spesa, invia i dati di fatturazione e spedizione con codice criptato,li verifica, sceglie la
modalità preferita di pagamento, lo esegue,e ne constata il successo o meno. L’utente
viene avvisato sullo stato dell’ordine.Il sistema segnala errori qualora si verifichino. E’
possibile richiedere un aiuto. Il sistema rileva se l’utente è già registrato e deve garantire
l’incolumità e la privatezza dei dati. Deve inoltre possedere facilità d’uso(aiuto),
semplicità,scalabilità,robustezza e deve essere diffondibile commercialmente(parole
chiave).

2. Analisi:il sistema consente di interagire con pagine diverse in tempi diversi.Gli utenti
giunti nel sito opereranno indifferentemente con la pagina dei prodotti che acquisteranno o
quella del carrello della spesa,da cui controlleranno l’ordine e eventualmente lo
modificheranno. L’utente può navigare come registrato. Esaminato il riepilogo d’ordine
finale il sistema chiederà il riconoscimento dell’utente;se egli è già registrato i suoi dati
sono già presenti,altrimenti se ne richiederà l’iscrizione. Se soddisfatti dei propri
acquisti,gli utenti pagheranno,inserendo le informazioni di utente,spedizione e pagamento.
Se la transazione riesce e l’ordine è accettato,l’utente ne riceve comunicazione tramite
una pagina. Accedendo dalla home page è possibile individuare degli strati gerarchici di
navigazione,ovviamente percorribili anche in direzione down-up. La segnalazione di errori
può verificarsi in ogni posizione e in questi schemi viene omessa.

PRIMO STRATO:ACCESSO DALLA HOME PAGE(fig.1):si possono visualizzare i
prodotti,richiedere un aiuto,visualizzare il contenuto del carrello tramite il mostra
carrello;da questo si può ritornare a visionare i prodotti e effettuare il saldo;dopo l’aiuto è
possibile rivedere i prodotti.

                                         DALLA RETE::
                                         DALLA RETE




                                            HOME PAGE




       MOSTRA PRODOTTI                  MOSTRA CARRELLO                            AIUTO




            SALDO                       MOSTRA CARRELLO                       MOSTRA PRODOTTI


                                                                                                Figura 1



SECONDO STRATO(fig.2):provenendo dal primo strato si possono raggiungere la fase
mostra prodotti in cui si possono selezionare gli articoli aggiungendoli o togliendoli,qualora
si percorra la gerarchia al contrario e controllare il contenuto del carrello;oppure si
controlla se il cliente è registrato oppure no;se sì è possibile controllare le informazioni di
spedizione;altrimenti queste si possono inserire una volta che ci si è iscritti.


            progettazione e sviluppo di un’applicazione per commercio elettronico                          3
tesi di laurea triennale in ingegneria informatica

                                      DAL PRIIMO STRATO::
                                      DAL PR MO STRATO




       MOSTRA PRODOTTI                      AGGIUNGI/TOGLI                      MOSTRA CARRELLO




              UTENTE REGISTRATO                                  INFORMAZIONI SPEDIZIONE


                                                                                                   Figura 2




TERZO STRATO(fig. 3):provenendo dal secondo livello ci si accerta delle informazioni
utente,di spedizione o pagamento e passare indifferentemente da una all’altra;inoltre è
sempre possibile sincerarsi del dettaglio ordine.

                                    DAL SECONDO STRATO::
                                    DAL SECONDO STRATO




     INFORMAZIONI UTENTE               INFORMAZIONI SPEDIZIONE                  DETTAGLIO ORDINE




    INFORMAZIONI SPEDIZIONE            INFORMAZIONI PAGAMENTO                   DETTAGLIO ORDINE




                    INFORMAZIONI PAGAMENTO                    DETTAGLIO ORDINE


                                                                                                   Figura 3




QUARTO STRATO(fig. 4):dopo aver verificato l’ordine lo si può effettuare o
controllare/modificare le informazioni inserite e poi eseguire l’ordine;quindi si constata il
successo di questo;oppure si può uscire con un menu esterno al carrello e tornare a
visualizzare i prodotti.

                                      DAL TERZO STRATO::
                                      DAL TERZO STRATO




            progettazione e sviluppo di un’applicazione per commercio elettronico                             4
tesi di laurea triennale in ingegneria informatica




       DETTAGLIO ORDINE                 INFORMAZIONI UTENTE              INFORMAZIONI SPEDIZIONE



                                                                         INFORMAZIONI PAGAMENTO



                                                                                  SUCCESSO



                            SUCCESSO                          ORDINE APPROVATO



        MENU ESTERNO                      MOSTRA PRODOTTI                      MOSTRA CARRELLO



                                                                                    AIUTO


                                                                                             Figura 4




I settori da esaminare nell’applicativo sono:
    Struttura:la struttura deve essere supportata da un database che contempla tre ordini
    di gestioni:lista prodotti,una lista temporanea o carrello e acquisti o lista ordinativi.
    Sicurezza dei dati:rappresenta la parte delicata dell’applicativo. I dati delle carte di
    credito vanno trasmessi in modo codificato. Memorizzarli sul server significa esporli in
    una posizione pericolosa e soggetta ad attacchi;non farlo provoca all’utente il disagio di
    dover ridigitare i dati ad ogni sessione di pagamento. Qui si è scelto di non
    conservarne l’archivio storico per motivi che verranno esplicitati nelle conclusioni finali.
    Per la crittografia è opportuno richiedere un certificato web(CA) e usare uno strato di
    sicurezza(SSL) del protocollo di trasporto(livello 4 OSI).
    Catalogo prodotti:è una lista degli articoli in vendita;l’utente li visualizza con tutte le
    caratteristiche(titolo,autore,genere,etc.se è un libro;marca,tipo,etc.se è un
    televisore,etc.).Lo scopo è di costruire un’infrastruttura di database scalabile ed
    estendibile,non un database. In questo caso,esso conterrà una sola tipologia di
    prodotto,cioè dei dischi in vinile,contraddistinti principalmente da
    autore,titolo,genere,anno,etichetta.Acquisito il risultato finale,si potrà configurare il
    sistema con qualsivogliano n prodotti appartenenti a x tipologie differenti,basandosi sui
    numerosi esempi di database presenti in rete. L’ eventuale aggiunta di ulteriori tipologie
    di prodotti arricchirà la sottocategoria della radice prodotti.
    Carrello della spesa:è la lista contenente gli articoli da acquistare;se un articolo da
    inserire non c’è,viene inserito;altrimenti viene incrementata la quantità dello stesso di
    un’unità.Il sistema assegna un carrello diverso ad ogni utente e memorizza i dati di
    questa sessione;a termine sessione si perdono i dati se non viene conclusa la
    transazione,quindi non è previsto un archivio storico. Salvando la coppia carrello-
    utente nel database si potrebbe assegnare lo stesso carrello all’utente in una sessione
    diversa(con i cookies).Ciò comporterebbe una gestione più complessa,ma
    consentirebbe anche la consultazione dell’archivio storico.Nelle conclusioni verranno
    meglio specificate le motivazioni della scelta.

            progettazione e sviluppo di un’applicazione per commercio elettronico                       5
tesi di laurea triennale in ingegneria informatica

   Informazioni:per concretizzare gli ordini servono tre tipi diversi di informazioni cioè di
   utente,di spedizione e di pagamento;sul primo tipo sono essenziali nome e
   cognome,indirizzo fisico e virtuale(E-mail),numero di telefono e password;sul secondo
   tipo nome e indirizzo;sul terzo le modalità di pagamento;se si sceglie la carta di credito
   la gestione dati viene affidata ad un esterno(vedi la voce Pagamenti sotto),altrimenti
   sono previsti contrassegno o bonifico bancario che prevedono il pagamento off-line.
   Pagamenti:avere un server dedicato per questo genere di elaborazioni presuppone
   una dimensione rilevante dovuta al costo,alla manutenzione e gestione. Delegando la
   gestione dei pagamenti ad un provider esterno si superano questi problemi. E’
   necessario quindi avvalersi di un account da un fornitore di servizi bancari e integrare i
   moduli e le librerie installandoli nel proprio sistema.
   Ordini:ogni ordine è un’ entità,ha suo progressivo ed è corredato dalle informazioni
   dell’importo di ogni singola voce(prodotto x,prodotto y,spedizione,tasse). La
   registrazione dell’ordine nel database avviene dopo la conferma del
   pagamento.Questa ha un numero d’ordine che viene memorizzato e aggiorna lo stato
   dell’ordine.Quindi si comunica tramite E-mail il successo o meno dell’operazione.
   Elementi dell’ordine:si stabilisce un’entità che possiede un’identificatore per ogni
   elemento del catalogo e il suo prezzo unitario.Questi vengono poi associati
   all’identificativo dell’ordine assieme alla quantità prescelta.




LAYOUT DELLE PAGINE
Attraverso gli schemi dei 4 strati e i settori studiati si giunge al seguente schema che
esplicita il layout delle pagine.Da questo si ricaveranno i moduli delle pagine o maschere
nella fase successiva di progettazione.Si può giungere alla pagina di errore da una
qualunque pagina qualora se ne riscontri uno.Anche gli aiuti sono raggiungibili dalla quasi
totalità delle pagine.La home page è la pagina principale da cui si accede;da essa si può
arrivare nella pagina dei prodotti,in quella del carrello o in quella del saldo.Da questa si
raggiunge la pagina utente se egli è riconosciuto dal sistema,altrimenti si viene indirizzati
alla pagina nuovo utente da cui si accede poi a quest’ultima,terminata l’acquisizione
corretta dei dati.Seguono poi l’inserimento dei dati di spedizione e pagamento e infine il
resoconto finale dell’ordine che culmina con il completamento ordine e il suo eventuale
successo comunicato all’utente.Quindi è possibile ritornare alla home page.Naturalmente
è possibile saltare indifferentemente tra ciascuna fase
dati(spedizione,utente,pagamento)purché le informazioni vengano inserite tutte.Lo
schema è rappresentato nella figura 5.




            progettazione e sviluppo di un’applicazione per commercio elettronico               6
tesi di laurea triennale in ingegneria informatica




                                            HOME PAGE




            AIUTO          PRODOTTI         CARRELLO            SALDO            ERRORE




                                          NUOVO UTENTE                  UTENTE




                                                             SPEDIZIONE




                                                             PAGAMENTO




                                                          DETTAGLIO ORDINE




                                                         ORDINE COMPLETATO




           PAGINA WEB                                     SUCCESSO ORDINE

                                                                                          Figura 5




Quindi si individuano le seguenti pagine necessarie:
• Home page(HOME):la pagina di inizio navigazione,la root directory;
• Aiuto(AIUTO):la pagina di informazioni per assistere l’utente;
• Errore(ERRORE):la pagina per visualizzare gli errori;
• Mostra prodotti(MOSTRAPRO):la pagina di visualizzazione dei prodotti da cui si
   selezionano i prodotti;
• Mostra carrello(MOSTRACAR):la pagina di visualizzazione del contenuto dell’ordine
   in tempo reale;l’utente sceglie se completare l’ordine o modificarlo;
• Saldo o checkout(SALDO):la pagina iniziale della procedura di pagamento da cui
   effettuare il login se si è utenti iscritti o iscriversi come nuovi utenti;
• Informazioni utente(INFOUT):la pagina dove vengono inseriti i dati personali
   dell’acquirente;
          progettazione e sviluppo di un’applicazione per commercio elettronico                      7
tesi di laurea triennale in ingegneria informatica


•   Informazioni spedizione(INFOSPED):la pagina dove vengono inserite le informazioni
    riguardanti l’invio delle merci comprate;
•   Informazioni pagamento(INFOPAG):la pagina dove vengono inserite le informazioni
    di pagamento,compresi gli estremi delle carte di credito;
•   Dettaglio ordine(DETORD):la pagina che riassume l’acquisto,consultabile dall’utente
    prima dello stesso;
•   Successo(SUCCESSO):la pagina di conferma ordine quando è terminato.




DATABASE
Bisogna scegliere il motore di memorizzazione,ma ciò verrà attuato nella fase successiva.
Si identificano due strati,il primo concerne l’infrastruttura vera e propria adattabile ad un
qualunque negozio x,il secondo è riferito a questo particolare esempio comprensivo del
catalogo dischi.In figura 6 è riportato lo schema E-R dell’applicativo.Le due strutture
generica e particolare sono suddivise.La root directory del negozio è la tabella
prodotto,che in questo caso particolare coincide con la tabella album,poiché in questo
esempio si è scelto di vendere esclusivamente dischi.Se si desiderano vendere una
molteplicità di prodotti,la tabella prodotto fungerà da tabella radice da cui partire per
ramificare tutti gli articoli che si venderanno.Viene inoltre introdotta una tabella opzionale
carte di credito creata per effettuare la simulazione di un pagamento e testare la
correttezza del prodotto finale,ma non prevista nel prodotto finale dell’applicativo.
Infatti,come già scritto precedentemente,le procedure dei pagamenti saranno affidati ad
esterni.Le tabelle dell’infrastruttura prevedono un ordine(tabella ordine) composto da tot
articoli che ne costituiscono gli elementi(tabella elementi ordine),uno status
dell’ordine(tabella status ordine) che ne indica lo stato di avanzamento e un’utente(tabella
utente),cui questo ordine è associato. Il prodotto venduto che è in questo caso sempre un
album(tabella album) appartiene ad un genere musicale(tabella genere),è stato inciso da
uno o più artisti(tabella artista) e ed è prodotto da un’etichetta o casa discografica(tabella
etichetta).Il rapporto numerico tra tabelle è comunque indicato nello schema.




            progettazione e sviluppo di un’applicazione per commercio elettronico            8
tesi di laurea triennale in ingegneria informatica
                                      (1,N)       ORDIINE
                                                  ORD NE           (1,1)


                                                       (1,N)



         VERIIFIICA
         VER F CA                              COMPOSIIZIIONE
                                               COMPOS Z ONE                           ASSOCIIAZIIONE
                                                                                      ASSOC AZ ONE



              (1,N)                                    (1,N)                                   (1,N)

         STATUS
         STATUS                                 ELEMENTII
                                                ELEMENT                                    UTENTE
                                                                                           UTENTE
         ORDIINE
         ORD NE                                  ORDIINE
                                                 ORD NE
                                                       (1,N)


  IINFRASTRUTTURA
    NFRASTRUTTURA                                                                  IINFRASTRUTTURA
                                                                                     NFRASTRUTTURA
                                                   SCELTA
                                                   SCELTA
  ESEMPIIO DIISCHII
   ESEMP O D SCH                                                                      ESEMPIIO DIISCHII
                                                                                      ESEMP O D SCH

                                                       (1,N)
                      (1,N)                    PRODOTTO=
                                               PRODOTTO=                           (1,1)
                                                 ALBUM
                                                 ALBUM

                                                        (1,1)

          IINCIIDE
            NC DE                                POSSIIEDE
                                                 POSS EDE                                  PRODOTTO
                                                                                           PRODOTTO



              (1,N)                                    (1,N)                                    (1,N)

        ARTIISTA
        ART STA                                  GENERE
                                                 GENERE                                ETIICHETTA
                                                                                       ET CHETTA




                                                                                                        Figura 6




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




           progettazione e sviluppo di un’applicazione per commercio elettronico                             9
tesi di laurea triennale in ingegneria informatica

      STATUSOR
      STATUSOR
      STATUSOR                                 ORDIIINE
                                               ORD N E
                                               ORD NE                                       UTENTIII
                                                                                            UTENT
                                                                                            UTENT
                               1   1                                         1
 PK
 PK
 PK       IIID_STATUS
            D _STATUS
             D_STATUS                   PK
                                        PK
                                        PK         IIID_ALBUM
                                                     D _ALBUM
                                                      D_ALBUM                        PK
                                                                                     PK
                                                                                     PK        IIID_UTENTE
                                                                                                 D _UTENTE
                                                                                                  D_UTENTE
                                   N
         STATO
         STATO
         STATO                          FK
                                        FK
                                        FK            IIID_ST
                                                        D _ST
                                                         D_ST                                NOME
                                                                                             NOME
                                                                                             NOME
                                                                       N
                                        FK
                                        FK
                                        FK            IIID_UT
                                                        D _UT
                                                         D_UT                              AZIIIENDA
                                                                                           AZ E NDA
                                                                                           AZ ENDA
                                             NOME_SPED
                                             NOME_SPED
                                             NOME_SPED                                    IIINDIIIRIIIZZO1
                                                                                            N D R Z ZO1
                                                                                             ND R ZZO1
                                          AZIIIENDA_SPED
                                          AZ E NDA_SPED
                                          AZ ENDA_SPED                                    IIINDIIIRIIIZZO2
                                                                                            N D R Z ZO2
                                                                                             ND R ZZO2
                                         IIINDIIIRIIIZZO1_SPED
                                           N D R Z ZO1_SPED
                                            ND R ZZO1_SPED                                   CIIITTA’’’
                                                                                             C T TA
                                                                                             C TTA
         ELORD
         ELORD
         ELORD                          IIINDIIIRIIIZZO 2_SPED
                                          N D R Z Z O 2 _ SPED
                                           ND R ZZO 2_SPED                                   STATO
                                                                                             STATO
                                                                                             STATO
 PK
 PK
 PK        IIID_ELORD
             D _ELORD
              D_ELORD                        CIIITTA’’’_SPED
                                             C T TA _ SPED
                                             C TTA _SPED                                      CAP
                                                                                              CAP
                                                                                              CAP
                               N
 FK
 FK
 FK         IIID_ORD
              D _ORD
               D_ORD                         STATO_SPED
                                             STATO_SPED
                                             STATO_SPED                                    NAZIIIONE
                                                                                           NAZ O NE
                                                                                           NAZ ONE
 FK
 FK
 FK          IIID_ALB
               D _ALB
                D_ALB                         CAP_SPED
                                              CAP_SPED
                                              CAP_SPED                                    TELEFONO
                                                                                          TELEFONO
                                                                                          TELEFONO
                               N
        PREZZO
        PREZZO
        PREZZO                            NAZIIIONE_SPED
                                          NAZ O NE_SPED
                                          NAZ ONE_SPED                                       EMAIIIL
                                                                                             EMA L
                                                                                             EMA L
         PEZZIII
         PEZ Z
         PEZ Z                           TELEFONO_SPED
                                         TELEFONO_SPED
                                         TELEFONO_SPED                                    PASSW ORD
                                                                                          PASSW ORD
                                                                                          PASSW ORD
                                             COSTO_ORD
                                             COSTO_ORD
                                             COSTO_ORD
                                             COSTO_SPED
                                             COSTO_SPED
                                             COSTO_SPED
                                         COSTO_TOTALE
                                         COSTO_TOTALE
                                         COSTO_TOTALE
                                        TIIIPO_PAGAMENTO
                                        T P O_PAGAMENTO
                                        T PO_PAGAMENTO
                                        CONFERMA_PAGA
                                        CONFERMA_PAGA
                                        CONFERMA_PAGA
                                          STATO_ORDIIINE
                                          STATO_ORD N E
                                          STATO_ORD NE
                                        ESECUTORE_ORD
                                        ESECUTORE_ORD
                                        ESECUTORE_ORD



IINFRASTRUTTURA
  NFRASTRUTTURA
ESEMPIIO DIISCHII
 ESEMP O D SCH
                                        PRODOTTO=ALBUM
                                        PRODOTTO=ALBUM
                                        PRODOTTO=ALBUM
                                   1
      ARTIIISTA
      ART S TA
      ART STA                           PK
                                        PK
                                        PK         IIID_ALBUM
                                                     D _ALBUM
                                                      D_ALBUM
                           1       N
PK
PK
PK        IIID_ART
            D _ART
             D_ART                      FK
                                        FK
                                        FK        IIID_ARTIIISTA
                                                    D _ART S TA
                                                     D_ART STA                            ETIIICHETTA
                                                                                          ET C HETTA
                                                                                          ET CHETTA
                                                                   N             1
       NOME
       NOME
       NOME                             FK
                                        FK
                                        FK      IIID_ETIIICHETTA
                                                  D _ET C HETTA
                                                   D_ET CHETTA                       PK
                                                                                     PK
                                                                                     PK           IIID_ETIII
                                                                                                    D _ET
                                                                                                     D_ET
                                   N
                                        FK
                                        FK
                                        FK        IIID_GENERE
                                                    D _GENERE
                                                     D_GENERE                                 NOME
                                                                                              NOME
                                                                                              NOME

                                                TIIITOLO
                                                T T OLO
                                                T TOLO

      GENERE
      GENERE
      GENERE                                 DESCRIIIZIIIONE
                                             DESCR Z O NE
                                             DESCR Z ONE
                           1
PK
PK
PK        IIID_GEN
            D _GEN
             D_GEN                             IIIMMAGIIINE
                                                 M MAG N E
                                                  MMAG NE

       NOME
       NOME
       NOME                                     PREZZO
                                                PREZZO
                                                PREZZO




                                               LEGENDA:::
                                               LEGENDA
                                               LEGENDA


       ENTIIITY
       ENT T Y
       ENT TY                                IIID_FIIIELD
                                               D _F E LD
                                                D_F ELD                                   PRIIIMARY KEY
                                                                                          PR M ARY KEY
                                                                                          PR MARY KEY



                        FOREIIIGN KEY
                        FORE G N KEY
                        FORE GN KEY                                    FIIIELD
                                                                       F E LD
                                                                       F ELD



                                                                                                               Figura 7

        progettazione e sviluppo di un’applicazione per commercio elettronico                                     10
tesi di laurea triennale in ingegneria informatica

Quindi si esplicitano le tabelle(dalla 1 alla 5 sono dell’infrastruttura;dalla 6 alla 9 sono
dell’esempio) e i loro contenuti secondo il seguente schema:

                                       TABELLA ELORD(ELEMENTI ORDINE)
PRIIIMARY KEY
PR M ARY KEY
PR MARY KEY        IIID_ELORD
                     D _ELORD
                      D_ELORD              CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII..
                                           CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER .
                                           CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER
FOREIIIGN KEY
FORE G N KEY
FORE GN KEY           IIID_ORD
                        D _ORD
                         D_ORD            CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZIIIAZIIIONE CON LA
                                          CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZ A Z O NE CON LA
                                          CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZ AZ ONE CON LA
                                                             TABELLA ORDIIINE...IINTERIII NON NULLIII..
                                                              TABELLA ORD N E IN TER NON NULL .
                                                              TABELLA ORD NE NTER NON NULL
FOREIIIGN KEY
FORE G N KEY
FORE GN KEY          IIID_ALB
                       D _ALB
                        D_ALB             CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZIIIAZIIIONE CON LA
                                          CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZ A Z O NE CON LA
                                          CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZ AZ ONE CON LA
                                                       TABELLA ALBUM((PRODOTTO))..IINTERIII NON NULLIII..
                                                       TABELLA ALBUM(P RODOTTO).IN TER NON NULL .
                                                       TABELLA ALBUM PRODOTTO NTER NON NULL
   FIIIELD
   F E LD
   F ELD            PREZZO
                    PREZZO
                    PREZZO                   CAMPO:::STRIIINGA NUMERIIICA <=6CARATTERIII+2 DECIIIMALIII NON NULLA...
                                             CAMPO S TR N GA NUMER C A <=6CARATTER + 2 DEC M AL NON NULLA
                                              CAMPO STR NGA NUMER CA <=6CARATTER +2 DEC MAL NON NULLA
   FIIIELD
   F E LD
   F ELD             PEZZIII
                     PEZZ
                     PEZZ                    CAMPO:::STRIIINGA NUMERIIICA <=4 CARATTERIII CON IIINTERIII NON NULLIII..
                                              CAMPO S TR N GA NUMER C A <=4 CARATTER CON N TER NON NULL .
                                              CAMPO STR NGA NUMER CA <=4 CARATTER CON NTER NON NULL

Tabella 1
                                                  TABELLA ORDINE
PRIIIMARY KEY
PR M ARY KEY
PR MARY KEY        IIID_ORDIIINE
                     D _ORD N E
                      D_ORD NE             CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII..
                                           CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER .
                                           CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER
FOREIIIGN KEY
FORE G N KEY
FORE GN KEY            IIID_UT
                         D _UT
                          D_UT            CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZIIIAZIIIONE CON LA
                                          CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZ A Z O NE CON LA
                                          CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZ AZ ONE CON LA
                                                              TABELLA UTENTE...IINTERIII NON NULLIII..
                                                              TABELLA UTENTE IN TER NON NULL .
                                                              TABELLA UTENTE NTER NON NULL
FOREIIIGN KEY
FORE G N KEY
FORE GN KEY           IIID_ST
                        D _ST
                         D_ST             CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZIIIAZIIIONE CON LA
                                          CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZ A Z O NE CON LA
                                          CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZ AZ ONE CON LA
                                                TABELLA STATUS_OR((STATO DELL’’ORDIIINE))..IINTERIII NON NULLIII..
                                                TABELLA STATUS_OR(S TATO DELL ’ORD N E).IN TER NON NULL .
                                                TABELLA STATUS_OR STATO DELL ORD NE NTER NON NULL
   FIIIELD
   F E LD
   F ELD            NOME_SPED
                    NOME_SPED
                     NOME_SPED                 CAMPO:::STRIIINGA ALFANUMERIIICA <=120 CARATTERIII NON NULLIII..
                                               CAMPO S TR N GA ALFANUMER C A <=120 CARATTER NON NULL .
                                                CAMPO STR NGA ALFANUMER CA <=120 CARATTER NON NULL
   FIIIELD
   F E LD
   F ELD          AZIIIENDA_SPED
                   AZ E NDA_SPED
                   AZ ENDA_SPED                     CAMPO:::STRIIINGA ALFANUMERIIICA <=140 CARATTERIII..
                                                    CAMPO S TR N GA ALFANUMER C A <=140 CARATTER .
                                                    CAMPO STR NGA ALFANUMER CA <=140 CARATTER
   FIIIELD
   F E LD
   F ELD        IIINDIIIRIIIZZO1_SPE
                  N D R Z ZO1_SPE
                   ND R ZZO1_SPE               CAMPO:::STRIIINGA ALFANUMERIIICA <=150 CARATTERIII NON NULLIII..
                                               CAMPO S TR N GA ALFANUMER C A <=150 CARATTER NON NULL .
                                                CAMPO STR NGA ALFANUMER CA <=150 CARATTER NON NULL
                             DD
                              D
   FIIIELD
   F E LD
   F ELD        IIINDIIIRIIIZZO2_SPE
                  N D R Z ZO2_SPE
                   ND R ZZO2_SPE                 CAMPO:::STRIIINGA ALFANUMERIIICA <=150 CARATTERIII NON NULLIII..
                                                 CAMPO S TR N GA ALFANUMER C A <=150 CARATTER NON NULL .
                                                 CAMPO STR NGA ALFANUMER CA <=150 CARATTER NON NULL
                             DD
                              D
   FIIIELD
   F E LD
   F ELD            CIIITTA’’_SPED
                    C T TA ’_SPED
                     C TTA _SPED                CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII..
                                                CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL .
                                                 CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL
   FIIIELD
   F E LD
   F ELD           STATO _SPED
                    STATO _SPED
                    STATO _SPED                      CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII..
                                                     CAMPO S TR N GA ALFANUMER C A <=100 CARATTER .
                                                     CAMPO STR NGA ALFANUMER CA <=100 CARATTER
   FIIIELD
   F E LD
   F ELD             CAP_SPED
                      CAP_SPED
                      CAP_SPED                  CAMPO:::STRIIINGA NUMERIIICA =10 CARATTERIII IIINTERIII NON NULLIII..
                                                 CAMPO S TR N GA NUMER C A =10 CARATTER N TER NON NULL .
                                                 CAMPO STR NGA NUMER CA =10 CARATTER NTER NON NULL
   FIIIELD
   F E LD
   F ELD          NAZIIIONE_SPED
                  NAZ O NE_SPED
                   NAZ ONE_SPED                 CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII..
                                                CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL .
                                                 CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL
   FIIIELD
   F E LD
   F ELD         TELEFONO_SPE
                  TELEFONO_SPE
                  TELEFONO_SPE                  CAMPO:::STRIIINGA NUMERIIICA <=20 CARATTERIII IIINTERIII NON NULLIII..
                                                CAMPO S TR N GA NUMER C A <=20 CARATTER N TER NON NULL .
                                                CAMPO STR NGA NUMER CA <=20 CARATTER NTER NON NULL
                             DD
                              D
   FIIIELD
   F E LD
   F ELD         COSTO_ORDIIINE
                  COSTO_ORD N E
                  COSTO_ORD NE                CAMPO:::STRIIINGA NUMERIIICA <=6CARATTERIII+2 DECIIIMALIII NON NULLA...
                                              CAMPO S TR N GA NUMER C A <=6CARATTER + 2 DEC M AL NON NULLA
                                              CAMPO STR NGA NUMER CA <=6CARATTER +2 DEC MAL NON NULLA
   FIIIELD
   F E LD
   F ELD           COSTO_SPED
                    COSTO_SPED
                    COSTO_SPED                CAMPO:::STRIIINGA NUMERIIICA <=6CARATTERIII+2 DECIIIMALIII NON NULLA...
                                              CAMPO S TR N GA NUMER C A <=6CARATTER + 2 DEC M AL NON NULLA
                                              CAMPO STR NGA NUMER CA <=6CARATTER +2 DEC MAL NON NULLA
   FIIIELD
   F E LD
   F ELD         COSTO_TOTALE
                  COSTO_TOTALE
                  COSTO_TOTALE                CAMPO:::STRIIINGA NUMERIIICA <=6CARATTERIII+2 DECIIIMALIII NON NULLA...
                                              CAMPO S TR N GA NUMER C A <=6CARATTER + 2 DEC M AL NON NULLA
                                              CAMPO STR NGA NUMER CA <=6CARATTER +2 DEC MAL NON NULLA
   FIIIELD
   F E LD
   F ELD         TIIIPO_PAGAMEN
                  T P O_PAGAMEN
                   T PO_PAGAMEN                 CAMPO:::STRIIINGA ALFANUMERIIICA <=50 CARATTERIII NON NULLIII..
                                                CAMPO S TR N GA ALFANUMER C A <=50 CARATTER NON NULL .
                                                 CAMPO STR NGA ALFANUMER CA <=50 CARATTER NON NULL
                            TO
                             TO
                             TO
   FIIIELD
   F E LD
   F ELD          CONFERMA_PA
                   CONFERMA_PA
                   CONFERMA_PA                   CAMPO:::STRIIINGA ALFANUMERIIICA <=80 CARATTERIII NON NULLIII..
                                                 CAMPO S TR N GA ALFANUMER C A <=80 CARATTER NON NULL .
                                                 CAMPO STR NGA ALFANUMER CA <=80 CARATTER NON NULL
                            GA
                             GA
                             GA
   FIIIELD
   F E LD
   F ELD         STATO_ORDIIINE
                  STATO_ORD N E
                   STATO_ORD NE                     CAMPO:::STRIIINGA ALFANUMERIIICA CARATTERIII NON NULLIII..
                                                    CAMPO S TR N GA ALFANUMER C A CARATTER NON NULL .
                                                    CAMPO STR NGA ALFANUMER CA CARATTER NON NULL
   FIIIELD
   F E LD
   F ELD          ESECUTORE_O
                   ESECUTORE_O
                   ESECUTORE_O                        CAMPO:::STRIIINGA ALFANUMERIIICA <=80 CARATTERIII..
                                                      CAMPO S TR N GA ALFANUMER C A <=80 CARATTER .
                                                      CAMPO STR NGA ALFANUMER CA <=80 CARATTER
                            RD
                             RD
                             RD

Tabella 2
                                               TABELLA STATUSOR
PRIIIMARY KEY
PR M ARY KEY
PR MARY KEY         IIID_STATUS
                      D _STATUS
                       D_STATUS            CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII..
                                           CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER .
                                           CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER
     FIIIELD
     F E LD
      F ELD             STATO
                        STATO
                         STATO                  CAMPO:::STRIIINGA ALFANUMERIIICA <=50 CARATTERIII NON NULLIII..
                                                CAMPO S TR N GA ALFANUMER C A <=50 CARATTER NON NULL .
                                                CAMPO STR NGA ALFANUMER CA <=50 CARATTER NON NULL

Tabella 3
                                                  TABELLA UTENTI
PRIIIMARY KEY
PR M ARY KEY
PR MARY KEY         IIID_UTENTE
                      D _UTENTE
                       D_UTENTE            CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII..
                                           CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER .
                                           CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER
     FIIIELD
     F E LD
      F ELD              NOME
                         NOME
                          NOME                    CAMPO:::STRIIINGA ALFANUMERIIICA <=120 CARATTERIII NON NULLIII..
                                                  CAMPO S TR N GA ALFANUMER C A <=120 CARATTER NON NULL .
                                                  CAMPO STR NGA ALFANUMER CA <=120 CARATTER NON NULL
     FIIIELD
     F E LD
      F ELD            AZIIIENDA
                        AZ E NDA
                        AZ ENDA                         CAMPO:::STRIIINGA ALFANUMERIIICA <=140 CARATTERIII..
                                                        CAMPO S TR N GA ALFANUMER C A <=140 CARATTER .
                                                         CAMPO STR NGA ALFANUMER CA <=140 CARATTER
     FIIIELD
     F E LD
      F ELD         IIINDIIIRIIIZZO1
                      N D R Z ZO1
                       ND R ZZO1                  CAMPO:::STRIIINGA ALFANUMERIIICA <=150 CARATTERIII NON NULLIII..
                                                  CAMPO S TR N GA ALFANUMER C A <=150 CARATTER NON NULL .
                                                  CAMPO STR NGA ALFANUMER CA <=150 CARATTER NON NULL
     FIIIELD
     F E LD
      F ELD         IIINDIIIRIIIZZO2
                      N D R Z ZO2
                       ND R ZZO2                  CAMPO:::STRIIINGA ALFANUMERIIICA <=150 CARATTERIII NON NULLIII..
                                                  CAMPO S TR N GA ALFANUMER C A <=150 CARATTER NON NULL .
                                                  CAMPO STR NGA ALFANUMER CA <=150 CARATTER NON NULL
     FIIIELD
     F E LD
      F ELD              CIIITTA’’’
                         C T TA
                          C TTA                   CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII..
                                                  CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL .
                                                  CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL
     FIIIELD
     F E LD
      F ELD              STATO
                         STATO
                         STATO                          CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII..
                                                        CAMPO S TR N GA ALFANUMER C A <=100 CARATTER .
                                                         CAMPO STR NGA ALFANUMER CA <=100 CARATTER
     FIIIELD
     F E LD
      F ELD               CAP
                           CAP
                           CAP                    CAMPO:::STRIIINGA NUMERIIICA =10 CARATTERIII IIINTERIII NON NULLIII..
                                                  CAMPO S TR N GA NUMER C A =10 CARATTER N TER NON NULL .
                                                  CAMPO STR NGA NUMER CA =10 CARATTER NTER NON NULL
     FIIIELD
     F E LD
      F ELD            NAZIIIONE
                       NAZ O NE
                        NAZ ONE                   CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII..
                                                  CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL .
                                                  CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL
     FIIIELD
     F E LD
      F ELD          TELEFONO
                      TELEFONO
                      TELEFONO                  CAMPO:::STRIIINGA NUMERIIICA <=20 CARATTERIII IIINTERIII NON NULLIII..
                                                 CAMPO S TR N GA NUMER C A <=20 CARATTER N TER NON NULL .
                                                 CAMPO STR NGA NUMER CA <=20 CARATTER NTER NON NULL
     FIIIELD
     F E LD
      F ELD              EMAIIIL
                         EMA L
                          EMA L                   CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII..
                                                  CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL .
                                                  CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL
     FIIIELD
     F E LD
      F ELD         PASSWORD
                    PASSWORD
                     PASSWORD            CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII CONTENENTIII ““@””..
                                         CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL CONTENENT “@ ”.
                                         CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL CONTENENT @

Tabella 4




Tabella 5


                progettazione e sviluppo di un’applicazione per commercio elettronico                                       11
tesi di laurea triennale in ingegneria informatica



                                                 INFRASTRUTTURA
                                                   ESEMPIO DISCHI




                                        TABELLA ALBUM(=PRODOTTI)
PRIIIMARY KEY
PR M ARY KEY
PR MARY KEY          IIID_ALBUM
                       D _ALBUM
                        D_ALBUM          CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII..
                                         CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER .
                                         CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER
FOREIIIGN KEY
FORE G N KEY
FORE GN KEY       IIID_ARTIIISTA
                    D _ART S TA
                      D_ART STA      CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZAZIIIONE CON LA TABELLA
                                     CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZAZ O NE CON LA TABELLA
                                     CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZAZ ONE CON LA TABELLA
                                                                  ARTIIISTA...IINTERIII NON NULLIII..
                                                                  ART S TA IN TER NON NULL .
                                                                  ART STA NTER NON NULL
FOREIIIGN KEY
FORE G N KEY
FORE GN KEY      IIID_ETIIICHETTA
                   D _ET C HETTA
                    D_ET CHETTA      CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZAZIIIONE CON LA TABELLA
                                     CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZAZ O NE CON LA TABELLA
                                     CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZAZ ONE CON LA TABELLA
                                                                ETIIICHETTA...IINTERIII NON NULLIII..
                                                                ET C HETTA IN TER NON NULL .
                                                                 ET CHETTA NTER NON NULL
FOREIIIGN KEY
FORE G N KEY
FORE GN KEY       IIID_GENERE
                    D _GENERE
                     D_GENERE        CONTATORE A CHIIIAVE ESTERNA PER VIIINCOLO DIII REFERENZAZIIIONE CON LA TABELLA
                                     CONTATORE A CH A VE ESTERNA PER V N COLO D REFERENZAZ O NE CON LA TABELLA
                                     CONTATORE A CH AVE ESTERNA PER V NCOLO D REFERENZAZ ONE CON LA TABELLA
                                                                  GENERE...IINTERIII NON NULLIII..
                                                                  GENERE IN TER NON NULL .
                                                                  GENERE NTER NON NULL
   FIIIELD
   F E LD
   F ELD           IIIMMAGIIINE
                     M MAG N E
                      MMAG NE         CAMPO:::STRIIINGA ALFANUMERIIICA <=50 CARATTERIII NON NULLIII.. CONTIIIENE IIIL NOME
                                      CAMPO S TR N GA ALFANUMER C A <=50 CARATTER NON NULL . CONT E NE L NOME
                                       CAMPO STR NGA ALFANUMER CA <=50 CARATTER NON NULL CONT ENE L NOME
                                                              DELL’’IIIMMAGIIINE IIIN FORMATO ...JPG...
                                                              DELL ’ M MAG N E N FORMATO J PG
                                                               DELL MMAG NE N FORMATO JPG
   FIIIELD
   F E LD
   F ELD         DESCRIIIZIIIONE
                 DESCR Z O NE
                 DESCR Z ONE                              CAMPO:::STRIIINGA DESCRIIITTIIIVA DIII TESTO...
                                                           CAMPO S TR N GA DESCR T T V A D TESTO
                                                           CAMPO STR NGA DESCR TT VA D TESTO
   FIIIELD
   F E LD
   F ELD           TIIITOLO
                    T T OLO
                    T TOLO                     CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII..
                                               CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL .
                                               CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL
   FIIIELD
   F E LD
   F ELD           PREZZO
                   PREZZO
                   PREZZO                  CAMPO:::STRIIINGA NUMERIIICA <=6CARATTERIII+2 DECIIIMALIII NON NULLA...
                                           CAMPO S TR N GA NUMER C A <=6CARATTER + 2 DEC M AL NON NULLA
                                            CAMPO STR NGA NUMER CA <=6CARATTER +2 DEC MAL NON NULLA

Tabella 6
                                                 TABELLA ARTISTA
PRIIIMARY KEY
PR M ARY KEY
PR MARY KEY         IIID_ART
                      D _ART
                       D_ART              CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII..
                                          CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER .
                                          CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER
     FIIIELD
     F E LD
      F ELD           NOME
                       NOME
                       NOME                   CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII..
                                              CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL .
                                               CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL

Tabella 7
                                               TABELLA ETICHETTA
PRIIIMARY KEY
PR M ARY KEY
PR MARY KEY          IIID_ETIII
                       D _ET
                        D_ET              CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII..
                                          CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER .
                                          CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER
     FIIIELD
     F E LD
      F ELD          NOME
                      NOME
                       NOME                   CAMPO:::STRIIINGA ALFANUMERIIICA <=100 CARATTERIII NON NULLIII..
                                              CAMPO S TR N GA ALFANUMER C A <=100 CARATTER NON NULL .
                                               CAMPO STR NGA ALFANUMER CA <=100 CARATTER NON NULL

Tabella 8
                                                 TABELLA GENERE
PRIIIMARY KEY
PR M ARY KEY
PR MARY KEY         IIID_GEN
                      D _GEN
                       D_GEN              CONTATORE A CHIIIAVE PRIIIMARIIIA AGGIIIORNATO AUTOMATIIICAMENTE...IINTERIII..
                                          CONTATORE A CH A VE PR M AR A AGG O RNATO AUTOMAT C AMENTE IN TER .
                                          CONTATORE A CH AVE PR MAR A AGG ORNATO AUTOMAT CAMENTE NTER
     FIIIELD
     F E LD
      F ELD            NOME
                       NOME
                       NOME                    CAMPO:::STRIIINGA ALFANUMERIIICA <=50 CARATTERIII NON NULLIII..
                                               CAMPO S TR N GA ALFANUMER C A <=50 CARATTER NON NULL .
                                               CAMPO STR NGA ALFANUMER CA <=50 CARATTER NON NULL

Tabella 9




3. Progettazione:la composizione dei campi delle tabelle avrebbe potuto anche
rientrare nella fase di progettazione,tuttavia si è preferito aggiungerla alla fase di analisi
poiché diretta conseguenza dei requisiti posseduti dalle stesse e per rendere più compatta
la descrizione del database.
Partendo dall’individuazione,al passo precedente,delle pagine costituenti la struttura se ne
individuano i file relativi che saranno implementati in moduli con linguaggio .php.Il titolo in
testa maiuscolo si riferisce alle pagine determinate nella fase di analisi:
           HOME PAGE(home.php):la pagina iniziale da cui l’utente parte per la
           navigazione nel sito;
           AIUTO(aiuto.php):la pagina per richiedere aiuto;
           ERRORE(errore.php):la pagina dedicata alla visualizzazione degli errori;


                progettazione e sviluppo di un’applicazione per commercio elettronico                                      12
tesi di laurea triennale in ingegneria informatica

          MOSTRAPRO(mostrapro.php):la pagina da cui si visualizzano i prodotti da
          acquistare;
          MOSTRACAR(mostracar.php):la pagina di visualizzazione del contenuto
          carrello;qui alternativamente si decide di continuare l’ordine o completarlo
          pagando;
          SALDO(saldo.php):la pagina dove effettuare il login se registrati o
          alternativamente dove registrarsi;è la quietanza del pagamento;
          INFOUT(infout.php):la pagina in cui inserire i dati personali e di fatturazione;
          INFOSPED(infosped.php):la pagina in cui inserire le informazioni a cui spedire
          l’ordine;
          INFOPAG(infopag.php):la pagina in cui vengono inserite le informazioni di
          pagamento;
          DETORD(detord.php):la pagina in cui vengono riassunte le informazioni
          dell’ordine anche prima del pagamento;l’utente sceglie se confermare l’ordine o
          modificarlo;
          SUCCESSO(successo.php):la pagina in cui si visualizza il successo
          dell’operazione ordine.




Accanto ai file di pagina utente sono previsti dei file sempre in linguaggio .php utilizzabili
come script di elaborazione.Essi riguardano:
         AGGIUNGI(aggiungi.php):l’utente che desidera un prodotto clicca su un
         pulsante a lato dello stesso e attiva questo script che inserisce l’articolo nel
         carrello;
         MODIFICA(modifica.php):l’utente che desidera togliere un articolo o modificarne
         la quantità aziona questo script che agisce sul carrello;
         AUTENTICAZIONE(autentica.php):l’utente si autentica con questo script
         inserendo il suo nome utente e la password;
         INVIO ORDINE(inviaord.php):l’utente invia l’ordine premendo il pulsante
         invio;esso può essere convalidato e in tal caso l’utente accede alla pagina con
         la conferma(successo);in caso contrario viene indirizzato ad una pagina che
         segnala l’errore;
         INVIO INFORMAZIONI DI UTENTE(inviaut):questo script si occupa di registrare
         le informazioni personali e di fatturazione di utente e di verificarne contenuti e
         l’autenticità.
         INVIO INFORMAZIONI DI SPEDIZIONE(inviasped):questo script si occupa di
         registrare le informazioni di spedizione dell’ utente e di verificarne contenuti e
         l’autenticità.
         INVIO INFORMAZIONI DI PAGAMENTO(inviapag): questo script si occupa di
         registrare le informazioni di pagamento dell’ utente e di verificarne contenuti e
         l’autenticità.


Nella successiva fig.8 vengono rappresentati tutti i moduli realizzabili in linguaggio .php
comprensivi degli script e i collegamenti esistenti tra loro.



            progettazione e sviluppo di un’applicazione per commercio elettronico             13
tesi di laurea triennale in ingegneria informatica


                                        HOME PAGE..php
                                        HOME PAGE php




                                          NAVIIGAZIIONE
                                          NAV GAZ ONE




MOSTRACAR..php
MOSTRACAR php             MOSTRAPRO..php
                          MOSTRAPRO php                   SALDO..php
                                                          SALDO php                   AIIUTO..php
                                                                                      A UTO php




 AGGIIUNGII..php
 AGG UNG php                MODIIFIICA..php
                            MOD F CA php               AUTENTIICA..php
                                                       AUTENT CA php                DAGLII ALTRII
                                                                                    DAGL ALTR
                                                                                      MODULII
                                                                                      MODUL



                                                          DATII PERSONALII
                                                          DAT PERSONAL



                                                          IINFOUT..php
                                                            NFOUT php                IINVIIAUT..php
                                                                                       NV AUT php




 DA OGNII MODULO
 DA OGN MODULO                                         DATII SPEDIIZIIONE
                                                       DAT SPED Z ONE



     ERRORE..php
     ERRORE php                                         IINFOSPED..php
                                                          NFOSPED php               IINVIIASPED..php
                                                                                      NV ASPED php




                                                       DATII PAGAMENTO
                                                       DAT PAGAMENTO



                                                         IINFOPAG..php
                                                           NFOPAG php               IINVIIAPAG..php
                                                                                      NV APAG php



                                                          CONTROLLA
                                                          CONTROLLA
      LEGENDA::
      LEGENDA                                               SPESA
                                                            SPESA



     PAGIINE ..PHP
     PAG NE PHP                                           DETORD..php
                                                          DETORD php                IINVIIAORD..php
                                                                                      NV AORD php




     SCRIIPT..PHP
     SCR PT PHP                                               ESIITO
                                                              ES TO



                                                       SUCCESSO..php
                                                       SUCCESSO php
          AZIIONE
          AZ ONE


                                                                                                    Figura 8

            progettazione e sviluppo di un’applicazione per commercio elettronico                14
tesi di laurea triennale in ingegneria informatica




Bisogna inoltre predisporre dei file inclusivi di libreria con estensione .inc per la definizione
delle classi. In particolare servono:
           CONNETTI(connetti.inc):è il file contenente le informazioni per connettersi al
           database;
           CONNESSIONE AL DB(connesdb.inc):è il file impiegato per l’apertura della
           sessione col database;
           ERRORI(errori.inc):è il file contenenti le varie tipologie di errori e in caso questi
           si verifichino ne informa l’utente e lo indirizza alla pagina più adatta per risolverli;
           SISTEMA(sistema.inc):è il file contenente l’inclusione degli altri file che gestisce
           il sistema e lo fa funzionare correttamente;
           SESSIONE(sessione.inc):è il file contenente i dati di sessione acquisto;
           GESTIONE CARRELLO(gestcar.inc):è il file che associa i dati della sessione
           utente agli articoli del carrello;
           GESTIONE ORDINE(gestord.inc):è il file che gestisce gli ordini;
           GESTIONE CATALOGO(gestcat.inc):è il file necessario per visualizzare e
           ottenere i prodotti;
           GESTIONE UTENTI(gestut.inc):è il file per registrare i nuovi utenti o richiamare
           le informazioni di quelli già registrati;
           CONTROLLO(controllo.inc):è il file contenente delle procedure di controllo della
           correttezza dei dati utente.




Nella figura 9 vengono illustrati i file e le relative funzioni da essi svolte.Vengono inoltre
messi in luce i principali capisaldi dell’applicativo.Il catalogo,gli ordini,il carrello,le
informazioni utente vengono immagazzinati nel database.Questo deve effettuare una
procedura di connessione al sistema e aprire una sessione utente.Il database può
memorizzare le immagini relative ai prodotti oppure contenere dei link per accedere alle
stesse immagazzinate in un file o cartella a parte.La gestione delle parti “separate”del
database è affidato ai relativi file .inc che sono dei file di libreria con la definizione di
oggetti e classi.Il file sistema.inc collocato a monte del sistema ha il compito di
monitorarlo.Quello controllo.inc invece esegue dei controlli sull’inserimento dati,che
eventualmente sarebbe estendibile anche al controllo trasmissione dati pagamento con
carte di credito.Tuttavia si è scelto,in questo progetto, di delegare tale operazione ad
esterni. Opzionalmente è possibile creare tali routine in questo file per poi testarne la
correttezza nella fase di collaudo.
La scelta di adoperare i file in formato .inc(o .txt) potrebbe generare delle criticità
nell’ambito della sicurezza. Infatti un utente a conoscenza del metodo di programmazione
dell’autore potrebbe inserire il path e accedere al contenuto dei file più sensibili.Problema
superabile modificando eventualmente l’estensione a .php(o .asp in dipendenza della
piattaforma di lavoro).La preferenza all’impiego dei moduli restanti .php è dettata da motivi
di ordine economico,che ne decretano inoltre la maggiore popolarità.




            progettazione e sviluppo di un’applicazione per commercio elettronico               15
tesi di laurea triennale in ingegneria informatica



                                     APPLIICATIIVO
                                     APPL CAT VO




                                       siisttema..iinc
                                       s s em a nc




                                        SIISTEMA
                                        S STEMA                           connesdb..iinc
                                                                          connesdb nc




  errrrorrii..iinc
  e o nc                               connettttii..iinc
                                       conne nc                           sessiione..iinc
                                                                          se ss o n e n c




  ERRORII
  ERROR                                DATABASE
                                       DATABASE                           SESSIIONE
                                                                          SESS ONE
                                                                           UTENTE
                                                                           UTENTE


gestt_catt..iinc
ges _ca nc                             gestt_orrd..iinc
                                       ges _o d nc                        gestt_carr..iinc
                                                                          ges _ca nc




CATALOGO
CATALOGO                                  ORDIINII
                                          ORD N                           CARRELLO
                                                                          CARRELLO




                                        gestt_utt..iinc
                                        ges _u nc




                                         UTENTII
                                         UTENT




                                       conttrrolllo..iinc
                                       co n o o n c




                                      CONTROLLO
                                      CONTROLLO


                                                                                         Figura 9
      progettazione e sviluppo di un’applicazione per commercio elettronico                  16
tesi di laurea triennale in ingegneria informatica




                                 2. Realizzazione
1. Implementazione:la descrizione si articola per aree tematiche.




DATABASE
Per motivi di ordine economico,la scelta del DB individua come strumento l’ open source
attualmente più popolare MySql che presenta inoltre il pregio di essere
scalabile(caratteristica utile in questo progetto). La seconda scelta che si deve attuare
riguarda il motore di memorizzazione.E’ stato scelto InnoDB. E’ più lento del tipo BDB e
richiede più memoria e spazio su disco,tuttavia supporta i savepoint e le transazioni di tipo
XA. Anche rispetto a MyIsam le capacità di memoria richieste sono superiori,ma se ne
preferiscono il vantaggio del maggior svincolo dalle dimensioni del sistema in caso di
recupero dati a seguito di crash e la maggior rapidità di modifica dati grazie alla gestione
autonoma del caching. Quindi si creano il database Negozio e le autorizzazioni per
l’amministratore e l’utente. Nella Tab.10 è riportato il codice in SQL del DB :

CREATE DATABASE negozio
 DEFAULT CHARACTER SET utf8
 DEFAULT COLLATE utf8_general_ci;

GRANT CREATE, DROP, SELECT, UPDATE, INSERT, DELETE
 ON negozio.*
 TO 'dischi_admin'@'localhost'
 IDENTIFIED BY 'dischi_admin';

GRANT SELECT, UPDATE, INSERT, DELETE
 ON negozio.*
 TO 'dischi_utente'@'localhost'
 IDENTIFIED BY 'dischi_utente';

USE negozio;
SET NAMES 'utf8';                                                                    Figura 10




Per gli ordini vengono predisposte tre tabelle:Elord,Ordine e Statusor che esprimono
rispettivamente gli elementi costitutivi l’ordine,l’ordine vero e proprio e lo stato
dell’ordine.Nel primo il collegamento con chiavi esterne è verso l’ordine e l’articolo(in
questo caso l’album);nel secondo il collegamento relaziona l’ordine al suo stato e all’utente
cui appartiene.Nella Tab.11 è visualizzato il codice:



            progettazione e sviluppo di un’applicazione per commercio elettronico            17
tesi di laurea triennale in ingegneria informatica


CREATE TABLE Elord
(
id_elord INTEGER AUTO_INCREMENT PRIMARY KEY,
id_ord INTEGER NOT NULL,
id_alb INTEGER NOT NULL,
prezzo DECIMAL(6,2) NOT NULL,
pezzi INTEGER(4) NOT NULL,
FOREIGN KEY (id_ord) REFERENCES Ordine (id_ordine),
FOREIGN KEY (id_alb) REFERENCES Album (id_album)
)
ENGINE = InnoDB;
CREATE TABLE Ordine
(
  id_ordine INTEGER AUTO_INCREMENT PRIMARY KEY,
  id_ut INTEGER NOT NULL,
  id_st INTEGER NOT NULL,
  nome_sped VARCHAR(120) NOT NULL,
  azienda_sped VARCHAR(140) NOT NULL,
  indirizzo1_sped VARCHAR(150) NOT NULL,
  indirizzo2_sped VARCHAR(150) NOT NULL,
  città VARCHAR(100) NOT NULL,
  stato VARCHAR(150),
  cap INTEGER(10) NOT NULL,
  nazione VARCHAR(100) NOT NULL,
  telefono INTEGER(20) NOT NULL,
  costo_ordine DECIMAL(6,2) NOT NULL,
  costo_sped DECIMAL(6,2) NOT NULL,
  costo_totale DECIMAL(6,2) NOT NULL,
  tipo_pagamento VARCHAR(50) NOT NULL,
  conferma_paga VARCHAR(80) NOT NULL,
  stato_ordine INTEGER NOT NULL,
  esecutore_ord VARCHAR(80) NOT NULL,
  FOREIGN KEY (id_ut) REFERENCES Utenti (id_utente),
  FOREIGN KEY (id_st) REFERENCES Statusor (id_status)
)
ENGINE = InnoDB;
CREATE TABLE Statusor
(
  id_status INTEGER AUTO_INCREMENT PRIMARY KEY,
  stato VARCHAR(50) NOT NULL
)
                                                                                     Figura 11
ENGINE = InnoDB;




L’ultima componente dell’infrastruttura è la tabella Utenti che detiene le informazioni
personali e di login,specificatamente con i campi email e password.Viene inoltre creato un
indice per il campo email;quando l’utente cercherà di eseguire il login il sistema effettuerà
una ricerca dati su questo. Il codice di questa è scritto nella tabella 12.
CREATE TABLE Utenti

            progettazione e sviluppo di un’applicazione per commercio elettronico            18
tesi di laurea triennale in ingegneria informatica


(
    id_utente INTEGER AUTO_INCREMENT PRIMARY KEY,
    nome VARCHAR(120) NOT NULL,
    azienda VARCHAR(140) NOT NULL,
    indirizzo1 VARCHAR(150) NOT NULL,
    indirizzo2 VARCHAR(150) NOT NULL,
    città VARCHAR(100) NOT NULL,
    stato VARCHAR(150),
    cap INTEGER(10) NOT NULL,
    nazione VARCHAR(100) NOT NULL,
    telefono INTEGER(20) NOT NULL,
    email VARCHAR(100) NOT NULL,
    password VARCHAR(100) NOT NULL,

    INDEX(email)
)
ENGINE = InnoDB;                                                                     Figura 12




Terminata la parte infrastrutturale, rimangono le tabelle dell’esempio:Album che collega
tramite chiavi esterne le altre tabelle Artista,Genere e Etichetta.IL codice viene mostrato
nella figura 13:

CREATE TABLE Album
(
  id_album INTEGER AUTO_INCREMENT PRIMARY KEY,
  id_artista INTEGER NOT NULL,
  id_etichetta INTEGER NOT NULL,
  id_genere INTEGER NOT NULL,
  titolo VARCHAR(100) NOT NULL,
  immagine VARCHAR(50),
  descrizione TEXT,
  prezzo DECIMAL(6,2) NOT NULL,
  FOREIGN KEY (id_artista) REFERENCES Artista (id_art),
  FOREIGN KEY (id_etichetta) REFERENCES Etichetta (id_eti),
  FOREIGN KEY (id_genere) REFERENCES Genere (id_gen)
)
ENGINE = InnoDB;
CREATE TABLE Artista
(
  id_art INTEGER AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(100) NOT NULL
)
ENGINE = InnoDB;
CREATE TABLE Etichetta
(
  id_eti INTEGER AUTO_INCREMENT PRIMARY KEY,

             progettazione e sviluppo di un’applicazione per commercio elettronico            19
tesi di laurea triennale in ingegneria informatica


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




A chiusura di ogni tabella c’è la dichiarazione del motore di memorizzazione,così come a
fine file c’è il comando di caricamento dei dati nelle varie tabelle(fig.14).

LOAD DATA LOCAL INFILE 'negozio.data.statusor.mysql'
 INTO TABLE Status_or
 FIELDS ENCLOSED BY '''
 LINES TERMINATED BY 'rn'
 (stato);
LOAD DATA LOCAL INFILE 'negozio.data.album.mysql'
 INTO TABLE Album
 FIELDS OPTIONALLY ENCLOSED BY '''
 LINES TERMINATED BY 'rn'
 (titolo, immagine, descrizione, prezzo);
LOAD DATA LOCAL INFILE 'negozio.data.artista.mysql'
 INTO TABLE Artista
 FIELDS ENCLOSED BY '''
 LINES TERMINATED BY 'rn'
 (id_art,nome);
LOAD DATA LOCAL INFILE 'negozio.data.etichetta.mysql'
 INTO TABLE Etichetta
 FIELDS ENCLOSED BY '''
 LINES TERMINATED BY 'rn'
 (id_eti,nome);
LOAD DATA LOCAL INFILE 'negozio.data.genere.mysql'
 INTO TABLE Genere
 FIELDS ENCLOSED BY '''
 LINES TERMINATED BY 'rn'
 (id_gen,nome);                                                                         Figura 14




PIANO PER L’INTERFACCIA

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

            progettazione e sviluppo di un’applicazione per commercio elettronico               20
tesi di laurea triennale in ingegneria informatica


/**
 * File foglio.css
 *
 * Questo file contiene il foglio base per l'applicativo negozio.
 * La sua realizzazione è semplice e basilare perché
 * la sua utilizzazione in questo ambito non deve essere
 * commerciale e accattivante.
 */


/*
 * Il sottofondo è di colore bianco
 */
body { background-color: white }

/**
 * Questo font è usato per i testi dei pulsanti e i piccoli link.
 */
.smallPrint { font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #000088 }
.smallLink { font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #000088 }

/**
 * Il font per la barra del menu in alto e lo stile dei link.
 */
.topMenuBar { background-color: #97c53d }
.topMenuBarFont { font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #000088 }
.topMenuLink { font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #000088; text-
decoration: none }

/**
 * Il font per il titolo pagina
 */
.bigTitle { font-family: Arial, Hevletica, sans-serif; font-size: 32px; font-weight: 800; color: white;
text-decoration: none }

/**
 * Il font per il testo della pagina
 */
.pageBody { font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000079 }


.normalTable {font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #000079 }
.tableLabel {font-family: Arial, Helvetica, sans-serif; font-size: 24px; color: #000079 }
.tableLabelSmall {font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #000079 }
.tableLabelTiny {font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000079 }
.errSmall {font-family: Arial, Helvetica, sans-serif; font-size: 12; color: #dd0000 }


/**
 * Qui si sovrascrivono i fogli base forniti dal browser
 */

             progettazione e sviluppo di un’applicazione per commercio elettronico                   21
tesi di laurea triennale in ingegneria informatica


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




 L’interfaccia utente opera con l’inclusione dei file contenenti il markup XHTML delle
pagine. Sono state predisposte al riguardo due pagine che verranno caricate nelle pagine
di visualizzazione:
    Pagetesta.inc;
    Pagefondo.inc.

Il nome indica la loro collocazione nel layout. I link relativi inviano rispettivamente alla
visualizzazione del carrello('mostracar.php'),la pagina di aiuto('aiuto.php') e la navigazione
tra gli articoli('mostrapro.php') per il primo file;per il secondo c’ è il rinvio a due moduli
'privacy.php' per il trattamento dei dati e 'chisiamo.php' che indirizza a una pagina
informativa sull’ azienda(moduli non realizzati in questo applicativo). La strategia è,durante
il processo di pagamento, evitare la visita ad altri siti o,peggio,di interromperne una delle
fasi. Pertanto è opportuno visualizzare solo il menu superiore o la barra di navigazione
delle pagine non coinvolte in tale processo. La barra è controllabile con la variabile
booleana $g_nonMosBarNav. Infine c’è una chiamata al modulo homepage.php. La
pagetesta è la seguente(fig.16):

<!DOCTYPE html PUBLIC "~//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
<head>
 <title><?php echo $page_title; ?></title>
 <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
 <link rel="stylesheet" href="foglio.css" type="text/css"/>
</head>
<body class='pageBody'>

<table width='100%' border='0' cellspacing='0' cellpadding='0'>
<tr>
  <td align='right'>
<?php
if (!isset($g_nonMosBarNav))
{
?>
   <font class='topMenuBarFont'>
   <a class='topMenuLink' href='mostracar.php'>Vedi carrello</a> |
   <a class='topMenuLink' href='aiuto.php'>Aiuto</a> |
   <a class='topMenuLink' href='mostrapro.php'>Naviga tra i prodotti</a>
   </font>
<?php
}
else
{
?>
   &nbsp;
<?php

             progettazione e sviluppo di un’applicazione per commercio elettronico           22
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 16




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


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



NAVIGARE TRA I PRODOTTI

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


            progettazione e sviluppo di un’applicazione per commercio elettronico             23
tesi di laurea triennale in ingegneria informatica


        echo <<<EOHTML
        <td align='center' width='50%'>
         <font class='pageBody'>
         <img src='immagini/$img' border='3'/><br/>
         $msg <br/>
         Album artista: <b>$artista</b><br/>
         <b>£$prezzo</b>
         Album etichetta: <b>$etichetta</b><br/>
         <b>£$prezzo</b>
         Album genere: <b>$genere</b><br/>
         <b>£$prezzo</b>
         <form action='aggiungi.php' method='post'>
           <input type='hidden' name='albumid' value='$aid'/>
           <input type='submit' value='Ordina'/>
         </form>
         </font>
        </td>

EOHTML;                                                                                 Figura 18



Nel form viene incluso un secondo input di tipo 'hidden' impostato sull’identificativo
dell’album. In tal modo il valore del vero identificativo dell’album visualizzato farà confluire
tutti i pulsanti nel modulo 'aggiungi.php'. Quest’ultimo cercherà quindi,con la direttiva isset
in $_post il valore dell’ identificativo album da aggiungere al carrello. Di seguito(fig. 19)
viene fornito il codice del file 'aggiungi.php':


 <?php
 /**
  *----------------
  * aggiungi.php
  *----------------
  *
  * Questa pagina prende un articolo id e aggiunge l'appropriato
  * articolo nel carrello della spesa utente,memorizzato nei dati di sessione.
  * Bisogna inoltre verificare che l' id articolo sia valido.
  *
  */

 /*
  * Si ottiene l'articolo che deve essere aggiunto
  */
 if (isset($_POST['albumid']))
 {
   /*
    * Si forza nel formato int
    */
   $aid = intval($_POST['albumid']);
 }



            progettazione e sviluppo di un’applicazione per commercio elettronico               24
tesi di laurea triennale in ingegneria informatica


 /*
  * Poi,la gestcar aggiunge una voce per questo aid
  * nel carrello della spesa. Se la voce è già presente
  * nel carrello incrementa il numero di elementi se esistenti.
  *
  *
  */
 $gc = GestCar::ottieniIstanza();
 $gc->AggiungiArticoloCarrelloUtente($aid);

 /*
  * Redirezione alla pagina che mostra il contenuto del carrello
  */
 header('Location: mostracar.php');

 ?>
                                                                                         Figura 19



Il file si avvale di un’istanza dell’oggetto GestCar definita nelle librerie e della procedura
AggiungiArticoloCarrelloUtente che controlla la validità sessione e che l’articolo esista nel
catalogo con l’ausilio di un’ oggetto di libreria GestCat mediante la procedura
earticolovalido. Poi discrimina se l’articolo è già presente nel carrello;se sì ne incrementa il
numero(npe),viceversa crea il nuovo elemento,ne ottiene le caratteristiche e lo memorizza
nel carrello.Il richiamo alla procedura è visibile nella figura 20:

 /*
   *----------------------------------------
   * AggiungiArticoloCarrelloUtente
   *----------------------------------------
   * Questa procedura aggiunge un album agli elementi
   * identificati nel carrello associato alla sessione corrente.
   * Se c'è già,ne viene aggiornata la quantità
   *
   *
   * Parametri
   * $in_aid           - id dell'articolo da aggiungere
   */
  public function AggiungiArticoloCarrelloUtente($in_aid)
  {
    /*
     * si controlla la validità della sessione
     */
    $sid = session_id();


    /*
     * Ci si accerta che l'articolo sia valido
     * Lo eseguirà il gestcat(gestione catalogo)
     */
    $gc = GestCat::ottieniIstanza();
    $valido = $gc->earticolovalido($in_aid);

            progettazione e sviluppo di un’applicazione per commercio elettronico             25
tesi di laurea triennale in ingegneria informatica




      /*
       * Si controlla se ci sono già dati nella sessione
       * per questo aid
       */
      if (isset($_SESSION['carrello'])
          and isset($_SESSION['carrello']["$in_aid"]))
      {
        $elemcarrello = &$_SESSION['carrello']["$in_aid"];
        $elemcarrello['npe']++;
      }
      else
      {
        /*
         * ottieni il prezzo e titolo dell'articolo da gestcat
         * da inserire nel carrello
         */
        $album = $gc->ottieniInfoArticolo($in_aid);
        $elemcarrello = new elemcarrello($in_aid, $album->ottieniTitolo(),
                          $album->ottieniPrezzoPerUnita(), 1);

          /*
           * memorizza questa nuova voce nei dati di sessione,
           * creando l'array del carrello se necessario
           */
          if (!isset($_SESSION['carrello']))
            $_SESSION['carrello'] = array();

          $_SESSION['carrello']["$in_aid"] = $elemcarrello;
      }                                                                                  Figura 20
  }

Come si può vedere,l’oggetto gc della classe GestCat sfrutta due procedure di libreria:
     earticolovalido(fig.21);
     ottieniInfoArticolo(fig.22).

 /*
   *-------------------
   * earticolovalido
   *------------------
   * questa procedura prende un id album e ne controlla
   * la validità.
   *
   * Parametri:
   * $in_albumid          - articolo da controllare
   *
   * Output:
   * Booleano           - TRUE se è valido,FALSE altrimenti.
   *
   *

                 progettazione e sviluppo di un’applicazione per commercio elettronico        26
tesi di laurea triennale in ingegneria informatica


  *
  *
  */
 public function earticolovalido($in_albumid)
 {
   /*
    * se è una stringa va trasformata in intero
    */
   $in_albumid = intval($in_albumid);

     /*
      * connessione al database
      */
     $conn = Connesdb::ottieniConnessione();

  /*
   * query per trovare l'id album
   */
  $query = <<<EOQ
SELECT id_album FROM Album
 WHERE id_album = $in_albumid
EOQ;

     /*
      * query
      */
     $results = @$conn->query($query);


     /*
      * azzera e indica se c'è 1 solo riscontro
      */
     $output = ($results->num_rows == 1) ? TRUE : FALSE;
     $results->close();
     return $output;                                                                 Figura 21
 }

/*
  *-----------------------
  * ottieniInfoArticolo
  *-----------------------
  * restituisce le informazioni del dato album id
  *
  * Parametri:
  * $in_albumid            - informazioni richieste sull'articolo
  *
  * Output:
  * istanza della classe album con relative informazioni
  *
  *
  *

             progettazione e sviluppo di un’applicazione per commercio elettronico        27
tesi di laurea triennale in ingegneria informatica


  *
  */
 public function ottieniInfoAlbum($in_albumid)
 {
   /*
    * trasforma la stringa in intero
    */
   $in_albumid = intval($in_albumid);

  /*
   * connessione
   */
  $conn = Connesdb::ottieniConnessione();

  /*
   * query dell'elemento
   */
  $query = <<<EOQ
SELECT id_album,titolo,descrizione,nome,
    prezzo,immagine
 FROM Album
 INNER JOIN Artista
 WHERE Album.id_artista = Artista.id_art
     AND id_album = $in_albumid
EOQ;


  /*
   * esegue la query e fornisce i risultati
   */
  $result = @$conn->query($query);


  /*
   * per ciascuna riga in uscita, crea un oggetto di classe
   * album e lo aggiunge all'array in uscita
   */
  $output = array();
  $row = @$result->fetch_assoc();


  $alb = new Album(
     $row['id_album'],
      $row['titolo'],
      $row['descrizione'],
      $row['nome'],
      $row['prezzo'],
      $row['immagine']
  );

  return $alb;                                                                     Figura 22


           progettazione e sviluppo di un’applicazione per commercio elettronico        28
tesi di laurea triennale in ingegneria informatica


   }


ALBUM

In generale gli album in vendita sono fondamentalmente racchiusi nell’omonima tabella del
database che ne descrive titolo,immagine,descrizione e prezzo.Il nome dell’album viene
memorizzato per la stampa e visualizzato nelle pagine del listino e la tabella è gestita dalla
classe GestCat(gestione catalogo). Oltre ai sottoprogrammi già descritti,la libreria
comprende le procedure per ottenere i principali campi prodotto(fig.23) e le routine per
effettuare le ricerche(fig.24).

/*
 *---------
 * Album
 *---------
 * questa classe rappresenta tutti i dettagli di un articolo.
 * Si utilizzano solo variabili di membri privati e metodi pubblici.
 * Così si concede l'accesso di sola lettura ai membri.
 */
class Album
{
  /*
   * queste variabili confrontano i dati della tabella Album
   * del database.Viene restituito un array di oggetti album
   * nonostante le chiamate di funzioni non agiscono direttamente
   * sulle tabelle del database
   */
  private $albumid;
  private $titolo;
  private $descrizione;
  private $artista;
  private $etichetta;
  private $genere;
  private $prezzo;
  private $immagine;

 /*
  *---------------
  * __construct
  *---------------
  * Crea una nuova istanza della classe Album
  *
  *
  * Parametri:
  * $in_albumid         - campo identificativo da Album
  * $in_titolo       - campo titolo
  * $in_descrizione - campo descrizione
  * $in_artista      - campo artista
  * $in_etichetta      - campo etichetta
  * $in_genere         - campo genere

             progettazione e sviluppo di un’applicazione per commercio elettronico         29
tesi di laurea triennale in ingegneria informatica


     * $in_prezzo          - campo prezzo
     * $in_immagine           - campo immagine
     */
    function __construct
    (
        $in_albumid,
        $in_titolo,
        $in_descrizione,
        $in_artista,
        $in_etichetta,
        $in_genere,
        $in_prezzo,
        $in_immagine
    )
    {
      $this->albumid = $in_albumid;
      $this->titolo = $in_titolo;
      $this->descrizione = $in_descrizione;
      $this->artista = $in_artista;
      $this->etichetta = $in_etichetta;
      $this->genere = $in_genere;
      $this->prezzo = $in_prezzo;
      $this->immagine = $in_immagine;
    }

    /*
     * queste procedure sono usate in modalità accesso sola lettura
     * sui dati
     */
    public function ottieniAlbumID() { return $this->albumid; }
    public function ottieniTitolo() { return $this->titolo; }
    public function ottieniDescrizione() {return $this->descrizione;}
    public function ottieniArtista() { return $this->artista; }
    public function ottieniEtichetta() { return $this->etichetta; }
    public function ottieniGenere() { return $this->genere; }
    public function ottieniPrezzoPerUnita() { return $this->prezzo; }
    public function ottieniImmagine() { return $this->immagine; }
}                                                                                      Figura 23




Nell’esempio sottoriportato è mostrata la ricerca album per artista. Nel file è stato scritto
anche il codice per ricercare gli album per genere ed etichetta,ma qui non verrà riportato
perché concettualmente simile a questa realizzazione.

/*
  *----------------------------
  * ottieniRiscontroAlbArt
  *----------------------------
  * restituisce una lista degli articoli riscontrati
  * Tutti indica tutti gli articoli disponibili
  *

               progettazione e sviluppo di un’applicazione per commercio elettronico            30
tesi di laurea triennale in ingegneria informatica


  *
  * Parametri:
  * $in_artista
  *
  *
  * Output:array della classe Album
  *
  */
 public function ottieniRiscontroAlbArt($in_artista = 'tutti')
 {
  /*
    * connessione al database
    *
    */
   $conn = Connesdb::ottieniConnessione();

  /*
   * query
   */
  $query = <<<EOQ
SELECT id_album,titolo,descrizione,nome,
     prezzo,immagine
 FROM Album
 INNER JOIN Artista
 ON Artista.id_art = Album.id_artista
EOQ;
   if (strtolower($in_artista) != 'tutti')
   {
     $artista = intval($in_artista);
     $query .= " WHERE artista = $artista";
  }

  /*
   * ordina i risultati per titolo e li stampa
   *
   *
   */
  $query .= ' ORDINA PER titolo';

  /*
   * esegue la query e fornisce
   */
  $result = @$conn->query($query);


  /*
   * per ciascuna riga in uscita crea un oggetto di classe
   * album e lo aggiunge all'array in uscita
   */
  $output = array();
  while (($row = @$result->fetch_assoc()) !== NULL)

             progettazione e sviluppo di un’applicazione per commercio elettronico   31
tesi di laurea triennale in ingegneria informatica


     {
         $alb = new Album(
            $row['id_album'],
            $row['titolo'],
            $row['descrizione'],
            $row['nome'],
            $row['prezzo'],
            $row['immagine']
         );

         $output[] = $alb;
     }

     /*
      * azzera i risultati.Non serve resettare la connessione,
      * sarà azzerata quando si chiude l'istanza
      *
      */
     $result->close();

     /*
      * Restituisce l'array risultante
      */
     return $output;
                                                                                          Figura 24
 }

La routine ottieniRiscontroAlbArt,come peraltro le similari ottieniRiscontroAlbEti e
ottieniRiscontroAlbGen,vengono chiamate dal modulo mostrapro.php che crea l’oggetto di
libreria GestCat,passa la variabile al pulsante di scelta,scarica i valori dei campi dal
database e infine aggiunge gli articoli se selezionati col modulo aggiungi.php. Le parti
fondamentali del codice sono rappresentate nelle figure 25(oggetto), 26(lista) e 27(loading
dati).

/**
 * Se non si specificano parametri, si visualizzano
 * tutti i prodotti
 */
if (!isset($_POST['MostraArtista']) or $_POST['MostraArtista'] == '')
{
  $MostraArtista = 'Tutti';
}
else
{
  $MostraArtista = $_POST['MostraArtista'];
}

/**
 * Crea un' istanza dell'oggetto GestCat e lo usa
 * per ottenere il riscontro del voluto artista
 *
 */

                  progettazione e sviluppo di un’applicazione per commercio elettronico               32
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza
Tesi di laurea   Fabiano Dalla Piazza

Weitere ähnliche Inhalte

Ähnlich wie Tesi di laurea Fabiano Dalla Piazza

Sistemi di pagamento digitale sulla piattaforma della TV digitale terrestre
Sistemi di pagamento digitale sulla piattaforma della TV digitale terrestreSistemi di pagamento digitale sulla piattaforma della TV digitale terrestre
Sistemi di pagamento digitale sulla piattaforma della TV digitale terrestrematteotrau
 
Gestione digitale dei documenti: ciclo di vendita automatizzato
Gestione digitale dei documenti: ciclo di vendita automatizzatoGestione digitale dei documenti: ciclo di vendita automatizzato
Gestione digitale dei documenti: ciclo di vendita automatizzatoARXivar
 
Sogei Premio PA Sostenibile 2018
Sogei Premio PA Sostenibile 2018Sogei Premio PA Sostenibile 2018
Sogei Premio PA Sostenibile 2018leorob
 
Slide Webinar 30 aprile 2021 "Digital Transformation a supporto dell’RSPP per...
Slide Webinar 30 aprile 2021 "Digital Transformation a supporto dell’RSPP per...Slide Webinar 30 aprile 2021 "Digital Transformation a supporto dell’RSPP per...
Slide Webinar 30 aprile 2021 "Digital Transformation a supporto dell’RSPP per...Talea Consulting Srl
 
Caso Giesse Per Unindustria
Caso Giesse Per UnindustriaCaso Giesse Per Unindustria
Caso Giesse Per UnindustriaTwinergy
 
I modelli di produzione nell'industria dei servizi bancari - estratto
I modelli di produzione nell'industria dei servizi bancari - estrattoI modelli di produzione nell'industria dei servizi bancari - estratto
I modelli di produzione nell'industria dei servizi bancari - estrattoValeriano La Torre
 
Talea consulting materiale elettrico
Talea consulting   materiale elettricoTalea consulting   materiale elettrico
Talea consulting materiale elettricoTalea Consulting Srl
 
Recogniform per EUROCONFERENCE: automazione processo acquisizione ordini medi...
Recogniform per EUROCONFERENCE: automazione processo acquisizione ordini medi...Recogniform per EUROCONFERENCE: automazione processo acquisizione ordini medi...
Recogniform per EUROCONFERENCE: automazione processo acquisizione ordini medi...Roberto Pucino
 
Product Information Tour 2019
Product Information Tour 2019Product Information Tour 2019
Product Information Tour 2019massimominguzzi
 
Manuale gestione studi consulenza
Manuale gestione studi consulenzaManuale gestione studi consulenza
Manuale gestione studi consulenzaPellegrino Albanese
 
Presentazione panthera pbk
Presentazione panthera pbkPresentazione panthera pbk
Presentazione panthera pbktacerrito
 
Slide webinar “Dalla fattura elettronica alla digitalizzazione del Ciclo Pass...
Slide webinar “Dalla fattura elettronica alla digitalizzazione del Ciclo Pass...Slide webinar “Dalla fattura elettronica alla digitalizzazione del Ciclo Pass...
Slide webinar “Dalla fattura elettronica alla digitalizzazione del Ciclo Pass...Talea Consulting Srl
 
Twinergy Solution: Sales Promotion Management con SAP
Twinergy Solution: Sales Promotion Management con SAPTwinergy Solution: Sales Promotion Management con SAP
Twinergy Solution: Sales Promotion Management con SAPTwinergy
 
Evento Xenesys - Dammi un QRcode e ti dirò chi sei: dal social engagement al ...
Evento Xenesys - Dammi un QRcode e ti dirò chi sei: dal social engagement al ...Evento Xenesys - Dammi un QRcode e ti dirò chi sei: dal social engagement al ...
Evento Xenesys - Dammi un QRcode e ti dirò chi sei: dal social engagement al ...Xenesys
 
Monitoraggio da remoto per reti multi-vendor
Monitoraggio da remoto per reti multi-vendorMonitoraggio da remoto per reti multi-vendor
Monitoraggio da remoto per reti multi-vendorTanaza
 
Presentazione ecommerce smart shop by Padosoft
Presentazione ecommerce smart shop by PadosoftPresentazione ecommerce smart shop by Padosoft
Presentazione ecommerce smart shop by PadosoftPadosoft.com
 
Portale gestione autoreparti
Portale gestione autorepartiPortale gestione autoreparti
Portale gestione autorepartiGiovanni Dimitri
 

Ähnlich wie Tesi di laurea Fabiano Dalla Piazza (20)

Sistemi di pagamento digitale sulla piattaforma della TV digitale terrestre
Sistemi di pagamento digitale sulla piattaforma della TV digitale terrestreSistemi di pagamento digitale sulla piattaforma della TV digitale terrestre
Sistemi di pagamento digitale sulla piattaforma della TV digitale terrestre
 
Gestione digitale dei documenti: ciclo di vendita automatizzato
Gestione digitale dei documenti: ciclo di vendita automatizzatoGestione digitale dei documenti: ciclo di vendita automatizzato
Gestione digitale dei documenti: ciclo di vendita automatizzato
 
Sogei Premio PA Sostenibile 2018
Sogei Premio PA Sostenibile 2018Sogei Premio PA Sostenibile 2018
Sogei Premio PA Sostenibile 2018
 
Slide Webinar 30 aprile 2021 "Digital Transformation a supporto dell’RSPP per...
Slide Webinar 30 aprile 2021 "Digital Transformation a supporto dell’RSPP per...Slide Webinar 30 aprile 2021 "Digital Transformation a supporto dell’RSPP per...
Slide Webinar 30 aprile 2021 "Digital Transformation a supporto dell’RSPP per...
 
Caso Giesse Per Unindustria
Caso Giesse Per UnindustriaCaso Giesse Per Unindustria
Caso Giesse Per Unindustria
 
Presentazione-BU-GDO RB6
Presentazione-BU-GDO RB6Presentazione-BU-GDO RB6
Presentazione-BU-GDO RB6
 
3pl
3pl3pl
3pl
 
I modelli di produzione nell'industria dei servizi bancari - estratto
I modelli di produzione nell'industria dei servizi bancari - estrattoI modelli di produzione nell'industria dei servizi bancari - estratto
I modelli di produzione nell'industria dei servizi bancari - estratto
 
Talea consulting materiale elettrico
Talea consulting   materiale elettricoTalea consulting   materiale elettrico
Talea consulting materiale elettrico
 
Recogniform per EUROCONFERENCE: automazione processo acquisizione ordini medi...
Recogniform per EUROCONFERENCE: automazione processo acquisizione ordini medi...Recogniform per EUROCONFERENCE: automazione processo acquisizione ordini medi...
Recogniform per EUROCONFERENCE: automazione processo acquisizione ordini medi...
 
Product Information Tour 2019
Product Information Tour 2019Product Information Tour 2019
Product Information Tour 2019
 
Manuale CRM Sicurweb
Manuale CRM SicurwebManuale CRM Sicurweb
Manuale CRM Sicurweb
 
Manuale gestione studi consulenza
Manuale gestione studi consulenzaManuale gestione studi consulenza
Manuale gestione studi consulenza
 
Presentazione panthera pbk
Presentazione panthera pbkPresentazione panthera pbk
Presentazione panthera pbk
 
Slide webinar “Dalla fattura elettronica alla digitalizzazione del Ciclo Pass...
Slide webinar “Dalla fattura elettronica alla digitalizzazione del Ciclo Pass...Slide webinar “Dalla fattura elettronica alla digitalizzazione del Ciclo Pass...
Slide webinar “Dalla fattura elettronica alla digitalizzazione del Ciclo Pass...
 
Twinergy Solution: Sales Promotion Management con SAP
Twinergy Solution: Sales Promotion Management con SAPTwinergy Solution: Sales Promotion Management con SAP
Twinergy Solution: Sales Promotion Management con SAP
 
Evento Xenesys - Dammi un QRcode e ti dirò chi sei: dal social engagement al ...
Evento Xenesys - Dammi un QRcode e ti dirò chi sei: dal social engagement al ...Evento Xenesys - Dammi un QRcode e ti dirò chi sei: dal social engagement al ...
Evento Xenesys - Dammi un QRcode e ti dirò chi sei: dal social engagement al ...
 
Monitoraggio da remoto per reti multi-vendor
Monitoraggio da remoto per reti multi-vendorMonitoraggio da remoto per reti multi-vendor
Monitoraggio da remoto per reti multi-vendor
 
Presentazione ecommerce smart shop by Padosoft
Presentazione ecommerce smart shop by PadosoftPresentazione ecommerce smart shop by Padosoft
Presentazione ecommerce smart shop by Padosoft
 
Portale gestione autoreparti
Portale gestione autorepartiPortale gestione autoreparti
Portale gestione autoreparti
 

Mehr von Fabiano Dalla Piazza

Gestione albergo Fabiano dalla piazza
Gestione albergo  Fabiano dalla piazzaGestione albergo  Fabiano dalla piazza
Gestione albergo Fabiano dalla piazzaFabiano Dalla Piazza
 
Matrici e vettori Fabiano dalla piazza
Matrici e vettori  Fabiano dalla piazzaMatrici e vettori  Fabiano dalla piazza
Matrici e vettori Fabiano dalla piazzaFabiano Dalla Piazza
 
Reti di calcolatori Fabiano dalla piazza
Reti di calcolatori   Fabiano dalla piazzaReti di calcolatori   Fabiano dalla piazza
Reti di calcolatori Fabiano dalla piazzaFabiano Dalla Piazza
 
Sistemi operativi Fabiano Dalla Piazza
Sistemi operativi  Fabiano Dalla PiazzaSistemi operativi  Fabiano Dalla Piazza
Sistemi operativi Fabiano Dalla PiazzaFabiano Dalla Piazza
 
Slides tesi di laurea Fabiano Dalla Piazza
Slides tesi di laurea Fabiano Dalla PiazzaSlides tesi di laurea Fabiano Dalla Piazza
Slides tesi di laurea Fabiano Dalla PiazzaFabiano Dalla Piazza
 

Mehr von Fabiano Dalla Piazza (6)

Gestione albergo Fabiano dalla piazza
Gestione albergo  Fabiano dalla piazzaGestione albergo  Fabiano dalla piazza
Gestione albergo Fabiano dalla piazza
 
Matrici e vettori Fabiano dalla piazza
Matrici e vettori  Fabiano dalla piazzaMatrici e vettori  Fabiano dalla piazza
Matrici e vettori Fabiano dalla piazza
 
Reti di calcolatori Fabiano dalla piazza
Reti di calcolatori   Fabiano dalla piazzaReti di calcolatori   Fabiano dalla piazza
Reti di calcolatori Fabiano dalla piazza
 
Sistemi operativi Fabiano Dalla Piazza
Sistemi operativi  Fabiano Dalla PiazzaSistemi operativi  Fabiano Dalla Piazza
Sistemi operativi Fabiano Dalla Piazza
 
Ing sftw Fabiano Dalla Piazza
Ing sftw Fabiano Dalla PiazzaIng sftw Fabiano Dalla Piazza
Ing sftw Fabiano Dalla Piazza
 
Slides tesi di laurea Fabiano Dalla Piazza
Slides tesi di laurea Fabiano Dalla PiazzaSlides tesi di laurea Fabiano Dalla Piazza
Slides tesi di laurea Fabiano Dalla Piazza
 

Tesi di laurea Fabiano Dalla Piazza

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