Creazione dell'area riservata in Php e registrazione dei dati in un file di testo (non database)

L'esempio presentato riguarda la registrazione di utenti in un file txt (no database).
Si utilizzano solo pagine php. Il modulo form viene gestito all'interno di una pagina php.
Ricordo che le pagine php e i relativi file txt creati devono essere memorizzati all'interno di una cartella dentro un server Web. I file di testo devono avere i permessi di lettura e scrittura. Altrimenti al primo tentativo di accesso al file di testo apparirà a video il messaggio che non si ha il permesso di scrittura.

Procediamo adesso ad analizzare l'intera procedura:
La prima cosa da fare è registrarsi compilando la pagina reg_ute.php.


Questa operazione permette di passare i dati inseriti direttamente nella stessa pagina all'interno delle variabili create appositamente. Queste variabili vengono poi passate alla pagina action.php che registrerà per ogni riga del file di testo l'intero record e tra un campo e l'altro verrà memorizzato un carattere ASCII che servirà a distanziare il contenuto di ogni singolo campo. Alla fine verranno memorizzati due caratteri ASCII che permetteranno al Php di terminare il record e posizionare il puntatore all'inizio della fine riga.

Successivamente si potrà accedere all'area riservata inserendo le credenziali corrette tramite la pagina di login acc_utente.php.
In questa pagina ci sono alcune cose importanti da ricordare:

  • Si verifica se i dati non sono stati inseriti. 
  • Si apre il file in lettura (r). 
  • Si crea l'array dei clienti registrati. 
  • si definisce la variabile con il numero dei clienti registrati (servirà per il ciclo con il num max) 
  • flock($fp,2); è la funzione (LUCCHETTO) che rende sicura la registrazione in maniera che nessuno possa intervenire in quel dato momento. 
  • la variabile $trovato viene azzerata associata con false; //variabile che viene portata a 1 (vero - true) nel caso in cui sia user che password siano corretti e l'utente può accedere all'area riservata. 
  • Si apre il ciclo di lettura per cercare nell'array in memoria i due campi da confrontare con le variabili inserite. 
  • confronto formale tra i dati inseriti dall'utente con quelli memorizzati in fase di registrazione. 
  • $trovato=($check_user && $check_pass) corrisponde a true. 
  • flock($fp,3); ritorna disponibile un'altra registrazione nel file di testo 
  • adesso si può chiudere il file di testo 
  • Si riapre il file di testo (clienti.txt) in lettura. 
  • si associa a $gen (nome del file logico generalità dei clienti al file fisico clienti.txt 
  • $i--; la variabile $i viene decrementata per permettere di prelevare i dati da un altro file di testo senza l'utilizzo di un'altra variabile. 
  • fclose($fp); La funzione explode in PHP ha il compito di suddividere una stringa sulla base di un dato separatore. 
  • Si chiude i file di testo.


Con la pagina login_effetuato.php si verifica se l'accesso è stato effettuato con successo.
Con la pagina logout.php si disconnette dalla sessione attiva.


Ecco in sequenza gli scripts delle pagine 


ATTENZIONE ALLE ISTRUZIONI e alla loro corretta codifica. (Alcune righe sono parte delle istruzioni delle righe precedenti) 
Pagina registrazione utenti

reg_ute.php

<html>
<head>
<title>Registrazione dei clienti</title>
</head>
<body>
<form method="POST" action="reg_ute.php">
Nome: <input type="text" name="nome">
<br><br>
Cognome: <input type="text" name="cognome">
<br><br>
Sesso:
<input type="radio" name="sesso" value="femmina">Femmina
<input type="radio" name="sesso" value="maschio">Maschio
<br><br>
Data di nascità:<input type="date" name="dnascita">
<br><br>
Codice Fiscale: <input type="text" name="codfiscale">
<br><br>
E-mail: <input type="text" name="email">
<br><br>
Indirizzo: <input type="text" name="indirizzo">
<br><br>
Paese: <input type="text" name="paese">
<br><br>
Cellulare: <input type="text" name="cellulare">
<br><br>
Nome utente: <input type="text" name="user">
<br><br>
Password: <input type="password" name="pass">
<br><br>
Ripeti la Password: <input type="password" name="rip_pass">
<br><br>
<input type="submit" name="registrati" value="registrati">

</form>

<?php
if(isset($_POST['registrati'])){
echo"<br><br><br>";
$nome=$_POST['nome'];
$cognome=$_POST['cognome'];
$sesso=$_POST['sesso'];
$dnascita=$_POST['dnascita'];
$codfiscale=$_POST['codfiscale'];
$email=$_POST['email'];
$indirizzo=$_POST['indirizzo'];
$paese=$_POST['paese'];
$cellulare=$_POST['cellulare'];
$user=$_POST['user'];
$pass=$_POST['pass'];
$rip_pass=$_POST['rip_pass'];
//riempimento variabili con dati form
if($nome&&$cognome&&$sesso&&$dnascita&&$codfiscale&&$email&&$indirizzo&&$paese&&$cellulare&&$user&&$pass&&$rip_pass)
{
if($pass==$rip_pass) {
//La funzione strlen restituisce la lunghezza (numero di caratteri) di una stringa.
if(strlen($pass)<6){
echo"La password deve contenere almeno 8 caratteri";
} else{
//unione delle variabili paese ed indirizzo in un'unica stringa
//la funzione ucwords restituisce un testo in cui la lettera iniziale di ogni parola è convertita in maiuscolo, se il carattere è alfabetico.
$indirizzo=ucwords("$paese, $indirizzo");
//La funzione restituisce la stringa $string con tutti i caratteri alfabetici convertiti in minuscolo.
$pass=strtolower($pass);
//la funzione ucwords defiisce "parola": sequenza di caratteri immediatamente seguita da un 

//carattere di delimitazione (i delimitatori sono: spazio, form-feed, newline, carriage return, tab 
//orizzontale e tab verticale). concatenazione stringhe
$nome=ucwords("$nome $cognome");
//nome del file di testo
$nomefile="password.txt";
//apertura file di testo clienti
$fp=fopen($nomefile,"r");
$dati=file($nomefile);
//variabile che indica se un user name è già presente nel nostro archivio
$trovato=0;
for($i=0;$i<count($dati) && $trovato==0;$i++){
$stringa_div=explode("|",$dati[$i]);
if($stringa_div[0]==$user || $stringa_div[2]==$mail)
$trovato=1;
}
fclose($fp);//chiusura del file di testo
if($trovato==0){
$fp=fopen($nomefile,"a");//aperture del file di testo dei dati personali del cliente
$dati_pers=array($user,$pass,$email,$nome,$indirizzo);//array dei dati personali
$stringa=implode("|",$dati_pers);/*funzione che ci permette di passare dall'array ad una stringa separando i vari campi con un carattere da noi deciso*/
flock($fp,2);/*funzione che blocca il file in maniere che si possa scrivere senza accavallare i dati se 2 o più persone stanno usando il programma*/
$nl=chr(13).chr(10);//manda a capo alla fine della stringa nel file di testo
fwrite($fp,"$stringa$nl");//scrive nel file di testo
flock($fp,3);//sblocca permettendo a prossimi dati di essere iscritti nel file di testo
fclose($fp);//chiusura del file di testo
echo"I tuoi dati sono stati registrati correttamente! Ora puoi accedere ai nostri servizi tramite user e password cliccanco <a href='/public_html/4e/file_testo/biblioteca_02/login/acc_utente.php'>qui</a>";
}else
echo"L'username o l'email che hai utilizzato è già presente nel nostro registro dati,<a href='reg_ute.html'>torna indietro</a> per cambiarlo!";
}
}else
echo"<h1>Le password non coincidono,<a href='reg_ute.html'>torna indietro</a> per cambiare!</h1> ";
} else
echo"<h1>Perpiacere riempia tutti i campi indicati</h1>";
}
?>

</body>
</html>

Pagina “cuore del programma”

action.php

<?php
include("setting.php");

/*************************
SCRITTURA
**************************/

if(isset($_POST['registrati']))
{
if(!is_writable($my_database_txt)){
exit("il file non ha i permessi di scrittura!");
}
// riceviamo i dati e li filtriamo
$bad_char = array("|", "\r\n", "\r", "\n");
$user = str_replace($bad_char, "", $_POST['user']);
$pass = str_replace($bad_char, "", $_POST['pass']);
// apriamo il file
$open = fopen($my_database_txt, "a+");
// scriviamo i dati separati dal carattere separatore
fwrite($open,$user."|". $pass. "\r\n");
// chiudiamo il file
fclose($open);
// ritorniamo nella pagina di visualizzazione
header("location: acc_utente.php");
exit;
}
?>

Pagina contenente nome file fisico da richiamare in tutte le pagine con la funzione include

setting.php

<?php
$my_database_txt = 'password.txt';
?>

pagina di accesso all'area riservata

acc_utente.php

<html>
<head> <title> Accesso utente</title>
</head>
<?
if(isset($_GET['error_login']))
{
echo "<div class='container' style= 'position: absolute; right:560px; top:240px';><p style='color:Tomato;'>Password erratta. Riprovare</p></div>";
}
?>
<body>
<form action="acc_utente.php" method="POST">
Username: <input name="user" maxlength="15" size="10" type="text"><br><br>
Password: <input name="pass" maxlength="15" size="10" type="password"> <br><br>
<input value="Accedi" type="submit" name="invia">
<input value="Cancella" type="reset">
</form>
<?php
$user=$_POST['user'];
$pass=$_POST['pass'];
$fp=fopen("password.txt","r");//apertura file di testo user pass clienti
$dati=file("password.txt");//array dei clienti registrati
$num_cli=count($dati);//numero dei clienti registrati
flock($fp,2);//funzione che blocca il file in sicurezza in maniera che si possa scrivere senza che nessun altro possa registrare i dati.
$trovato=false; //variabile che viene portata a 1 (vero - true) nel caso in cui sia user che password siano corretti e l'utente può accedere
for($i=0; !$trovato && $i<$num_cli; $i++){
$stringa_div=explode("|",$dati[$i]);
$check_user=($stringa_div[0]==$user);
//La funzione trim di PHP è utilizzata per rimuovere eventuali spazi (ed altri caratteri che vedremo 
//in seguito) all'inizio ed alla fine di una stringa.
$check_pass=(trim($stringa_div[1])==trim($pass));
$trovato=($check_user && $check_pass);
}
flock($fp,3);//sblocca permettendo una successiva registrazione nel file di testo
fclose($fp);//chiusura del file di testo
$fp=fopen("biblioteca_02/clienti.txt","r");//apertura del file di testo delle generalità dei clienti
$gen=file("biblioteca_02/clienti.txt");

$i--;//$i aveva concluso l'ultimo ciclo con l'indice maggiore di uno, viene quindi riportato indietro per permettere di prelevare i dati da un altro file di testo senza l'utilizzo di un'altra variabile

$stringa=explode("|",$gen[$i]);

fclose($fp);

if($trovato==true)
header("Location: login_effetuato.php");
else echo"L'username o la password inserite non sono corrette, riprova o registrati <a href='reg_ute.php'>qui</a>.";

?>
</body>
</html>

Pagina intermedia che permette di visualizzare l'accesso effettuato

login_effetuato.php

<i class="fa fa-search"></i>


<!DOCTYPE html>
<html>
<head>
<title>Biblioteca comunale</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<style>
#map {
height: 300px;
width: 300px;
}
body {
font-family: Arial;
}

