Fondamenti delle basi di dati

Corso MySQL a cura del prof. Pietro De Paolis

Verso programmi più complessi

Iniziamo ora un percorso che ci porti alla soluzione del tema assegnato agli esami di stato per l'indirizzo informatica ITIS nell'anno scolastico  2003-04. Iniziamo a fare dei semplici esercizi in modo da acquisire la padronanza necessaria per gestire basi di dati molto complesse, iniziando da quelle più semplici.

Esercizio 1

In un istituto scolastico frequentano nell'anno scolastico 2006/07 circa 1.000 studenti, distinti in classi che vanno dalla prima alla quinta. Progettare una base di dati che implementi in linguaggio SQL le seguenti interrogazioni:

1 - Dato uno studente fornire la data di nascita, il comune di nascita, il comune di residenza, l'indirizzo, il numero di telefono, la classe frequentata nel corrente anno scolastico.

2 - Dato un comune di residenza fornire un elenco di tutti gli studenti residenti in quel comune.

3 - Data una classe fornire l'elenco di tutti gli alunni della classe.

Soluzione

La tabella da costruire nella base di dati può essere la seguente:

codice cognome nome datanascita comunenascita comuneresidenza indirizzo telefono classe sezione corso
01 Bianchi Gerardo 14/12/87 Milano Milano Via Bossi 25 02832547 5 A Informatica
02 Rossi Antonio 10/01/1988 Roma Milano Via G. Mazzini 310 02573281 4 C Meccanico
                     
980 Merlino Giuseppe 15/10/1991 Venezia Gallarate Via Manzoni 120 02581475 1 H Informatica

Il nostro comando completo in MySQL sarà:

