Gestione Utenti

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.

la pagina principale Amministra.php

<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>


Modificare la struttura della tabella

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:


Lo script creaUtente.php

Nella sezione seguente si prepara lo script che costruisce il form di registrazione di un nuovo utente. Questo si presenta così

Fornisci i dati dell'utente:
Cognome:
Nome:
data di Nascita:gg:mm: aa:
PrivilegiDocente
Studente
Classe:
Lasciare vuoto se docente
indirizzo e-mail:
Account dell'utente:
Nome utente:
usato per il login
password assegnata:
ripeti password:
L'utente dovrà cambiare la password al suo primo accesso

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


il foglio di stile

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"


Convalida dei campi del form

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.

Il file con lo script di convalida dei dati: convalida.js

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à


registrazione Utente

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.

lo script registraUtenteinDB.php

<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>

Problemi

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.