• User

    Link attivazione account con nome variabile comprensiva di underscore???

    Salve,

    ho il seguente problema e mi chiedevo se esiste una soluzione

    si tratta di spedire nella mail di attivazione account un link che rimanda ad altra pagina in cui si esegue un UPDATE e si aggiorna il valore di un campo

    fin qui è chiaro

    il problema è nel link che arriva nella mail

    http://nomedominio.it/attiva.php?user=$user&id=$id

    dove ho posto
    $user = $_POST['nome'];

    se il valore del campo nome è intero e formato da una sola parola
    non ci sono problemi es: Gianluca

    se invece è formato da 2 parole es: Gian Luca

    il link che arriva viene spezzato e, di fatto, non funziona

    questo è quello che arriva:

    http://nomedominio.it/attiva.php?user=Gian Luca&id=10

    c'è un modo affinchè questo non avvenga ed ottenere un valore del tipo
    Gian_Luca e quindi un link non spezzato del tipo
    http://nomedominio.it/attiva.php?user=Gian_Luca&id=10

    Un saluto


  • User Attivo

    Se vuoi semplicemente sostituire gli spazi con underscore puoi usare str_replace
    Se invece vuoi essere tranquillo anche con le accentate eccetera eccetera devi usare urlencode
    Vai su php.net e trovi tutto.


  • User

    Grazie margheritebianche,

    ho utilizzato la funzione urlencode ed ho risolto il problema alla grande

    Un saluto


  • User Attivo

    Salve Ragazzi ho l'ho stesso problema. Allora, invio l'email di attivazione account, ma non riesco a mandare i dati per farmi entrare nel sito. Mi potete dare una mano per favore ??? Vi posto qualche codice, in modo tale che a qualcuno possa essere d'aiuto.

    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,
    attivo ENUM('1', '0') DEFAULT '0',
    PRIMARY KEY (id)
    );
    [/PHP]

    Questa è la pagina di attivazione.php:

    [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) == 0) {
            // 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)
            ?>
        <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>
    [/PHP]

    Questa è la pagina dove c'è il link dell'invio email e si chiama iscrizione2.php:

    [PHP]

    <?php

    require_once("connetti.php");

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

        <center>   <H1>BENVENUTO NEL SITO D'ISCIRIZIONE PROVA</H1>
    
            <form action= '' method="POST">
    
                <font face="Comic Sans MS">
    
                Nome:     <input type="text" name="nome"  maxlength="30" size ="32"> <br> <br>
                Cognome:  <input type="text" name="cognome"  maxlength="30" size ="32"> <br> <br>
                Username: <input type="text" name="username"  maxlength="30" size ="32"> <br> <br>
                 Email:    <input type="text" name="email"  maxlength="40" size ="42"> <br> <br>
                 Rip-Email: <input type="text" name="ripemail"  maxlength="40" size ="42"> <br> <br>
                 Password: <input type="password" name="password"  maxlength="12" size ="14"> <br> <br>
                 Rip-Passw: <input type="password" name="passw"  maxlength="12" size ="14"> <br> <br>
                </font>
                <center>
                    <input type="submit" name="reg" value="Invio iscrizione" />
                    <input type="submit" name="uscita" value="Uscita" />
                </center> </form>
        </head>
        <body>
    
    
    
    <?php
    

    } else {
    $nome = mysql_real_escape_string(strtolower(trim ($_POST['nome'])));
    $cognome = mysql_real_escape_string(strtolower(trim ($_POST['cognome'])));
    $username = mysql_real_escape_string(strtolower(trim ($_POST['username'])));
    $password = mysql_real_escape_string(trim ($_POST['password']));
    $passw = mysql_real_escape_string(trim ($_POST['passw']));
    $email = mysql_real_escape_string(trim ($_POST['email']));
    $ripemail = mysql_real_escape_string(trim ($_POST['ripemail']));

    //crittografa la passowrod

    $pass = mysql_real_escape_string(md5(trim($_POST['password'])));

    // verifico la presenza dei campi obbligator

    $ok_ko ="";

    //controllo campi compilati

    if($nome ==""){$ok_ko .= "Attenzione: il campo nome deve essere compilato. <br> <br>";}
    if($cognome ==""){$ok_ko .= "Attenzione: il campo cognome deve essere compilato. <br> <br>";}
    if($username ==""){$ok_ko .= "Attenzione: il campo username deve essere compilato. <br> <br>";}
    if($email ==""){$ok_ko .= "Attenzione: il campo email deve essere compilato. <br> <br>";}
    if($password ==""){$ok_ko .= "Attenzione: il campo password deve essere compilato. <br><br>";}

    if($password != $passw){$ok_ko .= "Attenzione: le due password non coincidono. <br> <br>";}

    // Controllo se lo username è presente nel db

    $checkusername=mysql_query("SELECT username FROM utenti WHERE username='$username'");
    $vuota=mysql_num_rows($checkusername);
    if($vuota > 0){
    echo "<br> <br> <h1> Attenzione: lo username: ".$username." è già presente nell'archivio. Si prega di cambiare email. Grazie !!! </h1>";
    echo "<meta http-equiv='Refresh' content=4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
    exit();

    }

    //controllo scrittura corretta dell'email

    if(!filter_var($email, FILTER_VALIDATE_EMAIL)||!filter_var($ripemail,FILTER_VALIDATE_EMAIL)){

             $ok_ko .= "indirizzo email non valido<br>";
    

    // } //chiude il controllo scrittura corretta dell'email

        // Controlla se le due email coincidono
    

    if($email != $ripemail){$ok_ko .= "Attenzione: le due email non coincidono. <br> <br>";}
    } //chiude il controllo scrittura corretta dell'email

    // Controllo se esiste l'email nel db

    $checkemail=mysql_query("SELECT email FROM utenti WHERE email='$email'");
    $vuota=mysql_num_rows($checkemail);
    if($vuota > 0){
    echo "<br> <br> <h1> Attenzione: l'email: ".$email." è già presente nell'archivio. Si prega di cambiare email. Grazie !!! </h1>";
    echo "<meta http-equiv='Refresh' content=4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
    exit();

    }

    if($ok_ko !=""){
    echo "<h1>$ok_ko</h1>";
    echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
    exit();
    }else{

    $query="INSERT INTO utenti(nome, cognome, username, email, password) VALUES('$nome','$cognome','$username','$email','$pass')";
    //var_dump($query);//qui dovresti vedere se la query si forma come dovrebbe
    $q_i=mysql_query($query);//qui se registra, se bool false errore, se resuorce... è a posto
    var_dump($q_i);
    // Parte riguardante l'invio email

    //require_once ("/class.phpmailler.php");

    require_once 'phpmailer/class.phpmailer.php';
    //phpmailer
    $mail = new PHPMailer();
    $mail->IsSMTP(); // telling the class to use SMTP

    $mail->SetFrom("[email protected]");

    $mail->Subject = "Attivazione account.";

    //$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

    //$mail->AltBody = "Iscrizione avvenuta correttamente. "; // optional, comment out and test

    $mail->CharSet = "UTF-8"; //Content-Type" content="text/html;

    $mail->MsgHTML('Grazie di esserti iscritto. <a href="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!";
    }

    echo "<h1> <br>Utente registrato correttamente. E' stata inviata un'email di conferma per attivare l'account</h1>";
    //e torno al form
    //header("Refresh: 2;URL=paginaris.php");
    header("Refresh: 2;URL=login.php");
    }
    }
    ?>
    [/PHP]
    Poi c'è 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, 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>";
    }
    }
    }
    }

    ?>

    [/PHP]

    In ultimo c'è la paginaris.php (che sarebbe la pagina riservata per chi si logga con i dati corretti).

    [PHP]

    <!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>

    [/PHP]

    Una cosa nella pagina iscrizione2.php, non mi fa la verifica delle due email, se la provate, e ci mettete prima pippo@gmail e poi superpippo@gmail, la da per buona e fa passare con la conseguenza che registra l'utente. Non riesco a capire dove sta l'errore. E' tale e qiuale alla verifica della password quindi.... Boh.

    La parte riguardante alla verifica dell'email è la seguente:

    [PHP]

    //controllo scrittura corretta dell'email

    if(!filter_var($email, FILTER_VALIDATE_EMAIL)||!filter_var($ripemail,FILTER_VALIDATE_EMAIL)){

             $ok_ko .= "indirizzo email non valido<br>";
    

    // } //chiude il controllo scrittura corretta dell'email

        // Controlla se le due email coincidono
    

    if($email != $ripemail){$ok_ko .= "Attenzione: le due email non coincidono. <br> <br>";}
    }
    [/PHP]
    A me servirebbe una cosa del genere con il link di conferma che mando via email:

    attivazione.php?email=email&psw=password la password ovviamente dovrebbe essere criptata. mi potete dare una manoi per favore ??? Grazie a tutti della collaborazione. Spero di ricevere aiuti....