- Home
- Categorie
- Coding e Sistemistica
- PHP
- [Tutorial] Area privata
-
@Thedarkita said:
[***]
Ok, domani provo e ti faccio sapere
Grazie mille per l'aiuto, sei stato disponibilissimo (ed io rompiscatole)
-
Figurati.
Se hai problemi e/o dubbi chiedi pure.
-
Sera!
Mi chiedevo se è possibile modificare lo script in modo da sostituire l'uso del database utilizzando fogli php che prendano le informazioni come fossero un database, utilizzando magari degli array?
Se possibile farlo, in questo modo perderebbe molto in sicurezza?
-
I tempi di esecuzione, con una mole di dati che non sia di pochi utenti, diventano alti quindi le prestazioni tendano a peggiorare moltissimo con l'incremento dei dati da gestire, oltre a ciò anche la gestione diventa più complicata.
Oggi come oggi, un database te lo danno ovunque per pochi euro, personalmente per risparmiare qualche euro non mi complicherei la vita.
-
Non per niente, fosse per quello..
E' che pensavo invece ad un sistema comunque sicuro, quindi simile a questo, ma senza database perchè appunto dovrebbe permettere l'accesso a poche personeIn pratica mi servirebbe un sistema di accesso sicuro, poi il sistema di registrazione potrei anche eliminarlo, visto che l'accesso sarebbe per pochi..
Penso di capire dalla risposta che oltre al fatto della lentezza con molti membri (che non riguarda il mio scopo), la sicurezza rimane la stessa?
-
Alla fine dal punto di vista sicurezza non cambia praticamente nulla.
Tieni presente che comunque se un giorno devi aggiungere un campo, nel database fai subito con i file l'operazione diventa lunghetta.
Puoi usare comunque il database con poche persone.
-
Ok!
Allora, prendendo come esempio io tuo script provo ad abbozzare io, sperando di non dire troppe niubbate..Mi servirà un foglio che contiene i dati di ogni utente, chiamiamolo utenti.php
Svoglio mettere le tre informazioni "id" "user" e "pass" devo fare array tipo:
[php]$utente1=array("id1","user1","pass1");
$utente2=array("id2","user2","pass2");[/php]Con uno per ogni riga per poi cambiare la riga di richiamo al database
[php]require('config.php');[/php]
Con:
[php]fopen("directory/utenti.php","a+");[/php]In modo che li divida uno per ogni riga, o sto uscendo fuori strada?
-
Direi sia meglio aprire una discussione apposita per ciò, con questo tutorial centrerebbe ben poco, e quindi finiremmo offtopic.
-
Va bene,allora provo a riportare la risposta su un nuovo topic sempre in area php..
Discussione: [Area privata senza database]
-
Ciao a tutti,
dopo mesi di girovagare ho trovato questo forum e grazie a Thedarkita sono riuscito a farmi la mia bella area riservata, scaricato il codice, modificato e implementato secondo le mie esigenze funziona tutto correttamente.
Però anche io ho la mia bella gatta da pelare, ossia il recupero dei dati; scaricato e studiato il tutorial (che mi funziona correttamente), invece di far reimpostare la password, vorrei che inserendo la mail, mi arrivassero i miei dati, quelli con cui mi sono iscritto, ossia nome utente e password.
Praticamente ho modificato la pagina "recupero.php" ed eliminato la pagina "reset.php" di modo che mi arrivi solo una mail con dentro user e pass; la mail ariva, ma senza i dati.Questo è il codice da me modificato:
[PHP]<?php
// Includo la connessione al database
require('config.php');// Se il modulo viene inviato...
if(isset($_POST['recupera']))
{
// Dati Inviati dal modulo
$mail = (isset($_POST['mail'])) ? trim($POST['mail']) : ''; // Metto nella variabile 'mail' 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())
$mail = addslashes($mail);
if(!eregi("^[a-z0-9][.a-z0-9-]+@([a-z0-9][0-9a-z-]+.)+([a-z]{2,4})", $mail))
die('Email non valida');
else
{
// Cerco se c'è un utente registrato con questa email
$query = mysql_query("SELECT user AND pass FROM utenti WHERE mail = '$mail' LIMIT 1");// L'utente esiste? if(mysql_num_rows($query) == 0) die('Nessun utente registrato con questa email'); // Inserisco i dati dell'utente recuperati mediante la query in un array $recupero = mysql_fetch_array($query); // Inviamo l'email all'utente $message = 'Per modificare la password del Suo account deve visitare il seguente link:'.$recupero.' '; // Header dell'email, per mandarla in formato html $headers = "From: nome sito <[email protected]>\r\n"; $headers .= "Reply-To: [email protected]\r\n"; $headers .= "Return-Path: [email protected]\r\n"; $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; // Invio L'email mail($mail, 'Reset password - Tutorial Area Privata', $message, $headers); die('Le abbiamo inviato un email contenente le istruzioni per il reset della password, controlli la sua casella email!');
}
}
?>[/PHP]
-
Dimenticavo.
So bene che una pass criptata non può essere recuperata, ma nel mio db le password vengono inserite in chiaro, non ho bisogno della criptatura.
-
Se vuoi che invi i dati devi modificare questa parte:
[php]// Inviamo l'email all'utente
$message = 'Per modificare la password del Suo account deve visitare il seguente link:'.$recupero.' ';[/php]Con questo
[php]// Inviamo l'email all'utente
$message = 'Il Suo Username è '.$recupero['user'].' e la sua Password '.$recupero['pass'].' ';[/php]
-
Nulla da fare, non funziona la mail mi arriva con questo testo:
"Il Suo Username è e la sua Password"
Mi sorge il dubbio che sia sbagliata la query al database, può essere?
-
Ah si,
devi mettere cosi:
[php]// Cerco se c'è un utente registrato con questa email
$query = mysql_query("SELECT user, pass FROM utenti WHERE mail = '$mail' LIMIT 1");[/php]
-
Grande RCayla!
Sei stato gentilissimo, ora funziona tutto alla perfezione, ora non mi rimane che sistemare il codice giusto nella sua paginetta e sono a posto.
Ancora grazie!
-
Salve a tutti.
Innanzi tutto volevo fare i complimenti per questo tutorial/topic non solo al bravissimo e pazientissimo thedarkita ma anche a tutti coloro che ne stanno aggiungendo un po del loro...BRAVI davvero!!!
Partendo dal presupposto che ho una conoscenza molto base di php, sto cercando di riadattare questo lavoro alle mie esigenze. In particolare, sto adottando la soluzione di brinchetto, con utilizzo di pass non criptata. Ho realizzato una semplice pagina di recupero username e password in questo modo:
recupero.php
[php]
<?php
// Includo la connessione al database
require('config.php');// Se il modulo viene inviato...
if(isset($_POST['recupera']))
{
// Dati Inviati dal modulo
$mail = (isset($_POST['mail'])) ? trim($POST['mail']) : ''; // Metto nella variabile 'mail' 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())
$mail = addslashes($mail);
if(!eregi("^[a-z0-9][.a-z0-9-]+@([a-z0-9][0-9a-z-]+.)+([a-z]{2,4})", $mail))
die('Email non valida');
else
{
// Cerco se c'è un utente registrato con questa email
$query = mysql_query("SELECT user, pass FROM utenti WHERE mail = '$mail' LIMIT 1");// L'utente esiste? if(mysql_num_rows($query) == 0) die('Attenzione: nessun utente registrato con questa email<p><a href="javascript:history.back()">Indietro</a>'); // Inserisco i dati dell'utente recuperati mediante la query in un array $recupero = mysql_fetch_array($query); // Inviamo l'email all'utente $message = 'Il Suo Username è '.$recupero['user'].' e la sua Password '.$recupero['pass'].' '; // Header dell'email, per mandarla in formato html $headers = "From: nome sito <[email protected]>\r\n"; $headers .= "Reply-To: [email protected]\r\n"; $headers .= "Return-Path: [email protected]\r\n"; $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; // Invio L'email mail($mail, 'Recupero password', $message, $headers); die('<b>Le abbiamo inviato un email contenente il suo Username e la sua Password, controlli la sua casella email!<b><p><a href="index.php">Indietro</a>');
}
}
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "---.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="---.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Recupero dati</title>
</head><body>
<form action="" method="post">
<input name="mail" type="text" id="mail" value="Em@il" onfocus="if(this.value=='Em@il') this.value='';" /><br />
<input name="recupera" type="submit" value="Recupera dati" /><br />
</form>
</body>
</html>
[/php]Va tutto ok con FireFox, problema (stranamente) con ie7. Infatti testando ho notato che se invece di cliccare sul tasto "Recupera dati" gli dò Invio, come capita spesso, questo resetta semplicemente il modulo dando l'impressione di avere comunque inviato la richiesta, cosa che in realtà non avviene...
Che ne pensate? Ho tralasciato qualcosa io?
Inoltre, come è possibile trasformare nella mail i caratteri tipo è???
Grazie e alle prossime (sicure) domande...
Ciao
-
Ciao gianlucambm,
ti irngrazio per i complimenti.
Per il problema con Internet Explorer al posto di:
[php]
if(isset($_POST['recupera']))
[/php]
Metti:
[php]
if(isset($_POST['mail']))
[/php]Per quanto riguarda invece i caratteri, puoi inserire i caratteri direttamente sotto forma di entità html, per la "è" dovresti usare è altrimenti puoi passare il testo nella funzione htmlentities prima di inviare l'email. Nell'ultimo caso verranno però sostituiti anche i tag html.
-
Yesssss....!!!
Mi sa che ti romperò le scatole mooooooolto spesso...:D...è una minaccia...
Grazie mille di nuovo
Ciao
-
@Thedarkita said:
Nella variabile di sessione hai l'id dell'utente, quindi utilizzi quello per recuperare la sua pagina.
Prima di tutto volevo salutare e ringraziare tutti per l'impegno e la disponibilità, a seguire avrei piacere di capire questo passaggio, sono alle primissime armi ovviamente, ho seguito il post con attenzione, ho fatto delle prove ma non riesco ad andare avanti.
Brevemente, non riesco a capire come tradurre in codice che l'utente A quando accede al sito deve e può vedere solo il file (o la cartella) A, e così per tutti gli utenti.Grazie infinite a chi mi illuminerà.
Alessandro
-
Ciao allcolors62,
supponiamo di voler rendere accessibile il file a.php all'utente tizio che nel nostro database ha ID=1.
Il nostro file a.php dovrebbe iniziare cosi:
[php]
session_start();
if($_SESSION['login'] != 1)
{
header('Location: /');
exit;
}
[/php]
In questo modo controlli che l'id dell'utente sia 1, se non lo è lo reindirizzi all'index.