RELAZIONE ESPLICATIVA RELATIVA ALLA GESTIONE DI PORTI E TRATTE DI NAVIGAZIONE soluzione proposta da Codazzi Mattia – 5^ A mercurio
Traccia del problema
Creare e popolare le seguenti tabelle. Scegliere gli appropriati domini per gli attributi di ciascuna tabella. Creare gli appropriati vincoli interrelazionali e intrarelazionali.
- Tabelle popolate
BARCA
NOME | TARGA | LUNGHEZZA | ANNO_FABBRICAZIONE |
Nettuno | Roma2134 | 12 | 1998 |
Vento | Roma3578 | 13,5 | 1954 |
Luna Rossa | Genoa234 | 10 | 1490 |
Azzurra | Genoa725 | 18,7 | 1600 |
Leggera | Bari89212 | 15 | 1995 |
Delfino | Napoli98 | 22 | 1997 |
Vespucci | Venezia12 | 87 | 1894 |
Ninetta | Genoa156 | 54 | 1978 |
Garibaldi | Napoli32 | 123 | 2003 |
SOSTA
BARCA | PORTO | POSTO | BANCHINA | DATA_ARRIVO | DATA_PARTENZA |
Roma2134 | Roma | 2 | AS | 01/12/2004 | 03/12/2004 |
Roma3578 | Napoli | 4 | C | 05/06/2006 | NULL |
Genoa234 | Roma | 6 | F | 08/01/2004 | 17/03/2004 |
Genoa725 | Genova | 3 | C | 05/11/2005 | 02/02/2006 |
Bari89212 | Genova | 5 | AS | 04/08/2005 | 12/11/2005 |
Genoa234 | Venezia | 3 | R | 03/07/2006 | NULL |
Genoa725 | Venezia | 2 | S | 15/12/2007 | 17/12/2007 |
Bari89212 | Roma | 7 | AS | 25/03/2006 | 04/04/2006 |
POSTOBARCA
PORTO | NUMERO | BANCHINA | MENSILE | GIORNALIERO |
Roma | 2 | AS | 500 | 20 |
Roma | 7 | AS | 572 | 40 |
Roma | 6 | F | 620 | 43 |
Genova | 3 | C | 150 | 47 |
Genova | 5 | AS | 300 | 81 |
Venezia | 3 | R | 400 | 98 |
Venezia | 2 | S | 450 | 50 |
Napoli | 1 | C | 321 | 15 |
Napoli | 4 | C | 745 | 95 |
TRATTA_TRAGHETTI
DAPORTO | APORTO | BARCA |
Cagliari | Civitavecchia | Roma2134 |
Civitavecchia | Cagliari | Roma2134 |
Civitavecchia | Palermo | ari89212 |
Palermo | Civitavecchia | Bari89212 |
Roma | Napoli | Genoa725 |
Napoli | Roma | Genoa725 |
Venezia | Genova | Genoa234 |
Palermo | Genova | Napoli98 |
Genova | Venezia | Genoa234 |
PORTO
NOME | REGIONE |
Cagliari | Sardegna |
Civitavecchia | Lazio |
Palermo | Sicilia |
Roma | Lazio |
Napoli | Campania |
Venezia | Veneto |
Genova | Liguria |
Creare i comandi SQL per poter erseguire l'inserimento, la modifica e la cancellazione dei dati all'interno del database e i comandi relativi alle interrogazioni, all'inserimento e all'eliminazione di seguito indicati.
- Trovare il nome delle barche fabbricate nel 2003
- Trovare il nome del porto e la targa delle barche sostate nel 2004
- Trovare le barche più lunghe di 10 metri costruite prima del 1900
- Elencare tutti i posti barca del porto di Roma
- Elencare la banchina, il numero di posto e la targa delle barche in sosta
- Elencere i nomi dei porti di partenza per i traghetti
- Stampare la lunghezza in 'piedi' delle barche (1m = 3,2808 piedi)
- Inserisci la data di partenza della barca con targa 'Genoa234'
- Elimina da 'postobarca' tutti i posti barca del porto di 'Venezia'
Analisi di massima
Per risolvere il problema proposto è stato innanzitutto realizzato un database contenente le tabelle con i dati richiesti all'interno dell'applicazione PHP denominata phpMyAdmin che permette la gestione di database di MySQL.
Per permettere l'interfacciamento con il database realizzato è stato dunque creato un sito web, basato su un template già definito, costituito da una serie di pagine sia in codice HTML che in linguaggio di programmazione PHP così da poter essere in grado di inserire, modificare, cancellare e consultare le varie informazioni della base di dati in modo semplice ed intuitivo.
Programma e file
NOME PROGRAMMA: Gestione porti
FILE UTILIZZATI DAL PROGRAMMA | |||
INSERIMENTO | MODIFICA | CANCELLAZIONE | COMANDI SQL |
barche.html | mbarche.php | cbarche.php | queri1.php |
barche.php | mbarche1.php | cbarche1.php | queri2.php |
porti.html | mbarche2.php | cporti.php | queri3.php |
porti.php | mporti.php | cporti1.php | queri4.php |
tratte_traghetti.php | mporti1.php | ctratte_traghetti.php | queri5.php |
tratte_traghetti1.php | mporti2.php | ctratte_traghetti1.php | queri6.php |
postibarca.php | mtratte_traghetti.php | cpostibarca.php | queri7.php |
postibarca1.php | mtratte_traghetti1.php | cpostibarca1.php | modifica1.php |
soste.php | mtratte_traghetti2.php | csoste.php | modifica2.php |
soste1.php | mpostibarca.php | csoste1.php | cancellazione1.php |
mpostibarca1.php | |||
mpostibarca2.php | |||
msoste.php | |||
msoste1.php | |||
msoste2.php |
Per poter utilizzare il programma ci si è serviti del software EasyPHP, il quale consente il funzionamento a livello locale degli script PHP. Tale software, installato su un elaboratore avente come sistema operativo Windows XP, comprende il webserver Apache e il database server MySQL, gestito quest'ultimo mediante l'interfaccia phpMyAdmin.
Attraverso una classica procedura guidata viene subito installato tutto quanto compone la semplice piattaforma di sviluppo web. Il server Apache crea automaticamente un dominio virtuale in locale all'indirizzo di localhost e dunque, salvando il programma realizzato all'interno della cartella www presente, a sua volta, nella cartella del software EasyPHP, risulta possibile interfacciarsi con le pagine web create digitando nella barra degli indirizzi di un qualunque browser http://127.0.0.1/ seguito dal nome della homepage del programma o della cartella che lo contiene.
Analisi di dettaglio
Qui di seguito viene proposto il modello relazionale del database che si intende creare (le chiavi primarie sono indicate in corsivo, mentre la chiavi esterne sono quelle da cui partono le frecce).
Barche (Nome, Targa, Lunghezza, Anno_fabbricazione)
Porti (Nome, Regione)
Postibarca (Porto, Numero, Banchina, Mensile, Giornaliero)
Soste (Barca, Porto, Posto, Banchina, Data_arrivo, Data_partenza)
Barche
NOME | TIPO | LUNGHEZZA | NOTE |
Nome | varchar | X(50) | |
Targa | varchar | X(20) | Chiave primaria |
Lunghezza | decimal | 9(4)v9(2) | |
Anno_fabbricazione | int | 9(4) |
Porti
NOME | TIPO | LUNGHEZZA | NOTE |
Nome | varchar | X(50) | Chiave primaria |
Regione | varchar | X(50) |
Tratte-traghetti
NOME | TIPO | LUNGHEZZA | NOTE |
Daporto | varchar | X(50) | Chiave primaria composta |
Aporto | varchar | X(50) | |
Barca | varchar | X(20) |
Postibarca
NOME | TIPO | LUNGHEZZA | NOTE |
Porto | varchar | X(50) | Chiave primaria composta |
Numero | int | 9(2) | |
Banchina | varchar | X(2) | |
Mensile | float | 9(3)v9(2) | |
Giornaliero | float | 9(2)v9(2) |
Soste
NOME | TIPO | LUNGHEZZA | NOTE |
Barca | varchar | X(20) | Chiave primaria composta |
Porto | varchar | X(50) | |
Posto | int | 9(2) | |
Banchina | varchar | X(2) | |
Data_arrivo | date | 9(4)-9(4)-9(2) | |
Data_partenza | date | 9(4)-9(4)-9(2) |
Quelli sotto riportati sono i comandi SQL necessari per la creazione del database e delle relative tabelle all'interno delle quali inserire i dati richiesti, dati i cui nome, tipo e grandezza sono chiaramente indicati nel codice.
CREATE DATABASE `gestione_porti`;
USE `gestione_porti`;
CREATE TABLE IF NOT EXISTS `barche` (
`Nome` varchar(50) NOT NULL,
`Targa` varchar(20) NOT NULL,
`Lunghezza` decimal(4,1) NOT NULL,
`Anno_fabbricazione` int(4) NOT NULL,
PRIMARY KEY (`Targa`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `porti` (
`Nome` varchar(50) NOT NULL,
`Regione` varchar(50) NOT NULL,
PRIMARY KEY (`Nome`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `tratte_traghetti` (
`Daporto` varchar(50) NOT NULL,
`Aporto` varchar(50) NOT NULL,
`Barca` varchar(20) NOT NULL,
PRIMARY KEY (`Daporto`,`Aporto`,`Barca`),
FOREIGN KEY (`Daporto`) REFERENCES Porti (`Nome`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (`Aporto`) REFERENCES Porti (`Nome`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (`Barca`) REFERENCES Barche (`Targa`)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `postibarca` (
`Porto` varchar(50) NOT NULL,
`Numero` int(2) NOT NULL,
`Banchina` varchar(2) NOT NULL,
`Mensile` float(5,2) NOT NULL,
`Giornaliero` float(4,2) NOT NULL,
PRIMARY KEY (`Porto`,`Numero`,`Banchina`),
FOREIGN KEY (`Porto`) REFERENCES Porti (`Nome`)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `soste` (
`Barca` varchar(20) NOT NULL,
`Porto` varchar(50) NOT NULL,
`Posto` int(2) NOT NULL,
`Banchina` varchar(2) NOT NULL,
`Data_arrivo` date NOT NULL,
`Data_partenza` date DEFAULT NULL,
PRIMARY KEY (`Barca`,`Porto`,`Posto`,`Banchina`,`Data_arrivo`),
FOREIGN KEY (`Barca`) REFERENCES Barche (`Targa`)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (`Porto`,`Posto`,`Banchina`) REFERENCES Postibarca (`Porto`,`Numero`,`Banchina`)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Come si può notare leggendo il codice SQL, per tutte le tabelle create è stato definito il motore di memorizzazione InnoDB, il quale garantisce il rispetto del vincolo di integrità referenziale. Ciò significa che qualunque dato rappresentante una chiave esterna all'interno di una tabella, per poter esistere, deve necessariamente essere presente anche all'interno della tabella principale a cui la chiave esterna stessa si riferisce; diversamente, infatti, il dato non potrebbe essere definito.
Relativamente alle chiavi esterne, per ognuna di esse sono state mpostate le opzioni ON UPDATE CASCADE e ON DELETE CASCADE. In questo modo, dunque, in caso di modifica o di cancellazione di chiavi primarie a cui si riferiscono una o più chiavi esterne, si ha l'automatica modifica (o l'automatica cancellazione) di tutte le chiavi esterne stesse all'interno delle varie tabelle.
Inserimento
Per l'inserimento dei dati all'interno delle tabelle, nella home page del sito web sono stati previsti 5 collegamenti ipertestuali (1 per ogni tabella) ognuno dei quali indirizza l'utente ad una pagina in cui si visualizza direttamente un modulo form da utilizzare per la digitazione delle informazioni che si desiderano siano inserite in una tupla della tabella nel database.
Una volta completata la digitazione e premuto il tasto di invio, i dati vengono inviati ad un programma in PHP attraverso l'istruzione $_POST e vengono spostati all'interno di alcune variabili. A questo punto si verifica che il contenuto di ciascuna variabile sia rispettoso dei limiti e della tpologia di dato definiti nella tabella in cui il dato stesso vuole essere inserito e, in caso affermativo, si procede alla connessione al database per mezzo dell'istruzione mysql_connect(“127.0.0.1”,“root”), si inserisce all'interno di una variabile l'istruzione SQL per l'inserimento e si procede all'esecuzione del comando per mezzo dell'istruzione PHP mysql_db_query(“nome_database”,nome_variabile_istruzione). Per verificare che il comando risulta eseguito, si fa ricorso al comando mysql_affected_rows. Se il comando risulta correttamente eseguito, si visualizza a video il record inserito, altrimenti viene mostrato un messaggio di errore. Si procede infibe alla chiusura della connessione al database per mezzo dell'istruzione mysql_close.
Il comando SQL utilizzato per inserire i dati presenta la seguente sintassi:
INSERT nometabella [(nomecolonna1 {, nomecolonna2})]
VALUES (valore1 {, valore2})
Per quelle tabelle in cui sono definite delle chiavi esterne, l'inserimento viene facilitato prevedendo per ciascun dato rappresentante una chiave esterna un menu a tendina nel quale vengono inseriti esclusivamente i dati prelevati dalla colonna della tabella principale cui la chiave esterna si riferisce. In tal modo, si impedisce all'utente di inserire dati errati che, in conseguenza del vincolo di integrità referenziale, verrebbero certamente rifiutati.
Il comando SQL utilizzato per prelevare i dati da una tabella presenta la seguente sintassi:
SELECT [DISTINCT] nomecolonna1 {, nomecolonna2}
FROM nometabella1 {, nometabella2}
Per fare in modo che tali dati siano mostrati all'interno del menu a tendina si fa ricorso all'istruzione mysql_result che, opportunamente combinata con un ciclo for, permette di reperire i dati desiderati dal database cosicchè sia possibile passarli all'interno di variabili per la visualizzazione.
Modifica
Esattamente come per l'inserimento, anche per la modifica dei dati vengono predispose cinque distinte pagine web richiamabili dalla home page attraverso dei collegamenti ipertestuali.
Selezionando il link relativo alla tabella di cui si vogliono modificare i dati, viene visualizzata a video una tabella all'interno della quale sono predisposte ordinatamente le tuple della tabella del database. Per ottenere tale risultato, ci si serve di un programma PHP costruito come spiegato in precedenza, all'interno del quale, per il reperimento dei dati dal database e la loro visualizzazione, ci si serve del comando SQL SELECT e dell'istruzione PHP mysql_result.
Per ogni tupla riportata a video, viene inserito a fianco un bottone radio, definito all'interno di un modulo form, che permette la selezione del record che si vuole modificare. Ogni bottone, infatti, porta al suo interno il valore (chiave primaria singola) o i valori (chiave primaria multipla) che permettono di identificare univocamente ciascun record. Dunque, una volta selezionato il bottone e premuto il pulsante di invio, i valori memorizzati vengono trasmessi ad un'altra pagina PHP dove vengono utilizzati all'interno di un comando SELECT per definire la condizione di ricerca, la quale, subito dopo la clausola FROM, viene introdotta dalla parola chiave WHERE.
Procedento in tal modo, i dati del record da modificare vengono recuperati dal database in modo tale da poter essere inseriti all'interno di alcuni campi testo di un modulo form agendo sui quali l'utente può apportare i cambiamenti opportuni.
Effettuata la modifica, i nuovi dati e, attraverso una variabile nascosta, i valori contenuti nel radio button necessari per l'identificazione del record, possono essere trasmessi ad un'ultima pagina PHP dove vengono utilizzati per portare a compimento la modifica. Se non vi sono stati errori, il programma si conclude con una visualizzazione a video del record modificato.
Ovviamente, tenuto conto del vincolo di integrità referenziale, record contenenti dati rappresentanti chiavi esterne non possono in alcun modo essere modificati.
Il comando SQL utilizzato per modificare i dati presenta la seguente sintassi:
UPDATE nometabella
SET nomecolonna1=valorecolonna {, nomecolonna2=valorecolonna}
[WHERE <condizionerierca>]
Cancellazione
Per procedere alla cancellazione dei dati si procede in modo molto simile a quanto fatto per la modifica. Come in precedenza, infatti, per mezzo di collegamenti ipertestuali predisposti nella home page, è possibile visualizzare a video la tabella con i relativi bottoni radio che si riferisce alla tabella contenuta nel database sulla quale si desidera agire. Per procedere alla cancellazione dei dati di un record è dunque sufficiente selezionare il bottone che si trova a fianco del record stesso e premere l'apposito pulsante.
A questo punto, i valori che identificano univocamente il record e che risultano associati al bottone radio, vengono trasmessi ad un programma in PHP e, spostati all'interno di una o più variabili, vengono impiegati come condizione di ricerca nel comando SQL definito per la cancellazione. Se il passaggio viene eseguito in maniera corretta, si visualizza a video la tabella su cui si è agito così da poter constatare l'avvenuta cancellazione.
A differenza che nella modifica, record contenenti chiavi esterne possono essere modificati senza alcun problema in quanto, in tal senso, il vincolo di integrita referenziale non risulta in alcun modo violato.
Il comando SQL utilizzato per cancellare i dati presenta la seguente sintassi:
DELETE FROM nometabella
[WHERE <condizionericerca>]
Consultazione
Per ognuna delle query richieste é stato predisposto nella home page sito web un collegamento ipertestuale selezionando il quale è possibile visualizzare direttamente a video il risultato. Come in tutti i casi precedentemente illustrati, anche per l' esecuzione delle query ci si è serviti di programmi scritti in codice PHP e dunque i relativi comandi SQL sono stati inseriti all'interno di variabili e sono stati gestiti come è stato spiegato all'inizio.
Qui di seguito vengono dunque riportate le interrogazioni SQL che restituiscono le informazioni richieste.
- Trovare il nome delle barche fabbricate nel 2003
SELECT nome
FROM barche
WHERE anno_fabbricazione=2003
- Trovare il nome del porto e la targa delle barche sostate nel 2004
SELECT barca, porto
FROM soste
WHERE data_arrivo BETWEEN '2004-01-01' AND '2004-12-31'
- Trovare le barche più lunghe di 10 metri costruite prima del 1900
SELECT nome, targa
FROM barche
WHERE lunghezza > 10 AND anno_fabbricazione < 1900
- Elencare tutti i posti barca del porto di Roma
SELECT numero, banchina, mensile, giornaliero
FROM postibarca
WHERE porto='Roma'
- Elencare la banchina, il numero di posto e la targa delle barche in sosta
SELECT banchina, posto, barca
FROM soste
WHERE data_partenza IS NULL
- Elencere i nomi dei porti di partenza per i traghetti
SELECT DISTINCT daporto
FROM tratte_traghetti
- Stampare la lunghezza in 'piedi' delle barche (1m = 3,2808 piedi)
SELECT nome, targa, lunghezza*3.2808 AS 'lunghezza (in piedi)'
FROM barche
Modifica richiesta
- Inserisci la data di partenza della barca con targa 'Genoa234'
Per eseguire l'inserimento sopra indicato, viene prevista una pagina in cui, dopo aver selezionato la data di arrivo attraverso il comando SELECT, essa viene mandata a video. Al di sotto di tale data viene invece predisposto un modulo form con un campo testo in cui inserire la data digitata che, ovviamente, deve risultare successiva a quella sopra visualizzata, inserita appunto per facilitare l'utente nella compilazione.
Il comando SQL eseguito nella pagina PHP successiva per effettuare la modifica è il seguente (la variabile $data contiene la data digitata e inviata al programme):
UPDATE soste
SET data_partenza='$data'
WHERE barca='Genoa234' AND data_partenza IS NULL
Cancellazione richiesta
- Elimina da 'postobarca' tutti i posti barca del porto di 'Venezia'
Per l'esecuzione della cancellazione sopra indicata si è proceduto esattamente come è stato spiegato in precedenza. In particolare, il comando inserito nella pagina PHP è il seguente:
DELETE FROM postibarca
WHERE porto='Venezia'
In conclusione si riporta a titolo di esempio il codice PHP, SQL e, in alcune pagine, HTML utilizzato per agire sulla tabella BARCHE sia in inserimento, sia in modifica, sia in cancellazione.
INSERIMENTO
barche.html
<html>
<body>
<h3><strong><u>Inserimento dati nella tabella 'BARCHE'</u></strong></h3>
<i>Inserire i dati nel modulo form e premere il pulsante per l'invio</i></h3>
<form action="barche.php" method="POST"><p>
<input name="nome"> Nome<p>
<input name="targa"> Targa<p>
<input name="lunghezza"> Lunghezza <font size='1'>(nnnn.n)</font><p>
<input name="anno_fabbricazione"> Anno di fabbricazione<p>
<center><input type="submit" value="Inviare">
<input type="reset" value="Cancellare"></center>
</form>
</body>
</html>
barche.php
<html>
<body>
<?php
// Inizializzazione delle variabili.
$nome=$_POST['nome'];
$targa=$_POST['targa'];
$lunghezza=$_POST['lunghezza'];
$anno_fabbricazione=$_POST['anno_fabbricazione'];
// Connessione al database MySQL
$db=mysql_connect("localhost","root");
$sqlinterr="insert barche ";
$sqlinterr.="(nome, targa, lunghezza, anno_fabbricazione) ";
$sqlinterr.="values ('$nome', '$targa', $lunghezza, $anno_fabbricazione)";
$res=mysql_db_query("gestione_porti",$sqlinterr);
$num=mysql_affected_rows();
if ($num>0) {
echo "<font size='4'><center><i><strong>Nella tabella 'BARCHE' è stato inserito il seguente nuovo record</strong></i></center></font><p><br><p>";
echo " <table border='2' align='center' width=100%>
<tr>
<td width=25%><center>NOME</center></td>
<td width=25%><center>TARGA</center></td>
<td width=25%><center>LUNGHEZZA</center></td>
<td width=25%><center>ANNO DI FABBRICAZIONE</center></td>
</tr>
<tr>
<td><center>$nome</center></td>
<td><center>$targa</center></td>
<td><center>$lunghezza</center></td>
<td><center>$anno_fabbricazione</center></td>
</tr>
</table>";
}
else {
if ($nome=='' && $targa=='' && $lunghezza=='' && $anno_fabbricazione=='') echo "<h2><center><i>ERRORE!! Non è stato inserito alcun dato.<br> Si prega di ripetere l'inserimento.</i></center></h2>";
else if ($targa=='' && ($nome<>'' || $lunghezza<>'' || $anno_fabbricazione<>'')) echo "<h2><center><i>ERRORE!! La targa identificativa non è stata inserita.<br> Si prega di ripetere l'inserimento.</i></center></h2>";
else echo "<h2><center><i>ERRORE!! La targa inserita è già presente nella tabella.<br> Si prega di ripetere l'inserimento.</i></center></h2>";
}
mysql_close($db)
?>
</body>
</html>
MODIFICA
mbarche.php
<html>
<body>
<form action="mbarche1.php" method="POST">
<?php
// Connessione al database MySQL
$db=mysql_connect("localhost","root");
// Creazione dell'interrogazione
$sqlinterr="select * from barche";
$res=mysql_db_query("gestione_porti",$sqlinterr);
$res=mysql_db_query("gestione_porti",$sqlinterr);
$num=mysql_num_rows($res);
echo " <i>Selezionare il record che si intende modificare</i></h3><div class='clear'> </div>
<table border='2' align='center' width=100%>
<tr>
<td width=10%><center>Selezione</center></td>
<td width=20%><center>NOME</center></td>
<td width=10%><center>Selezione</center></td>
<td width=20%><center>NOME</center></td>
<td width=20%><center>TARGA</center></td>
<td width=25%><center>LUNGHEZZA</center></td>
<td width=25%><center>ANNO DI FABBRICAZIONE</center></td>
</tr>";
// Visualizzazione dei record inseriti
for ($i=0;$i<$num;$i++) {
$nome=mysql_result($res,$i,"nome");
$targa=mysql_result($res,$i,"targa");
$lunghezza=mysql_result($res,$i,"lunghezza");
$anno_fabbricazione=mysql_result($res,$i,"anno_fabbricazione");
// Visualizazione dei record trovati
echo " <tr>
<td><center><input type='radio' name='selezi' value='$targa'></center></td>
<td><center>$nome</center></td>
<td><center><input type='radio' name='selezi' value='$targa'></center></td>
<td><center>$nome</center></td>
<td><center>$targa</center></td>
<td><center>$lunghezza</center></td>
<td><center>$anno_fabbricazione</center></td>
</tr>";
}
echo "</table>";
// Chiusura del database MySQL
mysql_close($db);
mysql_close($db);
?>
<p>
<p>
<center><input type="submit" value="Visualizzare il record"></center>
</form>
</body>
</html>
mbarche1.php
<html>
<body>
<?php
// Verifica che l'utente abbia scelto un record da modificare
if (isset($_POST['selezi']))
$selezi=$_POST['selezi'];
else $selezi='';
if ($selezi) {
// Connessione al DB mysql
$db=mysql_connect("localhost","root");
// Creazione dell'interrogazione per estrapolare il record selezionato
$sqlinterr="select * from barche";
$sqlinterr.=" where targa='$selezi'";
//Esecuzione del comando select
$res=mysql_db_query("gestione_porti",$sqlinterr);
// Risultato dell'interrogazione
$nome_old=mysql_result($res,0,"nome");
$targa_old=mysql_result($res,0,"targa");
$lunghezza_old=mysql_result($res,0,"lunghezza");
$anno_fabbricazione_old=mysql_result($res,0,"anno_fabbricazione");
echo "<font size=4><i>Eseguire le modifiche e premere il pulsante per la conferma</i></font><p><br>";
echo "<form action='mbarche2.php' method='POST'>";
// Modifica dei valori
echo "<input name='nome_new' value='$nome_old'>";
echo " Nome barca<p>";
echo "<input name='targa_new' value='$targa_old'>";
echo " Targa<p>";
echo "<input name='lunghezza_new' value='$lunghezza_old'>";
echo " Targa<p>";
echo "<input name='lunghezza_new' value='$lunghezza_old'>";
echo " Lunghezza<p>";
echo "<input name='anno_fabbricazione_new' value='$anno_fabbricazione_old'>";
echo "<input name='anno_fabbricazione_new' value='$anno_fabbricazione_old'>";
echo " Anno di fabbricazione<p><br>";
echo "<input type='hidden' name='targa_origine' value='$selezi'>";
echo "<input type='submit' value='Salvare le modifiche'> ";
echo "<input type='reset' value='Cancellare'>";
echo "<input type='reset' value='Cancellare'>";
echo "</form>";
// Chiusura di mysql
mysql_close($db);
}
}
else echo "<h2><center><i>ERRORE!! Non è stato selezionato nessun record.<br> Si prega di ripetere l'operazione.</i></center></h2>";
?>
</body>
</html>
mbarche2.php
<html>
<body>
<?php
// Inizializzazione variabili
// Inizializzazione variabili
$nome_new=$_POST['nome_new'];
$targa_new=$_POST['targa_new'];
$lunghezza_new=$_POST['lunghezza_new'];
$anno_fabbricazione_new=$_POST['anno_fabbricazione_new'];
$targa_origine=$_POST['targa_origine'];
if ($targa_new=='') {
echo "<h2><center>Errore!! La targa della barca (chiave primaria) non è stato inserita. Il record non può essere aggiornato.</center></h2><p>";
echo "<center><form action='mbarche1.php' method='POST'>";
echo "<input type='hidden' name='selezi' value='$targa_origine'>";
echo "<input type='submit' value='Torna indietro'>";
echo "</form></center>";
echo "</form></center>";
}
else {
// Connessione al DB mysql
$db=mysql_connect("localhost","root");
// Creazione dell'interrogazione di modifica
$sqlinterr="update barche set ";
$sqlinterr.="nome='$nome_new', ";
$sqlinterr="update barche set ";
$sqlinterr.="nome='$nome_new', ";
$sqlinterr.="targa='$targa_new', ";
$sqlinterr.="lunghezza=$lunghezza_new, ";
$sqlinterr.="anno_fabbricazione=$anno_fabbricazione_new ";
$sqlinterr.="where targa='$targa_origine'";
mysql_db_query("gestione_porti",$sqlinterr);
// Verifica che il record è stato modificato
$num=mysql_affected_rows();
$num=mysql_affected_rows();
if ($num>0) {
$sqlinterr0="select * from barche ";
$sqlinterr0.="where targa='$targa_new'";
$res0=mysql_db_query("gestione_porti",$sqlinterr0);
// $num=n. record restituiti dalla interrogazione (query)
$num0=mysql_num_rows($res0);
$nome=mysql_result($res0,0,"nome");
$targa=mysql_result($res0,0,"targa");
$lunghezza=mysql_result($res0,0,"lunghezza");
$anno_fabbricazione=mysql_result($res0,0,"anno_fabbricazione");
echo "<font size='4'><center><i><strong>Il record è stato modificato con successo</strong></i></center></font><p><br><p>";
echo " <table border='2' align='center' width=100%>
<tr>
<td width=25%><center>NOME</center></td>
<td width=25%><center>TARGA</center></td>
<td width=25%><center>LUNGHEZZA</center></td>
<td width=25%><center>ANNO DI FABBRICAZIONE</center></td>
</tr>
<tr>
<td><center>$nome</center></td>
<td><center>$targa</center></td>
<td><center>$lunghezza</center></td>
<td><center>$anno_fabbricazione</center></td>
</tr>
</table>";
}
else {
echo "<h2><center>Il record non ha subito modifiche</center></h2><p>";
echo "<center><form action='mbarche1.php' method='POST'>";
echo "<input type='hidden' name='selezi' value='$targa_origine'>";
echo "<input type='submit' value='Torna indietro'>";
echo "</form></center>";
echo "</form></center>";
}
// Chiusura di mysql
mysql_close($db);
}
mysql_close($db);
}
?>
</body>
</html>
CANCELLAZIONE
cbarche.php
<html>
<body>
<form action="cbarche1.php" method="POST">
<?php
// Connessione al database MySQL
$db=mysql_connect("localhost","root");
// Creazione dell'interrogazione
$sqlinterr="select * from barche";
$res=mysql_db_query("gestione_porti",$sqlinterr);
$num=mysql_num_rows($res);
echo " <i>Selezionare il record che si intende cancellare</i></h3><div class='clear'> </div>
<table border='2' align='center' width=100%>
<tr>
<td width=10%><center>Selezione</center></td>
<td width=20%><center>NOME</center></td>
<td width=10%><center>Selezione</center></td>
<td width=20%><center>NOME</center></td>
<td width=20%><center>TARGA</center></td>
<td width=25%><center>LUNGHEZZA</center></td>
<td width=25%><center>ANNO DI FABBRICAZIONE</center></td>
</tr>";
// Visualizzazione dei record inseriti
for ($i=0;$i<$num;$i++) {
$nome=mysql_result($res,$i,"nome");
$targa=mysql_result($res,$i,"targa");
$lunghezza=mysql_result($res,$i,"lunghezza");
$anno_fabbricazione=mysql_result($res,$i,"anno_fabbricazione");
// Visualizazione dei record trovati
echo " <tr>
<td><center><input type='radio' name='selezi' value='$targa'></center></td>
<td><center>$nome</center></td>
<td><center>$nome</center></td>
<td><center>$targa</center></td>
<td><center>$lunghezza</center></td>
<td><center>$anno_fabbricazione</center></td>
</tr>";
}
// Fine della tabella
// Fine della tabella
echo "</table>";
// Chiusura del database MySQL
mysql_close($db);
?>
<p>
<p>
<center><input type="submit" value="Cancellare il record"></center>
</form>
</body>
</html>
</html>
cbarche1.php
<html>
<body>
<?php
// Verifica che l'utente abbia scelto un record da modificare
if (isset($_POST['selezi']))
$selezi=$_POST['selezi'];
else $selezi='';
if ($selezi) {
// Connessione al DB mysql
$db=mysql_connect("localhost","root");
// Creazione dell'interrogazione per estrapolare il record selezionato
$sqlinterr2="delete from barche";
$sqlinterr2.=" where targa='$selezi'";
$res2=mysql_db_query("gestione_porti",$sqlinterr2);
$num2=mysql_affected_rows();
if ($num2>0) {
$sqlinterr3="select * from barche";
$res3=mysql_db_query("gestione_porti",$sqlinterr3);
$num3=mysql_num_rows($res3);
echo "<font size='4'><center><i><strong>Il record è stato cancellato con successo</strong></i></center></font><p><br><p>";
echo "<font color='white' size='3'><i>Di seguito si riporta la tabella 'BARCHE' aggiornata</i></font><p>"; echo " <table border='2' align='center' width=100%>
<tr>
<td width=25%><center>NOME</center></td>
<td width=25%><center>TARGA</center></td>
<td width=25%><center>LUNGHEZZA</center></td>
<td width=25%><center>ANNO DI FABBRICAZIONE</center></td>
</tr>";
for ($i=0;$i<$num3;$i++) {
$nome=mysql_result($res3,$i,"nome");
$targa=mysql_result($res3,$i,"targa");
$lunghezza=mysql_result($res3,$i,"lunghezza");
$anno_fabbricazione=mysql_result($res3,$i,"anno_fabbricazione");
echo " <tr>
<td><center>$nome</center></td>
<td><center>$targa</center></td>
<td><center>$lunghezza</center></td>
<td><center>$anno_fabbricazione</center></td>
</tr>";
}
echo "</table>";
}
else {
}
// Chiusura di mysql
mysql_close($db);
}
}
else echo "<h2><center><i>ERRORE!! Non è stato selezionato nessun record.<br> Si prega di ripetere l'operazione.</i></center></h2>";
?>
</body>
</html>
</html>
Commenti
Posta un commento