Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    108

    Captcha con libreria gd

    Ciao a tutti ragazzi..
    Ho 2 file, uno chiamato "gd.php" con cui genero in un immagine dei numeri casuali, ed un'altro chiamato "registrazione.php" a cui voglio integrare questo captcha.
    Gd.php
    Codice PHP:
    <?
                    header
    ("Content-type: image/png");
                        
    $antispam rand(100000,999999);
                        
    $immagine imageCreate(250250); 
                        
    $bianco imageColorAllocate($immagine255255255); 
                        
    $nero imageColorAllocate($immagine000); 
                        
    imageRectangle($immagine00249240$nero);
                        
    imageString($immagine800"$antispam"$nero); 
                        
    imagePng($immagine); 
                        
    imageDestroy($immagine);
    ?>
    Registrazione.php
    Codice PHP:
    <?php
        
    include('connessioneDB.php');
        
            
    $nickname $_POST["nickname"];
            
    $password $_POST["password"];
            
    $password_c $_POST["password_c"];
            
    $email $_POST["email"];
            
            if(
    $nickname == '' || $password == '' || $password_c == '' || $email == ''){
                echo 
    "Errore: riempia tutti i campi.";
                exit;
            }
            if(
    $password_c != $password){
                echo 
    "Errore: le due password immesse non sono coincidenti.";
                exit;
            }
            if(
    strlen($password) < 6){
                echo 
    "Errore: la password immessa è troppo corta.";
                exit;
            }        
            if(
    strlen($nickname) < 3){
                echo 
    "Errore: il nickname immesso è troppo corto.";
                exit;
            }
        
            
    $check mysql_query("SELECT COUNT(*) as 'conteggio' FROM utenti WHERE Nickname = '$nickname' AND Email = '$email'");    
            
    $array mysql_fetch_array($check);
            
    $conteggio $array['conteggio'];
            
        if (
    $conteggio 0){
            echo 
    "Errore: nickname o email già esistenti.";
            exit;
            }
            
            else{

    //CAPTCHA

            
    $query mysql_query("INSERT INTO utenti (Nickname, Password, Email) VALUES ('$nickname','$password','$email')");            
            echo 
    "Registrazione completata!";
            }
        
    ?>
    Il problema è che non so come integrare il primo nel secondo.. qualcuno può darmi una mano?

  2. #2
    Allora.... innanzi tutto, nel file gd.php devi anche andare a creare una sessione all'interno della quale vai a salvare il valore di $antispam, cioè della variabile alfanumerica che usi come caratteri da scrivere nell'immagine di CAPTCHA.

    Nella form, dovrai andare ad inserire l'immagine creata con il tag:
    Codice PHP:
    [img]gd.php[/img
    Nello script che riceve i dati della form vai a recuperare la variabile di sessione, e la confronti con quanto scritto dall'utente che ha letto l'immgine di captcha.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    108
    Grazie, ora provo ^^

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    108
    C'è ancora un problema.. nonostante la sessione, i 2 codici nelle 2 pagine sono diversi :S

    registrazione.php
    Codice PHP:
    <?php
    session_start
    ();    
    include(
    'connessioneDB.php');
            
    $nickname $_POST["nickname"];
            
    $password $_POST["password"];
            
    $password_c $_POST["password_c"];
            
    $email $_POST["email"];
            
            if(
    $nickname == '' || $password == '' || $password_c == '' || $email == ''){
                echo 
    "Errore: riempia tutti i campi.";
                exit;
            }
            if(
    $password_c != $password){
                echo 
    "Errore: le due password immesse non sono coincidenti.";
                exit;
            }
            if(
    strlen($password) < 6){
                echo 
    "Errore: la password immessa è troppo corta.";
                exit;
            }        
            if(
    strlen($nickname) < 3){
                echo 
    "Errore: il nickname immesso è troppo corto.";
                exit;
            }
            

            
    $check mysql_query("SELECT COUNT(*) as 'conteggio' FROM utenti WHERE Nickname = '$nickname' AND Email = '$email'");    
            
    $array mysql_fetch_array($check);
            
    $conteggio $array['conteggio'];
            
        if (
    $conteggio 0){
            echo 
    "Errore: nickname o email già esistenti.";
            exit;
            }
            
            else{
            echo 
    $_SESSION['antispam'];
            echo (
    '
    [img]gd.php[/img]'
    );
            echo 
    "Registrazione completata!";
            }
            
    //Appunto        $query = mysql_query("INSERT INTO utenti (Nickname, Password, Email) VALUES ('$nickname','$password','$email')");            
        
    ?>
    gd.php
    Codice PHP:
    <?
                    header
    ("Content-type: image/png");
                        
    $antispam rand(100000,999999);
                        
    session_start();
                        
    $_SESSION['antispam'] = $antispam;

                        
    $immagine imageCreate(6020); 
                        
    $bianco imageColorAllocate($immagine255255255); 
                        
    $nero imageColorAllocate($immagine000); 
                        
    imageRectangle($immagine005919$nero);
                        
    imageString($immagine800$_SESSION['antispam'], $nero); 
                        
    imagePng($immagine); 
                        
    imageDestroy($immagine);
    ?> 

    ?>
    Idee?

    EDIT:
    Ho notato che l'immagine mi dà il codice "aggiornato" mentre il file di registrazione il codice precedente

    EDIT2:
    Credo di aver capito il motivo.. quando io in registrazione.php richiamo $_SESSION['antispam'], mi viene visualizzato l'ultimo valore della sessione. Solo che dopo con [img]gd.php[/img] aggiorno questo valore che però è presente solo nell'immagine..
    quindi, come fare? xD

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    108
    RISOLTO
    Ho fatto in questo modo.. anzichè generare l'immagine, me la salvo su server, e metto le indicazioni per la creazione dell'immagine direttamente nel file di registrazione, in modo tale da non dover usare neanche le sessioni
    Codice PHP:
    <?php
    include('connessioneDB.php');

            
    $nickname $_POST["nickname"];
            
    $password $_POST["password"];
            
    $password_c $_POST["password_c"];
            
    $email $_POST["email"];
            
            if(
    $nickname == '' || $password == '' || $password_c == '' || $email == ''){
                echo 
    "Errore: riempia tutti i campi.";
                exit;
            }
            if(
    $password_c != $password){
                echo 
    "Errore: le due password immesse non sono coincidenti.";
                exit;
            }
            if(
    strlen($password) < 6){
                echo 
    "Errore: la password immessa è troppo corta.";
                exit;
            }        
            if(
    strlen($nickname) < 3){
                echo 
    "Errore: il nickname immesso è troppo corto.";
                exit;
            }
            

            
    $check mysql_query("SELECT COUNT(*) as 'conteggio' FROM utenti WHERE Nickname = '$nickname' AND Email = '$email'");    
            
    $array mysql_fetch_array($check);
            
    $conteggio $array['conteggio'];
            
        if (
    $conteggio 0){
            echo 
    "Errore: nickname o email già esistenti.";
            exit;
            }
            
            else{
                
    //codice antibot
                        
    $antispam rand(100000,999999);
                        
    $immagine imageCreate(6020); 
                        
    $bianco imageColorAllocate($immagine255255255); 
                        
    $nero imageColorAllocate($immagine000); 
                        
    imageRectangle($immagine005919$nero);
                        
    imageString($immagine800"$antispam"$nero); 
                        
    imagePng($immagine"antibot.png"); 
                        
    imageDestroy($immagine);

            echo 
    $antispam;
            echo (
    '
    [img]antibot.png[/img]'
    );
            echo 
    "
    Registrazione completata!"
    ;
            }
        
            
    //Appunto        $query = mysql_query("INSERT INTO utenti (Nickname, Password, Email) VALUES ('$nickname','$password','$email')");            


        
    ?>

  6. #6
    Ma così perdi la dinamicità.
    Chiunque volesse provare ad hacakre il tuo sito, sa che l'immagine è sempre la stessa.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    108
    Nono, guarda meglio il codice.. ad ogni apertura di registrazione.php viene generato un'altro codice

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.