.coupon {
border: 5px dotted #bbb;
width: 80%;
border-radius: 15px;
margin: 0 auto;
max-width: 600px;
}

.container {
padding: 2px 16px;
background-color: #f1f1f1;
}
ul {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
border: 1px solid #e7e7e7;
background-color: #f3f3f3;
}

li {
float: left;
}

li a {
display: block;
color: #666;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}

li a:hover:not(.active) {
background-color: #ddd;
}

li a.active {
color: white;
background-color: #4CAF50;
}
</style>
</head>
<body>
<h1><center>BIBLIOTECA COMUNALE</center></h1>
<center><h4>*simulazione scolastica*</h4></center>
<div class="coupon">
<ul>
<li><a class="active" href="/public_html/4e/file_testo/biblioteca_02/login/login_effetuato.php">Home </a></li>
<li><a href="/public_html/4e/file_testo/biblioteca_02/areariservata/login.php">Area riservata</a></li>
<li><a href="/public_html/4e/file_testo/biblioteca_02/prestiti/prestiti.php">Richiedi prestito</a></li>
<li><a href="../login/logout.php">Logout</a></li>
</ul>
<img src="/public_html/4e/file_testo/biblioteca_02/immagini/biblioteca.jpg" alt="biblioteca" style="width:100%;">
<div class="container">
<h4>DOVE SIAMO</h4> <div style="position: absolute; right:400px; top:650px; background-color:white">
<p><b><center>CONTATTI:</center></b></p> <p>Tel. 0371 ** ** **<br>Email: biblioteca@biblioteca.com</p></div>
<div id="map"></div>
<script>
function initMap() {
var uluru = {lat:45.31139 ,lng:9.50088 };
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 13,
center: uluru
});
var marker = new google.maps.Marker({
position: uluru,
map: map
});
}
</script>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyD_0xGC6BDxQQ6A0Zmx_oFDZVaEdlz0tc0&callback=initMap"></script>
</div>
</div>
</body>
</html>

