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 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)
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){
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.
//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.
//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
//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.
//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
Posta un commento