• User Attivo

    Il login è a cookie?


  • User

    Ciao The Darkita ho seguito tutto come hai descritto in precedenza
    Se prima vedevo il nome dell'utente che aveva effettuato il login adesso per non so quale motivo non va più e mi da un errore del genere[HTML]
    [CENTER]Salve
    Notice: Undefined index: user in C:\Programmi\EasyPHP 3.0\www\privata.php on line 551
    [/CENTER]
    [/HTML]

    il codice è questo[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'];
        $_SESSION['user'] = $user;
    
        // reindirizzo l'utente
        header('Location: privata.php');
        exit;
    }
    // se non esiste da l'errore
    else
        header('Location: error_login.php');
    

    }
    // Se non è stata definita la variabile manda l'utente alla homepage
    if(!isset($_SESSION['login']))
    {
    header('Location: utente_non_registrato.php');
    exit;
    }
    ?>
    [/PHP]

    e tra il tags body il codice è questo lo script incriminato alla riga 551:

    [PHP]<div id="Fieldset_b">
    <fieldset>
    <legend class="Stile26">Area Privata Utenti Registrati</legend>
    <p align="center" class="Stile2">Salve<?php echo $_SESSION['user']; ?></p>
    <p align="center" class="Stile2">In questa pagina puoi Uploadare i tuoi files o scrivere sul Guestbook.</p>
    <p align="center" class="Stile2">Usa le sezioni del tuo interesse nel riquadro in basso.</p>
    <p align="center" class="Stile2"> </p>
    <p align="center" class="Stile2"> </p>
    </fieldset>
    </div>[/PHP]


  • ModSenior

    Il login è con le sessioni.

    Dopo gli header location metti exit;
    Dovresti modificare questo:
    [php]
    else
    header('Location: error_login.php');
    [/php]
    in questo:
    [php]
    else
    {
    header('Location: error_login.php');
    exit;
    }
    [/php]

    Altrimenti viene si mandato l'header al browser, ma vengono inviati anche output se ci sono successivamente, e in alcuni browser(Internet Explorer) può non avvenire il redirect.

    Nel file privata.php hai messo l'include del config.php?


  • User

    Ok funziona nuovamente grazie TheDarkita.
    Tutto rimesso a posto compreso l'exit dopo gli headers
    Ah volevo dirti ho seguito come nel tuo tutorial:
    [PHP]require('config.php');[/PHP]
    per la connessione al DB
    e non
    [PHP]include('config.php');[/PHP]
    come hai menzionato
    e và come un treno, (finchè non combino qualche ca..no 😞 )

    Curiosità della serata:
    che differenza cìè tra include e require?
    Tieni conto che l'inglese (almeno quello) lo capisco alla perfezione, ma nel php che funzioni hanno l'uno dall' altro?
    e come si utilizzano e in quale corcostanza?
    Anticipate Thank (ossia grazie anticipatamente).


  • ModSenior

    La differenza è che se usi require lui include il file come il normale include, però se non lo trova termina l'esecuzione dello script.
    Utilizzando l'include invece se non trova il file ti viene mostrato un errore ma lo script continua la propria esecuzione.

    Se mancando il file possono succedere effetti indesiderati si utilizza il require, ad esempio in questo caso se manca il file e utilizzi include le sessioni non funzionano ciò porta ad effetti indesiderati.


  • User

    a me manda la mail per il cambio della password con il link resetta password ma quando ci clicco si ferma a questo punto:

    Link non valido, i motivi potrebbero essere i seguenti:

    • Hai già modificato la tua password
    • Hai seguito un link errato

    do un occhiato sul Database ed effettivamente registra bn il code dove sto tralasciando il particolare?

    grazie e a presto!


  • ModSenior

    Ciao BlueDragon89,

    Dovresti controllare che il link in cui vai sia corretto...


  • User

    ma piu' che altro non capisco come fa lui a capire che mi sto spostando su un'altro database?


  • ModSenior

    Che significa ti stai spostando su un altro database?


  • User

    si in effetti non ho capito perche' ho fatto le varie tabelle su database diversi...niente lo copio dall'altra parte e vedo se va..


  • ModSenior

    Le tabelle devi farle tutte sullo stesso database ovviamente...
    Fammi sapere se hai problemi. 🙂


  • User

    Scusami le avevo fatte correttamente sullo stesso database ma non vanno... si ferma sempre qui:

    Link non valido, i motivi potrebbero essere i seguenti:

    • Hai già modificato la tua password
    • Hai seguito un link errato

    Ho dato un occhiata ai link e mi sembrano corretti e completi..


  • ModSenior

    Cosi senza vedere non saprei dirti.
    L'errore è comunque sicuramente che l'url a cui vai, non corrisponde a quello dove dovresti andare.

    Mi sono accorto di aver fatto un errore, la pagina reset.php modificatela cosi:
    [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');
    

    // La richiesta esiste, elimino la richiesta e procedo a reimpostare una nuova password
    else
    mysql_query("DELETE FROM utenti_recupero WHERE code = 'code' LIMIT 1");

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


  • User

    Allora... l'unico link e' nel file recupero.php giusto?

    // Inviamo l'email all'utente
    $message = 'Per modificare la password del Suo account deve visitare il seguente link: (e qui il link è corretto anche con cartelle giustissimo)


  • ModSenior

    Quello che intendo io per correto è:

    Supponendo che il link che arriva all'email è: /recupero.php.php?code=1234567890, controllare che quando premi il link ti mandi alla pagina /recupero.php.php?code=1234567890.
    Controllare che nella tabella del database il record contenga come code 1234567890.


  • User

    Grazie per la specifica non avevo ben guardato quello..il link dall'email è comunque corretto e il codice confrontato con .txt database/pagina web è identico


  • ModSenior

    Se stai provando online, mandami un messaggio con il link.


  • User

    Ciao TheDarkita, nel tuo tutorial di registrazione e login utente non parli della cancellazione dell' utente.
    Nel caso che l'utente registrato vuole cancellarsi come utente registrato e per farlo deve inserire ad esempio la mail con cui si è registrato e l'username. Come dovrebbe essere impostata la pagina che possiamo chiamare "self_delete" che va ad eliminare i record nel Db?
    grazie.


  • ModSenior

    Ho scordato un $ nella pagina reset.php per questo non funzionava.
    La pagina reset.php corretta è:
    [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');
    

    // La richiesta esiste, elimino la richiesta e procedo a reimpostare una nuova password
    else
    mysql_query("DELETE FROM utenti_recupero WHERE code = '$code' LIMIT 1");

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


  • User

    Mmm.... Ma sai che mi da ancora lo stesso problema? XD