- Home
- Categorie
- Coding e Sistemistica
- PHP
- [Tutorial] Area privata
-
Grazie mille Thedarkita, questo tutorial è fatto molto bene ed è veramente chiaro...!!
Adesso me lo personalizzo un attimo...
Ancora complimentoni e grazie!
-
Ottimo script di login Thedarkita, ho utilizzato con successo il tuo script modificando qualche aspetto senza comprometterlo e funziona alla grande, ma adesso mi piacerebbe avere uno script basato su quello del "Login" che possa recuperare la password all'utente distratto, anche con un invio email e possibimente da testare in locale con easyphp.
grazie
-
Ciao,
Per quanto rigaurda farlo funzionare in locale devi sistemarmi l'smtp del webserver.
Per quanto riguarda il recupero password, la password non può essere recuperato poichè viene salvato l'hash md5 nel database, puoi inviare un email che permetta di modificare la password.
Solitamente ciò si fa nel metodo seguente:- Creazione tabella richieste di recupero(3 campi : id utente, codice, data)
- Quando inizio la procedura, inserisco nella tabella l'id utente e un codice univoco, inivio un email all'utente con un link a reset.php?idutnte=ID&code=CODICEUNIVOCO
- Quando apro il collegamento dell'email viene generata una password in modo casuale e viene fatto un update del record dell'utente, e viene spedita un email contente la nuova password.
-
TheDarkita, qua per me è già tabù, tieni conto che di php sono piuttosto negato. Non è che mi puoi inserire un esempio (tutorial) qua? ossia la query della tabella nel database e lo script php completo, te ne sarei grato veramente.
grazie
-
Ciao,
Per il momento non ho moltissimo tempo, quindi a poco a poco vediamo di fare il recupero password
Database:
CREATE TABLE `utenti_recupero` ( `r_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `r_utente` INT NOT NULL , `code` TEXT NOT NULL ) ENGINE = MYISAM ;
-
wow interessante!
-
Grazie per adesso Thedarkita, comincio per creare il database, e vedo se incomincio a capire come dovrò impostare lo script, ci raggionerò sopra! Almeno ci provo !!!! In attesa del tuo script , sicuramente funzionale come quello del login.
-
Ecco un altro pezzo, che si occupa di inserire nella tabella richiesta, non ho provato se funziona correttamente.
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_recupero = mysql_query("SELECT id FROM utenti WHERE mail = '$mail' LIMIT 1");// L'utente esiste? if(mysql_num_rows($query_recupero) == 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_recupero); // Chiave random con un semplice algoritmo $tempo = microtime(); // Richiamo la funzione microtime $tempo = explode(' ', $tempo); // Divido in un array utilizzando il separatore " " $tempo[0] = floatval($tempo[0]); // Converto in tipo float $tempo[1] = floatval($tempo[1]); // Converto in tipo float $chiave = $recupero['id'].'-'.md5($tempo[0] + $tempo[1]); // Chiave unica per ogni utente // Query per l'inserimento nel database della richiesta di recupero $strSQL = "INSERT INTO utenti_recupero (r_utente,code)"; $strSQL .= "VALUES('{$recupero['id']}', '$chiave')"; mysql_query($strSQL) OR die("Errore 001, contattare l'amministratore ".mysql_error()); // Inviamo l'email all'utente $message = 'Per modificare la password del Suo account deve visitare il seguente link:<br><a href="http://www.sito.ext/recupero.php.php?code='.$chiave.'">Resetta password</a>'; // Header dell'email, per mandarla in formato html $headers = "From: NomeSito <[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!');
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Recupero password</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="Reimposta Password" /><br />
</form>
</body>
</html>
[/php]
-
grazie Darkita, adesso ci provo, se qualcosa non va te lo faccio sapere; THANK !!!
-
Cia Thedarkita forse c'è un errore nello script
QUA: $message = 'Per modificare la password del Suo account deve visitare il seguente link:<br><a href="h..p://....sito.ext/recupero.php.php?code='.$chiave.'">Resetta password</a>';2 volte l'estensione php
Poi suppongo che in questa porzione di script vanno cambiate le coordinate del mio sito, giusto?
$headers = "From: NomeSito <[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";================================
Se come penso allora possiamo continuare il corso !!!!!Adesso come preparo la pagina email contenente le istruzioni per il reset della password inviata all'utente, e che ci devo mettere dentro?
Sempre ottime spiegazioni !!!!
Io spero che in futuro continui con altri tutoriali del tipo, Guestbook, invio News in diversi formati, video e foto da uploadare, ecc.
Ti posso garantire che seguirò con molto attenzione, visto che sei l'unico che spiega dettagliatamente ed in italiano questi script.
-
Si ho sbagliato il file, dovevamo mettere reset.php
[php]
$message = 'Per modificare la password del Suo account deve visitare il seguente link:<br><a href="http://www.sito.ext/reset.php?code='.$chiave.'">Resetta password</a>';
[/php]Si gli headers devi sostituirli con il tuo indirizzo email, per evitare che vengano messe in posta indesiderata se l'email viene inviata da miosito.ext è preferibile usare un indirizzo del tipo [email][email protected][/email].
Per quanto riguarda la pagina reset.php
[php]<?php
// Includo la connessione al database
require('config.php');// Prelevo il codice trasmesso come variabile GET, il cotnenuto della variabile è nell'url della pagina per questo facilmente modificabile da tutti e bisogna fare opportuni controlli quando la utilizziamo
$code = $_GET['code'];// Filtro i dati inviati se i magic_quotes del server sono disabilitati per motivi di sicurezza if (!get_magic_quotes_gpc()) $code = addslashes($code); // Cerco se c'è un utente registrato che ha effettuato la richiesta ed è stato assegnato questo codice $query_recupero = mysql_query("SELECT r_utente FROM utenti_recupero WHERE code = 'code' LIMIT 1"); // La richiesta non esiste if(mysql_num_rows($query_recupero) == 0) die('Link non valido, i motivi potrebbero essere i seguenti:<br />- Hai già modificato la tua password<br />- Hai seguito un link errato'); // Inseriscol'id dell'utente recuperato mediante la query in un array $recupero = mysql_fetch_array($query_recupero); // Creo una password di 8 caratteri alfanumerici $randomcode = ''; for($x=1; $x<=8; $x++) $randomcode = (($x%2 == 0) ? $randomcode.rand(0,9) : $randomcode.chr(rand(97,122))); // Facciamo un ciclo da 1 a 8, per generare 8 caratteri, sfruttiamo la variabile contatore controllando se è pari o dispari. Se è pari aggiungiamo alla stringa un numero, se è dispari agiungiamo un carattere dell'alfabeto. Avremo cosi in $randomcode una stringa del tipo a1b2c3d4 // Nel database per motivi di sicurezza inseriamo le password in hash md5, quindi la convertiamo in md5 per poter effettuare l'update nel database $hashrandomcode = md5($randomcode); // Aggiorno la password nel database mysql_query("UPDATE utenti SET pass = '$hashrandomcode' WHERE id = '{$recupero['id']}' LIMIT 1") or die(mysql_error()); // Inviamo l'email all'utente $message = 'Gentile Utente, Abbiamo provvduto a modificare la sua password.<br />La sua nuova password è: '.$randomcode; // Header dell'email, per mandarla in formato html $headers = "From: NomeSito <[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 un email contenente la Sua nuova password, controlli la Sua casella email!');
?>
[/php]
Non ho testato nemmeno questo pezzo, se trovi errori li sistemiamo :).
Pian paino arriveranno gli altri tutorial.
-
Io spero che in futuro continui con altri tutoriali del tipo, Guestbook, invio News in diversi formati, video e foto da uploadare, ecc.
Ti posso garantire che seguirò con molto attenzione, visto che sei l'unico che spiega dettagliatamente ed in italiano questi script.io quoto sto seguendo passivamente tutta la conversazione.. =D
-
Ok BluDragon !!!
Sicuramente TheDarkita (tempo permettendo, in quanto mi diceva che anche lui ha degli impegni) ci insegnerà molte cose utilissime, e potremmo dire che veramente questa volta una persona come TheDarkita ci ha spiegato per filo e per segno il php.
Ragazzo veramente in gamba !!!
Ed io personalmente invito gli utenti di questo sito (che non hanno praticità con il php) a seguire questi tutorials.
Penso che sarò io stesso a chiedere a TheDarkita molte soluzioni per impostare una pagina degna e semplice da fare con il codice più utilizzato attualmente.
-
Ciao TheDarkita; se ci sei batti un colpo !!!!
Stiamo aspettando gli altri tutorials, tipo un guestbook o una pagina per le news mandati dagli utenti in diversi formati (doc, pdf, ecc).
quanto pagine di upload di file, video, news, foto
Ah inoltre se mi dici come si fà a vedere l'username dell'utente registrato su le pagine php dopo che si sono loggati?
ciao
-
Per quanto riguarda il nome, le soluzioni sono 2:
- La più semplice è mettere il nick in una variabile di sessione.
- Quella che ti consente di poter fare anche operazioni è fare un query e recuperarti l'intero record riguardante l'utente loggato.
Se devi esclusivamente stampare il nome utente la prima soluzione consuma meno risorse ed è 1 riga di codice, ti basta aggiungere sotto:
[php]
$_SESSION['login'] = $login['id'];
[/php]questo
[php]
$_SESSION['user'] = $user;
[/php]Per quanto riguarda gli altri tutorial, per il momento non riesco a trovare un minuto libero, speriamo di riuscire ad avere un pò di tempo libero prossimamente. Ma ne trovi comunque alcuni in questa sezione.
PS non mi fate troppi complimenti che mi emoziono e divento rosso.
-
scusate ma giusto per finire bene un discorso... i vari codici per recuperare la password sono ultimati? funzionanti?
-
Ok TheDarkita, aspettiamo i prossimi tutorials, anche se come dici tu ci sono altri tutorials in questa sezione che vanno sicuramente bene, ma devo dire che se seguo le tue istruzioni dettagliate non rischio di perdermi !!!! Ti spieghi molto bene e per me è meglio seguire te che perdermi nei meandri di diverse discussioni senza poi averci capito niente. Ah spero che prima della fine di giugno riusciamo a finire così posso finalmente mettere in rete il sito!!!!!
Invece per BlueDragon89 , ho creato la mia pagina di recupero password, l'ho testato ma non avevo modificato l'ini (in quanto stò testando in locale) ma penso che se lo provi in rete non ci sono problemi.
-
Grande Theda
Come faccio a vedere, una volta che si registrano gli utenti, chi si è registrato?
Grazie!
-
Ciao Fabrizio23,
Ne avevamo parlato precedentemente in pagina 3:
http://www.giorgiotave.it/forum/scripting-e-risorse-utili/83033-tutorial-area-privata-3.html#post588843
-
Ti ringrazio, funziona :):):)
Ora ho questo problema
Quando facciamo il login viene visualizzata la scritta "Pagina privata!" , bene io l'ho linkata con il mio sito. Il link funziona però mi scrive questo avvertimento:
session_start(): Cannot send session cache limiter - headers already sent (output started at c:\programmi\easyphp1-8\www\privata.php:1) in c:\programmi\easyphp1-8\www\config.php on line 3
Il codice dove ho messo il link è questo:
[PHP]<?php
// Includo la connessione al database
require('config.php');
// Se non è stata definita la variabile manda l'utente alla homepage
if(!isset($_SESSION['login']))
{
header('Location: index.php');
exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ttp://ww.w3.ouiirg.dtd">
<html xmlns=htp://ww.w3.org/1999/xt>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Area privata</title>
</head>
<body>
<a href="htt...miosito">Pagina privata </a><br />
<br />
<br />
<a href="logout.php">Logout</a><br />
</body>
</html>[/PHP]
Grazie!