Non riesco ad attivare l'account

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Salve a tutti,

Il problema è il seguente. Dunque, ho creato una pagina di iscrizione, con l'invio dell'email per attivare l'acdcount. ormai tutti i siti fanno questa procedura. Ma il punto è che non riesco ad attivare l'account. O mi sono rincritinito io oppure non c'ho capito na mazza di come deve essere impostata la questione. Vi posto tutto per ordine, in modo tale che vi possiate rendere conto se ho fatto qualche cavolata o meno. Partiamo subito dalla tabella utenti:

Tabella utenti:

PHP:
create table utenti (

id 		INT UNSIGNED NOT NULL AUTO_INCREMENT,
nome 		VARCHAR(30) NOT NULL,
cognome 	VARCHAR(30) NOT NULL,
username 	VARCHAR(30) NOT NULL,
email           VARCHAR(40) NOT NULL,
password        VARCHAR(255) NOT NULL,
autorizzato 	ENUM('1', '0') DEFAULT '0',
PRIMARY KEY (id)
);

Spiegazioni: il campo autorizzato è impostato su 0, che come mi hanno spiegato, di default l'account è disattivato.

Ora posto la pagina di login.php:

PHP:
<?php
require_once("connetti.php");

if (!isset($_POST['log'])) {
    ?>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Loggati</title>

        <center>   <H2>DIGITARE USERNAME & PASSWORD. PREMERE <a href="iscrizione.php"> QUI</a> </H2> 

            <form action= '' method="POST">
                <font face="Comic Sans MS">
                Username: <input type="text" name="username"  maxlength="30" size ="32"> <br> <br>
                Password: <input type="password" name="password"  maxlength="12" size ="14"> <br> <br>
                </font> 
                <center>
                    <input type="submit" name="log" value="Loggati" />
                    
                </center> </form>
        </head>
    </body>
    <?php
} else {

    session_start();
//Query originale
    
  $query = "SELECT id,username, nome, autorizzato FROM utenti WHERE username='" . $_POST['username'] . "' AND password='" . md5($_POST['password']) . "'";     


$cerco = mysql_query($query);

if (!isset($_POST['esci'])) {

    if (!$cerco) {
        echo "Errore query: <br/>$query<br/>" . mysql_error();
        mysql_error();
    } else {
     
    if (mysql_num_rows($cerco) == 0) {
        $row = mysql_fetch_assoc($cerco);        
        $_SESSION['nome'] = $row['nome'];
        $_SESSION['id'] = $row['id'];  
        //$_SESSION['autorizzato'] = $row['autorizzato'];
        $_SESSION['autorizzato'] = 1;

        $query = "SELECT id,username, nome, autorizzato 
              FROM utenti 
              WHERE attivo = 1 AND  //Qua debbo mettere attivo o autorizzato ???????
                    username='" . $_POST['username'] . "' AND 
                    password='" . md5($_POST['password']) . "'";  

        header("Refresh: 0;URL=paginaris.php");   
    } else {

    echo "<h2> <center>";    
echo 'Premere su <a href="javascript:history.back();">back</a> Indietro per riprovare </h2>';
echo "Utente non trovato";

header("Refresh: 1;URL=login.php");     
  echo "</h2> <center>";    
}  
}
}
}

?>

E infine posto la pagina di attivazione.php:

PHP:
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Account attivato</title>
        
    <center> <h1> Ora il tuo account è stato attivato. Ti arriverà un'altra emaail con i dati relativi alla tua connessione.
            Conserva l'emaile non cestinarla. Una volta persa, non potrai più accedere al tuo account.</center></h1>
    </head>
    <body>
        <?php
       // includiamo il file di configurazione
    require_once("connetti.php");


    // controlliamo se i parametri sono presenti in tabella
    $ctrl_login = @mysql_query("SELECT id FROM utenti WHERE email='$email' AND password='$password'") or die (mysql_error());
    if(@mysql_num_rows($ctrl_login)==1)
    {
      // esito login negativo
      echo "Login incorretto.";
    }else{
      // esito login positivo quindi rendiamo l'utente attivo
      $obj = @mysql_fetch_object($ctrl_login) or die (mysql_error());
      $query_attivo = @mysql_query("UPDATE utenti SET attivo='1' WHERE id=".$obj->id) or die (mysql_error());
var_dump($query_attivo);
  }    
       ?>
    </body>
