• User

    Si, ho creato la pagina captcha.php con il seguente codice:

    <?php
    header("Content-type: image/png");
    $x = 200;
    $y = 75;
    $code = substr($_GET['code'],0,9);
    $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,'arial.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);
    ?>

    E caricato nella stessa cartella sul server arial.ttf.

    Digitando il Link ch-regio-info.ch/captcha.php?code=test viene generato il codice, ma non ho capito come poi integrarlo come controllo nella pagina eintragen.htm.


  • User Attivo

    Metti un campo di testo dove scrivere l'utente deve ricopiare il codice dell'immagine.
    Poi all'invio, controlli il codice inserito se è uguale a quello utilizzato dall'immagine.
    Puoi utilizzare le sessioni per questo:

    
    session_start();
    $_SESSION["code"] = "test";
    ...
    <img src="captcha.php" />
    Ricopia codice: <input type="text" name="nospam" />
    
    ... in "captcha.php" aggiungi ...
    session_start();
    header("Content-type: image/png");
    $code = substr($_SESSION['code'],0,9);
    
    ... nella pagina che riceve ...
    if($_POST["nospam"] != $_SESSION["code"])
        echo "Errore SPAM";
    
    

  • User Attivo

    Metti un campo di testo dove scrivere l'utente deve ricopiare il codice dell'immagine.
    Poi all'invio, controlli il codice inserito se è uguale a quello utilizzato dall'immagine.
    Puoi utilizzare le sessioni per questo:

    
    session_start();
    $_SESSION["code"] = "test";
    ...
    <img src="captcha.php" />
    Ricopia codice: <input type="text" name="nospam" />
    
    ... in "captcha.php" aggiungi ...
    session_start();
    header("Content-type: image/png");
    $code = substr($_SESSION['code'],0,9);
    
    ... nella pagina che riceve ...
    if($_POST["nospam"] != $_SESSION["code"])
        echo "Errore SPAM";
    
    

  • User

    Scusa, questa prima parte

    session_start();
    $_SESSION["code"] = "test"

    dove la dovrei mettere?


  • User Attivo

    Devi metterla nella pagina dove c'è il form da compilare, così come il tag img che punta al file captcha.php

    Es.

    
    <?php
    session_start();
    $_SESSION["code"] = "test"
    ?>
    <html ...
    ...
    <form ...
    ...
    <img src="captcha.php" />
    Ricopia codice: <input type="text" name="nospam" />
    
    

  • User

    😞 si, ma in ch-regio-info.ch/eintragen.htm non mi appare nessun testo.


  • User Attivo

    Converti la pagina html in php "eintragen.php", altrimenti non viene interpretato il codice php iniziale.


  • User

    Ciao, ho fatto e in effetti funziona, o meglio appare la scritta, solo che invece di generare un testo questa riproduce sempre solo la parola "test" e inoltre anche scrivendo la parola giusta da errore come SPAM.


  • User Attivo

    Nella pagina con il form di invio:

    
    $_SESSION["code"] = "test";
    
    

    definisce la parola chiave che deve essere copiata dall'utente.
    Se vuoi del testo casuale metti in questo caso:

    
    function codice_casuale($len)
    {
        $caratteri = "abcdefghiljkmnopqrstuvwxyz0123456789";
        $codice = "";
    
        for($i =  0; $i <= $len; $i++)
        {
            $random = rand(0, strlen($caratteri) - 1);
    
            $codice .= substr($caratteri, $random, 1);
        }
    
        return $codice;
    }
    
    $_SESSION["code"] = codice_casuale(5);
    
    

    Mentre, per risolvere il controllo che restituisce sempre spam, devi aggiungere session_start(); all'inizio del file che invia l'email, mi sono dimenticato di metterlo nel post precedente.


  • User

    Grazie mille, mi hai dato veramente un grande aiuto!
    Ora sembra funzionare correttamente 🙂
    Grazie ancora


  • User Attivo

    Prego! 😉