• ModSenior

    Solitamente viene chiesto solo email e password, inserire il nome utente mi sembra superfluo.
    La password l'abbiamo inserita come hash md5, pertanto devi sostiture questo:
    [php]
    $query = mysql_query("SELECT id FROM utenti WHERE mail = '$mail' AND pass = '$pass' LIMIT 1");
    // Controllo se la password sia giusta
    if(mysql_num_rows($query) == 0)
    die('Password e/o indirizzo email non valido');
    [/php]
    Con questo:
    [php]
    $pass = md5($pass);
    $query = mysql_query("SELECT id FROM utenti WHERE mail = '$mail' AND pass = '$pass' LIMIT 1");
    // Controllo se la password sia giusta
    if(mysql_num_rows($query) == 0)
    die('Password e/o indirizzo email non valido');
    [/php]


  • User

    Ok TheDarkita, risolto il problema per la cancellazione dell'utente, grazie.

    Ma sto testando in locale il codice per il recupero/sostituzione della pass come da te descritto nel tuo ultimo post in merito al recupero, purtroppo l'errore è sempre:
    [HTML]Notice: Undefined index: code in C:\Programmi\EasyPHP 3.0\www\recupero_password.php on line 6
    Link non valido, i motivi potrebbero essere i seguenti:

    • Hai già modificato la tua password
    • Hai seguito un link errato[/HTML]
      appena apro la pagina.

    Preciso che sto testando in locale.
    ecco il codice che avevi inserito:
    [PHP]<?php
    // Includo la connessione al database
    require('config.php');
    // Prelevo il codice trasmesso come variabile GET, il contenuto della variabile è nella 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 utenti_recupero.r_utente,utenti.mail FROM utenti_recupero INNER JOIN utenti ON utenti.id=utenti_recupero.r_utente WHERE code = '$code' LIMIT 1") or die(mysql_error());
    
    // 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['r_utente']}' LIMIT 1") or die(mysql_error());
    // Inviamo l'email all'utente
    $message = 'Gentile Utente, Abbiamo provveduto a modificare la sua password.<br />La sua nuova password &egrave;: '.$randomcode;
        // Header dell'email, per mandarla in formato html
        $headers = "From: Security Now <Nome [email protected]>\r\n";
        $headers .= "Reply-To: Nome [email protected]\r\n";
        $headers .= "Return-Path: Nome [email protected]\r\n";
        $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
        // Invio L'email
        mail($recupero['mail'], 'Reset password -  Area Privata', $message, $headers);
    die('Le abbiamo inviato un email contenente la Sua nuova password, controlli la Sua casella email!');
    

    ?> [/PHP]


  • ModSenior

    Sostituisci questo:
    [php]
    $code = $_GET['code'];
    [/php]

    In questo:
    [php]
    $code = ((isset($_GET['code'])) ? $_GET['code'] : '');
    [/php]


  • User

    Non funge ancora la sostituzione della password
    Ho cambiato con :
    [PHP]$code = ((isset($_GET['code'])) ? $_GET['code'] : '');[/PHP]
    ma come prima all'apertura, solo con la scritta diversa:
    [HTML]Link non valido, i motivi potrebbero essere i seguenti:

    • Hai già modificato la tua password
    • Hai seguito un link errato[/HTML]

  • ModSenior

    Io non capisco come fa a funzionare ad un utente si e ad uno no. 😄
    Comunque quell'errore lo dava perchè nell'url in cui sei tu la variabile GET code non veniva passata, l'url dove lo hai preso? Manualmente?


  • User

    Mica ho capito cosa intendi per "l'url dove lo hai preso? Manualmente?"
    Be se intendi l'url del sito o dell' email? allora sono fittizi e la prova in locale.
    Se mi spieghi meglio, forse potrei darti più delucidazioni.
    grazie.


  • ModSenior

    L'url che visiti tu sembrerebbe sia pagina.php, e non pagina.php?code=MIOCODICE pertanto viene detto che il link non è valido.


  • User

    Dunque come devo risolvere?


  • ModSenior

    A quale url accedi?


  • User

    Ciao TheDarkita,
    cosa intendi con quale url accedo ?
    se parli dell'url del sito sta su altervista (visto che l'ho messo online ieri)
    comunque l'errore è sempre presente.
    se vuoi puoi andare a vederlo:
    [HTML]bjh.altervista.org[/HTML]
    il sito è a buon punto, ci sto ancora lavorando, e mi sono permesso di menzionarti nella pagina "advices" . Ovviamente è piuttosto spartano ma quasi funzionale: gli unici problemi che devo risolvere adesso sono il recupero/cambiamento della pass e la visualizzazione degli utenti con relativa cancellazione da parte dell' admin (che ho fatto con dreamweaver), ma non riesco ad accedere, si vede che dreamweaver ha dei problemi di script e collegamento al Db.
    Se hai qualche scritp da presentarmi per la cancellazione da parte dell'Admin degli utenti ben venga.
    Per adesso ti ringrazio per l'aiuto.
    ciao


  • ModSenior

    Ciao arkom,

    Nel sito hai messo il link errato, dovevi linkare la pagina che io ho chiamato recupero.php.


  • User

    Provvedo a cambiare, grazie.


  • User

    Grazie TheDarkita, risolto il problema della reset della password. Ho ripreso tutto il tutorial dall'ignizio e ho visto dove stavo sbagliando.
    Adesso mi guardo meglio quella della lista utenti.
    Ciao, al mio prossimo problema con il php.:o


  • User

    Ciao TheDarkita, riprendendo il discorso di qualche pagina indietro,
    volevo sapere come modificare il codice per visualizzare la lista utenti qua in basso, non visualizzando la password e aggiungere vicino ad ogni user un tasto di cancellazione, nel caso come amministratore volessi cancellare un utente specifico.
    [PHP]<?php
    // Includo la connessione al database
    require('config.php');
    $query="select * from utenti order by user";
    $result= mysql_query($query);
    $numfields = mysql_num_fields($result);
    echo "<table>\n<tr>";
    for ($i=0; $i < $numfields; $i++)
    {
    echo '<th>'.mysql_field_name($result, $i).'</th>';
    }
    echo "</tr>\n";

    while ($row = mysql_fetch_row($result))
    {
    echo '<tr><td>'.implode($row,'</td><td>')."</td></tr>\n";
    }
    echo "</table>\n";
    ?> [/PHP]
    Inoltre come potrei (per motivi estetici) integrare il codice dentro una tabella tra i tags "body".
    Grazie.
    Ah dimenticavo ho visto che hai efettuato la registrzione al sito.


  • ModSenior

    [php]
    <?php
    // Includo la connessione al database
    require('config.php');
    $query=mysql_query("select * from utenti order by user");

    echo '<table>';
    while($a = mysql_fetch_array($query))
    echo '<tr><td>'.$a['user'].'</td></tr>';
    echo '</table>';
    [/php]
    Per la cancellazione puoi utlizzare la pagina di cancellazione account con qualche piccola modifica.
    Si mi sono registrato, per provare il recupero password, altrimenti come vedevo cosa sbagliavi. 🙂


  • User Attivo

    Ciao!
    C'è qualche errore qui?

    [PHP]<?php
    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" "">
    <html xmlns="">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Area privata</title>
    </head>
    <body>
    <a href="">Pagina privata!</a><br /> // HO MODIFICATO METTENDO IL LINK E NON MI VA PIU'
    <br />
    <br />
    <a href="logout.php">Logout</a><br />
    </body>
    </html>[/PHP]

    Grazie!


  • ModSenior

    Non mi sembra di vedere nessun errore, che problemi ti dà?


  • User Attivo

    Appena clicco login mi esce

    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 2

    Quando invece faccio il login mi esce questo

    Warning: Cannot modify header information - headers already sent by (output started at c:\programmi\easyphp1-8\www\login.php:1) in c:\programmi\easyphp1-8\www\login.php on line 35

    La riga 35 è questa

    header('Location: privata.php');

    Io non ho spostato nulla di riga te lo garantisco, appena metto a href mi viene fuori questo, appena lo tolgo non me lo fà più...


  • User Attivo

    Ho rifatto tutto da capo dallo zip che hai lasciato, ho messo il link anche su registrato e và tutto perfettamente, anche la privata va bene, ma appena metto il link <a href="">Pagina privata!</a><br /> mi dà quell'avvertimento...


  • ModSenior

    L'errore che hai postato, riguarda altre pagine config.php e login.php, non lo script che hai incollato tu.