Ritornare alla pagina di amministrazione amministra.php e nella sezione menu aggiungere il link per richiamare lo script di inserimento dei dati di un nuovo utente nel data base.
<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="creaUtente.php">Creazione</a> nuovo Utente</p>
<p><a href="creaDB.php">Creazione</a> completa del database</p></div>
Nello script di creazione del data base modificare la query di creazione della tabella:
$sql = "CREATE TABLE studenti (
IDstud int not null auto_increment PRIMARY KEY,
Cognome varchar(20),
Nome varchar(20),
Classe varchar(6),
giorno int,
mese int,
anno int,
Privilegi varchar(10),
posta varchar(30),
utente varchar(20),
pass varchar(60),
nuova int
)";
La struttura della tabella contenente gli utenti viene integrata con i campi:
Nella sezione seguente si prepara lo script che costruisce il form di registrazione di un nuovo utente. Questo si presenta così
Lo script viene richiamato dalla pagina di amministrazione.
<html>
<head>
<title></title>
</head>
<body>
<?php
$pf = fopen("tmp.txt","w");
Lo script crea il file tmp.txt in cui inserirà i messaggi riguardanti l'esito dell'operazione e quando, al termine, restituirà il controllo alla pagina di amministrazione, questa li leggerà
Prima di passare alle operazioni di registrazione dell'utente nel data base, lo script controlla se l'accesso a questa pagina è avvenuto tramite il form di registrazione, verificando se è stata impostata la variabile nuovoUt. Se la variabile non esiste, lo script invia, sempre tramite il file tmp.txt, il form di registrazione all'utente.
if (!isset($_POST['nuovoUt'])) {
fwrite($pf, "<script language='JavaScript' src='convalida.js'></script>");
fwrite($pf, "<form name='Ut' onSubmit='return convalida()' method='post' action='registraUtenteinDB.php'>");
fwrite($pf, "<table border=\"1px\">");
fwrite($pf, "<tr class=\"Testa\"><td colspan=\"2\"><b>Fornisci i dati dell'utente:</b></td></tr>");
fwrite($pf, "<tr><td>Cognome:</td><td><input type='text' name='cognome' /></td></tr>");
fwrite($pf, "<tr><td>Nome:</td><td><input type='text' name='nome' /></td></tr>");
fwrite($pf, "<tr><td>data di Nascita:</td><td>gg:<input type='text' name='gg' size='2' />");
fwrite($pf, "mm:<input type='text' name='mm' size='2' /> aa:<input type='text' name='aa' size='2' /></td></tr>");
fwrite($pf, "<tr><td>Privilegi</td><td><input type='radio' value='docente' name='privilegi' checked />Docente");
fwrite($pf, "<br /><input type='radio' value='studente' name='privilegi' />Studente</td></tr>");
fwrite($pf, "<tr><td>Classe:</td><td><input type='text' name='cls' />");
fwrite($pf, "<br /><small>Lasciare vuoto se docente</small></td></tr>");
fwrite($pf, "<tr><td>indirizzo e-mail:</td><td><input type='text' name='mail' /></td></tr>");
fwrite($pf, "<tr class=\"Testa\"><td colspan=\"2\"><b>Account dell'utente:</b></td></tr>");
fwrite($pf, "<tr><td>Nome utente:</td><td><input type='text' name='utente' /><br />");
fwrite($pf, "<small>usato per il login</small></td></tr>");
fwrite($pf, "<tr><td>password assegnata: </td><td><input type='password' name='pass' /></td></tr>");
fwrite($pf, "<tr><td>ripeti password: </td><td><input type='password' name='pass2' />");
fwrite($pf, "<br /><small>L'utente dovrà cambiare la password al suo primo accesso</small></td></tr>");
fwrite($pf, "<tr><td colspan=\"2\" align=\"center\"><input type='submit' name='admin' value='ok' /></td></tr>");
fwrite($pf, "</table></form>");
fclose($pf);
header('location:Amministra.php');
}
?>
</body>
</html>
I componenti del form di registrazione sono contenuti in una tabella e, prima di inviare i dati allo script che li registrerà nel data base, viene richiamata una funzione javascript che si assicura della validità dei campi immessi.
Alle righe della tabella è stato applicato uno stile per evidenziare le righe di intestazione
Aprire il foglio di stile: iTestStili.css ed aggiungere la seguente definizione di classe:
tr.Testa {
text-align: center;
font-weight: bold;
padding: 2px;
margin: 1px;
background: #A9A9A9; /* DarkGray */
}
La classe di stile Testa si applica alle righe della tabella aventi la proprietà class="Testa"
Quando si preme il pulsante submit viene richiamata la funzione convalida(). Se questa ritorna true allora i dati vengono inviati al server, altrimenti viene richiesto di rettificare i dati.
function convalida() {
if (document.Ut.cognome.value=="") {
alert("inserire il cognome!")
return false
}
if (document.Ut.nome.value=="") {
alert("inserire il nome!")
return false
}
if (document.Ut.utente.value=="") {
alert("inserire il nome per il login!")
return false
}
if (document.Ut.pass.value=="") {
alert("inserire la password!")
return false
}
if (document.Ut.pass.value!=document.Ut.pass2.value) {
alert("le due password non coincidono")
return false
}
return true
}
Problema:
Lo studente è invitato ad aggiungere ulteriori controlli di canvalida dei dati immessi.
Ad esempio, assicurarsi che nei campi nome e cognome siano presenti solo lettere dell'alfabeto, oppure che l'indirizzo
di posta elettronica contenga almeno un punto ed un carattere @, e che il punto si trovi 2 o 3 posti prima della fine
dell'indirizzo.
Anche i campi relativi alla data di nascita potrebbere essere sottoposti ad un controllo di validità
Se lo script di convalida ritorna true allora viene richiamato lo script per registrare i dati dell'utente:
Problema:
l'accesso a questa pagina deve essere condizionato all'esistenza di una variabile di ambiente che
garantisca che i dati siano stati inviati tramite il form. Questo controllo è lasciato per esercizio.
<html>
<head>
<title></title>
</head>
<body>
<?php
require("account.php");
$pf = fopen("tmp.txt","w");
$con = mysql_connect($Sweb,$utente,$pw);
if (!$con)
die('Impossibile connettersi al Server Web: ' . mysql_error());
$nomeDB = "iTest";
mysql_select_db($nomeDB, $con);
$cog = $_POST['cognome'];
$nom = $_POST['nome'];
$gg = $_POST['gg'];
$mm = $_POST['mm'];
$aa = $_POST['aa'];
$prv = $_POST['privilegi'];
$cls = $_POST['cls'];
$mail = $_POST['mail'];
$utente = $_POST['utente'];
$pass = md5($_POST['pass']);
$query = "insert into studenti(Cognome, Nome, Classe, giorno, mese, anno, Privilegi, posta, utente, pass) ";
$query.="values ('".$cog."','".$nom."','".$cls."',".$gg.",".$mm.",".$aa.",'".$prv."','".$mail."','".$utente."','".$pass."')";
if (mysql_query($query)) {
fwrite($pf, "<br />creato utente <br />\n\r");
fwrite($pf, "<br />Promemoria:");
fwrite($pf, "<br />".$cog." ".$nom." ".$gg."/".$mm."/".$aa);
fwrite($pf, "<br />ruolo: ".$prv);
fwrite($pf, "<br />indirizzo e-mail: ".$mail);
fwrite($pf, "<br /><u><b>Account</b></u>");
fwrite($pf, "<br />nome Utente: ".$utente);
fwrite($pf, "<br />password assegnata: ".$_POST['pass']);
} else fwrite($pf, "<br />Non sono riuscito a creare l'utente <br />\n\r");
fclose($pf);
header('location:Amministra.php');
?>
</body>
</html>
Il nome scelto dall'utente per il login deve essere univoco. Introdurre il controllo sul nome scelto dall'utente, e procedere alla registrazione solo se il nome non è stato già scelto.
Quando si richiede di scegliere un nuovo "nome utente", perchè quello scelto esiste, è opportuno ripresentare all'utente il form con i campi che questi aveva già inserito, per evitare di farglieli riscrivere, e indicare il campo da modificare. Quindi, prima di restituire il controllo alla pagina di amministrazione preparare il form di registrazione.