</html>

Questo è quanto. Dove sbaglio ????? Grazie a tutti dell'attenzione.
 
autorizzato non diventera mai 1 se scrivi cosi
PHP:
"UPDATE utenti SET attivo='1'
se il campo si chiama autorizzato dovrai scrivere
PHP:
"UPDATE utenti SET autorizzato='1'

poi c'è un altra cosa che non mi convince ma la riguardo un po meglio
 
PHP:
// controlliamo se i parametri sono presenti in tabella
    $ctrl_login = @mysql_query("SELECT id FROM utenti WHERE email='$email' AND password='$password'") or die(mysql_error());
    if (@mysql_num_rows($ctrl_login) == 1) {
        // esito login negativo
        echo "Login incorretto.";
    } else {
        // esito login positivo quindi rendiamo l'utente attivo
        $obj = @mysql_fetch_object($ctrl_login) or die(mysql_error());
        $query_attivo = @mysql_query("UPDATE utenti SET autorizzato='1' WHERE id=" . $obj->id) or die(mysql_error());
        var_dump($query_attivo);
    }

praticamente scrivi :
Se trovo il record nel database : Login negativo
Se non lo trovo : Login positivo

Non dovrebbe essere il contrario ?
PHP:
// controlliamo se i parametri sono presenti in tabella
    $ctrl_login = @mysql_query("SELECT id FROM utenti WHERE email='$email' AND password='$password'") or die(mysql_error());
    if (@mysql_num_rows($ctrl_login) == 1) {
        // esito login positivo quindi rendiamo l'utente attivo
        $obj = @mysql_fetch_object($ctrl_login) or die(mysql_error());
        $query_attivo = @mysql_query("UPDATE utenti SET autorizzato='1' WHERE id=" . $obj->id) or die(mysql_error());
        var_dump($query_attivo);
    } else {
        // esito login negativo
        echo "Login incorretto.";
    }
 
Ciao

Ci provo e ti dico se hai visto giusto, po' esse che mi sono incasinato io come ar solito..... Mi da questo messaggio qua:

"
Ora il tuo account è stato attivato. Ti arriverà un'altra emaail con i dati relativi alla tua connessione. Conserva l'emaile non cestinarla. Una volta persa, non potrai più accedere al tuo account.
Login incorretto. "

