Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    24

    [PHP] Confermare tramite Email la registrazione.

    Salve,

    Non desidero la soluzione, bensì una spiegazione teorica alla risoluzione del problema.
    Vorrei arrivare per ragionamento, vorrei capire l'errore per imparare! C=

    L'algoritmo effettua:

    1. Creazione tabelle nel database;
    2. Registrazione di un account: Nome, Cognome, Nickname (utilizzato per accedere) Password ed Email.
    3. Un email invia Nickname e Password, e un link per confermare la registrazione.
    4. Avviene in confronto del codice alfanumerico di 32 caratteri presente sul database e quello presente nel link per completare la registrazione e qui E' ERRORE!

    Il link di conferma mi conduce in una pagina non esistente del tipo:

    http://MIOSITOWEB/conferma_registrazione.php?id=32 caratteri alfanumerici

    senza far attivare l'array e passare quindi da 0 a 1 (da non convalidato a convalidato)

    Vi ringrazio dell'attenzione! =D
    Una buona serata!


    Codice PHP:
    <?php require('db.php');   $id $_GET['id'];     $sql "SELECT * FROM confirm WHERE confirm_validator = '$id'"$query mysql_query($sql) or die(mysql_error());  $pcarray mysql_fetch_array($query); // Memorizza nell'array $pcarray  if (!is_array($pcarray))  {   echo "Oops! Niente da confermare!";   exit; }   $user_id = $pcarray["confirm_userid"];   // Aggiorna la tabella user $update = "UPDATE user SET " .           "user_reg = 1 " .           "WHERE user_id = '$user_id'"; $result = mysql_query($update) or die(mysql_error()); ?> <html> <head> <title>Iscrizione confermata!</title> </head> <body> <h3>Complimenti, la tua iscrizione al sito è stata confermata!</h3>
     

    [url="index.php"]Clicca qui per tornare alla Home Page ed effettuare il log-in[/url]</p> </body> </html>

    $id contiene il valore di $msgid di 32 caratteri alfanumerici che viene inviata all'utente tramite un link:

    $confirmmessage .= " <a href=\"MIOSITOWEB/conferma_registrazione.php" . "?id=$msgid\">Clicca qui per confermare la tua registrazione</a>";

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    719
    Non ho controllato il codice perchè non si capisce nulla .
    Comunque puoi mettere tutto in una query. Non ti do l' sql perchè non hai chiesto codice, ma è semplice se ci ragioni.
    Poi esiste questa funzione in php: mysql_affected_rows
    Quella che fa per te.



    Ps: nell'indirizzo manca http, lo hai messo nel codice?

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    24
    Riposto il codice sperando si visualizzi correttamente C=

    Grazie per la risposta, avrei bisogno di un ulteriore intervento sulla logica di questo codice, per capire qual'è la causa. Ho preso visione della funzione che mi hai suggerito, ha il compito di INSERT, UPDATE, REPLACE or DELETE query.

    Il problema è questo, tramite il link devo fare un confronto e se il codice alfanumerico è lo stesso da 0 (non convalidato) passa a 1 (convalidato).

    La funzione di update dovrebbe essere efficace, ma la parte del confronto non riesce ^-^'

    Si nel mio file.php è tutto sistemato con link corretti e via di seguito. (ho solamente sostituito qui con MIOSITOWEB il link originale =) )

    Devo capire l'errore, il punto in cui la logica del file non torna e mi crea questo errore, oppure direttamente la correzione, ma devo capire tutto quindi seguita da una spiegazione, voglio imparare! =D



    Codice PHP:
    <?php 
    require('db.php');  
    $id $_GET['id'];     
    $sql "SELECT * FROM confirm WHERE confirm_validator = '$id'"

    $query mysql_query($sql) or die(mysql_error());  

    $pcarray mysql_fetch_array($query); // Memorizza nell'array

    $pcarray  if (!is_array($pcarray))  {   

    echo 
    "Oops! Niente da confermare!";   
    exit; }   

    $user_id $pcarray["confirm_userid"];   

    // Aggiorna la tabella user 
    $update "UPDATE user SET " .           "user_reg = 1 " .           "WHERE user_id = '$user_id'"

    $result mysql_query($update) or die(mysql_error()); 
    ?> 

    <html> <head> <title>Iscrizione confermata!</title> </head> <body> <h3>Complimenti, la tua iscrizione al sito è stata confermata!</h3>
     

    [url="index.php"]Clicca qui per tornare alla Home Page ed effettuare il log-in[/url]</p> </body> </html>


    AGGIUNGO:

    Semplifico la spiegazione di ciò che devo ottenere! C=

    Mi registro, un email mi invia un link di conferma con un codice di 32 caratteri alfanumerici!

    Tipo: http://MIOSITOWEB/conferma_registraz...edi32caratteri

    Ora deve fare il confronto con la tabella CONFIRM_VALIDATOR quando clicco il link (che contiene questo codice alfanumerico). Se il codice del link è uguale a quello della tabella, la tabella CONFIRM_USERID aumenta da 0 a 1!

    Ma siccome il link conduce ad una pagina di errore (pagina non trovata) e non avviene il confronto per un motivo che mi sfugge l'account non si può convalidare mai! ^-^

    Spero di essere stato chiaro =) Grazie!

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    719
    Non mi hai capito
    Io dico di usare una singola query:

    Codice PHP:
    <?php
    require('db.php');
    $id $_GET['id'];

    $update "UPDATE user SET " "user_reg = 1 " "WHERE confirm_validator = '$id'"

    $result mysql_query($update) or die(mysql_error());

    if(
    mysql_affected_rows($result) == 1) echo "ok";//codice valido
    else echo "errore";//codice non valido
    ?>
    Scusami il codice, ma non sapevo come spiegartelo.


  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    24
    Ah perfetto capito è una semplificazione C=

    Il problema è che sia il codice breve che il precedente hanno lo stesso errore.

    Mi registro, arriva l'email con il link di attivazione:

    http://MIOSITO/conferma_registrazion...43d8429b725c42

    E niente pagina non trovata e l'array non scatta da 0 a 1 ^-^'

    Non capisco per quale motivo non faccia il confronto e non faccia l'array..

    (se attivo manualmente dal database in compenso il login e il logout fungono benissimo C= Mi rimane da fare il debug qui e poi faccio add come pagine interne e sistema di recupero password. Anche se con il MD5 la vedo dura..)

    Posto anche un secondo file interessato, perchè qui sinceramento non trovo errore.. Forse è un problema di variabili sbagliate e non fa il giusto confronto.


    Questo file interviene dopo la registrazione, ora mi spiego.

    Riempio il form della registrazione. Nome Cognome Nick Pass ed Email e Invio.

    Questo file si occupa di scrivere sul database i dati appena compilati e di inviare l'email con il codice alfanumerico per l'attivazione.

    (il file postato e semplificato da te è il successivo a questo in ordine di cronologia)

    Codice PHP:
    <?php
    require('db.php'); 

    $user mysql_real_escape_string($_POST['user']); 
    $user_mail $_POST['user']; 

    //Hash per non memorizzare il valore originale della password
    $pass md5($_POST['pass']);




    $pass_mail $_POST['pass']; 
    $firstname mysql_real_escape_string($_POST['firstname']);
    $lastname =  mysql_real_escape_string($_POST['lastname']);


    //Verifico che NickName e Email non siano già presenti sul DataBase
    $query "SELECT * FROM user " .
              
    "WHERE user_username = '$user' " .
              
    "OR user_email = '$pass' ";

    $result mysql_query($query) or die (mysql_error());

    if (
    mysql_num_rows($result) != 0)
    {
     while (
    $row mysql_fetch_array($result))
     {
      
    //Se il nickname esiste
      
    if ($row['user_username'] == $user)
      {
       echo 
    "

    "
    ;
       echo 
    "L'username, [b]" $row['user_username'] . "[/b] è già in uso da un altro utente, scegliere uno diverso";
       echo 
    "</p>";
      }
      
    //Se l'email esiste
      
    if ($row['user_email'] == $_POST['email'])
      {
       echo 
    "

    "
    ;
       echo 
    "La casella E-mail, [b]" $row['user_email'] . "[/b] è già presente nel DataBase, scegliere una diversa";
       echo 
    "</p>";
      }
     }
     
    //Torna alla pagina di registrazione se esistono
     
    echo "

    "
    ;
     echo 
    "<a href=\"registrazione.php\">";
     echo 
    "<--  Clicca qui per ritornare alla pagina precedente";
     echo 
    "</a>";
     echo 
    "</p>";
     exit();
    }

    //Se non sono presenti nel DataBase 
    else
    {
       switch (
    $_GET['action'])
       {
         case 
    "add":
         switch (
    $_GET['type'])
         {
          case 
    "user":
          
    $sql "INSERT INTO user
                   (user_firstname,
            user_lastname,
             user_username,
            user_password,
            user_email)
          VALUES
            ('
    $firstname',
            '
    $lastname',
            '
    $user',
            '
    $pass',
            '" 
    $_POST['email'] . "')";
           
    $users mysql_query($sql) or die(mysql_error());
           
    $id mysql_insert_id(); 
         
    // Recupero l'ID (user_id) dell'utente appena registrato
           
    break;
         }
        break;
       }
    }

    //Andiamo avanti assegnando un valore casuale alla variabile $msgid che contiene un valore identificativo che viene inserito nella tabella confirm. (utilizzo MD5 e Hasho)

    $temp gettimeofday(); 
    $msec = (int) $temp["usec"]; 
    $msgid md5(time() . $msec);
    $ins "INSERT INTO confirm
           (confirm_validator,
        confirm_userid)
         VALUES
       ('
    $msgid',
        '
    $id')";
    $res mysql_query($ins) or die(mysql_error());
    ?>

    <html>
    <head>
    <title>Inserimento dati</title>
    </head>
    <body>
    <?php

    //Invio un Email contentente NickName, password in chiaro e link per confermare la registrazione.


    $to $_POST["email"];
    $toname $_POST["firstname"];
    $subject "Completa la tua registrazione";

    $boundary "==MP_Bound_xyccr948x==";
    $headers "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: multipart/alternative; boundary=\"$boundary\"\r\n";
    $headers .= "From: [email]miaemail@gmail.com[/email] \r\n"
    $html_msg "<center>";
    $html_msg .= "<table width=\"500\" border=0 cellpadding=\"4\">";
    $html_msg .= "<tr><td align=\"center\">";
    $html_msg .= "</td></tr>";
    $html_msg .= "<tr><td>Questi sono i dati della tua registrazione:";
    $html_msg .= "</td></tr><tr><td>Username: <font color=\"red\">" $user_mail "</font>";
    $html_msg .= "</td></tr><tr><td>Password: <font color=\"red\">" $pass_mail "</font>";
    $html_msg .= "</td></tr><tr><td align=\"center\">";
    $html_msg .= "</td></tr></table></center>";
    $confirmmessage "Salve " $toname ",\n\n";
    $confirmmessage .= "per completare la tua registrazione devi cliccare sul link sottostante:\n\n";
    $confirmmessage .= $html_msg "\n\n";
     
    confirm_reg.php
    $confirmmessage 
    .= "<a href=\"http://MIOSITOWEB/conferma_registrazione.php" .
      
    "?id=$msgid\">Clicca qui per confermare la tua registrazione</a>";
    $message "This is a Multipart Message in MIME format\n";
    $message .= "--$boundary\n";
    $message .= "Content-type: text/html; charset=iso-8859-1\n";
    $message .= "Content-Transfer-Encoding: 7bit\n\n";
    $message .= $confirmmessage "\n";
    $message .= "--$boundary--";
    $mailsent mail($to$subject$message$headers);
    if (
    $mailsent)
    {
      echo 
    "Salve" .  $toname ",
    "
    ;
      echo 
    "Un messaggio è stato inviato all'indirizzo [b]" $to "[/b] da te fornito.

    "
    ;
      echo 
    "IMPORTANTE:
    "
    ;
      echo 
    "Per completare la registrazione al sito devi aprire la tua casella e-mail, leggere il messaggio di conferma e cliccare sul link che troverai all'interno.

    "
    ;
    } else {
      echo 
    "Errore durante l'invio dell'e-mail.";
    }
    ?>
    </body>
    </html>

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    719
    Non avevo capito che le tabelle erano 2.

    Comunque sei sicuro che nella prima tabella degli utenti ci sia un campo id che abbia un auto increment, che sia settato come primary key e che abbia il nome di user_id ?

    Il mio codice non lo considerare perchè è completamente sbalgiato.


  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    24
    Yes C= Non ne vengo a capo.. Sono sicuro che l'errore è nella logica perchè la sintassi mi pare corretta uff..

    Codice PHP:

    <?php

    // Istruzioni collegamento con il Database
    require('db.php'); 

    $query "CREATE TABLE user (
               user_id INT(11) NOT NULL AUTO_INCREMENT,
               user_firstname VARCHAR (50) NOT NULL,
               user_lastname VARCHAR (50) NOT NULL,
               user_username VARCHAR (11) NOT NULL,
               user_password VARCHAR (32) NOT NULL,
               user_email VARCHAR (50) NOT NULL,
               user_reg TINYINT (1) NOT NULL default 0,
               PRIMARY KEY (user_id))"
    ;
    $users mysql_query($query) or die(mysql_error());
    $user mysql_real_escape_string($_POST['user']); 


    $qry "CREATE TABLE confirm (
               confirm_id INT(11) NOT NULL AUTO_INCREMENT,
               confirm_validator VARCHAR (32) NOT NULL,
               confirm_userid INT (11) NOT NULL default 0,
               PRIMARY KEY (confirm_id))"
    ;
    $confirm mysql_query($qry) or die(mysql_error());
    ?>

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    719
    Elimina l'auto increment nella seconda tabella, non serve.
    Poi riprova con il tuo codice.

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    24
    Stesso errore, non avviene il confronto.. Grazie dell'aiuto sei molto paziente =))

    Buona giornata! ^-^

    Screens tabelle:




    Praticamente nell'email il link di conferma è formato da:

    http://SITO/conferma_registrazione.php" . "?id=$msgid

    $msgid è il carattere contenuto nella casella confirm_validator

    Ora premendo il link dovrebbe confrontare $msgid con il contenuto di confirm_validator.
    Se il codice è lo stesso allora l'array sale di 1, altrimenti rimane a 0 e dice che è impossibile confermare ^-^

    Ma questo passaggio non funge uff..

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    719
    Andiamoci al contrario. Che cosa mostra la pagina?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.