CREATE TABLE studenti (codice INT(7) not null AUTO_INCREMENT, cognome CHAR(50), nome CHAR(50), datanascita CHAR(50), comunenascita CHAR(50), comuneresidenza CHAR(50), indirizzo CHAR (50), telefono CHAR(50), classe CHAR(50), sezione CHAR(50), corso CHAR(50), PRIMARY KEY(codice)

Notiamo che il codice per ogni studente lo facciamo creare  mediante un numero intero che si incrementa in modo automatico (AUTO_INCREMENT)ogni volta che inseriamo un dato nella tabella; not null indica che il codice numero non può essere nullo, cioè il campo non può essere vuoto; mentre gli altri valori della riga possono essere vuoti.  PRIMARY KEY(codice) indica la chiave primaria che indentifica in modo univoco ogni riga; noi abbiamo scelto la colonna del codice in modo da assegnare ad ogni alunno un numero univoco.

Il nostro programma completo per creare una tabella sarà:

<?php

print ("Programma per creare una tabella studenti");

$nomehost = "miohost";

$utente = "mionome";

$parola = "miapasswors";

$nome = "nomedeldatabase";

$connessione=mysql_connect($nomehost,$utente,$parola);

$selezione = mysql_select_db($nome, $connessione);

$richiesta = "CREATE TABLE studenti (codice INT(7) not null AUTO_INCREMENT, cognome CHAR(50), nome CHAR(50), datanascita CHAR(50), comunenascita CHAR(50), comuneresidenza CHAR(50), indirizzo CHAR (50), telefono CHAR(50), classe CHAR(50), sezione CHAR(50), corso CHAR(50), PRIMARY KEY(codice) ) ";

$risultato =mysql_query($richiesta);

mysql_close($connessione);

?>

Salviamo con il nome di creotabellastudenti.php ed eseguiamolo.

 

Riempiamo la tabella

Ora possiamo scrivere un piccolo programma misto in php, javascript e Mysql per riempire in modo automatico la tabella. Nella creazione del nostro piccolo programma dobbiamo immaginare che un generico applicato di segreteria sia incaricato di riempire la tabella con i dati dei circa mille studenti della scuola. Il lavoro da fare è molto impegnativo, può essere soggetto ad errori in fase di memorizzazione dei dati sulla base di dati; per cui è bene che il programma sia semplice, ma è anche opportuno che eviti banali errori.

Vogliamo vedere ora come funziona il listato del seguente programma:

Cognome

Nome

Data di nascita
Comune di nascita
Comune di residenza
Indirizzo
Telefono n.
Classe
Sezione
Corso

 

Questo programma sfrutta le caratterische grafiche del linguaggio html; vediamo i passi necessari per poterlo costruire ed utilizzare per la registrazione dei dati di ogni studente. Visto che dobbiamo comunque utillizzare un programma php stabiliamo dapprima quali sono le variabili php da utilizzare e precisamente:

$cognome : memorizza il cognome dello studente;

$nome : memorizza il nome dello studente

$datanascita:  memorizza la data di nascita dello studente; questa variabile la otteniamo come somma di tre variabili e precisamente:

$giorno : memorizza il giorno di nascita;

$mese : memorizza il mese  di nascita;

$anno : memorizza l'anno di nascita;

successivamente otteniamo:

$datanascita = $giorno."/".$mese."/".$anno

$comunenascita : memorizza il comune di nascita;

$comuneresidenza : memorizza il comune di residenza;

$indirizzo : memorizza l'indirizzo della residenza;

$telefono : memorizza in numero di telefono;

$classe : memorizza la classe;

$sezione : memorizza la sezione;

$corso : memorizza il corso di specializzazione dello studente.

Queste variabili devono esser passate ad un programma in php ( salvostudenti.php ) che andrà a salvare i dati sulla base di dati.

Per costruire questo programma in html utilizzeremo le stesse variabili senza il segno della stringa $; cioè

$cognome in php diventa: cognome in html e javascript;

$nome in php diventa: nome in html e javascript; e così via per le altre variabili necessarie per riempire la tabella di dati.

Modulo

Poichè i dati devono essere passati da un programma ad un altro dobbiamo per forza utilizzare un modulo che ci consenta di inviare i dati; la istruzione html sarà:

<form action="salvostudenti.php" name="modulo1" method="POST" onSubmit="return controllo1();">

al termine del modulo metteremo:

</form>

Il modulo ha nome: modulo1; quando si premerà il tasto di memorizzazione dei dati dapprima vi sarà un controllo dei dati inviati tramite una funzione javascript di nome: controllo1() e successivamente verrà caricata la pagina: salvostudenti.php che memorizza i dati nella tabella studenti della base di dati.

La funzione controllo1() la vedremo in seguito.

Utlizziamo intanto una tabella in html per poter visualizzare in modo ordinato i dati da inserire; nella prima riga della tabella metteremo:

Cognome

<tr>

<td width="35%"><font size="4" face="Verdana" color="#FF0000">Cognome</font></td>

 

<td width="65%" align="center">

<p align="center">

<font face="Verdana" size="4">

<font color="#0000FF">

<span style="mso-bidi-font-size: 12.0pt">

<input type="text" name="cognome" size="22" style="color: #FF0000; font-family: Verdana; font-size: 14 pt; background-image: url('../../immagini/sfondo3.gif')">

</span>

</font>

</font>

</p>

</td>

</tr>

 

 

cioè stiamo utilizzando una istruzione html:

<input type="text" name="cognome" size="22" >

la quale genera una casella di teso di nome: cognome; quando l'utente scriverà il dato nella casella di testo esso verrà memorizzato nella variabile html: cognome, che poi diventerà $cognome in php.

Analogamente faremo per il nome:

Nome

<tr>

<td width="35%"><font size="4" face="Verdana" color="#FF0000">Nome</font></td>

 

<td width="65%" align="center">

<p align="center"><font color="#0000FF"><span style="mso-bidi-font-size: 12.0pt"><input type="text" name="nome" size="22" style="color: #FF0000; font-family: Verdana; font-size: 14 pt; background-image: url('../../immagini/sfondo3.gif')">

</span>

</font>

</td>

</tr>

 

Per la data di nascita ci servono le tre variabili: giorno, mese anno.

Data di nascita

<tr>

<td width="35%"><font size="4" face="Verdana" color="#FF0000">Data di nascita</font></td>

 

<td width="65%" align="center">

<select size="1" name="giorno" alt="provo">

<option value="">GIORNO</option>

<option value="1">1</option>

<option value="2" >2</option>

<option value="3">3</option>

<option value="4" >4</option>

<option value="5">5</option>

<option value="6" >6</option>

<option value="7">7</option>

<option value="8" >8</option>

<option value="9" >9</option>

<option value="10">10</option>

<option value="11" >11</option>

<option value="12">12</option>

<option value="13" >13</option>

<option value="14">14</option>

<option value="15" >15</option>

<option value="16">16</option>

<option value="17" >17</option>

<option value="18" >18</option>

<option value="19" >19</option>

<option value="20">20</option>

<option value="21" >21</option>

<option value="22">22</option>

<option value="23" >23</option>

<option value="24">24</option>

<option value="25" >25</option>

<option value="26">26</option>

<option value="27" >27</option>

<option value="28" >28</option>

<option value="29" >29</option>

<option value="30">30</option>

<option value="31">31</option>

</select><select size="1" name="mese" alt="provo">

<option value="">MESE</option>

<option value="1">1</option>

<option value="2" >2</option>

<option value="3">3</option>

<option value="4" >4</option>

<option value="5">5</option>

<option value="6" >6</option>

<option value="7">7</option>

<option value="8" >8</option>

<option value="9" >9</option>

<option value="10">10</option>

<option value="11" >11</option>

<option value="12">12</option>

 

</select><select size="1" name="anno" alt="provo">

<option value="">ANNO</option>

<option value="2000">2000</option>

<option value="1999" >1999</option>

<option value="1998">1998</option>

<option value="1997" >1997</option>

<option value="1996">1996</option>

<option value="1995" >1995</option>

<option value="1994">1994</option>

<option value="1993" >1993</option>

<option value="1992" >1992</option>

<option value="1991">1991</option>

<option value="1990" >1990</option>

<option value="1989">1989</option>

<option value="1988" >1988</option>

<option value="1987">1987</option>

<option value="1986" >1986</option>

<option value="1985">1985</option>

<option value="1984" >1984</option>

<option value="1983" >1983</option>

<option value="1982" >1982</option>

<option value="1981">1981</option>

<option value="1980" >1980</option>

<option value="1979">1979</option>

<option value="1978" >1978</option>

<option value="1977">1977</option>

<option value="1976" >1976</option>

<option value="1975">1975</option>

<option value="1974" >1974</option>

<option value="1973" >1973</option>

<option value="1972" >1972</option>

<option value="1971">1971</option>

<option value="1970">1970</option>

</select>

</td>

</tr>

 

 

In pratica stiamo usando tre istruzioni select:

<select size="1" name="giorno" alt="provo">

una di nome giorno che ha 31 opzioni, una per ogni giorno del mese:

<option value="">GIORNO</option>

<option value="1">1</option>

Notiamo che il primo valore lo abbiamo messo nullo in modo da consentire all'utente di registrare comunque uno studente sapendo solo il cognome e il nome, anche senza conoscere altri dati come la data di nascita, che può essere inserita in seguito.

Analogamente per il mese usiamo:

</select><select size="1" name="mese" alt="provo">

<option value="">MESE</option>

<option value="1">1</option>

 

Analogamente per l'anno di nascita usiamo:

</select><select size="1" name="anno" alt="provo">

<option value="">ANNO</option>

<option value="2000">2000</option>

che mi crea un menù a discesa da cui l'utente può scegliere l'anno di nascita.

Per il comune di nascita useremo:

Comune di nascita

<tr>

<td width="35%"><font size="4" face="Verdana" color="#FF0000">Comune di residenza</font></td>

 

<td width="%" align="center">

<font color="#0000FF"><span style="mso-bidi-font-size: 12.0pt"><input type="text" name="comuneresidenza" size="22" style="color: #FF0000; font-family: Verdana; font-size: 14 pt; background-image: url('../../immagini/sfondo3.gif')">

</span>

</font>

</td>

</tr>

 

 

E così via per le altre variabili da acquisire.

Il listato completo del programma che acquisisce i dati degli studenti è il seguente:

 

<script language="JavaScript">

<!--

// controllo che ci siano le due scelte

function controllo1(){

// controllo che la data di nascita sia completa

scelta=eval("document.modulo1.giorno.selectedIndex");

sceltagiorno=eval("document.modulo1.giorno.options[scelta].text");

scelta=eval("document.modulo1.mese.selectedIndex");

sceltamese=eval("document.modulo1.mese.options[scelta].text");

scelta=eval("document.modulo1.anno.selectedIndex");

sceltaanno=eval("document.modulo1.anno.options[scelta].text");

if((sceltagiorno!="GIORNO")&&((sceltamese=="MESE")||(sceltaanno=="ANNO"))) {

alert("La data di nascita deve essere completa!");

return false;

};

if((sceltamese!="MESE")&&((sceltagiorno=="GIORNO")||(sceltaanno=="ANNO"))) {

alert("La data di nascita deve essere completa!");

return false;

};

if((sceltaanno!="ANNO")&&((sceltagiorno=="GIORNO")||(sceltamese=="MESE"))) {

alert("La data di nascita deve essere completa!");

return false;

};

// controllo che ci sia il cognome e il nome

sceltacognome=document.modulo1.cognome.value;

sceltanome=document.modulo1.nome.value;

if((sceltacognome=="")||(sceltanome=="")) {

alert("Inserire almeno Cognome e Nome!");

return false;

};

return true;

}

// -->

</script>

<form action="salvostudenti.php" name="modulo1" method="POST" onSubmit="return controllo1();">

 

<div align="left">

<table border="1" cellpadding="0" width="100%">

<tr>

<td width="35%"><font size="4" face="Verdana" color="#FF0000">Cognome</font></td>

<td width="65%" align="center">

<p align="center">

<font face="Verdana" size="4">

<font color="#0000FF">

<span style="mso-bidi-font-size: 12.0pt">

<input type="text" name="cognome" size="22" style="color: #FF0000; font-family: Verdana; font-size: 14 pt; background-image: url('../../immagini/sfondo3.gif')">

</span>

</font>

</font>

</p>

</td>

</tr>

<tr>

<td width="35%"><font size="4" face="Verdana" color="#FF0000">Nome</font></td>

<td width="65%" align="center">

<p align="center"><font color="#0000FF"><span style="mso-bidi-font-size: 12.0pt"><input type="text" name="nome" size="22" style="color: #FF0000; font-family: Verdana; font-size: 14 pt; background-image: url('../../immagini/sfondo3.gif')">

</span>

</font>

</td>

</tr>

<tr>

<td width="35%"><font size="4" face="Verdana" color="#FF0000">Data di nascita</font></td>

<td width="65%" align="center">

<select size="1" name="giorno" alt="provo">

<option value="">GIORNO</option>

<option value="1">1</option>

<option value="2" >2</option>

<option value="3">3</option>

<option value="4" >4</option>

<option value="5">5</option>

<option value="6" >6</option>

<option value="7">7</option>

<option value="8" >8</option>

<option value="9" >9</option>

<option value="10">10</option>

<option value="11" >11</option>

<option value="12">12</option>

<option value="13" >13</option>

<option value="14">14</option>

<option value="15" >15</option>

<option value="16">16</option>

<option value="17" >17</option>

<option value="18" >18</option>

<option value="19" >19</option>

<option value="20">20</option>

<option value="21" >21</option>

<option value="22">22</option>

<option value="23" >23</option>

<option value="24">24</option>

<option value="25" >25</option>

<option value="26">26</option>

<option value="27" >27</option>

<option value="28" >28</option>

<option value="29" >29</option>

<option value="30">30</option>

<option value="31">31</option>

</select><select size="1" name="mese" alt="provo">

<option value="">MESE</option>

<option value="1">1</option>

<option value="2" >2</option>

<option value="3">3</option>

<option value="4" >4</option>

<option value="5">5</option>

<option value="6" >6</option>

<option value="7">7</option>

<option value="8" >8</option>

<option value="9" >9</option>

<option value="10">10</option>

<option value="11" >11</option>

<option value="12">12</option>

 

</select><select size="1" name="anno" alt="provo">

<option value="">ANNO</option>

<option value="2000">2000</option>

<option value="1999" >1999</option>

<option value="1998">1998</option>

<option value="1997" >1997</option>

<option value="1996">1996</option>

<option value="1995" >1995</option>

<option value="1994">1994</option>

<option value="1993" >1993</option>

<option value="1992" >1992</option>

<option value="1991">1991</option>

<option value="1990" >1990</option>

<option value="1989">1989</option>

<option value="1988" >1988</option>

<option value="1987">1987</option>

<option value="1986" >1986</option>

<option value="1985">1985</option>

<option value="1984" >1984</option>

<option value="1983" >1983</option>

<option value="1982" >1982</option>

<option value="1981">1981</option>

<option value="1980" >1980</option>

<option value="1979">1979</option>

<option value="1978" >1978</option>

<option value="1977">1977</option>

<option value="1976" >1976</option>

<option value="1975">1975</option>

<option value="1974" >1974</option>

<option value="1973" >1973</option>

<option value="1972" >1972</option>

<option value="1971">1971</option>

<option value="1970">1970</option>

</select>

</td>

</tr>

<tr>

<td width="35%"><font size="4" face="Verdana" color="#FF0000">Comune di

nascita</font></td>

<td width="%" align="center">

<font color="#0000FF"><span style="mso-bidi-font-size: 12.0pt"><input type="text" name="comunenascita" size="22" style="color: #FF0000; font-family: Verdana; font-size: 14 pt; background-image: url('../../immagini/sfondo3.gif')">

</span>

</font>

</td>

</tr>

<tr>

<td width="35%"><font size="4" face="Verdana" color="#FF0000">Comune di residenza</font></td>

<td width="%" align="center">

<font color="#0000FF"><span style="mso-bidi-font-size: 12.0pt"><input type="text" name="comuneresidenza" size="22" style="color: #FF0000; font-family: Verdana; font-size: 14 pt; background-image: url('../../immagini/sfondo3.gif')">

</span>

</font>

</td>

</tr>

<tr>

<td width="35%"><font size="4" face="Verdana" color="#FF0000">Indirizzo</font></td>

<td width="%" align="center">

<font color="#0000FF"><span style="mso-bidi-font-size: 12.0pt"><input type="text" name="indirizzo" size="22" style="color: #FF0000; font-family: Verdana; font-size: 14 pt; background-image: url('../../immagini/sfondo3.gif')">

</span>

</font>

</td>

</tr>

<tr>

<td width="35%"><font size="4" face="Verdana" color="#FF0000">Telefono n.</font></td>

<td width="%" align="center">

<font color="#0000FF"><span style="mso-bidi-font-size: 12.0pt"><input type="text" name="telefono" size="22" style="color: #FF0000; font-family: Verdana; font-size: 14 pt; background-image: url('../../immagini/sfondo3.gif')">

</span>

</font>

</td>

</tr>

<tr>

<td width="35%"><font size="4" face="Verdana" color="#FF0000">Classe</font></td>

<td width="%" align="center">

<select size="1" name="classe" alt="provo">

<option value="">CLASSE</option>

<option value="1">1</option>

<option value="2" >2</option>

<option value="3">3</option>

<option value="4" >4</option>

<option value="5">5</option>

 

</select>

</td>

</tr>

<tr>

<td width="35%"><font size="4" face="Verdana" color="#FF0000">Sezione</font></td>

<td width="%" align="center">

<select size="1" name="sezione" alt="provo">

<option value="">SEZIONE</option>

<option value="A">A</option>

<option value="B" >B</option>

<option value="C">C</option>

<option value="D" >D</option>

<option value="E">E</option>

<option value="F" >F</option>

<option value="G">G</option>

<option value="H" >H</option>

<option value="I" >I</option>

<option value="L">L</option>

<option value="M" >M</option>

<option value="N">N</option>

 

</select>

</td>

</tr>

<tr>

<td width="35%"><font size="4" face="Verdana" color="#FF0000">Corso</font></td>

<td width="%" align="center">

<select size="1" name="corso" alt="provo">

<option value="">CORSO</option>

<option value="Meccanica">Meccanica</option>

<option value="Elettrotecnica ed applicazioni" >Elettrotecnica e applicazioni</option>

<option value="Elettronica e telecomunicazioni">Elettronica e telecomunicazioni</option>

<option value="Informatica Industriale" >Informatica Industriale</option>

 

</select>

</td>

</tr>

<tr>

<td width="134%" colspan="2">

<p align="center"><input type="submit" value="SALVA I DATI" name="salvo" style="font-family: Verdana; font-size: 14 pt"></td>

</tr>

</table>

</div>

</form>

 

 listato di inseriscodatistudenti.php

Il listato è disponibile sotto forma di testo: 

inseriscostudenti.txt a cui va aggiunta come prima riga la seguente:

<script language="JavaScript">

Funzione in javascript controllo1()

E' buona norma effettuare un primo controllo dei dati prima di effettuare la registrazione; per questo useremo una apposita funzione in javascript; i controlli potrebbero essere molteplici, noi ci limiteremo a controllare due eventi:

1 - Che l'utente abbia inserito almeno il cognome e il nome prima di effetuare l'invio dei dati;

2 - Che la data di nascita sia completa, cioè con giorno, mese e anno. Notiamo che al posto di una casella di testo per la data abbiamo utilizzato tre menù a discesa, in modo da evitare che l'utente digiti dati non previsti.

Controllo di nome e cognome

La funzione javascript controllo1() ha una parte che controlla il nome e il cognome ed è la seguente:

Istruzione Significato

// controllo che ci sia il cognome e il nome

sceltacognome=document.modulo1.cognome.value;

 

metto nella variabile sceltacognome il valore contenuto nella casella di testo del modulo1 che si chiama: cognome
sceltanome=document.modulo1.nome.value; metto nella variabile sceltanome il valore contenuto nella casella di testo del modulo1 che si chiama: nome

if((sceltacognome=="")||(sceltanome=="")) {

alert("Inserire almeno Cognome e Nome!");

return false;

};

 

controllo che le due variabili non siano vuote; se sono vuote segnalo con alert e blocco l'invio dei dati con: return false

Controllo della data di nascita

La data di nascita può essere omessa in un primo momento; tuttavia essa, se viene inserita, deve essere completa di giorno, mese ed anno; per cui nella funzione controllo1() metto la parte che effettua questi controlli e cioè:

Istruzione Significato
scelta = eval ("document.modulo1.giorno.selectedIndex"); metto nella variabile scelta il numero della opzione scelta dall'utente; questo numero parte da 0 se non vi è alcuna scelta, memtre la prima scelta ha numero 1, e così le altre. 

sceltagiorno = eval ("document.modulo1.giorno.options[scelta].text");

 

 

memorizzo in sceltagiorno il valore scelto dall'utente per il giorno; 
scelta = eval("document.modulo1.mese.selectedIndex"); metto nella variabile scelta il numero della opzione scelta dall'utente; 
sceltamese  = eval ("document.modulo1.mese.options[scelta].text"); memorizzo in sceltamese il valore scelto dall'utente per il mese; 
scelta = eval ("document.modulo1.anno.selectedIndex"); metto nella variabile scelta il numero della opzione scelta dall'utente; 
sceltaanno = eval ("document.modulo1.anno.options[scelta].text"); memorizzo in sceltaanno il valore scelto dall'utente per l'anno; 

if ((sceltagiorno!="GIORNO") && ((sceltamese == "MESE") || (sceltaanno=="ANNO"))) {

alert ("La data di nascita deve essere completa!");

return false;

};

Se sceltagiorno non è vuota mentre sceltamese o sceltaanno sono vuote, invio un messaggio di errore e blocco l'invio dei dati.

if ((sceltamese!="MESE") && ((sceltagiorno=="GIORNO") || (sceltaanno=="ANNO"))) {

alert ("La data di nascita deve essere completa!");

return false;

};

Se sceltamese non è vuota mentre sceltagiorno o sceltaanno sono vuote, invio un messaggio di errore e blocco l'invio dei dati.

if ((sceltaanno!="ANNO") && ((sceltagiorno=="GIORNO") || (sceltamese=="MESE")))  {

alert ("La data di nascita deve essere completa!");

return false;

};

Se sceltaanno non è vuota mentre sceltamese o sceltagiorno sono vuote, invio un messaggio di errore e blocco l'invio dei dati.

 

                                            

Quando l'utente preme il tasto di convalida: 

tutti i dati contenuti nel modulo vengono passati al programma in php che serve a salvare i dati sul database.

Questo programma di nome: salvostudenti.php  lo vedremo nella prossima lezione.

Corso di programmazione in MYSQL

Dizionario MySQL e relativo php

Corso di programmazione in PHP

Dizionario php

prof. Pietro De Paolis

Indice Scuola Elettrica - generico


Scuola Elettrica



 

Altre applicazioni


Mappa per tipo di scuola

 

Indice di tutte le pagine del sito


Guida per navigare


Richiesta informazioni


Scuola Elettrica