Fondamenti delle basi di dati
Corso MySQL a cura del prof. Pietro De Paolis
Esercizio svolto n. 2 (parte seconda)
Stiamo proseguendo nella risoluzione dell'esercizio n. 2 visto nella lezione precedente.
Abbiamo già costruito e riempito due tabelle e precisamente la tabella studenti:
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 |
e la tabella corsirecupero:
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 |
Poichè i due quesiti richiesti dal nostro esercizio erano:
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.
è necessario creare una tabella apposita con i corsi effettivamente frequentati dagli studenti; questa tabella la chiamiamo corsifrequentati e può essere del seguente tipo:
codicefrequentati | codicecorso | codicestudente | esito |
01 | 01 | 05 | superato |
02 | 01 | 125 | non superato |
3000 | 300 | 124 | superato |
Il nostro comando completo in MySQL sarà:
CREATE TABLE corsifrequentati (codicefrequentati INT(7) not null AUTO_INCREMENT, codicecorso CHAR(50), codicestudente CHAR(50), esito CHAR(50), PRIMARY KEY(codicefrequentati) )
Il nostro programma completo per creare la tabella corsifrequentati sarà:
<?php
print ("Programma per creare una tabella corsi di recupero frequentati");
$nomehost = "miohost";
$utente = "mionome";
$parola = "miapasswors";
$nome = "nomedeldatabase";
$connessione=mysql_connect($nomehost,$utente,$parola);
$selezione = mysql_select_db($nome, $connessione);
$richiesta = "CREATE TABLE corsifrequentati (codicefrequentati INT(7) not null AUTO_INCREMENT, codicecorso CHAR(50), codicestudente CHAR(50), esito CHAR(50), PRIMARY KEY(codicefrequentati) ) ";
$risultato =mysql_query($richiesta);
mysql_close($connessione);
?>
Salviamolo con il nome di: creotabellacorsifrequentati.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:
Questo programma sfrutta le caratterische grafiche del linguaggio html; le variabili php da utilizzare sono:
$codicecorso; $codicestudente; $esito;
Queste variabili devono esser passate ad un programma in php ( salvocorsifrequentati.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 del programma che acquisisce i dati dei corsi di recupero è il seguente:
<script language="JavaScript">
<!-- // controllo che ci siano le due scelte function controllo1(){ // controllo che ci sia il codice corso il codice studente e l'esito sceltacorso=document.modulo1.codicecorso.value; sceltastudente=document.modulo1.codicestudente.value; sceltaesito=document.modulo1.esito.value; if((sceltacorso=="")||(sceltastudente=="")||(sceltaesito=="")) { alert("Inserire tutti i dati richiesti!"); return false; };
return true; } // --> </script> <form action="salvocorsifrequentati.php" name="modulo1" method="POST" onSubmit="return controllo1();">
<div align="left"> <table border="1" cellpadding="0" width="382"> <tr> <td width="153"><font size="4" face="Verdana" color="#FF0000">Codice delcorso</font></td> <td width="217" 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="codicecorso" size="7" 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="153"><font size="4" face="Verdana" color="#FF0000">Codice dellostudente</font></td> <td width="217" align="center"> <p align="center"><font color="#0000FF"><span style="mso-bidi-font-size: 12.0pt"><input type="text" name="codicestudente" size="7" style="color: #FF0000; font-family: Verdana; font-size: 14 pt; background-image: url('../../immagini/sfondo3.gif')"></span> </font> </td> </tr> <tr> <td width="153"><font size="4" face="Verdana" color="#FF0000">Esito</font></td> <td width="217" align="center"> <font color="#0000FF"><span style="mso-bidi-font-size: 12.0pt"><input type="text" name="esito" size="20" style="color: #FF0000; font-family: Verdana; font-size: 14 pt; background-image: url('../../immagini/sfondo3.gif')"></span> </font> </td> </tr> <tr> <td width="374" 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 inseriscodaticorsifequentati.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 che l'utente abbia inserito tutti i dati richiesti.
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è: salvocorsifrequentati.php ; lo vedremo ora.
Programma php per salvare i dati dei corsi frequentati
I dati passati dal modulo dell'interfaccia di acquisizione dati: inseriscodaticorsifequentati.php verrano presi dal nostro programma in php in modo automatico e memorizzati nelle variabili php : $codicorso; $codicestudente; $esito;
A questo punto possiamo fare una richiesta di inserimento dei dati con una istruzione MySQL INSERT INTO corsifrequentati e precisamente:
$richiesta="INSERT INTO corsifrequentati (codicecorso, codicestudente, esito) VALUES ('$codicecorso', '$codicestudente', '$esito')";
Il nostro programma completo per inserire una riga sarà:
<?php
if($codicecorso=="") return;
print("Cerco di inserire i seguenti dati: $codicecorso $codicestudente $esito <br>");
print ("Programma per inserire una riga nella nella tabella corsi di recupero frequentati");
$nomehost = "miohost";
$utente = "mionome";
$parola = "miapasswors";
$nome = "nomedeldatabase";
$connessione=mysql_connect($nomehost,$utente,$parola);
$selezione = mysql_select_db($nome, $connessione);
$richiesta="INSERT INTO corsifrequentati (codicecorso, codicestudente, esito) VALUES ('$codicecorso', '$codicestudente', '$esito')";
$risultato =mysql_query($richiesta);
if($risultato)
print("Dati inseriti correttamente");
else
print ("Dati non inseriti");
mysql_close($connessione);
?>
Salviamo con il nome di salvocorsifrequentati.php ed eseguiamo inseriscodaticorsifequentati.php che lo richiamerà al momento della registrazione dei dati sul nostro database.
Ricerca sulla base di dati
Nella lezione precedente abbiamo visto che il nostro esercizio prevedeva due richieste sul database, la prima era:
1 - Dato uno studente fornire un elenco dei corsi di recupero frequentati e il loro esito.
Prepariamo, quindi, una prima interfaccia per inserire nome e cognome dello studente e poi un secondo programma in php che ci visualizzi i dati della ricerca.
L'interfaccia di ricerca può essere la seguente:
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.
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 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="cercodaticorsifrequentati.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="134%" colspan="2"> <p align="center"><input type="submit" value="CERCA CORSI FREQUENTATI" name="cerco" style="font-family: Verdana; font-size: 14 pt"></td> </tr> </table> </div> </form> |
listato di cercostudenticorsi.php |
Funzione in javascript controllo1()
E' buona norma effettuare un primo controllo dei dati prima di effettuare la ricerca; per questo useremo una apposita funzione in javascript; i controlli potrebbero essere molteplici, noi ci limiteremo a controllare:
1 - Che l'utente abbia inserito sia il cognome che il nome prima di effettuare 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 ad effettuare la ricerca dei dati dello studente voluto e cioè cercodaticorsifrequentati.php.
I dati passati dal modulo verrano presi dal nostro programma in php in modo automatico e memorizzati nelle variabili php : $cognome; $nome;
A questo punto possiamo fare una richiesta di ricerca dei dati con una istruzione MySQL SELECT e precisamente:
$richiesta="SELECT * FROM studenti, corsirecupero, corsifrequentati WHERE studenti.cognome='$cognome' AND studenti.nome='$nome' AND corsifrequentati.codicestudente=studenti.codice AND corsifrequentati.codicecorso=corsirecupero.codicecorso";
cioè cerchiamo con * tutti i dati di ogni riga; con FROM studenti, corsirecupero,corsifrequentati nelle tre tabelle studenti, corsirecupero, corsifrequentati; ma cercheremo solo quelli dello studente il cui cognome e nome corrispondano entrambi a quello voluto; infatti studenti.cognome è il dato contenuto nella tabella studenti alla colonna cognome; mentre $cognome è il dato inviato dal modulo di ricerca; essi devono coincidere; analogamente per il nome;infatti vi abbiamo messo una AND per indicare che le due condizioni devono essere vere contemporaneamente.
Inoltre vi sono altre due condizioni da essere verificate e cioè:
AND corsifrequentati.codicestudente = studenti.codice
cioè dalla tabella corsifrequentati non devo prendere tutti i dati ma solo quelli frequentati dallo studente voluto, e questo lo faccio controllando che il codice dello studente inserito nella tabella studente (studenti.codice) sia uguale al codice dello studente inserito nella tabella corsifrequentati (corsifrequentati.codicestudente).
Non basta ma resta una ultima condizione e cioè:
AND corsifrequentati.codicecorso = corsirecupero.codicecorso
cioè dalla tabella corsifrequentati non devo prendere tutti i dati ma solo quelli frequentati dallo studente voluto, e questo lo faccio controllando che il codice del corso inserito nella tabella corsifrequentati (corsifrequentati.codicecorso) sia uguale al codice del corso di recupero inserito nella tabella corsirecupero (corsirecupero.codicecorso).
Il nostro programma completo per la ricerca dei corsi di recupero frequentati dallo studente voluto sarà:
<?php
if($cognome=="") return;
print ("Programma per la ricerca dei corsi frequenta da uno studente");
$nomehost = "miohost";
$utente = "mionome";
$parola = "miapasswors";
$nome = "nomedeldatabase";
$connessione=mysql_connect($nomehost,$utente,$parola);
$selezione = mysql_select_db($nome, $connessione);
$richiesta="SELECT * FROM studenti, corsirecupero, corsifrequentati WHERE studenti.cognome='$cognome' AND studenti.nome='$nome' AND corsifrequentati.codicestudente=studenti.codice AND corsifrequentati.codicecorso=corsirecupero.codicecorso";
$risultato =mysql_query($richiesta);
$lunghezza = mysql_num_rows($risultato);
print("Le righe trovate sono: $lunghezza .<br>");
for ($t=0; $t<$lunghezza; $t++) {
$riga=mysql_fetch_array($risultato);
print("$riga[0] $riga[1] $riga[2] $riga[3] $riga[4] $riga[5] $riga[6] $riga[7] $riga[8] $riga[9]$riga[10]<br>");
};
mysql_close($connessione);
?>
Salviamo con il nome di cercodaticorsifrequentati.php ed eseguiamo cercostudenticorsi.php che lo richiamerà al momento della ricerca dei dati sul nostro database.
Il nostro lavoro prosegue nella lezione lezione successiva.
giugno 2006
Corso di programmazione in MYSQL
Dizionario mysql e relativo php
Corso di programmazione in PHP
prof. Pietro De Paolis
Indice di tutte le pagine del sito