Non riesco ad attivare l'account

paperinik4

Utente Attivo
29 Mag 2011
1.812
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.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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.";
    }
 

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
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:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ora ricordo la domanda di ALe

$email e $password dove li valorizzi?
 

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
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 ????
 

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
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>
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
no come fai ad arrivare a attivazione.php?
 

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
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!";
}
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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:

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
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....
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Certo devi passargli i dati dal link nella mail
 

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
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 ???
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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
 

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
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:

paperinik4

Utente Attivo
29 Mag 2011
1.812
0
36
Roma
www.ricetteagogo.it
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.