Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    36

    Captcha in PHP all'interno di un Form

    Ciao ragazzi vorrei rendere più sicuro il mio form aggiungendo un controllo Captcha...
    Sono riuscito a trovare qualcosa per generare l'immagine...solo che non riesco ad inserirlo nella mia pagina .php se provo a farlo mi escono caratteri stranissimi...
    Vi allego il codice per creare l'immagine.php (testato...da solo funziona uploadato insieme al file font.tff)

    Codice PHP:
    <?php
    header
    ("Content-type: image/png");
    for(
    $i=0;$i<6;$i++) // sei cifre
    {
    $rand rand(6590);
    $code .= chr($rand);
    }
    $code substr($code,0,9);
    $x 200;
    $y 75;
    $space $x / (strlen($code)+1);
    $img imagecreatetruecolor($x,$y);
    $bg imagecolorallocate($img,255,255,255);
    $border imagecolorallocate($img,0,0,0);
    $colors[] = imagecolorallocate($img,128,64,192);
    $colors[] = imagecolorallocate($img,192,64,128);
    $colors[] = imagecolorallocate($img,108,192,64);
    imagefilledrectangle($img,1,1,$x-2,$y-2,$bg);
    imagerectangle($img,0,0,$x-1,$y-2,$border);
    for (
    $i=0$istrlen ($code); $i++)
    {
    $color $colors[$i count($colors)];
    imagettftext($img,28+rand(0,8),-20+rand(0,40),($i+0.3)*$space,50+rand(0,10),$color,'font.ttf',$code{$i});
    }
    for(
    $i=0;$i<400;$i++)
    {
    $x1 rand(3,$x-3);
    $y1 rand(3,$y-3);
    $x2 $x1-2-rand(0,8);
    $y2 $y1-2-rand(0,8);
    imageline($img,$x1,$y1,$x2,$y2,$colors[rand(0,count($colors)-1)]);
    }
    imagepng($img);
    ?>
    Ora vorrei inserirlo in una cella della tabella dove c'è il resto del form con un pulsante refresh nel caso non si legga bene...
    Poi come faccio a scrivere la parola in un'altra pagina .php e controllarla??
    Thanks!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    crea un file captcha.php solo per il captcha. e dopo salva il numero in una variabile di sessione:

    $_SESSION['captcha'] = $code;

    e nella pagina in cui fai il controllo form fai:

    [img]captcha.php[/img]

    e infine fai il controllo in php così:

    if ($_POST['captcha'] != $_SESSION['captcha'])
    {
    print 'errore';
    }


    ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    36
    Ho fatto così...
    Ho creato un file immagine.php dove c'è la classe che crea l'immagine...
    poi c'è un file immagine_show che richiama la classe e genera l'immagine (che è il file che richiamo dal form)

    Ora ho i seguenti problemi:

    1) Vorrei creare un pulsante in stile Invia con su scritto refresh che mi cambi l'immagine nel caso in cui non sia leggibile.
    Io ho fatto così

    Ma mi resetta solo i campi -.-

    2)Dato che ho già un controllo sui campi vuoti prima di inviare i dati vorrei sapere dove mettere il controllo captcha e come farlo...
    Se non ho capito male devo scrivere nel file immagine.php (anche se non ho capito dove)

    Codice PHP:
    $_SESSION['captcha'] = $code
    e invece nel file .php che controlla i dati e li invia

    Codice PHP:
    if ($_POST['captcha'] != $_SESSION['captcha'])
    {
    print 
    'errore';

    Dove captcha è il nome del campo di scrittura dove sarà immesso il codice alphanumerico...
    Pleeeeease help me!

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    per refreshare la immagine devi utilizzare javascript ( sezione sbagliata ).

    Poi non ti capisco...
    cosa ci vuole ad aggiungere un input <input type="text" name="captcha" value=""> ?

    e poi quando verifichi tutti gli input inserisci quel codice che ti ho passato.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    36
    ma per refreshare l'immagine non posso ricaricare nel riquadro il file immagine_show inserendo un link? senza usare il javascript..

    e poi ho inserito una condizione nel file k invia i dati ma mi da un errore...mi sa che ho messo male le if...riuscite a dargli un occhio?

    Codice PHP:
    <?php
    $nome
    =$_POST['name'];
    $cognome=$_POST['lname'];
    $email=$_POST['email'];
    $telefono=$_POST['tel'];
    $motivo=$_POST['motivo'];
    $messaggio=$_POST['mess'];

    $_SESSION['captcha'] = $code;
    if (
    $_POST['captcha'] != $_SESSION['captcha']){ 
    print 
    'errore'
    } else { 


    if(
    $name!=null and $cognome!=null and $email!=null and $telefono!=null and $messaggio!=null){//se tutte le variabili sono state definite propongo il link
     
    $to "XXXXXXXX@gmail.com"
     
    // IL SOGGETTO DELLA MAIL
    $subject "Modulo proveniente dal sito <a href=\"http://www.studio.it\" target=\"_blank\">[url]www.studio.it[/url]</a>";

     
     
    // COSTRUZIONE DEL CORPO DEL MESSAGGIO
    $body "Contenuto del modulo:\n\n";

    $body .= "Dati personali : Nome: " trim(stripslashes($_POST["name"])) . "\n";
    $body .= "Cognome: " trim(stripslashes($_POST["lname"])) . "\n";
    $body .= "Email: " trim(stripslashes($_POST["email"])) . "\n";
    $body .= "Telefono: " trim(stripslashes($_POST["tel"])) . "\n";
    $body .= "Motivo del contatto: " trim(stripslashes($_POST["motivo"])) . "\n";
    $body .= "Messaggio: " trim(stripslashes($_POST["mess"])) . "\n";

    }

    if(@
    mail($to$subject$body)) { // SE L’INOLTRO E’ ANDATO A BUON FINE…

    echo "La mail è stata inoltrata con successo!";

    } else {
    // ALTRIMENTI…

    echo "Si sono verificati dei problemi nell’invio della mail.";
    }

    }else{
    echo 
    "Invio dati fallito: prego riempire tutti i campi e riprocedere";
    }
    ?>
    l'errore che mi da è a linea 42 cioè l'ultimo else...
    HELP che ci sono quasi!

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    Non si può fare senza senza js... giusto se metti un IFRAME al posto di <img src=...>

    Codice PHP:
    <?php

    // Inizio sessione e termina gli errori
    session_start();
    error_reporting(0);

    // Salva i dati
    $nome       trim($_POST['name']);
    $cognome   trim($_POST['lname']);
    $email       trim($_POST['email']);
    $telefono  trim($_POST['tel']);
    $motivo       trim($_POST['motivo']);
    $messaggio trim($_POST['mess']); 
    $captcha   trim($_POST['captcha']);

    // Controlla se tutti i dati sono stati inseriti
    if ( $nome != '' &&
         
    $cognome != '' &&
         
    $email != '' &&
         
    $telefono != '' &&
         
    $motivo != '' &&
         
    $messaggio != '' &&
         
    $captcha != '' )
    {
        
    // Controlla se il codice di sicurezza è giusto
        
    if ( $captcha == $_SESSION['captcha'] )
        {
            
    // to
            
    $to "XXXXXXXX@gmail.com";
            
            
    // Subject
            
    $subject 'Modulo proveniente dal sito [url="http://www.studio.it"][url]www.studio.it[/url][/url]';
            
            
    // Body
            
    $body  "Contenuto del modulo:\n\n";
            
    $body .= "Dati personali : Nome: "     stripslashes($_POST["name"])     . "\n";
            
    $body .= "Cognome: "                 stripslashes($_POST["lname"]) . "\n";
            
    $body .= "Email: "                     stripslashes($_POST["email"]) . "\n";
            
    $body .= "Telefono: "                 stripslashes($_POST["tel"])     . "\n";
            
    $body .= "Motivo del contatto: "     stripslashes($_POST["motivo"]). "\n";
            
    $body .= "Messaggio: "                 stripslashes($_POST["mess"])     . "\n";
            
            
    // Spedisce la mail
            
    if( mail($to$subject$body) )
                echo 
    "La mail è stata inoltrata con successo!"
            else
                echo 
    "Si sono verificati dei problemi nell’invio della mail.";
        }
        else
            echo 
    "Codice di conferma errato";
    }
    else
        echo 
    "Invio dati fallito: prego riempire tutti i campi e riprocedere";

    ?>


    in cima al file captcha.php metti session_start()
    e poco prima della fine della classe del captcha inserisci:
    $_SESSION['captcha'] = $code;

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    36
    Così anche se metto il codice captcha giusto mi da sempre errore...
    però ce l'abbiamo quasi fatta:P
    ti dò l'indirizzo così provi a vedere anche tu se ti funziona o meno

    www.santadown.altervista.org/contattic.php

    Ti aggiungo anche il codice della pagina che sviluppa l'immagine e di quella che la richiama che magari ci sono errori lì:

    Codice PHP:
    <?php
    class immagine {
    header("Content-type: image/png");
    for(
    $i=0;$i<6;$i++) // sei cifre
    {
    $rand rand(6590);
    $code .= chr($rand);
    }
    $code substr($code,0,9);
    $x 200;
    $y 75;
    $space $x / (strlen($code)+1);
    $img imagecreatetruecolor($x,$y);
    $bg imagecolorallocate($img,255,255,255);
    $border imagecolorallocate($img,0,0,0);
    $colors[] = imagecolorallocate($img,128,64,192);
    $colors[] = imagecolorallocate($img,192,64,128);
    $colors[] = imagecolorallocate($img,108,192,64);
    imagefilledrectangle($img,1,1,$x-2,$y-2,$bg);
    imagerectangle($img,0,0,$x-1,$y-2,$border);
    for (
    $i=0$istrlen ($code); $i++)
    {
    $color $colors[$i count($colors)];
    imagettftext($img,28+rand(0,8),-20+rand(0,40),($i+0.3)*$space,50+rand(0,10),$color,'font.ttf',$code{$i});
    }
    for(
    $i=0;$i<400;$i++)
    {
    $x1 rand(3,$x-3);
    $y1 rand(3,$y-3);
    $x2 $x1-2-rand(0,8);
    $y2 $y1-2-rand(0,8);
    imageline($img,$x1,$y1,$x2,$y2,$colors[rand(0,count($colors)-1)]);
    }
    imagepng($img);
    $_SESSION['captcha'] = $code;
    }
    ?>
    quella che la richiama...

    Codice PHP:
    <?php
    include("immaginec.php");
    $img = new immagine();
    //$img->show("trees.jpg");
    $img->show();

    ?>
    Ci siamo quasi XD
    Sapresti indicarmi un tutorial o qualche codice fatto bene per il refresh del codice generato dalla pagina php?
    Grazie mille a tutti

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    36
    Ho capito qual'è il problema...e ci sono riuscito andando per tentativi XD
    Ho provato a caricare l'esempio del captcha da solo...cioè una pagina con l'immagine e il controllo..un if verificava se era giusta o no...
    Quello che ho capito è che se mettevo

    Codice PHP:
    <?php
        
    if ( $captcha != $_SESSION['captcha'] )
            { 
                        echo 
    "Codice corretto!"
        } 
        else 
             echo 
    "Codice di conferma errato"
    ?>
    qualsiasi valore inserito nel campo andava bene..perchè? perchè probabilmente lui non riusciva a recuperare 'captcha' e la considerava vuota...
    stessa cosa nell'altro form più complesso..togliendo il controllo sul campo captcha quando era vuoto mi spediva l'email (perchè ogni valore immesso escluso il campo vuoto andava bene)

    ho capito quindi che non riesce a recuperare la variabile...perchè???? è forse nella pagina sbagliata il comando

    Codice PHP:
    $_SESSION['captcha'] = $code;  // è contenuto in immaginec.php 
    HELPPPP!!!

  9. #9
    Ciao,

    Non so se l'hai risolto il problema, ma se gli vuoi far fare il refresh dell'imaginina se non si vedono bene le lettere, penso che devi usare javascript.

    O fai in modo che se non ha compilato correttamente il modulo, dopo l'invio si ritrova quello che ha inserito lui nei campi, così se non ha indovinato le lettere del captcha, riprova con una nuova immaginina finché non indovina, tanto il modulo rimane compilato fino al campo in cui deve inserire il codice dell'immagine captcha.

    O se no usi Javascript e ad un pulsante gli generi l'evento onclick che sostituisce l'immagine con un'altra che è sempre la stessa perché gli si da lo stesso percorso, io lo so come fare ma non mi va di dilungarmi troppo.

    Prova ad andare al forum di Javascript e chiedi di farti fare uno script che generi un cambio immagine con il click di un pulsante di un form.

    Importante: nel file che genera l'immagine salva il codice in una variabile di sessione.

    Anche io ho un problema con il captcha che fa i capricci se non sta sulla root del sito;
    ci ho aperto una discussione, ma nessuno mi risponde.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    ti ho detto di mettere session_start() in cima a tutti i file

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.