Fondamenti delle basi di dati

Corso MySQL a cura del prof. Pietro De Paolis

Esercizio svolto n. 2 (parte prima)

Continuiamo il percorso iniziato nelle lezioni precedenti che ci porterà alla soluzione del tema assegnato agli esami di stato per l'indirizzo informatica ITIS nell'anno scolastico  2003-04

Esercizio n. 2

Nello stesso istituto scolastico dell'esercizio n. 1 al termine dell'anno scolastico 2005/06 vengono assegnati dei debiti scolastici per gli alunni che non hanno raggiunto la sufficienza in alcune materie fino ad un massimo di 4; per il recupero di tali debiti vengono attivati dei corsi di recupero interni alla scuola. L'organizzazione scolastica dell'istituto prevede che:

a) - ciascun studente possa frequentare fino ad un massimo di 2 corsi di recupero interni;

b) - ogni corso di recupero ha un titolo, una descrizione, una data di inizio, una data di fine, un monte ore definito, più studenti che lo frequentano, un esito del corso di recupero. 

Completare la base di dati creata in precedenza nell'esercizio n. 1 che implementi in linguaggio SQL le seguenti interrogazioni:

1 - Dato uno studente fornire un elenco dei corsi di recupero frequentati e il loro esito.

2 - Dato un corso di recupero fornire un elenco di tutti gli studenti che lo hanno frequentato.

 

Soluzione

Nella base di dati attualmente è già stata creata e completata la tabella studenti che è 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

Dobbiamo, ora, completare il nostro database inserendo nuove tabelle relative ai corsi di recupero. 

Tabella dei corsi di recupero

Le tabelle da costruire nella base di dati sono due; la prima riguarda il tipo di corso, la chiamiano: corsirecupero e può essere la seguente:

codicecorso titolo descrizione datainizio datafine ore
01 italiano Corso di recupero classi terze 14/09/2006 30/09/2006 10
02 matematica corso di recupero classi quarte 14/09/2006 29/09/2006 10
           
300 matematica Corso di recupero classi terze 14/09/2006 29/09/2006 10

Il nostro comando completo in MySQL sarà:

CREATE TABLE corsirecupero (codicecorso INT(7) not null AUTO_INCREMENT, titolo CHAR(50), descrizione CHAR(50), datainizio CHAR(50), datafine CHAR(50), ore CHAR(50),  PRIMARY KEY(codicecorso) ) 

Notiamo che il codicecorso per ogni corso di recupero 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(codicecorso) indica la chiave primaria che indentifica in modo univoco ogni riga; noi abbiamo scelto la colonna del codicecorso in modo da assegnare ad ogni corso di recupero un numero univoco.

Il nostro programma completo per creare la tabella corsirecupero sarà:

<?php

print ("Programma per creare una tabella corsi di recupero");

$nomehost = "miohost";

$utente = "mionome";

$parola = "miapasswors";

$nome = "nomedeldatabase";

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

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

$richiesta = "CREATE TABLE corsirecupero (codicecorso INT(7) not null AUTO_INCREMENT, titolo CHAR(50), descrizione CHAR(50), datainizio CHAR(50), datafine CHAR(50), ore CHAR(50),  PRIMARY KEY(codicecorso) ) ";

$risultato =mysql_query($richiesta);

mysql_close($connessione);

?>

Salviamolo con il nome di: creotabellacorsirecupero.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. 

Vogliamo vedere ora come funziona il listato del seguente programma:

Titolo

Descrizione

Data di inizio
Data di fine
Monte ore

 

Questo programma sfrutta le caratterische grafiche del linguaggio html; le variabili php da utilizzare sono:

$titolo; $descrizione; $datainizio; $datafine; $ore.

Per $datainzio la otteniamo come somma di tre variabili e precisamente:

$giornoinizio; $meseinizio; $annoinizio

successivamente otteniamo:

$datainizio = $giornoinizio."/".$meseinizio."/".$annoinizio

Analogamente per la data di fine corso abbiamo:

$giornofine; $mesefine; $annofine

successivamente otteniamo:

$datafine = $giornofine."/".$mesefine."/".$annofine

 

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

Per costruire questo programma che acquisisce i dati utilizzeremo le stesse variabili senza il segno della stringa $

Il listato completo del programma che acquisisce i dati dei corsi di recupero è il seguente:

 

<script language="JavaScript">

