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

Pagina inferiore

Esegue l'analisi grammaticale di una frase qualsiasi; esegue l'analisi logica di una qualunque proposizione; esegue l'analisi logica di un qualunque periodo; disegna l'albero sintattico di ogni proposizione. Pagina a pagamento anticipato.

Risolve semplici problemi di matematica, aritmetica, geometria, elettronica. Svolge espressioni, equazioni di 1* e 2° grado, sistemi di equazioni, radici col metodo tradizionale, come fatte a mano. Pagina a pagamento anticipato.

Svolgimento dei temi da parte dei professori, risoluzione problemi di matematica da parte dei professori, svolgimento di tesi e tesine da parte dei professori. Pagina a pagamento anticipato.

Scuola Elettrica

Lezioni virtuali nelle aule di scuola elementare Tutte le materie della scuola elementare per le varie classi Tastiera che legge una lettera e pronuncia il fonema in italiano Prove di laboratorio di tecnologia scuola elementare
Esercizi di tutte le materie per la scuola elementare Analisi grammaticale di un qualunque testo Analisi grammaticale ed analisi logica di un qualunque periodo Descrizioni svolte e da svolgere per scuola elementare
Risolve problemi di aritmetica e geometria Matematica per la prima elementare Matematica per la prima media Calcolatrice parlante i tasti premuti
Corso di aritmetica e geometria per scuola media inferiore Lezioni di inglese con esercizi di informatica e inglese Esercitazioni in laboratorio di educazione tecnica per scuola media Lezioni di javascript per scuola media
Corsi di lingua Italiana e letteratura italiana Corso di storia antica, medioevale, moderna, contemporanea Temi svolti e da svolgere di italiano e di storia Poesie inedite - Alessandra Madaro
Clip video su vari argomenti Disegno e stampa di circuiti elettrici ed elettronici sito: Liceo Informatico ex www.liceoinformatico.it Prove di laboratorio di tecnologia scuola media
La fabbrica degli ignoranti - ovvero il lavaggio del cervello Attività politica del prof. De Paolis Programmatore artificiale di Matematica Domande a pagamento ai professori delle varie materie
Corso di elettronica ed elettrotecnica per principianti Corso di elettronica Corso di telecomunicazioni per ITIS Corso sul telefonino GSM
ÉCOLE ÉLECTRIQUE - Scuola Elettrica in francese Analisi grammaticale e logica in francese - Analyse grammaticale et analyse fonctionnelle résolution de problèmes automatique Tastiera che legge una lettera in francese
Conigatore dei verbi italiani, regolari ed irregolari Coniugatore dei verbi inglesi, regolari ed irregolari Coniugatore dei verbi francesi Correzione di ortografia, grammatica, sintassi e semantico di un qualunque periodo
Electrical School - Scuola Elettrica in inglese Analisi grammaticale e logica in inglese - Grammatical analysis and logical analysis Risolutore di problemi in inglese - Automatic problem solver Dizionario inglese - italiano e italiano - inglese
Guida scolastica per insegnanti, per studenti, per genitori, con leggi e decreti della scuola Calcolo del netto dello stipendio mensile, per il personale della scuola Calcolo della pensione netta spettante per il personale che andrà in pensione Discussioni e forum sulla scuola
Corso di programmazione per principianti, in linguaggio PHP Corso di programmazione di basi di dati in linguaggio MySQL Lezioni di sistemi aziendali per licei, con domande di verifica degli apprendimenti Lezioni di contabilità ordinaria con programma eseguibile gratuito e stampa libri contabili
Corso di lingua latina per principianti declinatore di nomi latini e coniugatore di verbi in latino; convertitore di numeri romani in decimali analizzatore latino e traduttore di versioni dal latino in italiano  
Manuale per maschi adulti, con problemi di seduzione. Sconsigliata la lettura per donne e bambini. Collegamenti utili esterni al sito Lavora con noi! Commenti o segnalazione errori

Richiesta informazioni

Mappa per tipo di scuola

Indice di tutte le pagine del sito

Scuola Elettrica