Visualizzazione risultati 1 fino 20 di 20

Discussione: non funziona controllo tra captcha e valore immesso (era:Captcha quasi ultimato...)

  1. #1
    Guest

    Unhappy non funziona controllo tra captcha e valore immesso (era:Captcha quasi ultimato...)

    Ciao ragazzi ho quasi finito un controllo Captcha nel mio form e ho due problemi:

    1) Inserire un bottone che mi refreshi l'immagine (creata in .php) nel caso non sia leggibile

    2) Non mi funziona il controllo Captcha...anche se inserisco il codice giusto non mi va...

    Allego i file che compongono il tutto contattic.php (dove c'è il form) immaginec.php (crea l'immagine e il codice) immagine_show.php (mostra l'immagine nel form) sendate1.php (invia i dati per posta se sono corretti

    contattic.php

    Codice:
    <html>
    
    <head>
    <meta http-equiv="Content-Language" content="it">
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <title>CONTATTI</title>
    </head>
    
    <body>
    
    <form method="POST" action="http://www.santadown.altervista.org/sendate1.php">
    	<p><font face="Calibri" style="font-size: 15pt">CONTATTI: </font></p>
    	<table border="0" width="46%" id="table1" style="font-family: Calibri; font-size: 12pt; font-style: oblique" height="340">
    		<tr>
    			<td width="149">Nome</td>
    			<td><input type="text" name="name" size="38"></td>
    		</tr>
    		<tr>
    			<td width="149">Cognome</td>
    			<td><input type="text" name="lname" size="38"></td>
    		</tr>
    		<tr>
    			<td width="149">Email</td>
    			<td><input type="text" name="email" size="38"></td>
    		</tr>
    		<tr>
    			<td width="149">Telefono</td>
    			<td><input type="text" name="tel" size="38"></td>
    		</tr>
    		<tr>
    			<td width="149">Motivo del contatto:</td>
    	<td>		<select name="motivo">
    	<option value="Informazioni Commerciali">Informazioni commerciali</option>
    	<option value="Richiesta preventivo">Richiesta preventivo</option>
    	<option value="Prenotazione Appuntamento">Prenotazione appuntamento</option>
    </select></td>
    		</tr>
    
    		<tr>
    			<td width="149">Messaggio:</td>
    			<td><textarea rows="11" name="mess" cols="29"></textarea></td>
    		</tr>
    
    		<tr>
    			<td width="149">Inserire codice di controllo*</td>
    <img src="immagine_show.php">
    
    		</tr>
    	</table>
    				<p><input type="text" name="captcha" size="20"></p>
    	<p>
    <INPUT type="submit" value="Invia"><a href="immagine_prune.php"><input type="reset" value="REFRESH" name="B2"></a></p>
    	<p>*<font face="Arial"><span style="font-size: 9pt">il codice di controllo è 
    	uno script che impedisce ad alcuni software malevoli di intasare il sito. Se 
    	l'immagine dovesse risultare troppo distorta per una corretta comprensione 
    	del codice cliccare sul tasto REFRESH.</span></font></p>
    &nbsp;</form>
    
    </body>
    
    </html>
    immaginec.php

    Codice:
    <?php
    class immagine {
    header("Content-type: image/png");
    for($i=0;$i<6;$i++) // sei cifre
    {
    $rand = rand(65, 90);
    $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; $i< strlen ($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;
    }
    ?>
    immagine_show.php

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

    Codice:
    <?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 <a href="http://www.studio.it" target="_blank"><a href="http://www.studio.it" target="_blank">www.studio.it</a></a>'; 
             
            // 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"; 
    
    ?>
    Provate pure... l'indirizzo è www.santadown.altervista/contattic.php
    Grazie mille ragazzi!
    Ultima modifica di santadown : 06-05-2009 alle ore 14.49.34

  2. #2
    Guest

    Predefinito

    prova a inserire session_start() anche in immagine_show.php

  3. #3
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    immaginec.php non contiene una classe valida, mi sfugge il perchè funzioni correttamente la visualizzazione dell'immagine

    per il refresh, evitando di ricaricare tutta la pagina) devi usare Javascript

  4. #4
    Guest

    Predefinito

    ho provato a mettere session_start() anche in immagine_show.php...però non funziona

    P.S: mi avevano detto dello script java però non conosco java..help?

  5. #5
    Guest

    Predefinito

    Usa il servizio recaptcha e ti eviti il tutto.

    Ciao!

    edit : ho visto ora, lol ma da dove proviene quel codice? non mi pare PHP5 :S
    Ultima modifica di svacant : 06-05-2009 alle ore 23.39.24

  6. #6
    Guest

    Predefinito

    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
        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:
    $_SESSION['captcha'] = $code;  // è contenuto in immaginec.php
    HELPPPP!!!

  7. #7
    Guest

    Predefinito

    Perchè all'inizio di immaginec.php devi scrivere session_start();

    Saluti!

  8. #8
    Guest

    Predefinito

    Ho risolto così...ho cambiato nome alla variabile si sessione perchè se era uguale al nome di quella post non funzionava (non so perchè) allego i file

    contattic.php

    Codice:
    <html>
    
    <head>
    <meta http-equiv="Content-Language" content="it">
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
    <title>CONTATTI</title>
    </head>
    
    <body>
    
    <form method="POST" action="http://www.santadown.altervista.org/sendate1.php">
    	<p><font face="Calibri" style="font-size: 15pt">CONTATTI: </font></p>
    	<table border="0" width="46%" id="table1" style="font-family: Calibri; font-size: 12pt; font-style: oblique" height="340">
    		<tr>
    			<td width="149">Nome</td>
    			<td><input type="text" name="name" size="38"></td>
    		</tr>
    		<tr>
    			<td width="149">Cognome</td>
    			<td><input type="text" name="lname" size="38"></td>
    		</tr>
    		<tr>
    			<td width="149">Email</td>
    			<td><input type="text" name="email" size="38"></td>
    		</tr>
    		<tr>
    			<td width="149">Telefono</td>
    			<td><input type="text" name="tel" size="38"></td>
    		</tr>
    		<tr>
    			<td width="149">Motivo del contatto:</td>
    	<td>		<select name="motivo">
    	<option value="Informazioni Commerciali">Informazioni commerciali</option>
    	<option value="Richiesta preventivo">Richiesta preventivo</option>
    	<option value="Prenotazione Appuntamento">Prenotazione appuntamento</option>
    </select></td>
    		</tr>
    
    		<tr>
    			<td width="149">Messaggio:</td>
    			<td><textarea rows="11" name="mess" cols="29"></textarea></td>
    		</tr>
    
    		<tr>
    			<td width="149">Inserire codice di controllo*</td>
    <img src="immagine.php">
    
    		</tr>
    	</table>
    				<p><input type="text" name="captcha" size="20"></p>
    	<p>
    <INPUT type="submit" value="Invia">p>
    	<p>*<font face="Arial"><span style="font-size: 9pt">il codice di controllo è 
    	uno script che impedisce ad alcuni software malevoli di intasare il sito. Se 
    	l'immagine dovesse risultare troppo distorta per una corretta comprensione 
    	del codice cliccare sul tasto REFRESH.</span></font></p>
    &nbsp;</form>
    
    </body>
    
    </html>
    sendate1.php

    Codice:
    <?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   = $_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['code'] ) 
        { 
            // to 
            $to = "XXXXXXXXXXX@gmail.com"; 
             
            // Subject 
            $subject = 'Modulo proveniente dal sito <a href="http://www.studio.it" target="_blank"><a href="http://www.studio.it" target="_blank">www.studio.it</a></a>'; 
             
            // 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"; 
    
    ?>
    immagine.php

    Codice:
    <?php
    session_start();
    header("Content-type: image/png");
    for($i=0;$i<6;$i++) // sei cifre
    {
    $rand = rand(65, 90);
    $code .= chr($rand);
    }
    $code = substr($code,0,9);
    $_SESSION['code'] = $code; //
    $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; $i< strlen ($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);
    imagedestroy($img);
    ?>
    C'è l'ultimo problema (poi vi giuro k ho finito XD)...la variabile di sessione genera un codice per ogni utente..e se uno non riesce a leggerlo può refreshare ottenendo le stesse lettere disposte in modo diverso però...
    Ho provato a cercare qualcosa in java per poterlo fare e ho trovato questa funzione

    function reloadImage()
    {
    img = document.getElementById($img');
    }

    solo che $img è l'immagine appena creata...non c'è un modo per dirgli di rifare il ciclo di immagine.php
    tipo al posto di $img mettere session_start() ??? (ho già provato e non funziona)

  9. #9
    Guest

    Predefinito

    Come detto AlexKidd, ti conviene utilizzare javascript per ricaricare l'immagine e non tutta la pagina.

  10. #10
    Guest

    Predefinito

    già ma non conoscendo javascript mi ritrovo in un vicolo cieco...
    qualche suggerimento (spunti, siti...?)
    plz

  11. #11
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    devi utilizzare XmlHttpRequest per ricaricare l'immagine

  12. #12
    Guest

    Predefinito

    Qualcosa di più specifico in relazione a quello che postato...? tipo un abbozzetto

  13. #13
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    purtroppo sto imparando da poco a padroneggiare javascript (vedi i miei recenti post su questo forum) e l'argomento ajax devo ancora affrontarlo seriamente

    per ora conosco solo la teoria

  14. #14
    Guest

    Predefinito

    Ma l'immagine deve essere ricaricata ogni tot di secondi, oppure cliccando su un apposito "tasto" vuoi che l'immagine si ricarichi?

    P.S. Io eviterei ajax

  15. #15
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    ovviamente si dovrebbe ricaricare a richiesta

    senza ajax mi sa che non si riesce a ricaricare l'immagine senza fare il refresh dell'intera pagina

  16. #16
    Guest

    Predefinito

    Invece si può, ti faccio anche un esempio:
    Codice HTML:
    <script type="text/javascript">
    function ricarica() {
    var img = document.getElementById("captcha");
    var rand = Math.random();
    img.src = "captcha.php?rand=" + rand;
    }
    </script>
    <input type="button" value="Ricarica" onclick="ricarica()" />
    <img src="captcha.php" id="captcha" />

  17. #17
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    e si, caricando ogni volta un file "diverso" ma in quel caso il captcha perde di efficacia

    in quel caso specifico basta fare il parsing dell'url

  18. #18
    Guest

    Predefinito

    Non credo , perchè dovrebbe perdere efficacia???
    Il parametro rand non contiene il codice che genererà il captcha.

  19. #19
    L'avatar di AlexKidd
    AlexKidd non è connesso Altervistiano Junior
    Data registrazione
    09-02-2007
    Messaggi
    516

    Predefinito

    e cosa contiene? se il codice visualizzato dipende in qualche modo dal dato ottenibile da $_GET["rand"] allora esso diventa automaticamente una informazione in più per bypassare il captcha, anzi non solo, si potrebbe generare sempre lo stesso captcha conosciuto per ogni submit

  20. #20
    Guest

    Predefinito

    Dipende, nel mio captcha uso GD e sessioni, per memorizzare il codice generato casualmente.
    $_GET["rand"] e solo un finto parametro, in realtà non influenza in nessun modo il codice da generare. Infatti Math.random() genera soltanto un numero del tipo 0.506640862940417.
    Se allora vuoi passare rand via $_POST le informazioni, sei obbligato ad usare AJAX.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •