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:

Codice del corso

Codice dello studente

Esito

 

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 del

corso</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 dello

studente</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:

Cognome

Nome

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

Dizionario php

prof. Pietro De Paolis

Indice Scuola Elettrica - ridotto a 70


Scuola Elettrica



 

Altre applicazioni


Mappa per tipo di scuola

 

Indice di tutte le pagine del sito


Guida per navigare


Richiesta informazioni


Scuola Elettrica