- Home
- Categorie
- Coding e Sistemistica
- PHP
- Area privata senza database
-
Area privata senza database
Salve a tutti!
Dopo alcuni chiarimenti e la conferma di una possibile modifica dello script sull'area privata creato da TheDarkITA ([Tutorial] Area privata), mantenendo lo stesso livello di sicurezza e velocità (solo se usato con pochi utenti), apro questa discussione per provare ad abbozzare delle idee o pezzi di codice che potrebbero essere utili, sperando di non dire troppe cavolate
Prima di tutto mi servirà un foglio php che contiene tutti i dati dei vari utenti, avevo pensato a degli array, del tipo:
utenti.php
[PHP]$utente1=array("id1","user1","pass1");
$utente2=array("id2","user2","pass2");[/PHP]Che viene poi richiamato nelle pagine di controllo con:
protetta.php
[PHP]fopen("utenti.php","a+");[/PHP]In modo che per ogni riga conti un utente..
Ho già errato qualcosa, magari ci sono altri comandi più utili per l'adattamento, lo stesso per l'immagazzinamento dei dati, può andare bene un array di quel tipo?
-
Ciao Gigi991,
io, per facilitare la gestione, strutturerei il file utenti.php cosi:
[php]
$utenti[]=array('id' => 'id1', 'nomeutente' => 'user1', 'password' => 'pass1');
$utenti[]=array('id' => 'id2', 'nomeutente' => 'user2', 'password' => 'pass2');
[/php]
-
Ok l'ho modificato, per quanto riguarda le pagine da proteggere, si usano sempre le sessioni come quello usato per i database?
Tipo:
protetta.php
[PHP]<?php
session_start();
fopen("utenti.php","a+");
if(isset($_SESSION['login']))
echo 'Contenuto privato';
else
echo 'Contenuto pubblico';
?>[/PHP]Solo che ho il problema che nella pagina di login i dati da prelevare sono dal file e non dal database, come posso fare il controllo per vedere se i dati inseriti sono corretti dal file utenti.php?
-
Si puoi usare le sessioni benissimo.
Per il controllo devi scorrerti tutto l'array alla ricerca di una corrispondenza.
-
[PHP]
<?php
session_start();
fopen("utenti.php","a+");// Se il modulo viene inviato...
if(isset($_POST['login']))
{
// Dati Inviati dal modulo
$nomeutente = (isset($_POST['nomeutante'])) ? trim($_POST['nomeutente']) : ''; // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default ''
$password = (isset($_POST['password'])) ? trim($_POST['password']) : ''; // Metto nella variabile 'pass' il dato inviato dal modulo, se non viene inviato dò di default ''// Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza if (!get_magic_quotes_gpc()) { $nomeutente = addslashes($nomeutente); $password = addslashes($password); } // Crypto la password e la confronto con quella nel database $password = md5($password); [/PHP]
Fino a qui mi pare dovrebbe essere tutto uguale, però ho problemi sulla modalità di controllo del file, ho provato a cercare con diverse parole chiave su google ma spiegano tutti come fare controlli di dati su database e non su file..
Questo sarebbe il pezzo mancante, che preleva i dati dal database, e quindi da convertire con il prelievo dal file utenti.php:
[PHP]
// Controllo l'utente esiste
$query = mysql_query("SELECT id FROM utenti WHERE user = '$user' AND pass = '$pass' LIMIT 1");// Se ha trovato un record if(mysql_num_rows($query) == 1) { // prelevo l'id dal database $login = mysql_fetch_array($query); // Creo una variabile di sessione $_SESSION['login'] = $login['id'];
[/PHP]
Poi la chiusura anche così mi sembra non ci sia da modificare nulla:
<FONT color=#007700 face="Courier New">[PHP]
// reindirizzo l'utente
header('Location: privata.php');
exit;
}
// se non esiste da l'errore
else
die('Nome Utente o Password errati');
}
?>[/PHP]
-
Dovrebbe essere all'incirca cosi:
[php]
include('utenti.php');
$c = count($utenti);
$i = 0;
while($i < $c && $utenti*['nomeutente'] != $user && $utenti*['password'] != $pass)
$i++;if($i<$c)
{
$_SESSION['login'] = $utenti*['id'];
// reindirizzo l'utente
header('Location: privata.php');
exit;
}
// se non esiste da l'errore
else
die('Nome Utente o Password errati');
[/php]
-
Ho quindi i tre fogli:
utenti.php:
[php]<?php
$utenti[]=array('id' => 'id1', 'nomeutente' => 'user1', 'password' => 'pass1');
$utenti[]=array('id' => 'id2', 'nomeutente' => 'user2', 'password' => 'pass2');
header('Location: login.php');
exit;
?>[/php]protetta.php:
[php]<?php
session_start();
fopen("utenti.php","a+");
if(isset($_SESSION['login']))
echo 'Contenuto privato';
else
echo 'Contenuto pubblico';
?>[/php]login.php:
[php]<?php
include('utenti.php');
$c = count($utenti);
$i = 0;
while($i < $c && $utenti*['nomeutente'] != $user && $utenti*['password'] != $pass)
$i++;
if($i<$c)
{
$_SESSION['login'] = $utenti*['id'];
// reindirizzo l'utente
header('Location: protetta.php');
exit;
}
// se non esiste da l'errore
else
die('Nome Utente o Password errati');
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>
</head>
<body>
<form action="" method="post">
<input name="user" type="text" id="user" value="Nome Utente" onfocus="if(this.value=='Nome Utente') this.value='';" /><br />
<input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
<input name="login" type="submit" value="Login" /><br />
</form>
</body>
</html>[/php]In questo modo però aprendo la pagina di login mi esce scritto: Nome Utente o Password errati.
Ho saltato qualche pezzo? In pratica non carica il contenuto di body dando subito il messaggio di errore..
-
In utenti.php le righe che fanno il redirect dovresti toglierle.
Mentre in login.php dovresti controllare che il modulo sia inviato prima di fare le operazioni.
-
Ah visto che ne hai parlato, in utenti.php avevo messo il redirect perchè aprendo appunto la pagina utenti.php rimaneva il foglio bianco, e quindi l'ho messo per reindirizzare chi ci potrebbe passare alla pagina di login. Disturba lo script in questo modo? Meglio che lo tolgo?
Per la pagina di login efettivamente mettendo il codice sotto il form mi carica la pagina..
Solo che inserendo nome e password di un utente mi reindirizza alla pagina protetta ma stampa il contenuto pubblico e non privato..
-
Se vuoi mettere il redirect fai un controllo sull'url richiesto in modo da fare il redirect solo se viene richiesta quella pagina, altrimenti fai redirect ogni volta che usi il file in lettura.
[php]
<?php
session_start();
if(isset($_POST['user'])){
include('utenti.php');
$c = count($utenti);
$i = 0;
while($i < $c && $utenti*['nomeutente'] != $user && $utenti*['password'] != $pass)
$i++;
if($i<$c)
{
$_SESSION['login'] = $utenti*['id'];
// reindirizzo l'utente
header('Location: protetta.php');
exit;
}
// se non esiste da l'errore
else
die('Nome Utente o Password errati');
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>
</head>
<body>
<form action="" method="post">
<input name="user" type="text" id="user" value="Nome Utente" onfocus="if(this.value=='Nome Utente') this.value='';" /><br />
<input name="pass" type="password" id="pass" value="Password" onfocus="if(this.value=='Password') this.value='';" /><br />
<input name="login" type="submit" value="Login" /><br />
</form>
</body>
</html>
[/php]
-
Ora va perfetto, ho provato anche la pagina di logout e almeno quella sono riuscito da solo
Per ora penso possa bastarmi questo, vedrò di adattarlo allo scopo che ho in mente, e in caso avessi problemi ritorno quiGrazie mille!
-
Figurati.
-
Ciao a tutti,
mi sono appena iscritto in questo forum perchè è molto bello e molto utile per me che sono alle prime armi in php.
A me serviva uno script di login senza database ed ho trovato questo,l'ho provato in locale e sul web ma al momento dell'invio dei dati non fa niente,cioè mi spiego meglio quando immetto i dati rimane la pagina del login e non mi dà nè Nome utente e password errati e nè mi indirizza alla pagina privata...Che devo fare?Da cosa è dovuto? Vi posto lo script.Login.php
[PHP]<?php
session_start();
if(isset($_POST['user'])){
include('utenti.php');
$c = count($utenti);
$i = 0;
while($i < $c && $utenti*['nomeutente'] != $user && $utenti*['password'] != $pass)
$i++;
if($i<$c)
{
$_SESSION['login'] = $utenti*['id'];
// reindirizzo l'utente
header('Location: privata.php');// se non esiste da l'errore
}else{
die('Nome Utente o Password errati');
}}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>
</head>
<body>
<form action="" method="post">
<input name="user" type="text" id="user" value="Nome Utente" onFocus="if(this.value=='Nome Utente') this.value='';" /><br />
<input name="pass" type="password" id="pass" value="Password" onFocus="if(this.value=='Password') this.value='';" /><br />
<input name="login" type="submit" value="Login" /><br />
</form>
</body>
</html>[/PHP]Ah,un'ultima cosa ma per il file utenti nome utente e password gli devo scrivere a mano giusto? se è così in quali campi devo scriverli?
Scusate se sto facendo domande da vero principiante ma la verità è che sto alle prime con il php...
Grazie e spero mi rispondiate...
Stek
-
Ciao a tutti volevo sapere come devo fare ad aggiungere nomeutente e password al file utenti.php....mi potreste dare una mano??
Grazie mille
-
[php]
$utenti[]=array('id' => 1, 'nomeutente' => 'nomeutente1', 'password' => 'password1');
$utenti[]=array('id' => 2, 'nomeutente' => 'nomeutente2', 'password' => 'password2');
[/php]
-
Grazie TheDarkita,
il file ce l'ho pure io, solo che non ho capito dove devo inserire i dati di ogni utente...quindi password e user.....non è che mi pioi fare un'esempio?
grazie stek
-
L'esempio è proprio quello invece di nomeutente1, devi mettere il nome utente dell'utente 1, in password1 la password dell'utente 1, e cosi via...
-
Grazie TheDarkita,
ora provo...!
-
Ciao TheDarkita,
ho provato lo script on-line una volta modificato il file utenti.php,sono andato a vedere se mi faceva entrare ma mi dice sempre:Nome utente o password errati...Che devo fare? Posto il codice...Login.php:
[php]<?php
session_start();
if(isset($_POST['user'])){
include('utenti.php');
$c = count($utenti);
$i = 0;
while($i < $c && $utenti*['nomeutente'] != $user && $utenti*['password'] != $pass) $i++;
if($i < $c)
{
$_SESSION['login'] = $utenti*['id'];
// reindirizzo l'utente
header('Location: protetta.php');
exit;
}
// se non esiste da l'errore
else
die ('Nome Utente o Password errati');}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>
</head>
<body>
<form action="" method="post">
<input name="user" type="text" id="user" value="Nome Utente" onFocus="if(this.value=='Nome Utente') this.value='';" /><br />
<input name="pass" type="password" id="pass" value="Password" onFocus="if(this.value=='Password') this.value='';" /><br />
<input name="login" type="submit" value="Login" /><br />
</form>
</body>
</html>[/php]utenti.php
[php]<?php
$utenti[]=array('id' => 1, 'nomeutente' => 'stefano', 'password' => 'stefano');
$utenti[]=array('id' => 2, 'nomeutente' => 'nomeutente2', 'password' => 'password2');
?> [/php]Protetta.php:
[php]<?php
session_start();
fopen("utenti.php","a+");
if(isset($_SESSION['login']))
echo 'Contenuto privato';
else
echo 'Contenuto pubblico';
?>
[/php]Mi puoi dare una mano TheDarkita??
Grazie Stek=)=)
-
Ciao TheDarkita,
sto provando a capire dov'è l'errore, ma non lo sto riuscendo a trovare...
Mi potresti dare una dritta???
Grazie Stek