Fondamenti delle basi di dati
Corso MySQL a cura del prof. Pietro De Paolis
Soluzione traccia seconda prova scritta
Esame di stato 2006/07 (traccia anno 2006-07.pdf)
Indirizzo: Informatica
Tema di: Informatica generale e applicazioni tecnico-scientifiche
Versione completa
Di questa pagina esiste una versione studente abbreviata.
1 - Lo schema concettuale e lo schema logico del database;
2 - La definizione delle relazioni in linguaggio SQL.
1 - Tabella reparti
codicereparto | architettura | arte | classici | cucina | diritto | economia | fantascienza | fumetti |
01 | Bianchi | Gerardo | ITIS | Milano | sss@www.it | mionickname | SSS1111 | studente |
02 | Rossi | Antonio | classico | Roma | sss@www.it | mionickname | ww33eee | docente |
980 | Merlino | Giuseppe | scientifico | Venezia | sss@www.it | mionickname | www111ww | studente |
Il nostro comando completo in MySQL sarà:
CREATE TABLE reparti (codicereparto INT(7) not null AUTO_INCREMENT, architettura CHAR(50), arte CHAR(50), classici CHAR(50), cucina CHAR(50), diritto CHAR(50), economia CHAR (50), fantascienza CHAR(50), fumetti CHAR(50), PRIMARY KEY(codicereparto) )
2 - Tabella reparto:
codiceinvio | nonperdere | piuvenduti | ultimi | offerte | resi | codiceutente |
01 | La riforma | testo | descrizione riforma | 20/12/2005 | 051 | |
02 | protfolio | testo | descrizione portfolio | 15/10/2005 | 125 | |
03 | valutazione | audio | descrizione valutazione | 08/09/2005 | 525 |
Il nostro comando completo in MySQL sarà:
CREATE TABLE reparto (codiceinvio INT(7) not null AUTO_INCREMENT, nonperdere CHAR(50), piuvenduti CHAR(50), ultimi CHAR(50), offerte CHAR(50), resi CHAR(50), codiceutente CHAR(7), PRIMARY KEY(codiceinvio) )
3 - Tabella libri:
codicelibro | reparto | tipolibro | titolo | autore | prezzo | sconto | dati | anno | editore | collana | immagine | data |
01 | La riforma | descrizione riforma | docente | |||||||||
02 | protfolio | descrizione portfolio | docente | |||||||||
03 | valutazione | descrizione valutazione | studente |
Il nostro comando completo in MySQL sarà:
CREATE TABLE libri (codicelibro INT(7) not null AUTO_INCREMENT, reparto CHAR(50), tipolibro CHAR(50), titolo CHAR(50), autore CHAR(50), prezzo CHAR(50), sconto CHAR(50), dati CHAR(50), anno CHAR(50), editore CHAR(50), collana CHAR(50), immagine CHAR(50), data CHAR(50), PRIMARY KEY(codicelibro) )
4 - Tabella utenti:
codiceutente | cgnome | indirizzo | codice | citta | nazione | telefono | fax | password | numerocarta | tipocarta | data | |
tipo | La riforma | descrizione riforma | docente | |||||||||
02 | protfolio | descrizione portfolio | docente | |||||||||
03 | valutazione | descrizione valutazione | studente |
Il nostro comando completo in MySQL sarà:
CREATE TABLE utenti (codiceutente INT(7) not null AUTO_INCREMENT, cognome CHAR(50), indirizzo CHAR(50), codice CHAR(50), citta CHAR(50), nazione CHAR(50), telefono CHAR(50), fax CHAR(50), email CHAR(50), password CHAR(50), numerocarta CHAR(50), tipocarta CHAR(50), data CHAR(50), PRIMARY KEY(codiceutente) )
5 - Tabella ordini:
numeroordine | data | codicelibro | quantita | stato | evasione |
01 | 05 | 500 | |||
02 | 02 | 325 | |||
03 | 03 | 750 | |||
04 | 02 | 323 | |||
05 | 03 | 755 |
Il nostro comando completo in MySQL sarà:
CREATE TABLE ordini (numeroordine INT(7) not null AUTO_INCREMENT, data INT(7), codicelibro INT(7), quantita INT(7), stato CHAR(50), evasione CHAR(50), PRIMARY KEY(numeroordine) )
Le quattro tabelle possono essere create contemporaneamente con il seguente programma creotabelle.php il cui listato è:
<script
language="php">
$nomehost = "miohost"; $utente = "mionome"; $parola = "miapasswors"; $nome = "nomedeldatabase"; $connessione=mysql_connect($nomehost,$utente,$parola); $selezione = mysql_select_db($nome, $connessione); $richiesta = "CREATE TABLE reparti (codicereparto INT(7) not null AUTO_INCREMENT, architettura CHAR(50), arte CHAR(50), classici CHAR(50), cucina CHAR(50), diritto CHAR(50), economia CHAR (50), fantascienza CHAR(50), fumetti CHAR(50), PRIMARY KEY(codicereparto) ) "; $risultato =mysql_query($richiesta); if($risultato) print("Tabella reparti creata correttamente"); else print ("<br>La tabella reparti esiste già; essa va creata una sola volta. <br>La tabella reparti può essere utilizzata per la memorizzazione e la ricerca dei dati."); $richiesta = "CREATE TABLE reparto (codiceinvio INT(7) not null AUTO_INCREMENT, nonperdere CHAR(50), piuvenduti CHAR(50), ultimi CHAR(50), offerte CHAR(50), resi CHAR(50), codiceutente CHAR(7), PRIMARY KEY(codiceinvio) ) "; $risultato =mysql_query($richiesta); if($risultato) print("Tabella reparto creata correttamente"); else print ("<br>La tabella reparto esiste già; essa va creata una sola volta. <br>La tabella reparto può essere utilizzata per la memorizzazione e la ricerca dei dati."); $richiesta = "CREATE TABLE libri (codicelibro INT(7) not null AUTO_INCREMENT, reparto CHAR(50), tipolibro CHAR(50), titolo CHAR(50), autore CHAR(50), prezzo CHAR(50), sconto CHAR(50), dati CHAR(50), anno CHAR(50), editore CHAR(50), collana CHAR(50), immagine CHAR(50), data CHAR(50), PRIMARY KEY(codicelibro) ) "; $risultato =mysql_query($richiesta); if($risultato) print("Tabella libri creata correttamente"); else print ("<br>La tabella libri esiste già; essa va creata una sola volta. <br>La tabella libri può essere utilizzata per la memorizzazione e la ricerca dei dati."); $richiesta = "CREATE TABLE utenti (codiceutente INT(7) not null AUTO_INCREMENT, cognome CHAR(50), indirizzo CHAR(50), codice CHAR(50), citta CHAR(50), nazione CHAR(50), telefono CHAR(50), fax CHAR(50), email CHAR(50), password CHAR(50), numerocarta CHAR(50), tipocarta CHAR(50), data CHAR(50), PRIMARY KEY(codiceutente) ) "; $risultato =mysql_query($richiesta); if($risultato) print("Tabella utenti creata correttamente"); else print ("<br>La tabella utenti esiste già; essa va creata una sola volta. <br>La tabella utenti può essere utilizzata per la memorizzazione e la ricerca dei dati."); $richiesta = "CREATE TABLE ordini (numeroordine INT(7) not null AUTO_INCREMENT, data INT(7), codicelibro INT(7), quantita INT(7), stato CHAR(50), evasione CHAR(50), PRIMARY KEY(numeroordine) ) "; $risultato =mysql_query($richiesta); if($risultato) print("Tabella ordini creata correttamente"); else print ("<br>La tabella ordini esiste già; essa va creata una sola volta. <br>La tabella ordini può essere utilizzata per la memorizzazione e la ricerca dei dati.");
mysql_close($connessione); </script> |
listato di creotabelle.php |
- implementi le seguenti query:
n. 1: Ricerca per reparto: scelto un reparto, il numero di libri da non perdere e il numero di libri "I più venduti" con i relativi dettagli.
Il nostro comando completo in MySQL sarà:
SELECT libri.reparto, libri.tipolibro, libri.autore , libri.titolo, libri.prezzo FROM libri WHERE libri.reparto='$reparto' AND (libri.tipolibro='Da non perdere' OR libri.tipolibro='I più venduti')
n. 2: Ordini: gli ordini in corso, con dettagli, di un dato utente
Il nostro comando completo in MySQL sarà:
SELECT utenti.cognome, utenti.nome utenti.scuola, utenti.comune, upload.titolo, upload.tipo, upload.descrizione, upload.data FROM upload INNER JOIN utenti ON upload.codiceutente=utenti.codiceutente WHERE utenti.nomeutente='$nomeutente'
dove $nomeutente sarà la variabile php che sarà passata dall'interfaccia di ricerca.
- scriva, in un linguaggio lato server, il codice di almeno una delle seguenti pagine del portale:
Un programma per inviare la richiesta alla base di dati può essere la seguente:
interfaccia di cercodocenti.php |
il cui listato è 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.nomeutente.value; sceltanome=document.modulo1.password.value; if((sceltacognome=="")||(sceltanome=="")) { alert("Inserire Nome utente e password!"); return false; }; return true; } // --> </script> <form action="cercodatidocenti.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">Nome utente</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="nomeutente" 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">Password</font></td> <td width="65%" align="center"> <p align="center"><font color="#0000FF"><span style="mso-bidi-font-size: 12.0pt"><input type="password" name="password" 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 DOCENTI E MODULI" name="cerco" style="font-family: Verdana; font-size: 14 pt"></td> </tr> </table> </div> </form> |
listato di cercodocenti.php |
esso richiama un programma in php cercodatidocenti.php che provvede alla esecuzione della richiesta, il cui listato è:
<script
language="php">
if (($nomeutente!="amministratore")||($password!="amministratore")) return; print("Cerco con : $nomeutente $password <br>"); $nomehost = "miohost"; $utente = "mionome"; $parola = "miapasswors"; $nome = "nomedeldatabase"; $connessione=mysql_connect($nomehost,$utente,$parola); $selezione = mysql_select_db($nome, $connessione); $richiesta="SELECT utenti.cognome, utenti.nome, utenti.scuola, utenti.comune, moduliesistenti.titolo, moduliesistenti.descrizione FROM utenti INNER JOIN moduliscelti INNER JOIN moduliesistenti ON utenti.codiceutente=moduliscelti.codiceutente AND moduliscelti.codicemodulo=moduliesistenti.codicemodulo AND utenti.gruppo='docente' "; $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); </script> |
listato di cercodatidocenti.php |
Un programma per inviare la richiesta alla base di dati può essere la seguente:
interfaccia di cercostudenti.php |
il cui listato è 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.nomeutente.value; sceltanome=document.modulo1.password.value; if((sceltacognome=="")||(sceltanome=="")) { alert("Inserire Nome utente e password!"); return false; }; return true; } // --> </script> <form action="cercodatistudenti.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">Nome utente</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="nomeutente" 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">Password</font></td> <td width="65%" align="center"> <p align="center"><font color="#0000FF"><span style="mso-bidi-font-size: 12.0pt"><input type="password" name="password" 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 DOCUMENTI STUDENTE" name="cerco" style="font-family: Verdana; font-size: 14 pt"></td> </tr> </table> </div> </form> |
listato di cercostudenti.php |
esso richiama un programma in php cercodatistudenti.php che provvede alla esecuzione della richiesta, il cui listato è:
<script
language="php">
if (($nomeutente!="studente")||($password!="studente")) return; print("Cerco con : $nomeutente $password <br>"); $nomehost = "miohost"; $utente = "mionome"; $parola = "miapasswors"; $nome = "nomedeldatabase"; $connessione=mysql_connect($nomehost,$utente,$parola); $selezione = mysql_select_db($nome, $connessione); $richiesta="SELECT utenti.cognome, utenti.nome, utenti.scuola, utenti.comune, upload.titolo, upload.tipo, upload.descrizione, upload.data FROM upload INNER JOIN utenti ON upload.codiceutente=utenti.codiceutente WHERE utenti.nomeutente='$nomeutente' "; $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] <br>"); }; mysql_close($connessione); </script> |
listato di cercodatistudenti.php |
Un modulo per la registrazione di un nuovo utente non amministratore, per evidenti ragioni, può essere il seguente:
il cui listato è:
<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 Cognome e Nome!"); return false; }; return true; } // --> </script> <form action="salvoutente.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">Scuola</font></td> <td width="%" align="center"> <font color="#0000FF"><span style="mso-bidi-font-size: 12.0pt"><input type="text" name="scuola" 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 dellascuola</font></td> <td width="%" align="center"> <font color="#0000FF"><span style="mso-bidi-font-size: 12.0pt"><input type="text" name="comune" 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">e-mail</font></td> <td width="%" align="center"> <font color="#0000FF"><span style="mso-bidi-font-size: 12.0pt"><input type="text" name="email" 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">Nickname</font></td> <td width="%" align="center"> <font color="#0000FF"><span style="mso-bidi-font-size: 12.0pt"><input type="text" name="nomeutente" 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">Password</font></td> <td width="%" align="center"> <font color="#0000FF"><span style="mso-bidi-font-size: 12.0pt"><input type="password" name="password" 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">Gruppo </font></td> <td width="%" align="center"> <select size="1" name="gruppo" alt="provo"> <option value="">GRUPPO</option> <option value="studente">studente</option> <option value="docente">docente</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 inseriscodatiutenti.php |
i dati del modulo verranno passati al programma php: salvoutenti.php che salva i dati del modulo sulla base di dati esistente sul server; il cui listato del programma può essere:
<?php if($cognome=="") return; print("Cerco di inserire i seguenti dati: $cognome ; $nome; $scuola; $comune; $email; $nomeutente $password; $gruppo<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 utenti (cognome, nome, scuola, comune, email, nomeutente, password, gruppo) VALUES ('$cognome', '$nome', '$scuola', '$comune', 'email', '$nomeutente', '$password', '$gruppo')"; $risultato =mysql_query($richiesta); if($risultato) print("Dati inseriti correttamente"); else print ("Dati non inseriti");
mysql_close($connessione); ?>
|
listato di salvoutenti.php |
L'intera gestione della base di dati può essere gestita dalla seguente pagina:
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