Per avere un'area riservata nel proprio sito serve anche una registrazione per gli utenti.
Per fare ciò dovreste, per maggior sicurezza, utilizzare un database sql, ma in questo tutorial useremo files di testo.
-Costruiamo il form per la registrazione
Codice HTML:
<html>
<title>Registrazione</title>
<body>
<form method="post" action="registrazione.php">
<input type="text" name="nome" /> Nome utente
<input type="password" name="pass" />Password
<input type="submit" name="registrati" value="Registrati" /> - <input type="submit" name="login" value="Log-In" />
</form>
</body>
</html>
questo si chiamerà form.html
-Analizziamo un pò il codice
il tag form specifica l'inizio di un modulo contenente alcuni oggetti di input, come <input type="text" ... /> che è il codice per un campo di testo, o come <input type="password" ... />, che genera un campo di testo dove le parole sono mascherate da simboli.
Infine c'è <input type="submit" name="registrati" value="Registrati" /> dove submit indica che questo input è un pulsante di invio, chiamato registrati e con una scritta Registrati .
Alla pressione di quel pulsante si viene mandati all'action del form (... action="registrazione.php" ...) e tutti i dati del form vengono inviati a quella pagina tramite post ovvero il method del form.
Avendo creato il form in HTML passiamo ora alla realizzazione del codice per registrare la propria identità o eseguire il log-in.
-Controllo del pulsante premuto, controllo dei dati, inserimento o log-in
Una volta inseriti il nickname e la password, questa pagina controlla quale pulsante è stato premuto, e se è stato premuto "Registrati" allora controlla che il nickname non sia già presente nel db, e in caso di successo, inserisce l'utente nel file di testo.
Se invece viene premuto il pulsante di Log-In allora lo script controlla che la password associata al nickname sia corretta e se lo è logga l'utente.
-Cominciamo con il codice
Codice PHP:
<?php
function controlla_presenza($nick){
$file = file("utenti.php");
foreach($file as $rigo) {
$ex = explode("|",$rigo);
if($ex[1] == $nick) {
return "presente";
}
}
}
function nick_pass_ok($nick,$pass) {
$pass = md5($pass);
$file = file("utenti.php");
foreach($file as $rigo) {
$ex = explode("|",$rigo);
if($ex[1] == $nick && $ex[2] == $pass) { return "ok"; }
}
}
$nick = $_POST['nome'];
$nick = str_replace("|","",$nick);
$nick = str_replace("\\","",$nick);
$vpass = $_POST['pass'];
$vpass = str_replace("|","",$vpass);
$vpass = str_replace("\\","",$vpass);
$pass = md5($vpass);
if($_POST['registrati'] || $_POST['login']){
if(trim($nick) == "" || trim($pass) == "") {
header("Location:form.html");
}
}
if($_POST['registrati']) {
$check = controlla_presenza($nick);
if($check == "presente") { echo "Utente già presente!"; exit(); }
$fp = fopen("utenti.php","a+");
fwrite($fp,"<?|".$nick."|".$pass."|\n");
fclose($fp);
echo "$nick registrato! Password: $vpass";
echo "<a href='form.html'>Torna alla pagina di login</a>";
}else if($_POST['login']) {
$contr = nick_pass_ok($nick,$pass);
if($contr == "ok") { echo "$nick sei loggato!";
echo "Visualizza l'area riservata!";
}else{
echo "Nickname o password errati!";
}
}
?>
-Analizziamo bene il codice
la funzione controlla_presenza() apre il file utenti.php e va alla ricerca, con un ciclo foreach del nickname dichiarato come termine della funzione (controlla_presenza($nick))
la funzione nick_pass_ok() serve ad autenticare il nick e la pass dichiarati, cercando nel file utenti.php analogamente a controlla_presenza(), con l'unica differenza che questa funzione controlla sia il nick sia la password.
Dichiariamo ora le variabili $nick e $pass contenenti i due input text della pagina form.html e rimpiazziamo il carattere |, perchè di vitale importanza nel file (serve a dividere i records) e il carattere di backslash.
Con questa riga di codice:
Codice PHP:
if(trim($nick) == "" || trim($pass) == "") {
header("Location:form.html");
}
controlliamo che le variabili $nick e $pass non siano vuote. Se lo sono si viene rispediti a form.html .
Se è stato cliccato il pulsante Registrati, allora alla variabile $check viene assegnato il risultato della funzione controlla_presenza e se restituisce "presente" allora viene terminato il programma con un exit(); e un echo(); .
Se non verrà eseguito l'exit(); si eseguirà la parte di codice inferiore. Cioè l'inserimento di dati nel file "utenti.php" .
Si noti che in ogni riga del file utenti.php ho messo "<?" prima del resto. Questo perchè si vuole che venga generato un errore e di conseguenza non visualizzato ciò che il file contiene.
Si noti anche che la password viene criptata in md5.
Se viene premuto Log-In, allora si assegnerà alla variabile $contr la funzione nick_pass_ok(); e se essa restituirà "ok" allora verrà mandato all'utente un messaggio di conferma (con il primo echo) e poi verrà visualizzato il contenuto protetto (con il secondo echo).
Naturalmente si possono fare molte altre cose, come l'assegnazione di un cookie.
Vedi: php.net
Risultato: FORM . HTML