• ModSenior

    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&agrave; 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 &egrave;: '.$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. 😉


  • User

    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


  • User

    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.


  • User

    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


  • ModSenior

    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. 😄


  • User

    scusate ma giusto per finire bene un discorso... i vari codici per recuperare la password sono ultimati? funzionanti?


  • User

    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.


  • User Attivo

    Grande Theda 😉

    Come faccio a vedere, una volta che si registrano gli utenti, chi si è registrato?
    Grazie! 🙂


  • ModSenior

  • User Attivo

    Ti ringrazio, funziona :):):)

    Ora ho questo problema :mmm:

    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!


  • ModSenior

    Verifica che non hai incollato il codice a partire dalla riga 2 del file, perchè potrebbe esserci un output prima del session_start.


  • User Attivo

    Io ho incollato precisamente 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]


  • User Attivo

    Quell'errore è dovuto all'apertura della sessione [PHP]session_start()[/PHP] che non si trova alla prima riga della pagina se la tua sessione si trova nel file config metti il commento dopo l'include oppure metti come prima cosa [PHP]<?php
    session_start();
    //altro codice php
    ?>
    [/PHP]


  • User Attivo

    Grazie molte! Provo 🙂


  • User

    For TheDarkita e Utenti di GT, Heeeeeeeeeeelp!!!!!
    2 problemi

    il primo:
    vorrei creare una pagina di upload di notizie con DB (formati diversi: pdf, doc, jpg, ecc) che verrà chiamata upnews.php (già in cartella MU Menù Utente; disponibile solo per utenti registrati con gestione delle dimensioni del file), e successivamente visibile per tutti gli utenti anche non registrati (news.php NB: stà nella directory principale del sito e se è possibile con un'impaginazione di 3 notizie per pagina) ed una pagina di gestione (cancellazione della notizia) da parte dell'amministratore del sito (NB: la pagina vuota è già creata del_news.php (stà nella cartella Admin)
    Voglio farvi presente che il DB utenti è già creato, praticamente mi serve il Db per le news.

    il secondo problema:
    TheDarkita forse non ho capito bene come devo fare per visualizzare il nome dell'utente (user) dopa che ha eseguito il login, praticamente cosà dovrei mettere nella parte del codice php e cosa nella parte del body?

    Abbiate pazienza se sono un pò di pretese, ma devo dire che sono veramente negato nel PHP, e ringrazio anticipatamente per le risposte.


  • ModSenior

    Dopo che aggiungi questo:
    http://www.giorgiotave.it/forum/scripting-e-risorse-utili/83033-tutorial-area-privata-10.html#post650023
    Ti basta fare:
    [php]
    <?php echo $_SESSION['user']; ?>
    [/php]


  • User

    Per adesso grazie TheDarkita.
    Spero che mi aiuterai anche per la pagina delle news, quando puoi.


  • User Attivo

    Niente ragazzi, mi funzionava ora non funziona più, mi dà

    Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\programmi\easyphp1-8\www\login.php:1) in c:\programmi\easyphp1-8\www\config.php on line 3

    Ho provato a mettere session_start() nella prima riga come mi avevate detto ma nulla :bho:
    Ho provato a togliere i commenti ma nulla :bho:
    Quando clicco per registrarmi va tutto ok ma quando clicco per loggarmi mi da questo Warning

    Config.php
    [PHP]<?php
    session_start();

    // Dati connessione al database
    $db_host = 'localhost'; // Host - solitamente localhost
    $db_utente = 'root'; // Nome utente del Database
    $db_password = ''; // Password del Database
    $db_nomedb = ''; // Nome del Database
    // Effettua la connessione al database
    $dbh=mysql_connect ($db_host, $db_utente, $db_password) or die ('Errore nella stringa di connessione al database: '.mysql_error());
    mysql_select_db($db_nomedb);
    ?>[/PHP]

    Login.php
    [PHP]<?php
    // Includo la connessione al database
    require('config.php');

    // Se il modulo viene inviato...
    if(isset($_POST['login']))
    {

    // Dati Inviati dal modulo
    $user = (isset($_POST['user'])) ? trim($_POST['user']) : ''; // Metto nella variabile 'user' il dato inviato dal modulo, se non viene inviato dò di default ''
    $pass = (isset($_POST['pass'])) ? trim($_POST['pass']) : ''; // 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()) {
    $user = addslashes($user);
    $pass = addslashes($pass);
    }

    // Crypto la password e la confronto con quella nel database
    $pass = md5($pass);

    // 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'];

    // reindirizzo l'utente
    header('Location: privata.php');
    exit;
    }
    // se non esiste da l'errore
    else
    die('Nome Utente o Password errati');
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htt">
    <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]

    Grazie!


  • ModSenior

    Hai controllato come ti ho detto che invece di incollare a partire dalla prima riga del file hai incollato a partire dalla seconda riga del file?


  • User

    Olla c'è qualcuno in casa?

    TheDarkita, ok per visualizzare il nome dell'utente online tutto ok !!
    grazie.
    Adesso possiamo continuare il tutorial? Tipo invia di news da parte degli utenti registrati e che poi tutti gli utenti (registrati o meno) possono vedere. E nella possibilità che le news sono in diversi formati (doc, pdf, jpf ecc..) ed impaginati per 3 o 4 per pagina.
    In attesa ti ringrazio, sempre ottime spiegazioni.