<!--

// controllo che ci siano le  scelte

function controllo1(){

// controllo che la data di inizio sia completa

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

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

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

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

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

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

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

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

return false;

};

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

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

return false;

};

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

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

return false;

};

// controllo che la data di fine sia completa

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

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

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

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

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

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

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

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

return false;

};

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

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

return false;

};

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

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

return false;

};

// controllo che ci sia il cognome e il nome

sceltatitolo=document.modulo1.titolo.value;

sceltadescrizione=document.modulo1.descrizione.value;

if((sceltatitolo=="")||(sceltadescrizione=="")) {

alert("Inserire titolo e descrizione!");

return false;

};

sceltaore=document.modulo1.ore.value;

if (sceltaore=="") {

alert("Inserire il monte ore!");

return false;

};

return true;

}

// -->

</script>

<form action="salvocorsirecupero.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">Titolo</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="titolo" size="30" 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">Descrizione</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="descrizione" size="30" 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

inizio</font></td>

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

<select size="1" name="giornoinizio" 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="meseinizio" 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="annoinizio" alt="provo">

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

<option value="2004">2004</option>

<option value="2005" >2005</option>

<option value="2006">2006</option>

<option value="2007" >2007</option>

<option value="2008">2008</option>

<option value="2009" >2009</option>

 

</select>

</td>

</tr>

<tr>

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

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

<select size="1" name="giornofine" 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="mesefine" 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="annofine" alt="provo">

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

<option value="2004">2004</option>

<option value="2005" >2005</option>

<option value="2006">2006</option>

<option value="2007" >2007</option>

<option value="2008">2008</option>

<option value="2009" >2009</option>

</select>

</td>

</tr>

<tr>

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

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

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

</span>

</font>

</td>

</tr>

<tr>

<td width="35%" 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 inseriscodaticorsirecupero.php

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 sia il titolo del corso, sia la descrizione, sia il monte ore;

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

                                            

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 e cioè salvocorsirecupero.php;  lo vedremo ora.

Programma php per salvare i dati del corso

I dati passati dal modulo dell'interfaccia di acquisizione dati: inseriscodaticorsirecupero verrano presi dal nostro programma in php in modo automatico e memorizzati nelle variabili php : $titolo; $descrizione; $giornoinizio;$meseinizio; $annoinizio; $giornofine; $mesefine; $annofine; $ore; 

Volendo trasformare la data di inizio del corso nel formato: giorno/mese/anno usiamo una istruzione del tipo:

if ($giornoinizio!="") $datainizio = $giornoinizio."/".$meseinizio."/".$annoinizio;

Analogamente per la data di fine corso abbiamo:

if ($giornoinizio!="") $datafine = $giornofine."/".$mesefine."/".$annofine;

A questo punto possiamo fare una richiesta di inserimento dei dati con una istruzione MySQL INSERT INTO corsirecupero e precisamente:

$richiesta="INSERT INTO corsirecupero (titolo, descrizione, datainizio, datafine, ore) VALUES ('$titolo', '$descrizione', '$datainizio', '$datafine', '$ore')";

Il nostro programma completo per inserire una riga sarà:

<?php

if($titolo=="") return;

if ($giornoinizio!="") $datainizio= $giornoinizio."/".$meseinizio."/".$annoinizio;

if ($giornofine!="") $datafine= $giornofine."/".$mesefine."/".$annofine;

print("Cerco di inserire i seguenti dati: $titolo ; $descrizione; $datainizio; $datafine; $ore <br>");

print ("Programma per inserire una riga nella nella tabella corsi di recupero");

$nomehost = "miohost";

$utente = "mionome";

$parola = "miapasswors";

$nome = "nomedeldatabase";

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

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

 

$richiesta="INSERT INTO corsirecupero (titolo, descrizione, datainizio, datafine, ore) VALUES ('$titolo', '$descrizione', '$datainizio', '$datafine', '$ore')";

$risultato =mysql_query($richiesta);

if($risultato)

print("Dati inseriti correttamente");

else

print ("Dati non inseriti");

 

mysql_close($connessione);

?>

Salviamo con il nome di salvocorsirecupero.php ed eseguiamo inseriscodaticorsirecupero.php che lo richiamerà al momento della registrazione dei dati sul nostro database.

Il nostro lavoro prosegue nella lezione lezione successiva.

2006

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