Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    non riesco a confermare una email

    ciao a tutti sto facendo il mio sistema di registrazione utenti e mi sono bloccato nel ultimo passaggio, ho gia tutto pronto, ma quando mando il link di conferma x attivare l'account questo non funziona

    index HTML
    codice HTML:
    <!DOCTYPE html>
    <html>
    <head>
        <title>scomania</title>
        <meta charset="utf-8">
        <meta name="viewport" content="width:device-width, initial-scale=1.0">
    </head>
    <body>
    <form method="post" action="server.php">
        <table>
            <tr>
                <td>inserisci il tuo nome completo</td>
                <td><input type="text" name="nome" maxlength="20"></td>
            </tr>
    
            <tr>
                <td>inserisci la tua email</td>
                <td><input type="text" name="email" maxlength="20"></td>
            </tr>
    
            <tr>
                <td>inserisci il tuo numero</td>
                <td><input type="text" name="telefono" maxlength="12"></td>
            <tr>
                <td>inserisci una password</td>
                <td><input type="text" name="pw" maxlength="15"></td>
            </tr>
    
    
            <tr>
                <td><input type="submit" value="confermare"></td>
            </tr>
        </table>
    </form>
    </body>
    </html>
    server php

    codice HTML:
    <?php
    /* PARAMETRI DI CONESSIONE AL MIO DB MYSQL */
    $conex = mysql_connect("localhost", "root", "", "my_db");
    mysql_select_db("my_db", $conex);
    
    /* PARAMETRI RECUPERATI DAL FORM */
    $nome = $_POST['nome'];
    $email = $_POST['email'];
    $pw = $_POST['pw'];
    $tel = $_POST['tel'];
    
    $data = date('Y-m-d H:i:s');
    
    
    
    /* controllo se il token gia esiste nel database, se e positivo rigenero il token */
    $token = rand(1, 10);
    echo "codice random:".$token."<br>";
    $controlloToken = "SELECT token FROM user WHERE token=$token";
    $querycontrol = mysql_query($controlloToken);
    echo "rispota dal db:".$querycontrol."<br>";
    if($querycontrol == true) {$token;}
    
    /* PARAMETRI EMAIL*/
    $destinatario = $email;
    $ogetto = "CONFERMA LA TUA REGISTRAZIONE";
    $mesaggio = "clicka sul link per confermare la tua registrazione wwww.telelavoro.altervista.org/conferma.php";
    
    /* inserisco nel database i dati dell'utente */
    $sql = "INSERT INTO user (id, email, password, token, active, data_registed, phone)
        VALUES (NULL, '$email', '$pw', '$token', '0', '$data', '$tel')" ;
        
    mysql_query($sql) or die (mysql_error());
    
    mail($destinatario, $ogetto, $mesaggio);
    OUTPUT
    codice random:7
    rispota dal db:Resource id #6
    clicki sul link che gli abbiamo mandato per email per completare la registrazione


    conferma.php

    codice HTML:
    <?php
    
    $token = $_GET['token'];
    
    $sql = "SELECT token FROM user WHERE token=$token";
    
    $verifica = mysql_query($ql);
    
    if($verifica == true)  {
    $query = "UPDATE user set active='1' WHERE token='$token'";
    mysql_query($query) or die (mysql_error());
    echo "Account attivato";
    
    }
    ?>
    
    Non mi stampa il mesaggio, ne si attiva l'account

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Tu mandi questo link
    wwww.telelavoro.altervista.org/conferma.php

    che non contiene alcun parametro get appeso, quindi nello script che dovrebbe attivare l'account $_GET['token'] è null, di conseguenza la tua query select non recupera niente.

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Aggiungo, il tuo script di conferma andrebbe modificato, prima di tutto eseguendo una qualche verifica sul parametro che arriva, perché non ci vuole niente a modificarlo a mano, basta editare il link e se qualcuno volesse potrebbe farti bei danni, compresa la cancellazione del DB (cerca sql injection).
    Dovresti anche usare come minimo le funzioni mysql[b]i/b]_, con la i finale, quelle senza i sono state deprecate da PHP 5.5 ed eliminate da PHP 7, Se usassi PDO sarebbe ancora meglio.


    Puoi fare direttamente l'update e verificare le "affected rows" se è 1 vuol dire che il token è stato trovato e l'attivazione è stata fatta, se è 0 invece il token non è stato trovato, oppure l'account era già attivo.
    In pratica
    Codice PHP:
    $query "UPDATE user set active='1' WHERE token='$token'";
    mysql_query($query);

    if ( 
    mysql_affected_rows() == )
    {
        echo 
    "Account attivato";
    }
    else
    {
        echo 
    "Stai usando un link errato oppure il tuo account è già attivo.";

    Chiaramente con le modifiche che ti ho detto all'inizio, io te l'ho scritto così per brevità.

    Quando un utente esegue una qualche operazione sul tuo sito, dagli sempre un feedback, sia che le cose vadano bene, sia che vadano male, il tuo codice in caso di errore muore con un messaggio che per l'utente non ha senso.
    I die() mentre sei in fase di sviluppo vanno bene, ma su un sito in produzione non andrebbero usati, andrebbe intercettato il problema e mostrato un messaggio adeguato per l'utente.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,316
    compresa la cancellazione del DB
    Smentisco... in mysql non si possono usare le multi query. Sintassi come:
    select * from table where id='{$_GET[id]}'

    Dove ?id=1; DROP DATABASE nomedb;

    Non è possibile.

    E' possibile utilizzando $mysqli->multi_query. Ammesso è concesso che sei root o hai privilegi per usare il comando (ma da un codice di quel tipo dubito fortemente che sia un server configurato personalmente).

    Però concordo sull'utilizzo di statment perchè anche se non possono cancellare il database nulla vieta di rubare le credenziali d'accesso.

Tag per questa discussione

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 © 2024 vBulletin Solutions, Inc. All rights reserved.