• ModSenior

    Come hai fatto tu c'è un problema, facendo le 2 query in quel modo, cerchi prima un qualsiasi utente con quella password e dopo un utente con quell'email, è possibile che si trovi l'utente A che usi quella password e l'utente B che usi quell'email, in pratica i dati sono errati.
    [php]
    <?php
    session_start();
    // Includo la connessione al database
    require('config.php');
    // Se il modulo viene inviato...
    if(isset($_POST['cancella']))
    {

    // Dati Inviati dal modulo
    ['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 ''
    $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()) {
        $pass = addslashes($pass);
        $mail = addslashes($mail);
    }
    
    $query = mysql_query("SELECT id FROM utenti WHERE mail = '$mail' ANDpass = '$pass' LIMIT 1");
        // Controllo se la password sia giusta    
    

    if(mysql_num_rows($query) == 0)
    die('Password e/o indirizzo email non valido');
    else
    {
    $a = mysql_fetch_array($query);
    // Query per la cancellazione dell'utente nel database
    $strSQL = mysql_query("DELETE FROM utenti WHERE id = '{$a['id']}' LIMIT 1");

        // Messaggio d'errore
        die('NOME SITO - CANCELLAZIONE UTENTE CONFERMATA.<br>
    

    Grazie per avere utilizzato i nostri servizi,<br>
    sperando di riaverla prossimamente come utente<br><br>
    Saremmo lieti comunque sapere, inviadoci un email, se la sua cancellazione<br>
    al sito è dovuto a problemi riscontrati o<br>
    insoddisfazioni<BR>
    Grazie');
    }
    }
    ?>
    [/php]


  • User

    Forse c' è un errore nello codice Thedarkita nella linea 10:
    [PHP]<?php
    session_start();
    // Includo la connessione al database
    require('config.php');
    // Se il modulo viene inviato...
    if(isset($_POST['cancella']))
    {

    // Dati Inviati dal modulo
    ['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 ''
    $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()) {
        $pass = addslashes($pass);
        $mail = addslashes($mail);
    }
    
    $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');
    else
    {
    $a = mysql_fetch_array($query);
    // Query per la cancellazione dell'utente nel database
    $strSQL = mysql_query("DELETE FROM utenti WHERE id = '{$a['id']}' LIMIT 1");

        // Messaggio d'errore
        die('ERRORE NELLA  CANCELLAZIONE UTENTE.<br>
    

    Possibile cause: <br>

    • non ha inserito i suoi dati correttamente.<br>
    • errore del sistema.<br>
      Si prega tornare indietro e riprovare a registrarsi o<br>
      contattare amministratore del sito<BR>
      Grazie');
      // Reindirizzo l'utente ad una pagina di conferma della cancellazione
      header('Location: user_delete_ok.php');
      exit;
      }
      }
      ?>
      [/PHP]

    ossia in questa porzione del codice:
    [PHP] ['user']) : ''; // Metto nella variabile 'user' il dato inviato dal modulo, [/PHP]
    messaggio di errore:
    [HTML]Parse error: parse error in C:\Programmi\EasyPHP 3.0\www\self_delete.php on line 10[/HTML]
    Ahhh per la tua informazione avevo commesso un' errore alla fine del codice che ho modificato con un "header" in quanto nel codice immettevo un "die" con la scritta:
    [PHP]// Messaggio d'errore
    die('NOME SITO - CANCELLAZIONE UTENTE CONFERMATA.<br>
    Grazie per avere utilizzato i nostri servizi,<br>
    sperando di riaverla prossimamente come utente<br><br>
    Saremmo lieti comunque sapere, inviadoci un email, se la sua cancellazione<br>
    al sito è dovuto a problemi riscontrati o<br>
    insoddisfazioni<BR>
    Grazie');
    exit;
    }
    }
    ?> [/PHP]
    Ok aspetto la tua risposta per il parse error
    Grazie


  • ModSenior

    La riga incriminata devi toglierla, tu l'hai incollata cosi, e io non ci ho fatto caso.
    Per l'header non ho ben capito che hai fatto.
    Prego. 😉


  • User

    Ho provveduto a eliminare la righa fin qua tutto ok, ma quando provo con il form di cancellazione mi dice:
    [HTML]Password e/o indirizzo email non valido[/HTML]
    Penso che riguarda questa parte del codice che non va:
    [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]
    Eppure l'utente fittizio che ho creato è stato registrato correttamente; in quanto ho esaminato il DB è vi è inserito.

    Per quello che riguarda la fine del codice era un errore mio, invece di rimandare l'utente ad una pagina di conferma dell' avenuta cancellazione della sua registrazione avevo inserito un'interruzione del processo con un "die". Errore madornale :arrabbiato:
    Per adesso grazie, e spero che ce la faciamo a funzionare sto codice di cancellazione utente, aspetto un'ennesimo tuo parere.


  • User

    Ah dimenticavo un piccolo particolare, ma non sarebbe più giusto che l'utente che desidera eliminare la sua registrazione immetta nel form il suo nick "user" e il suo indirizzo email "mail" che "pass" e "mail" ?
    Ovviamente se consideri questa soluzione più giusta sarebbe opportuno avere il codice php e il form.
    grazie


  • 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. 🙂