Chiusura della sessione

logout.php

<html>
<head>
<title>Login Area</title>
<style>
body {
font-family: Arial;
}

.coupon {
border: 5px dotted #bbb;
width: 80%;
border-radius: 15px;
margin: 0 auto;
max-width: 600px;
}

.container {
padding: 2px 16px;
background-color: #f1f1f1;
}
ul {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
border: 1px solid #e7e7e7;
background-color: #f3f3f3;
}

li {
float: left;
}

li a {
display: block;
color: #666;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}

li a:hover:not(.active) {
background-color: #ddd;
}

li a.active {
color: white;
background-color: #4CAF50;
}

input[type=text], input[type=password] {
width: 50%;
padding: 12px 20px;
margin: 8px 0;
display: inline-block;
border: 1px solid #ccc;

}

button {
color: white;
background-color: #4CAF50;
padding: 14px 20px;
margin: 8px 0;
border: none;
cursor: pointer;
width: 20%;
}

button:hover {
opacity: 0.8;
}

.cancelbtn {
width: auto;
padding: 10px 18px;
}

span.psw {
float: right;
padding-top: 16px;
}

/* Change styles for span and cancel button on extra small screens */
@media screen and (max-width: 300px) {
span.psw {
display: block;
float: none;
}
.cancelbtn {
width: 100%;
}
}
</style>
</head>
<body>
<form method="post" action="acc_utente.php">
<div class="coupon">
<div class="container">
<ul>
<li><a href="/public_html/4e/file_testo/biblioteca_02/info.php">Home</a></li>
<li><a href="/public_html/4e/file_testo/biblioteca_02/info.php" class="active" >Area riservata</a></li>
</ul><br>
<?php
include 'conf.php';
session_start();
if ($_SESSION['username']==$uname1) {
session_unset();
session_destroy();
echo "<center><p style='color:Tomato';>HAI EFFETTUATO IL LOGOUT</p></center>";
echo"<center><button type='submit' value='Log In'>Login</button></center><br>";
} ?>
</div>
</div>
</form>
</body>
</html>


Commenti

Post popolari in questo blog

Simulazioni di reti (con Cisco Packet Tracer)

Esercizi sulla rappresentazione della virgola mobile IEEE 754 (Floating Point)