Visualizzazione risultati 1 fino 9 di 9

Discussione: Conferma della registrazione tramite mail

  1. #1
    maveric92 non è connesso Neofita
    Data registrazione
    09-12-2012
    Messaggi
    5

    Unhappy Conferma della registrazione tramite mail

    Come descritto nel titolo ho un problema quando vado ad eseguire l'attivazione dell'account di un utente tramite l'uso di un link inviato alla mail.

    La pagina registrazione, dopo aver raccolto i dati del form, inserisce i dati nel database. Fatto ciò invia all'utente una mail per confermare la registrazione.
    Il link inviato alla mail riporta alla pagina action.php?act=conferma che ha in input il codice utente, necessario per ritrovare l'account da attivare.

    Il problema è questo: la pagina action.php?act=conferma=cod=$codiceUtente si apre ma non aggiorna lo stato, lasciandolo a 0 cioè inattivo.

    Questi sono i codici PHP che uso nelle pagine:

    registrazione.php
    Codice PHP:
    include 'connect.php';

    if(@
    $_POST["invio"])
    {
    $codUtente = md5($_POST["email"]);
    $codPassword = md5($_POST["password"]);

    $query = "INSERT INTO `utenti` SET `username`='".@$_POST["username"]."', `codUtente`='".$codUtente."', `password`='".$codPassword."', `email`='".@$_POST["email"]."';";
    $result = mysql_query($query);

    $sub = "Oggetto del messaggio";
    $sito = "http://www.miosito.altervista.org";
    $msg = "
    Buongiorno "
    .$_POST["username"].",\n
    questa e-mail ti giunge dall'area riservata del sito "
    .$sub.".\n
    Di seguito trovi l'url per procedere all'attivazione del tuo account.\n
    Dati di accesso\n
    Username: "
    .$_POST["username"].",\n
    Password: "
    .$_POST["password"].",\n\n
    Url di conferma: "
    .$sito."/action.php?act=conferma=cod=".$codUtente."\n\n
    In caso di problemi ti inviatiamo a contattarci direttamente.
    "
    ;

    mail($_POST["email"], $sub, $msg);

    header('Location: index.php?act=RegistrazioneOn');
    }
    action.php
    Codice PHP:
    else if(@$_GET["act"] == "conferma")
    {
    $query = "UPDATE `utenti` SET `stato` = '1' WHERE `codUtente`='".@$_POST["cod"].";";
    $result = mysql_query($query) or die('Errore nello svolgimento della query di attivazione');

    header('Location: index.php');
    }

  2. #2
    Guest

    Predefinito

    Ciao, ci sono solo due piccoli accorgimenti da sistemare e dovrebbe funzionare tutto ;)

    Per prima cosa il modo in cui richiami la pagina. Ogni parametro=valore della richiesta GET deve essere separato dal carattere &, quindi il link per l'attivazione è:
    Codice:
    /action.php?act=conferma&cod=$codiceUtente
    Poi, nella pagina action.php hai sbagliato a prendere cod: questo viene passato via GET, non via POST, quindi la riga diventa:
    Codice PHP:
    $query = "UPDATE `utenti` SET `stato` = '1' WHERE `codUtente`='".@$_GET["cod"].";";
    In questo modo dovrebbe funzionare tutto, fammi sapere.

  3. #3
    Guest

    Predefinito

    Ti consiglio vivamente mathis di non usare come codice l'hash md5 dell'email, perché in questo modo basta veramente molto poco per ingannare il sistema e confermare mail inesistenti.

    Ti conviene creare il codice in modo random. Vedi: http://www.php.net/manual/en/functio...eudo-bytes.php
    Esempio:
    Codice PHP:
    $bytes = openssl_random_pseudo_bytes(20);
    $codiceDiConferma = bin2hex($bytes);

  4. #4
    maveric92 non è connesso Neofita
    Data registrazione
    09-12-2012
    Messaggi
    5

    Predefinito

    @Noktalk:
    ora modifico il codice e riferisco i risultati

    @helpcode:
    Prima di assumere i dati del form li controllo con questo codice javascript:

    Codice:
    function conferma()
    {	
    	c=1;
    
    	if (document.formRegistrazione.username.value == '') { c=0; }
    	if (document.formRegistrazione.password.value == '') { c=0; }
    	if (document.formRegistrazione.password2.value == '') { c=0; }
    	if (document.formRegistrazione.email.value == '') { c=0; }
    	
    	if (c==1)
    	{
    		//Controllo lunghezza e uguaglianza password
    		if (document.formRegistrazione.password.value.length < 6) 
    		{
    			alert('La password deve esser lunga almeno 6 caratteri');
    			document.formRegistrazione.submit() = false;
    		}
    		if (document.formRegistrazione.password.value == document.formRegistrazione.password2.value){}
    		else
    		{
    			alert('Le password non corrispondono');
    			document.formRegistrazione.submit() = false;
    		}
    		//Controllo veridicità mail
    		var espressione = new RegExp("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+[\.]([a-z0-9-]+)*([a-z]{2,3})$");
    		var stringa = document.formRegistrazione.email.value;
    		if (!espressione.test(stringa))
    		{
    			alert('Inserire un indirizzo mail valido');
    			document.formRegistrazione.submit() = false;
    		}
    		document.formRegistrazione.submit();
    	}
    	else
    	{
    		alert('Tutti i campi sono obbligatori');
    	}
    }
    Grazie per i consigli. :)
    Ultima modifica di maveric92 : 25-07-2013 alle ore 11.43.38

  5. #5
    maveric92 non è connesso Neofita
    Data registrazione
    09-12-2012
    Messaggi
    5

    Predefinito

    Citazione Originalmente inviato da noktalk Visualizza messaggio
    Ciao, ci sono solo due piccoli accorgimenti da sistemare e dovrebbe funzionare tutto ;)

    Per prima cosa il modo in cui richiami la pagina. Ogni parametro=valore della richiesta GET deve essere separato dal carattere &, quindi il link per l'attivazione è:
    Codice:
    /action.php?act=conferma&cod=$codiceUtente
    Poi, nella pagina action.php hai sbagliato a prendere cod: questo viene passato via GET, non via POST, quindi la riga diventa:
    Codice PHP:
    $query = "UPDATE `utenti` SET `stato` = '1' WHERE `codUtente`='".@$_GET["cod"].";";
    In questo modo dovrebbe funzionare tutto, fammi sapere.
    Funziona! Avevo dimenticato anche un apice(WHERE `codUtente`='".@$_GET["cod"]." ' ;";).
    Grazie mille :D
    Ultima modifica di maveric92 : 25-07-2013 alle ore 12.00.07

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,067

    Predefinito

    Citazione Originalmente inviato da maveric92 Visualizza messaggio
    li controllo con questo codice javascript
    Le parole "controllo" e "javascript" non vanno d'accordo.
    È veramente banale bypassare quei controlli in javascript. Se vuoi puoi farli, ma non sono obbligatori. Sono invece obbligatori controlli lato PHP.

    Perché tutte quelle "@" davanti alle variabili? Invece di non far mostrare gli errori, controlla con la isset() se esistono veramente!
    I messaggi di errori vanno visti come un aiuto, e non come una cosa da nascondere. Puoi anche gestirli con la error_reporting().

    Ciao!
    Ultima modifica di alemoppo : 25-07-2013 alle ore 12.08.58

  7. #7
    maveric92 non è connesso Neofita
    Data registrazione
    09-12-2012
    Messaggi
    5

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Perché tutte quelle "@" davanti alle variabili? Invece di non far mostrare gli errori, controlla con la isset() se esistono veramente!
    Quind dici che è meglio fare una cosa del genere:

    Codice PHP:
    if((isset($_POST['email']))&&( isset($_POST['password']))&&(altre condizioni))
    {
    istruzioni
    }
    else
    {
    errore, hai dimenticato dei campi oppure non sono corretti
    }
    ?
    Ultima modifica di maveric92 : 25-07-2013 alle ore 12.21.17

  8. #8
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,067

    Predefinito

    Sì. Nota però che se l'utente ha lasciato i campi in bianco, non te ne accorgi con la isset(), ma devi usare usare empty().

    Ciao!

  9. #9
    maveric92 non è connesso Neofita
    Data registrazione
    09-12-2012
    Messaggi
    5

    Predefinito

    Sisi. Grazie mille :)

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •