Chi compie gli anni oggi ?
Far apparire nella homepage del sito d'Istituto un
riquadro ove si fanno gli auguri agli alunno, o ai docenti,
che quel giorno compiono gli anni, può sembrare una cosa del
tutto inutile.
Sicuramente non si tratta di una funzione essenziale, ma
sicuramente di una cosa carina e, tra l'altro, scaturita da
una interessante esercitazione su Excel,
MySQL e PHP.
Vediamo nel dettaglio come fare.
L'idea è quella di pubblicare in una pagina PHP, ovvero
incorporare in una pagina HTML un Iframe PHP, dove appaia
una frase del tipo:
Oggi compiono gli anni:
Paolo G. della IIIA, che
compie 16 anni Marzia B. della IC che compie 14 anni
Il tutto, ovviamente, in modo automatico, prelevando i
dati da un database SQL.
Cosa serve
Ovviamente serve un sito Web che disponga di PHP e
MySQL.
Nel caso di un sito basato su ASP e MsSQL sarà necessario
adattare il tutto. Per provare il funzionamento del tutto in
locale è sufficiente disporre di XAMPP, come del resto ho
fatto nelle prove che si possono vedere negli screencast.
Oltre a ciò un semplice editor di testi, suggerito
PSPad
e Microsoft Excel, ovviamente sostituibile dall'omologo di
OpenOffice.
Il recupero e l'adattamento dei dati
La prima operazione è quella di recuperare i dati degli
alunni. Ciò che serve è il loro nome, cognome, classe e data
di nascita. I sistemi informativi dell'Istituto dispongono
di tali dati e i software di gestione, sia esso Argo,
Sissi,
o Sidi consentono l'esportazione in formato compatibile con
Excel, se non direttamente il formato
XLS, sicuramente il
formato CSV.
Una volta recuperati i dati relativi agli alunni, è
necessario depurarli delle informazioni non utili a questo
scopo, lasciando unicamente le colonne con il nome, il
cognome, la classe e la
data di nascita; il resto è da
eliminare.
Non è escluso, a questo punto, che si debba operare una
serie di adattamenti. Infatti i dati provenienti dai sistemi
gestionali spesso sono tutti in caratteri maiuscoli, senza
le lettere accentate, con il formato data italiano (gg/mm/aaaa)
che mal si adattano ai database MySQL.
Oltre a ciò ritengo opportuno non pubblicare il cognome
dell'alunno, ma solo l'iniziale dello stesso, per garantire
la privacy.
Con Excel si parte quindi dai dati grezzi, posti sul
"Foglio1" e si provvede a copiarli e aggiustarli sul
"Foglio2". Nello
screencast
che
ho predisposto si possono vedere
tutti i passaggi che possono riassumersi in:
- Copiare dal "Foglio1" al "Foglio2" la prima cella
contenente un dato della colonna "classe". Se tale cella
è la A2, nella corrispondente cella
A2 di "Foglio2" è
sufficiente scrivere in quest'ultima "=Foglio1!A2".
- Fare lo stesso per la colonna "nome". Se i nomi sono
in maiuscolo, la formula da utilizzare, per copiare
dalla cella B2 del "Foglio1" è scrivere nella cella
B2
di "Foglio2" la formula "=MAIUSC.INIZ(Foglio1!B2)".
- Per la colonna "cognome" abbiamo detto che vogliamo
porre solo l'iniziale con un punto. Excel ci aiuta con
le sue funzioni: basta scrivere nella cella C2 di
"Foglio2" la formula
"=(CONCATENA(STRINGA.ESTRAI(Foglio1!C2;1;1);"."))".
- La cella contenente la prima "data di nascita" può
essere semplicemente copiata tra i fogli, come fatto per
la "classe".
Fatto ciò si selezionano in "Foglio2" le celle
da A2 a D2
e le si copiano per trascinamento fino a comprendere il
numero totale degli alunni.
A questo punto conviene copiare il "Foglio2" su una nuova
cartella, in modo da non avere più legami con i dati di
origine. Ancora qualche operazione...
La prima è l'eliminare la prima riga se conteneva delle
etichette, in modo che ci siano solo celle con dati degli
alunni. La seconda è correggere manualmente gli eventuali
nomi accentati (a me è capitato solo Nicolò che appariva
come Nicolo') e modificare il formato della data. Questo è
molto importante in quanto MySQL non digerisce i formati
data diversi da "aaaa-mm-gg". Per fare ciò è sufficiente
selezionare la colonna delle date, andare nelle "Proprietà
di cella", "Numero", "Personalizzato" e nello spazio "Tipo"
scrivere "aaaa-mm-gg". Dopo aver chiuso la finestra con "OK"
le date appariranno come "1991-07-22".
Per concludere si salva il foglio con il formato "CSV
(delimitato dal separatore di elenco".
Creare il database, le tabelle e
importare i dati
Si può fare a mano con i comandi MySQL, ma se si
dispone di PHPMyadmin è molto meglio... Accedendo al server
con questo tool si può facilmente creare il database
"compleanni" e in esso creare la
tabella "dati_alunni" con i campi "classe", "nome",
"cognome" e "datanasc".
E' assolutamente importante che i campi siano nello stesso ordine delle colonne del foglio di Excel.
Le prime tre tabelle devono essere di formato VARCHART e
lunghezza 5,30 e 5 rispettivamente. "datanasc" deve essere
in formato "DATE".
Con la funzione "Importa" di
PHPMyadmin si seleziona il
file CVS creato con Excel, si sceglie "CSV usando LOAD DATA"
e "Sostituisci i dati della tabella col file". Se tutto è
andato a buon fine, non si avranno messaggi di errore e
cliccando sulla label "Mostra" appariranno tutti i dati
importati.
Il database è quindi pronto. Ovviamente l'Amministratore
deciderà quale utente possa accedervi e la sua password, da
riportare nel file PHP. Nel nostro esempio in locale
l'utente è "root" senza password.
Tutte le procedure di cui sopra sono riportate e
commentate in questo screencast
(con audio).
Creare la pagina PHP
Ultima fase è quella di creare la pagina PHP che
interroghi il database, confronti il giorno e mese della
data corrente con il giorno e mese della data di nascita
degli alunni e, quando trovi la corrispondenza pubblichi i
loro nomi e gli anni che compiono. In caso che nessun alunno
compia gli anni quel giorno non dovrà apparire nulla.
Lo script non è certo complesso, anzi penso che esperti
di PHP possano trovare qualcosa da ridire o alternative più
performanti, ma questo funziona perfettamente.
<?php
//connessione al server
$dbconn = @mysql_connect('localhost', 'root', ''); if (!$dbconn)
{ echo 'Non sei connesso al server'; exit(); }
//connessione al database if
(!@mysql_select_db('compleanni')) { exit ('Non sei
collegato al database'); } ?>
<p><em>Oggi
compiono gli anni:</em></p>
<?php // query di
selezione con data in formato italiano $result =
@mysql_query("SELECT classe, nome, cognome, datanasc FROM
dati_alunni where MONTH(datanasc) = MONTH(CURRENT_DATE)
AND DAY(datanasc) = DAY(CURRENT_DATE)"); if (!$result)
{ exit('<p>Errore nella query: ' . mysql_error() .
'</p>'); }
//output risultati while ($list =
mysql_fetch_array($result)) { echo $list['nome'] . " " .
$list['cognome'] . "," . " della classe " . $list['classe']
. ","; $array = date_parse($list['datanasc']); echo "
che ha compiuto " . (date('Y')-$array[year]) . " anni" .
"</h6>" . "<br />"; } mysql_close($dbconn) ?> |
Come si vede lo script è semplice ed autoesplicativo e
può essere suddiviso in quattro parti: connessione al
server, apertura del database, query e pubblicazione.
Come si è visto nello screencast, se tutto è stato fatto
correttamente il risultato verrà pubblicato.
Per chi volesse cimentarsi, ho predisposto il file di
Excel di esempio, la pagina php e lo script, il CSS per creare
automaticamente la tabella. L'archivio si può scaricare da
qui.
Nota: molte idee sulle quali è basato lo script PHP
mi sono state suggerite dal prof. Paolo Bozzo
dell' I.S.S. Maffeo Vegio di Lodi.
|