• Information Tecnology
  • Software didattici
  • Materiali didattici
  • Reti informatiche
  • Soluzioni dei problemi
Reti informatiche per la scuola - Prof.Roberto Bisceglia
 
   
 

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.



 
Aggiornamento: 20-Lug-2015 19:54
© - http://www.bisceglia.eu