E ovviamente cliccando sull'email di conferma per attivare l'account, non mi fa entrare.... :(
 
Ultima modifica:
Ora ricordo la domanda di ALe

$email e $password dove li valorizzi?
 
Ciao

Ho fatto una piccola prova, perchè mi è venuto il dubio che non facesse l'update, e difatti non fa l'update. ossia non aggiorna, ecco perchè non mi fa entrare e tutto il resto. Ti posto il piccolo esempio che ho fatto. La sintassi dell'update dovrebbe esssere la seguente se non erro:

PHP:
$query = "UPDATE utenti SET attivo='1' ";

Il file si chiama provaupdate.php

PHP:
<?php
       // includiamo il file di configurazione
    require_once("connetti.php");
    
    if (!isset($_POST['prova'])) {
        
    
    ?>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
         <form action= '' method="POST">
        <input type="submit" name="prova" value="Prova update - Invio" />
    </head>
    <body>
        <?php
    }else{
        $query = "UPDATE utenti SET attivo='1' ";
        var_dump($query);
    }
     
        
        ?>
    </body>
</html>

E il var_dump che c'ho messo mi restituisce la seguente cosa:

PHP:
string(29) "UPDATE utenti SET attivo='1' "

Cos ami sta ad indicare tutto ciò ?? Ho visto giusto ????
 
Ciao

Ora ricordo la domanda di ALe

$email e $password dove li valorizzi?

Mi sembra sul login.php se non erro. Aspe, che ci guardo...

Il login.php è il seguente:

PHP:
<?php
require_once("connetti.php");

if (!isset($_POST['log'])) {
    ?>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Loggati</title>

        <center>   <H2>DIGITARE USERNAME & PASSWORD. PREMERE <a href="iscrizione.php"> QUI</a> </H2> 

            <form action= '' method="POST">
                <font face="Comic Sans MS">
                Username: <input type="text" name="username"  maxlength="30" size ="32"> <br> <br>
                Password: <input type="password" name="password"  maxlength="12" size ="14"> <br> <br>
                </font> 
                <center>
                    <input type="submit" name="log" value="Loggati" />
                    
                </center> </form>
        </head>
    </body>
    <?php
} else {

    session_start();
//Query originale
    
  $query = "SELECT id,username, nome, attivo FROM utenti WHERE username='" . $_POST['username'] . "' AND password='" . md5($_POST['password']) . "'";     


$cerco = mysql_query($query);

if (!isset($_POST['esci'])) {

    if (!$cerco) {
        echo "Errore query: <br/>$query<br/>" . mysql_error();
        mysql_error();
    } else {
     
    if (mysql_num_rows($cerco) == 0) {
        $row = mysql_fetch_assoc($cerco);        
        $_SESSION['nome'] = $row['nome'];
        $_SESSION['id'] = $row['id'];  
        //$_SESSION['autorizzato'] = $row['autorizzato'];
        $_SESSION['attivo'] = 1;

        $query = "SELECT id,username, nome, attivo 
              FROM utenti 
              WHERE attivo = 1 AND 
                    username='" . $_POST['username'] . "' AND 
                    password='" . md5($_POST['password']) . "'";  

        header("Refresh: 0;URL=paginaris.php");   
    } else {

    echo "<h2> <center>";    
echo 'Premere su <a href="javascript:history.back();">back</a> Indietro per riprovare </h2>';
echo "Utente non trovato";

header("Refresh: 1;URL=login.php");     
  echo "</h2> <center>";    
}  
}
}
}

?>

e ti riposto anche paginaris.php, dovrebbero essere valorizzati la no ???

paginaris.php:

PHP:
<link rel="stylesheet" type="text/css" href="coloredisfondo.css">
 
    <?php
require_once("connetti.php");
    session_start();
if(isset($_COOKIE["ultimoaccesso"])) {
    $valore_cookie = date("d/m/Y - H:i:s");
    setcookie ("ultimoaccesso", $valore_cookie, time() + 365 *24*3600);
    $ultimo_cookie = $_COOKIE["ultimoaccesso"];
    $me= "Il tuo ultimo accesso è stato il:  $ultimo_cookie";
} else {
    $valore_cookie = date("d/m/Y - H:i:s");
    setcookie ("ultimoaccesso", $valore_cookie, time() + 365 *24*3600);
    $me= "Non ti sei mai collegato a questa pagina";
}

$stringa= strtoupper($_SESSION['nome']);
if(isset($_SESSION['nome']) && $_SESSION['attivo'] == 1) {
 
   
    echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';
?>
<!DOCTYPE html>
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>benvenuto</title>

<body>
    
<?php


    echo "<div class=\"messaggio\"><h1>";

    echo "BENVENUTO ".$stringa." <br />";
    echo $me;
    echo "</h1></div>";
    echo "</body></html>";
    }else{
    header("Location:failed.html");      
    exit();   
 
}
 
 ?> 
 
<html>
    <head>
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
  

<center>  <br> <br>
    

<input type="button" onClick="window.location.href='logout.php';" style='padding:10px' value="Logout" />
 

 
</center>
 </body>
</html>
 
no come fai ad arrivare a attivazione.php?
 
Ciao

Mi manca il passaggio intermedio sai. Non so da dove ci arrivo, non ricordo, ma cliccando sul link che arriva dall'email dovrebbe essere questa se non sbaglio .

PHP:
$mail->MsgHTML('Grazie di esserti iscritto.  <a href="http://utenti/fabio/MegaLaboratorio/attivazione.php">clicca qui per attivare</a></b>'." "."per attviare l'account. Grazie.");


$mail->AddAddress($_POST['email']);

if(!$mail->Send()) {
  echo "Errore nell'inviare l'email: " . $mail->ErrorInfo;
} else {
  echo "Messaggio inviatro correttamente!";
}
 
si credo sia questo
PHP:
$mail->MsgHTML('Grazie di esserti iscritto.  <a href="http://utenti/fabio/MegaLaboratorio/attivazione.php">clicca qui per attivare</a></b>'." "."per attviare l'account. Grazie.");

ora dovresti passare nel link email e password alla pagina attivazione ma non saprei cosi su due piedi il modoo piu sicuro
penso dovranno viaggiare in get quidni dopo il ?
esempio
attivazione.php?email=email&psw=password
ma dovranno in qualche modo essere criptate


intanto imposta l'attivazione.php in questo modo

PHP:
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Account attivato</title>   
    </head>
    <body>
        <?php
        // includiamo il file di configurazione
        require_once("connetti.php");

        // qui bisognera decriptare
        $email = $_GET['email'];
        $password = $_GET['password'];

        // controlliamo se i parametri sono presenti in tabella
        $ctrl_login = @mysql_query("SELECT id FROM utenti WHERE email='$email' AND password='$password'") or die(mysql_error());
        if (@mysql_num_rows($ctrl_login) == 1) {
            // esito login positivo quindi rendiamo l'utente attivo
            $obj = @mysql_fetch_object($ctrl_login) or die(mysql_error());
            $query_attivo = @mysql_query("UPDATE utenti SET attivo='1' WHERE id=" . $obj->id) or die(mysql_error());
            ?>
        <center> 
            <h1> Ora il tuo account è stato attivato. Ti arriverà un'altra emaail con i dati relativi alla tua connessione.
                Conserva l'emaile non cestinarla. Una volta persa, non potrai più accedere al tuo account.
            </h1>
        </center>
        <?php
    } else {
        // esito login negativo
        echo "Dati non validi Accesso negato.";
    }
    ?>

</body>
</html>
 
Ultima modifica:
ciao

ora infinitesimaCiao,

Scusa, ma sono dovuto uscire che avevo una visita medica. Domani, provo subito lo script che mi hai inviato e ti sapró dire. Anche se sarò di courvé in cucina. Tra una pausa e l'altra. Comunque grazie ancora infinitesimale, per l'aiuto prezioso che mi state tutti quanti dando....
 
Certo devi passargli i dati dal link nella mail
 
Ciao

Ehmmmmm perdonami come si fa ???? Non dirimi con benvenuto .$[nome]. " "." I tuoi dati sono i seguenti: username --> ".$[username]. " ". e la tua password è: $[password]. Sarebbe troppo semplice se fosse così, almeno credo o sbaglio ???
 
cito quanto detto qualche post fa
criric ha scritto:
ora dovresti passare nel link email e password alla pagina attivazione ma non saprei cosi su due piedi il modoo piu sicuro
penso dovranno viaggiare in get quidni dopo il ?
esempio
attivazione.php?email=email&psw=password
ma dovranno in qualche modo essere criptate
 
prova a passarli in chiaro intanto, per vedere se funziona poi qualcuno magari ci dira come codificarli

basta che aggiungi ?email=$emal&psw=$psw al link

ma non ricordo bene come chiami le variabili nel file che invia la mail
 
Ciao

Ci provo subito,

Se fosse così semplice saremmo a cavallo ehehehehehe. Poi dopo ti debbo chiedere un'eventuale chiarimento sull'iscrizione2. Mi salta un passaggio. Ma poi ti dico. Na cosa per vorta. Per essere sicuri ti posto la stringa:

PHP:
$mail->MsgHTML('Grazie di esserti iscritto.  <a href="http://utenti/fabio/MegaLaboratorio/attivazione?email=$emal&psw=$psw.php">clicca qui per attivare</a></b>'." "."per attviare l'account. Grazie.");
 
Ultima modifica:
Ciao

Ciao,

Ho fatto diverse prove. la prima quella che mi avevi postato tu.


PHP:
aggiungi ?email=$emal&psw=$psw  //l'estensione php in questo caso va messa ???? e dove ????

Poi ho sostituito con la username e password, perchè gli ho chiamati così. Ma niente

PHP:
http://utenti/fabio/MegaLaboratorio/attivazione.php?username=$username&password=$password

Risultato:

Una pagina bianca quando clicchi sul link. E dopo quando vai su login.php (che in teoria dovrebbe andare in modo automatico, ma non so come), digito username e password e non mi fa entrare. Sicuramente c'è qualche sbaglio da parte mia. Ma quando mi hai digitato quella stringa mi sono ricordato che i siti la visualizzano. Moh vateli a ripescà quali sono ehehehehe.
 

Discussioni simili