Il foglio di stile, associato alle pagine dell'applicazione, crea un layout a due colonne: un menu sulla sinistra e un'area, sulla destra, in cui vengono mostrati i risultati delle operazioni svolte.
Quando si sceglie un link dal menu viene richiamata uno script che registra in un file di testo tutti i messaggi relativi all'operazione.
Quando si ritorna nella pagina principale, si legge (se esiste) il file di testo e si mostra il suo contenuto nell'area a destra del menu.
Le proprietà della sezione body:
body {
font-family:Garamond;
color:#0000FF;
background-color:antiquewhite;
}
Le proprietà del paragrafo:
p {
font:14px "Times New Roman";
margin:0px 0px 14px 0px;
padding:0px;
}
Le proprietà dei link:
a {
color:#09c;
font-size:11px;
text-decoration:none;
font-weight:600;
}
a:link {
color:#09c;
}
a:visited {}
a:hover {
background-color:blue;
color:white;
}
La sezione intestazione mostra il titolo della pagina in un riquadro:
#intestazione {
font-size:22px;
margin:50px 0px 0px 0px;
padding:17px 0px 0px 20px;
height:40px;
border-style:solid;
border-color:black;
border-width:1px 0px;
line-height:11px;
background-color:#E6E6FA;
}
L'area centrale del browser viene riservata per comunicare i messaggi relativi alle operazioni svolte:
#areaStampa {
margin-left:320px;
}
Sul lato sinistro della finestra viene proposto il menu:
#Menu {
float:left;
width:280px;
padding:10px;
background-color:#eee;
border:1px dashed #999;
line-height:17px;
}
Salvare questo documento con il nome iTestStili.css
<?php
$Sweb = "localhost";
$utente = "root";
$pw = "";
?>
Si suppone che l'applicazione preveda una fase di installazione consistente nel preparare il database, scegliere la password, per la gestione delle operazioni critiche, e consenta anche la disinstallazione del database.
La pagina usa il foglio di stile proposto nella sezione precedente:
<html>
<head>
<title>Amministrazione</title>
<link rel="stylesheet" type="text/css" href="iTestStili.css">
</head>
Nel body si inserisce un paragrafo che eredita le proprietà definite nello stile intestazione.
Nella sezione menu ci sono due link: Uno per creare il data base, l'altro per eliminare il database.
<body>
<div id="intestazione">Amministrazione del Test</div>
<div id="Menu">
<p><a href="eliminaDB.php">Cancella</a> il data base</p>
<p><a href="creaDB.php">Creazione</a> completa del database</p></div>
L'area centrale, inizialmente è vuota, ma in seguito conterrà le linee lette da un file temporaneo.
Lo script controlla la presenza, nella stessa cartella, di un file denominato "tmp.txt". Se non lo trova l'area centrale del browser resta vuota, se invece il file esiste, lo script lo legge e ne stampa il contenuto.
<div id="areaStampa">
<?php
if (file_exists("tmp.txt")) {
if (!$pf = fopen("tmp.txt","r")) echo "errore";
while (!feof($pf)) {
$riga=fgets($pf);
echo "<p>".$riga."</p>";
}
fclose($pf);
unlink("tmp.txt");
}
?>
</div>
</body>
</html>
I parametri di autenticazione per l'accesso a mysql vengono memorizzati nel file account.php, da dove ogni pagina può leggerli.
<?php
require("account.php");
$con = mysql_connect($Sweb,$utente,$pw);
if (!$con)
die('Impossibile connettersi al Server Web: ' . mysql_error());
Dopo la connessione al server mysql, lo script crea il file temporaneo, distruggendo un'eventuale file avente lo stesso nome. Poi esegue la query di creazione del database e scrive l'esito dell'operazione nel file temporaneo.
$pf = fopen("tmp.txt","w");
$nomeDB = "iTest";
if (mysql_query("CREATE DATABASE $nomeDB", $con))
fwrite($pf, "Database $nomeDB creato<br />\n\r");
else
fwrite($pf, "Impossibile creare il database: " . mysql_error()."<br />");
Problema: Lo studente dovrebbe apportare le opportune modifiche, dove necessario, per fermare lo script quando si verifica un errore.
Il database viene selezionato e viene preparata la query di creazione tabella.
I campi della tabella identificano un utente, prevedendo che, tra i campi necessari, sia richiesto fornire il nome e il cognome, un grado di autorizzazione nell'accesso alle tabelle, e un account:
mysql_select_db($nomeDB, $con);
$sql = "CREATE TABLE studenti (
IDstud int not null auto_increment PRIMARY KEY,
Cognome varchar(20),
Nome varchar(20),
Privilegi varchar(10),
utente varchar(20),
pass varchar(60)
)";
A questo punto la query di creazione tabella viene eseguita e subito dopo viene scritto l'esito nel file temporaneo.
Al termine lo script reindirizza il browser alla pagina di amministrazione, la quale legge il file temporaneo e mostra i risultati delle operazioni svolte.
$esito = mysql_query($sql,$con);
if ($esito) {
fwrite($pf, "<br />creata tabella STUDENTI<br />\n\r");
Il primo utente che viene inserito nella tabella è l'amministratore dell'applicazione.
L'esito della creazione dell'utente viene confermato con il messaggio scritto nel file temporaneo.
$username = "donDiego";
$password = md5("Zorro");
$Admin = "insert into studenti (Cognome, utente, pass, Privilegi)
values
('Amministratore', '$username','$password', 'super')";
if (mysql_query($Admin))
fwrite($pf, "<br />creato utente amministratore<br />\n\r");
else
fwrite($pf, "<br />Non sono riuscito a creare amministratore<br />");
}
else fwrite($pf, "<br />Non ho creato la tabella STUDENTI<br />");
mysql_close($con);
fclose($pf);
header('location:Amministra.php');
?>
Problema: Modificare lo script in modo che l'utente possa scegliere il suo account
Il secondo link proposto nel menu serve ad eliminare il database, quindi è una delle operazioni per la disinstallazione del programma.
Lo script crea il file temporaneo.
<html>
<head>
<title></title>
</head>
<body>
<?php
$pf = fopen("tmp.txt","w");
L'operazione di cancellazione deve essere preceduta dall'autenticazione dell'utente, verificando che possegga i dirirri amministratore prima eseguire l'eliminazione del database.
Lo script prepara un messaggio per l'utente, invia il form e rendirizza la pagina, altrimenti si verificano le credenziali fornite e, se sono quelle dell'amministratore, il data base viene elminato.
L'esito dell'eliminazione del data base viene comunicato tramite il file temporaneo.
if (!isset($_POST['Privilegi'])) {
fwrite($pf, "Per questa operazione è necessario autenticarsi.<br />");
fwrite($pf, "Prego, inserire le credenziali:<br />");
fwrite($pf, "<form method='POST' action=".$_SERVER['PHP_SELF'].">");
fwrite($pf, "<br />Nome Utente: <input type='Text' name='utente' />");
fwrite($pf, "<br />password: <input type='Text' name='pass' />");
fwrite($pf, "<br /><input type='submit' name='Privilegi' value='ok' />");
fwrite($pf, "</form>");
fclose($pf);
header('location:Amministra.php');
} else {
require("account.php");
$con = mysql_connect($Sweb,$utente,$pw) or
die('Impossibile connettersi al Server Web: ' . mysql_error());
$pf = fopen("tmp.txt","w");
$nomeDB = "iTest";
mysql_select_db($nomeDB, $con);
$ut=$_POST["utente"];
$pwd=md5($_POST["pass"]);
$sql = "select * from studenti where utente='".$ut."' and pass='".$pwd."' and Privilegi='super'";
$rs=mysql_query($sql);
if (!$rs) fwrite($pf, "errore nella query");
$record = mysql_fetch_array($rs);
$nrPw = $record["pass"];
$nrU = $record["utente"];
$nrPr = $record["Privilegi"];
if(mysql_num_rows($rs)==1)
fwrite($pf, "<br />utente riconosciuto");
else {
fwrite($pf, "<br />autorizzazione non concessa");
fclose($pf);
header('location:Amministra.php');
exit();
}
if (mysql_query("DROP DATABASE $nomeDB", $con)) {
fwrite($pf, "<br />Database $nomeDB eliminato<br />\n\r");
} else {
fwrite($pf, "<br />Impossibile eliminare DB: ".mysql_error()."<br>");
}
fclose($pf);
header('location:Amministra.php');
}
?>
</body>
</html>
Modificare lo script in modo l'utente possa fornire il proprio account, direttamente dalla pagina di amministrazione.