Specifiche
§ 1. Scopo
Mettere insieme alcune delle nozioni apprese su HTML, CSS, JavaScript, PHP, MySQL, per realizzare la funzionalità di registrazione a questo sito.
§ 2. Specifiche
Specificare una funzionalità significa, nell'ordine:
- Descrivere cosa si vuole realizzare
- Descrivere come fare.
- Descrivere come usarla.
La descrizione di cosa si vuole realizzare deve essere comprensibile per l'utente finale.
La descrizione sul come farlo deve essere comprensibile per lo sviluppatore.
La descrizione sul come usarla deve essere comprensibile sia all'utilizzatore che allo sviluppatore ed è la chiave per risolvere, per quanto possibile, le ambiguità derivanti dall'uso di linguaggi diversi.
§ 2.1 Descrizione della funzionalità
I contenuti del sito in oggetto riguardano argomenti diversi:
- Qualità e Sicurezza sui luoghi di lavoro;
- Applicazioni software per il migliorare la gestione dei processi aziencali;
- Gli strumenti per lo sviluppo di pagine web;
Voglio realizzare un sistema per chiedere ai visitatori del sito di fornire il proprio indirizzo email, e le loro preferenze, in modo da poterli informare sugli eventuali aggiornamenti.
Subito dopo aver scritto questo, mi viene in mente che il visitatore debba poter annullare la propria registrazione.
Pensandoci un altro po', in considerazione che nel sito c'è una sezione di download, penso che valga la pena mettere le basi per la creazione di un account utente. Ovvero ad una procedura di accreditamento dell'utente in seguito alla quale consentire all'utente registrato l'accesso a funzionalità non consentite ai visitatori anonimi.
In definitiva mi vengono in mente le usuali funzionalità di registrazione e login dei siti, ma voglio cercare di realizzarle autonomamente, mettendo insieme i pezzetti di conoscenza acquisiti sino ad ora, cercando di non copiare a pappagallo da soluzioni già sviluppate.
§ 2.1.1 Descrizione delle funzionalità v.01
- f01: Consentire ai visitatori del sito di creare un proprio account, accedendo al quale potrà registrarsi ad una o più mailing list, e ottenere l'abilitazione per scaricare file dal sito.
- f02: Consentire agli utenti di eseguire il login ed il logout su e dal proprio account
- f03: Consentire agli utenti registrati di cancellare il proprio account e tutte le informazioni ad esso correlate.
- f04: Tenere traccia delle attività eseguite dal visitatore sul sito.
- f05: Riconoscere gli utenti già registrati ed eseguire automaticamente il login quando questi visitano il sito.
§ 2.2 Specifiche funzionali
Ho indicato con fxx le diverse funzioni da realizzare. Di alcune di esse non ho la più pallida idea sul come fare. Mi sembra comunque di aver descritto delle funzionalità autoconsistenti che possono essere sviluppate in sequenza.
§ 2.2.1 f01:Consentire ai visitatori del sito di creare un proprio account, accedendo al quale potrà registrarsi ad una o più mailing list, e ottenere l'abilitazione per scaricare file dal sito. v.01
Per realizzare questa funzione occorre:
- Definire lo scopo della raccolta dati
- Definire le informazioni obbligatorie e quelle opzionali
- Definire l'interfaccia utente ovvero la form di inserimento dei dati e gli eventuali output verso l'utente per guidarlo nell'operazione di registrazione.
- Creare la o le tabelle di database necessarie
- Creare la form
- Definire i test da eseguire per verificare la correttezza della implementazione
- Scrivere il codice necessario
- Eseguire i test per verificare la correttezza della implementazione.
§ 2.2.1.1 Definire lo scopo della raccolta dati
Acquisire le informazioni strettamente necessarie per inserire l'utente in una mailing list
§ 2.2.1.2 Definire le informazioni obbligatorie e quelle opzionali
- Richiesta email, indirizzo email - per default diventa anche il nome utente
- Opzionale username, nome utente - se non inserito assume lo stesso valore dell'indirizzo email
- Richiesta password, password - per le funzioni attuali potrebbe anche essere superflua, ma la inserisco perchè voglio capire come implementare questa funzionalità.
- Opzionale interessi - a quali contenuti del sito è interessato l'utente
§ 2.2.1.3 Interfaccia utente
La form di registrazione è contenuta in una pagina video dedicata contenuta nel file formReg.php
Durante la fase di sviluppo dell'applicazione formReg.php sarà accessibile solo da testList.html e da questa pagina php_ProgFormReg.php
§ 2.2.1.4 Creare la o le tabelle di database necessarie
La creazione di tabelle l'ho gia vista qui CREATE TABLE nel creare la tabella VisitatoriRegistrati ho dovuto affrontare aspetti che non avevo visto prima e che pertanto aggiungo ai miei appunti.
Al momento è necessaria un'unica tabella VisitatoriRegistrati
La tabella VisitatoriRegistrati contiene i seguenti campi:
- userID INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY
- userName VARCHAR(50) NOT NULL
- password VARCHAR(8) NOT NULL
- email VARCHAR(50) UNIQUE
- qsa BOOLEAN DEFAULT FALSE
- qsaTools BOOLEAN DEFAULT FALSE
- webTools BOOLEAN DEFAULT FALSE
- regDate TIMESTAMP
- currentLogged BOOLEAN DEFAULT FALSE
- lastVisit DATETIME
Come faccio a creare questa tabella?
Al momento solo queste possibilità possibilità:
- Utilizzo l'interfaccia di phpMyAdmin, selezione l'unico mio database, utilizzo il wizard Crea tabelle, ed inizio ad inserire i dati necessari.
- Edito uno script php che quando viene caricato crea la tabella.
Userò il secondo metodo. Il nome dello script è creaTabellaVisitatoriRegistrati.php, che potrà essere richiato da questo link:
Per cancellare la tabella, fintanto che avrò terminato soddisfacentemente questa fase avrò a disposizione:
Se la tabella VisitatoriRegistrati esiste già lo script si limiterà a segnalarlo e non farà alcun danno.
Non sono per nulla soddisfatto, vorrei avere a disposizione query pronte, da richiamare. Qualcosa di simile all'interfaccia MS ACCESS. Probabilmente phpMyAdmin ha una funzionalità equivalente, solo che ancora non so farlo.
Se avessi dovuto sviluppare questa applicazione in MS ACCESS avrei subito creato una form con la funzione di cruscotto di manutenzione del database dove avrei potuto richiamare a piacere tutte le query per creare, aggiornare, modificare, il database dell'applicazione fino alla sua completa messa a punto. Il fatto è che con ACCESS avrei impiegato poco tempo recuperato ampliamente in seguito. Forse, presa la mano con php e MySQL, potrò fare qualche cosa di simile.
§ 2.2.1.5 Creare la form
La form formReg l'ho creata in questa pagina:
Le form per la registrazione che ho visto nella maggior parte dei siti non sono pagine normali sembrano delle finestre di dialogo, ma io non le conosco o mi sono dimenticato di averle già provate.
Forser hanno a che fare con le iframe. Faccio qualche prova:
§ 2.2.1.5.1 Provo una iframe.
Provo ad inserire formReg.php come iframe. Vediamo cosa succede.
Ho capito come si presenta, ma sono lontano dal capire come funziona.
§ 2.2.1.6 Definizione dei test
§ 2.2.1.6.1 Test 01.01
- Visualizzare la pagina formReg
- Premere il pulsante "Registrati"
- Viene richiesto l'inserimento dei campi richiesti
- Premere il pulsante "Annulla"
- Viene richiesto l'inserimento dei campi richiesti
§ 2.2.1.6.2 Test 01.02
- Visualizzare la pagina formReg
- Inserire "test@test.it" nel campo email
- Verificare che "test@test.it" compaia anche nel campo username
§ 2.2.1.6.3 Test 01.03
- Visualizzare la pagina formReg
- Inserire "pippo" nel campo Inserisci password
- Inserire "Pippo" nel campo Conferma password
- Premere Registrati
- Viene segnalato "password non valida"
§ 2.2.1.6.4 Test 01.04
- Visualizzare la pagina formReg
- Inserire un indirizzo email valido
- Inserire in password e conferma password due stringhe identiche
- Selezionare nel riquadro Interessi "Qualità e Sicurezza..."
- Premere "Registrati"
- In mhpMyAdmin verificare, nella tabella Visitatori Registrati, l'inserimento del record e la correttezza dei campi inseriti.
§ 2.2.1.6.5 Test 01.05
- Visualizzare la pagina formReg
- Inserire lo stesso indirizzo email dell'esempio precedente.
- Inserire in password e conferma password due stringhe identiche
- Selezionare nel riquadro Interessi "Qualità e Sicurezza..."
- Premere "Registrati"
- Il data entry viene rifiutato
§ 2.2.1.6.6 Test 01.06
- Visualizzare la pagina formReg
- Registrare altri due utenti assegnano un solo "interesse" a ciascuno di essi
- In mhpMyAdmin verificare l'inserimento dei record e la correttezza dei campi inseriti.
§ 2.2.1.6.7 Test 01.07
- Visualizzare la pagina formReg
- Inserire lo stesso indirizzo email dell'esempio precedente.
- Inserire in password e conferma password due stringhe identiche
- Selezionare nel riquadro Interessi "Qualità e Sicurezza..."
- Premere "Registrati"
- Il data entry viene rifiutato
§ 2.2.1.6.8 Test 01.08
- Visualizzare la pagina formReg
- Inserire un nuovo utente: email password ...
- Premere "Annulla"
- Il data entry viene rifiutato.
§ 2.2.1.6.9 Test 01.09
- Visualizzare la pagina formReg
- Inserire email di un utente registrato password e conferma password identici
- Premere "Annulla"
- Il data entry viene accettato.
- In mhpMyAdmin verificare l'avvenuta rimozione dell'utente.
§ 2.2.1.7 Codifica
Prima di inviare i dati al server è bene fare dei controlli preliminari sulla validità dei dati stessi
I primi controlli sono fatti da HTML stesso. Avere inserito nei campi di input, email, password e conferma password, l'attributo "required", fa sì che, in caso di mancato inserimento, l'utente venga invitato a fornire le informazioni richieste. L'attributo type=email nel campo di input email fa sì che l'eventuale inserimento di stringhe non conformi ai requisiti degli indirizzi email vengano rifiutate.
Il secondo livello di controllo viene eseguito dalla funzione JavaScript checkInput(), inserita come valore dell'attributo onsubit dell'elemento form. (onsubmit="return checkInput()). La funzione checkInput() è nel file formReg.js
Superato il controllo della funzione checkInput la form può essere inviata al server dove viene eseguito il file specificato nell'attributo action. action="registraUtente.php"
La form invia i dati al server usando il metodo post. Pertanto i dati saranno ricevuti nella variabile superglobal $_POST che è un'array associativa contenente tutti di dati di input della form. n
§ 2.2.1.7 Test
Nota: Tutto ciò può sembrare pedante, ma so che è necessario. Si potrebbe seguire lo schema proposto senza scrivere. Ma scrivere costringe a pensare. Scrivere favorisce lo sviluppo di nuove idee. Scrivere fa parte del processo di progettazione.
La funzione quì sviluppata è ancora lontana da poter essere considerata completa. Devo imparare a fare diverse altre cose come ad esempio chiedere conferma prima dell'esecuzione di comandi delicati come quelli di cancellazione. Dovrebbe essere possibile utilizzare finestre di dialogo come le msgbox di access. Devo capire perchè, nella maggior parte dei siti, il processo di registrazione prevede la conferma tramite scambio di email. Devo capire come sono realizzate finestre di dialogo flottanti o riquadri di popup. Devo capire come abilitare o vietare l'accesso a determinate pagine e funzioni a seconda dell'utente che stà utilizzando il sito.
Continuerò a sviluppare l'esempio.