• ModSenior

    Vedi 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 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['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($recupero['mail'], 'Reset password - Tutorial Area Privata', $message, $headers);
    
    die('Le abbiamo un email contenente la Sua nuova password, controlli la Sua casella email!');
    

    ?>
    [/php]
    Appena ho un attimo mi configuro lo script in locale, che facciamo prima 🙂


  • User

    image


  • User

    @Andrez said:

    Edit
    *Inizia i messaggi con una maiuscola e termina con un punto.

    Grazie di avermi modificato il post e sopratutto di averlo cancellato..mi sembra un po' esagerato ma non discuto... Ok scrivere in italiano e non spezzare le parole (tipo sms) ma non mi sembrava di aver scritto qualche bestialità per cui se invece di un punto ce ne sono due... il messaggio rimane chiaro a chiunque anche ed eventuali "non italiani". Scusate in ogni caso.

    Per non andare off-topic comunque penso di aver scritto che non mi prendeva la nuova password che diversamente da altri tentativi proprio non mi dava. Faccio volentieri da cavia Thedarkita. =]


  • ModSenior

    [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 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: 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($recupero['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 Attivo

    Salve ragazzi vi volevo chiedere perche mi dà questo errrore!? :bho:

    Parse error: parse error, expecting ','' or ';'' in 😄 \ Programmi \ EasyPHP 3.0 \ www \ login \ registrati . php on line 83Il codice è questo

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

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

    // 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 ''
    $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()) {
        $user = addslashes($user);
        $pass = addslashes($pass);
        $mail = addslashes($mail);
    }
    
    
    // Controllo il Nome Utente
    if(strlen($user) < 4 || strlen($user) > 12)
        die('Nome Utente troppo corto, o troppo lungo');
    // Controllo la Password
    elseif(strlen($pass) < 4 || strlen($pass) > 12)
        die('Password troppo corta, o troppo lunga');
    // Controllo l'email
    elseif(!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})", $mail))
        die('Email non valida');
    // Controllo il nome utente non sia già occupato
    elseif(mysql_num_rows(mysql_query("SELECT user FROM utenti WHERE user = '$user' LIMIT 1")) == 1)
        die('Nome Utente non disponibile');
    // Controllo l'indirizzo email non sia già registrato
    elseif(mysql_num_rows(mysql_query("SELECT mail FROM utenti WHERE mail = '$mail' LIMIT 1")) == 1)
        die('Questo indirizzo email risulta gi&agrave; registrato ad un altro utente');
    // Registrazione dell'utente nel database
    else
    {
    
        // Crypt della password per garantire una miglior sicurezza
        $pass = md5($pass);
    
    
        // Genero una stringa casuale di Attivazione
        $attivazione = '';
        for($x=1; $x<=32; $x++)
        $attivazione.=rand(0,9);
        $attivazione = md5($attivazione);
        $message = 'Per attivare il Suo account deve visitare il seguente link:<br><a href="ht**://w**.sito*ext/attivazione.php?code='.$attivazione.'">Attiva account</a>';
        // Header dell'email, per madnarla 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, 'Registrazione Tutorial TheDarkITA', $message, $headers);
    
        // Query per l'inserimento dell'utente nel database
        $strSQL = "INSERT INTO utenti (user,pass,mail,attivazione)";
        $strSQL .= "VALUES('$user', '$pass', '$mail', '$attivazione')";
        mysql_query($strSQL) OR die("Errore 003, contattare l'amministratore ".mysql_error());
    
    
        // Reindirizzo l'utente ad una pagina di conferma della registrazione
       echo '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    

    <html>
    <head>
    <meta content="text/html; charset=ISO-8859-1"
    http-equiv="content-type">
    <title></title>
    </head>
    <body>
    <div style="text-align: center;"><img
    style="width: 337px; height: 153px;" alt="Zomer"
    src="../logo.png"><br>
    <br>
    <br>
    Ti è stata inviata un email con un link ecco cosa devi fare <br>
    <br>

    1. apri 'email (potrebbe stare in posta indesiderata)<br>
    2. clicca sul link</div>
      </body>
      </html>
      ';
      exit;
      }
      }
      ?>
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "htp://ww.w3org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <html xmlns="ht
      p://www3*org/1999/xhtml">
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      <title>Registrazione</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="mail" type="text" id="mail" value="Em@il" onfocus="if(this.value=='Em@il') this.value='';" /><br />
    <input name="registra" type="submit" value="Registrati" /><br />
    </form>
    </body>
    </html>
    [/php]Inoltre se era possibile volevo avere la query che ha usato il ragazzo di prima per creare la tabella provincie...:(

    Da qualche parte c'è qualche asterisco o spazio perchè se no non mi faceva inviare il messaggio...


  • ModSenior

    Ciao Zomer,
    Devi modificare questo:
    [php]
    echo '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta content="text/html; charset=ISO-8859-1"
    http-equiv="content-type">
    <title></title>
    </head>
    <body>
    <div style="text-align: center;"><img
    style="width: 337px; height: 153px;" alt="Zomer"
    src="../logo.png"><br>
    <br>
    <br>
    Ti è stata inviata un email con un link ecco cosa devi fare <br>
    <br>

    1. apri 'email (potrebbe stare in posta indesiderata)<br>
    2. clicca sul link</div>
      </body>
      </html>
      ';
      [/php]
      in questo:
      [php]
      echo '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <html>
      <head>
      <meta content="text/html; charset=ISO-8859-1"
      http-equiv="content-type">
      <title></title>
      </head>
      <body>
      <div style="text-align: center;"><img
      style="width: 337px; height: 153px;" alt="Zomer"
      src="../logo.png"><br>
      <br>
      <br>
      Ti è stata inviata un email con un link ecco cosa devi fare <br>
      <br>
    3. apri 'email (potrebbe stare in posta indesiderata)<br>
    4. clicca sul link</div>
      </body>
      </html>
      ';
      [/php]

  • User Attivo

    Ciao TheDarkita ho modificato il codice secondo le tue informazionie mi riesco a regiatrare. Ma dopo che ho premuto il bottone registrati mi esce scritto:

    Warning: mail() function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\Programmi\EasyPHP 3.0*éw\login\registrati.php on line 59
    Errore 003, contattare l'amministratore Field 'provincia' doesn't have a default value

    Il file sto sto provando in locale con easyphp e poi :rollo: non ho creato la tabella porvinci perchè non la so creare...


  • ModSenior

    Ciao Zomer,

    Per poter inviare email dal server locale devi modificare la configurazione.


  • User Attivo

    A, ok lo proverò on-line.
    E riguardo alla tabella provincia?


  • ModSenior

    Non sò cosa hai fatto, comunque l'errore indica che non hai inserito un valore di default per il campo provincia. Modifica la tabella inserendo un valore di default altrimenti devi passare un valore nella query di inserimento.


  • User Attivo

    Ma io*** non ho creato la tabella provincia*** perchè non la so fare mi aiuteresti?

    p.s. controlla l'altro post (quello su l'upload).


  • User

    Perfetto mi sembra funzionare a meraviglia adesso!! grazie thed! posso sottoporti un'altro caso o vuoi un po' di tempo per riposarti? =D


  • ModSenior

    Zomer ma io mica sò cosa vuoi fare...

    BlueDragon89, se senti al TG che un poveretto si è sucidato, beh quello sono io. 🙂

    Io una mano ve la dò volentieri, però il tutorial sarebbe per imparare voi, non posso farvi i siti interamente io. Quanto meno dove provarci...


  • User

    Purtroppo hai ragione... comunque ho creato uno script per l'update del profilo utente.

    Lo script mi visualizza tutte i campi che sono già presenti sul Database però quando vado a inserire i campi vuoti con i miei dati e clicco su salva o update lui mi dice che il campo e-mail e tutti i campi già nel Database dal momento della registrazione sono già registrati da un'altro utente.. per cui dovrei cancellare tutti i valori che vedo a schermo e inserire solo i campi che mi ricordo vuoti per avere poi un profilo completo sul database. E' un po' lungo come discorso mi sono spiegato?


  • ModSenior

    Se il valore rimane invariato è inutile fare un update di quel campo.
    Puoi fare una cosa così:
    [php]
    if(isset($_POST['invio']))
    {

    // Dati Inviati dal modulo
    $v1 = (isset($_POST['v1'])) ? trim($_POST['v1']) : '';    // Metto nella variabile 'v1' il dato inviato dal modulo, se non viene inviato dò di default ''
    $v2 = (isset($_POST['v2'])) ? trim($_POST['v2']) : '';    // Metto nella variabile 'v2' 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()) {
        $v1 = addslashes($v1);
        $v2 = addslashes($v2);
    }
    
    $setquery = '';
    if($attualev1 != $v1)
        $setquery = ((isset($setquery)) ? $setquery.",campov1 = '$v1'" : "campov1 = '$v1'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE)
    

    if($attualev2 != $v2)
    $setquery = ((isset($setquery)) ? $setquery.",campov2 = '$v2'" : "campov2 = '$v2'");// IF in forma contratta, sintassi: ((CONDIZIONE) ? RETURN_TRUE : RETURN_FALSE)

    mysql_query("UPDATE tabella SET $setquery WHERE id = '$mioid'");
    }
    [/php]


  • User Attivo

    Nelle pagine precedenti ho letto qeusto topic scritto da gigi e volevo sapere come devo fare le tabelle perchè io non ne sono capace mi potresti aiutare?

    Ora, sono tornato alla pagina di registrazione, e tanto per complicarmi di più la vita ho deciso di inserire un menu a tendina con tutte le province italiane..
    Per non sprecare spazio nel database ho creato una nuova tabella 'province' con i campi "id" e "nome", in modo da registrare come dato nella tabella utenti solo il numero id della provincia, e rendere visibile sulle pagine *php *(e nel menù a tendina) il nome per intero.
    Nella vecchia tabella 'utenti' ho aggiunto il campo residenza.

    in poche parole mi potreste dare queste 2 tabelle? per creare il menu a tendina?


  • ModSenior

    Zomer io cosa vuoi fare ancora non l'ho capito vedi... Se non lo spieghi è difficile aiutarti.
    Comunque per creare le tabelle puoi entrare nel phpmyadmin, una volta entrato nel database dal menu a tendina, in fondo trovi crea tabella.


  • User Attivo

    A ok grazie ora volevo sapere come devono essere strutturate le tabelle?
    Cosi?

    CREATE TABLE provincia (
    id VARCHAR(20),
    napoli VARCHAR(20),
    id VARCHAR(20),
    roma VARCHAR(20),
    id VARCHAR(20),
    milano VARCHAR(20),

    );

    :bho:


  • ModSenior

    Dovresti creare id e provincia.
    Dopo devi inserire un record per ogni provincia.


  • User Attivo

    Mi potresti fare una tabella di esempio con due o tre provincie?