Visualizzazione risultati 1 fino 5 di 5

Discussione: Includere captcha in pagina php

  1. #1
    Guest

    Question Includere captcha in pagina php

    Bungiorno,
    sono un nuovo membro, e questa è la mia prima discussione nel forum.
    Finora me la sono sempre cavata da solo, ma ora ho un problema che mi si presenta come irrisolvibile.
    Ho creato una pagina di registrazione a cui vorrei includere un codice captcha.
    Dopo aver trovato online ciò che mi serviva ho fatto il file .php addetto alla creazione dell'immagine.
    Nella pagina di prova che ho fatto funziona tutto, ma una volta richiamato il captcha nella vera pagina di registrazione, viene sempre il messaggio "Codice errato!".
    In seguito vi posto i codici sorgente delle varie parti.

    File captcha.php
    Codice PHP:
    <?php
    session_start
    ();

    /* dimensioni */
    $x = 200; //larghezza
    $y = 80; //altezza

    $image = imagecreatetruecolor($x, $y); //creo l'immagine

    $color = array();
    $color[] = imagecolorallocate($image, 255, 0, 0);
    $color[] = imagecolorallocate($image, 0, 255, 0);
    $color[] = imagecolorallocate($image, 0, 0, 255);
    $color[] = imagecolorallocate($image, 255, 255, 0);
    $color[] = imagecolorallocate($image, 255, 0, 255);
    $color[] = imagecolorallocate($image, 255, 255, 255);
    $color[] = imagecolorallocate($image, 0, 255, 255);

    $font = array();
    $font[] = "captcha/font/arial.ttf";
    $font[] = "captcha/font/abbeyroad_regular.ttf";
    $font[] = "captcha/font/roman_sd_regular.ttf";
    $font[] = "captcha/font/elephants_in_cherry_trees_normal.ttf";

    $black = imagecolorallocate($image, 0, 0, 0);
    imagefill($image, 0, 0, $black);
    add_noise($image, 170, 1, $x, $y); //aggiungo il disturbo

    $_SESSION['CAPTCHA'] = strtolower(getString()); //genero la nuova stringa

    for($i = 0;$i < strlen($_SESSION['CAPTCHA']); $i++) {
    /* per ogni lettera applico impostazioni diverse (dimensione, angolo, colore, font) */
    imagettftext(
    $image, //immagine
    20 + rand(0, 6), //dimensione carattere
    rand(-35, 35), //angolo di rotazione
    ($i+1)*26, //offset sulla x
    45+ rand(0, 4), //offset sulla y
    $color[rand(0, count($color)-1)], //colore
    $font[rand(0, count($font)-1)], //carattere
    $_SESSION['CAPTCHA'][$i] //lettera da stampare
    );
    }

    header("Content-type: image/png");

    imagepng($image);
    imagedestroy($image);


    function
    getString() {
    $str = base64_encode(time());
    $str = str_replace("=", "", $str); //elimino gli =
    $str = str_shuffle($str);
    return
    substr($str, 0, 6);
    }

    function
    add_noise($image, $difficoult, $figure, $x, $y) {
    if(
    $figure == 1)
    $difficoult *= 15; //i punti devono essere più delle linee per generare un disturbo significativo

    for($i = 0; $i < $difficoult; $i++) {
    $color = imagecolorallocate($image, rand(0,255), rand(0,255), rand(0,255));
    $p = rand(0, 10);
    $x1 = rand($p, rand($x - $p, $x-1));
    $x2 = rand($p, rand($x - $p, $x-1));
    $y1 = rand($p, rand($y - $p, $y-1));
    $y2 = rand($p, rand($y - $p, $y-1));

    switch(
    $figure) {
    case
    1:
    imageline($image, $x1, $y1, $x1, $y1, $color);
    break;
    default:
    imageline($image, $x1, $y1, $x2, $y2, $color);
    break;
    }
    }

    }
    ?>
    Pagina di prova in cui tutto sembra funzionare:
    Codice PHP:
    <? session_start(); ?>

    <form action="example.php" method="post">
    <img src="/captcha.php" /><br/><br/>
    Inserisci il codice che vedi: <input type="text" name="cpt" /> <input type="submit" value="Check" />
    </form>

    <?php
    if(isset($_POST['submit']) && (trim($_POST['submit']) == "Partecipa"))
    {
    if(isset(
    $_POST['cpt']) && !empty($_POST['cpt'])){
    {if(
    $_SESSION['CAPTCHA'] != strtolower($_POST['cpt']))
    echo
    "<strong>Codice errato!</strong>";
    else{
    echo
    "Ok";
    }
    }
    }else{
    echo
    "Inserisci il codice captcha";
    }
    }
    ?>
    Pagina d'iscrizione in cui vorrei inserire il captcha:
    Codice PHP:
    <?php
    // controllo sul parametro d'invio
    if(isset($_POST['submit']) && (trim($_POST['submit']) == "Partecipa"))
    {
    // controllo sul formato dell'email
    if((!isset($_POST['email'])) || (!eregi("^([a-z0-9\._-]+)(@[a-z0-9.-]+)(\.{1}[a-z]{2,4})$", $_POST['email'])))
    {
    echo
    "Attenzione, formato email non valido.";
    }else{

    // se i parametri sono corretti popoliamo il database
    $email = $_POST['email'];
    $username = $_POST['username'];
    $code = rand(100000, 999999);
    // ma prima controlliamo che l' username e l'email non siano già presenti includiamo il file di configurazione
    @include "config.php";

    $ctrl_username = @mysql_query("SELECT id FROM iscrizioni WHERE username='$username'") or die (mysql_error());
    if(@
    mysql_num_rows($ctrl_username)>0)
    {
    echo
    "L'username risulta già registrato.";
    }else{
    $ctrl_email = @mysql_query("SELECT id FROM iscrizioni WHERE email='$email'") or die (mysql_error());
    if(@
    mysql_num_rows($ctrl_email)>2)
    {
    echo
    "Errore: il numero massimo di utenti iscritti con lo stesso indirizzo e-mail è 2.Limite superato.";
    }else{
    // query d'inserimento
    if(@mysql_query("INSERT INTO iscrizioni (email, codiceconferma, username) VALUES('$email','$code','$username')") or die (mysql_error()))
    {
    // messaggio di conferma
    echo "Conferma l'iscrizione tramite la mail che ti abbiamo inviato.<br>Se non trovi l'e-mail controlla anche nella cartella di posta indesiderata: alcuni provider considerano inavvertitamente le nostre lettere come non attendibili.";

    // email per la conferma
    // intestazioni
    $headers = "From: $admin_email\nreply-To: noreply\r\n";
    $subject = "Conferma la tua iscrizione.";
    $header .= "X-Mailer: Il nostro Php\n";
    // costruiamo le intestazioni specifiche per il formato HTML
    $headers .= "MIME-Version: 1.0\n";
    $headers .= "Content-Type: text/html; charset=\"utf-8\"\n";
    $headers .= "Content-Transfer-Encoding: 7bit\n\n";

    //costruiamo il messaggio in formato HTML
    //corpo del messaggio
    $messaggio = "Ti ringraziamo per la tua iscrizione.<br>
    La tua email è: "
    .$email." <br>
    Il tuo username è: "
    .$username." <br>
    Il tuo codice di conferma è: "
    .$code." <br>
    Per confemare vai alla pagina <p><a href =http://partypoints.altervista.org/conferma.php>http://partypoints.altervista.org/conferma.php</a></p> e inserisci i dati per l'autenticazione.<br>
    *************** <br>
    QUESTA È SOLO UNA NOTIFICA AUTOMATICA: EVENTUALI RISPOSTE NON VERRANNO LETTE.
    SE VUOI CONTATTARCI PUOI FARLO ALL'INDIRIZZO nintendo3dsteam@yahoo.it O TRAMITE IL NOSTRO FORUM.<br>
    *************** <br>"
    ;

    // invio dell'email
    @mail($email, stripslashes($subject),stripslashes($messaggio),$headers);
    }
    }
    }
    }
    }else{
    // form per l'iscrizione
    ?>
    <h1>Modulo di partecipazione alla gara mensile:</h1>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <SPAN STYLE="color: red"><b>E-mail:</b></SPAN><br>
    <input name="email" type="text" size="30"><br>
    <SPAN STYLE="color: red"><b>Username Forumcommunity : </b></SPAN>(se non disponi di un ForumcommunityUsername clicca <a href="http://mynintendo3ds.forumcommunity.net/?act=Reg">qui</a>)<br>
    <input name="username" type="text" size="30"><br>
    <input name="submit" type="submit" value="Partecipa"><br>
    Cliccando sul pulsante "Partecipa" dichiari di aver letto e accettato il <a href="http://partypoints.altervista.org/regolamento.html">Regolamento ufficiale del servizio.</a>
    </form><br>
    <DIV ALIGN="center"><img src="http://partypoints.altervista.org/immagini/iscrizione.png"><br></DIV>
    <DIV ALIGN="center"><a href="http://partypoints.altervista.org/index.html">Vai alla home</a></DIV>
    <?
    }
    ?>

    Vi sarei veramente grato se potreste postarmi il codice della pagina d'iscrizione completo con già inclusa la funzione richiamante il captcha.
    Inoltre vorrei che mi faceste un altro piccolissimo favorino: sarebbe possibile includere un link o un pulsante per ricaricare il captcha nel caso in cui esso sia illeggibile?

    Spero di non arrecarvi troppo disturbo e lascio il destino del mio sito web nelle vostre mani.
    Grazie

    _______________________
    PartyPoints
    Ultima modifica di andreafallico : 23-04-2012 alle ore 18.18.27

  2. #2
    nicolobissacco non è connesso Utente giovane
    Data registrazione
    04-10-2011
    Messaggi
    30

    Predefinito

    perchè non usi il recaptcha di google?
    è molto semplice da usare: http://www.google.com/recaptcha

    io uso questo, è facile da cusotmizzare, facile da implementare e funziona alla grande (per ora non è mai stato bucato).

  3. #3
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Ciao e benvenuto!
    Vedi se così va bene.
    Codice PHP:
    <?php
    session_start
    ();
    // controllo sul parametro d'invio
    if(isset($_POST['submit']) && (trim($_POST['submit']) == "Partecipa"))
    {
    if(
    $_SESSION['CAPTCHA'] != strtolower($_POST['cpt'])){
    echo
    "Attenzione, codice captcha non inserito o errato.";
    }else{
    // controllo sul formato dell'email
    if((!isset($_POST['email'])) || (!eregi("^([a-z0-9\._-]+)(@[a-z0-9.-]+)(\.{1}[a-z]{2,4})$", $_POST['email'])))
    {
    echo
    "Attenzione, formato email non valido.";
    }else{

    // se i parametri sono corretti popoliamo il database
    $email = $_POST['email'];
    $username = $_POST['username'];
    $code = rand(100000, 999999);
    // ma prima controlliamo che l' username e l'email non siano già presenti includiamo il file di configurazione
    @include "config.php";

    $ctrl_username = @mysql_query("SELECT id FROM iscrizioni WHERE username='$username'") or die (mysql_error());
    if(@
    mysql_num_rows($ctrl_username)>0)
    {
    echo
    "L'username risulta già registrato.";
    }else{
    $ctrl_email = @mysql_query("SELECT id FROM iscrizioni WHERE email='$email'") or die (mysql_error());
    if(@
    mysql_num_rows($ctrl_email)>2)
    {
    echo
    "Errore: il numero massimo di utenti iscritti con lo stesso indirizzo e-mail è 2.Limite superato.";
    }else{
    // query d'inserimento
    if(@mysql_query("INSERT INTO iscrizioni (email, codiceconferma, username) VALUES('$email','$code','$username')") or die (mysql_error()))
    {
    // messaggio di conferma
    echo "Conferma l'iscrizione tramite la mail che ti abbiamo inviato.<br>Se non trovi l'e-mail controlla anche nella cartella di posta indesiderata: alcuni provider considerano inavvertitamente le nostre lettere come non attendibili.";

    // email per la conferma
    // intestazioni
    $headers = "From: $admin_email\nreply-To: noreply\r\n";
    $subject = "Conferma la tua iscrizione.";
    $header .= "X-Mailer: Il nostro Php\n";
    // costruiamo le intestazioni specifiche per il formato HTML
    $headers .= "MIME-Version: 1.0\n";
    $headers .= "Content-Type: text/html; charset=\"utf-8\"\n";
    $headers .= "Content-Transfer-Encoding: 7bit\n\n";

    //costruiamo il messaggio in formato HTML
    //corpo del messaggio
    $messaggio = "Ti ringraziamo per la tua iscrizione.<br>
    La tua email è: "
    .$email." <br>
    Il tuo username è: "
    .$username." <br>
    Il tuo codice di conferma è: "
    .$code." <br>
    Per confemare vai alla pagina <p><a href =http://partypoints.altervista.org/conferma.php>http://partypoints.altervista.org/conferma.php</a></p> e inserisci i dati per l'autenticazione.<br>
    *************** <br>
    QUESTA È SOLO UNA NOTIFICA AUTOMATICA: EVENTUALI RISPOSTE NON VERRANNO LETTE.
    SE VUOI CONTATTARCI PUOI FARLO ALL'INDIRIZZO nintendo3dsteam@yahoo.it O TRAMITE IL NOSTRO FORUM.<br>
    *************** <br>"
    ;

    // invio dell'email
    @mail($email, stripslashes($subject),stripslashes($messaggio),$headers);
    }
    }
    }
    }
    }
    }else{
    // form per l'iscrizione
    ?>
    <h1>Modulo di partecipazione alla gara mensile:</h1>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <SPAN STYLE="color: red"><b>E-mail:</b></SPAN><br>
    <input name="email" type="text" size="30"><br>
    <SPAN STYLE="color: red"><b>Username Forumcommunity : </b></SPAN>(se non disponi di un ForumcommunityUsername clicca <a href="http://mynintendo3ds.forumcommunity.net/?act=Reg">qui</a>)<br>
    <input name="username" type="text" size="30"><br>
    <img src="/captcha.php" /><br>
    <input type="text" name="cpt" size="30" /><br>
    <input name="submit" type="submit" value="Partecipa"><br>
    Cliccando sul pulsante "Partecipa" dichiari di aver letto e accettato il <a href="http://partypoints.altervista.org/regolamento.html">Regolamento ufficiale del servizio.</a>
    </form><br>
    <DIV ALIGN="center"><img src="http://partypoints.altervista.org/immagini/iscrizione.png"><br></DIV>
    <DIV ALIGN="center"><a href="http://partypoints.altervista.org/index.html">Vai alla home</a></DIV>
    <?
    }
    ?>
    Se mi dai il permesso te lo pulisco un po'.
    Ciao!

    EDIT:
    Citazione Originalmente inviato da nicolobissacco Visualizza messaggio
    usa il recaptcha di google
    La domanda non è questa.
    Ultima modifica di radiodelmomento : 28-04-2012 alle ore 13.42.29

  4. #4
    nicolobissacco non è connesso Utente giovane
    Data registrazione
    04-10-2011
    Messaggi
    30

    Predefinito

    Citazione Originalmente inviato da radiodelmomento Visualizza messaggio
    La domanda non è questa.
    Lo so, ho solo dato una mia opinione e consiglio.
    Mi ricorderò di non farlo in futuro

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da radiodelmomento Visualizza messaggio
    Ciao e benvenuto!
    Vedi se così va bene.
    Codice PHP:
    <?php
    session_start
    ();
    // controllo sul parametro d'invio
    if(isset($_POST['submit']) && (trim($_POST['submit']) == "Partecipa"))
    {
    if(
    $_SESSION['CAPTCHA'] != strtolower($_POST['cpt'])){
    echo
    "Attenzione, codice captcha non inserito o errato.";
    }else{
    // controllo sul formato dell'email
    if((!isset($_POST['email'])) || (!eregi("^([a-z0-9\._-]+)(@[a-z0-9.-]+)(\.{1}[a-z]{2,4})$", $_POST['email'])))
    {
    echo
    "Attenzione, formato email non valido.";
    }else{

    // se i parametri sono corretti popoliamo il database
    $email = $_POST['email'];
    $username = $_POST['username'];
    $code = rand(100000, 999999);
    // ma prima controlliamo che l' username e l'email non siano già presenti includiamo il file di configurazione
    @include "config.php";

    $ctrl_username = @mysql_query("SELECT id FROM iscrizioni WHERE username='$username'") or die (mysql_error());
    if(@
    mysql_num_rows($ctrl_username)>0)
    {
    echo
    "L'username risulta già registrato.";
    }else{
    $ctrl_email = @mysql_query("SELECT id FROM iscrizioni WHERE email='$email'") or die (mysql_error());
    if(@
    mysql_num_rows($ctrl_email)>2)
    {
    echo
    "Errore: il numero massimo di utenti iscritti con lo stesso indirizzo e-mail è 2.Limite superato.";
    }else{
    // query d'inserimento
    if(@mysql_query("INSERT INTO iscrizioni (email, codiceconferma, username) VALUES('$email','$code','$username')") or die (mysql_error()))
    {
    // messaggio di conferma
    echo "Conferma l'iscrizione tramite la mail che ti abbiamo inviato.<br>Se non trovi l'e-mail controlla anche nella cartella di posta indesiderata: alcuni provider considerano inavvertitamente le nostre lettere come non attendibili.";

    // email per la conferma
    // intestazioni
    $headers = "From: $admin_email\nreply-To: noreply\r\n";
    $subject = "Conferma la tua iscrizione.";
    $header .= "X-Mailer: Il nostro Php\n";
    // costruiamo le intestazioni specifiche per il formato HTML
    $headers .= "MIME-Version: 1.0\n";
    $headers .= "Content-Type: text/html; charset=\"utf-8\"\n";
    $headers .= "Content-Transfer-Encoding: 7bit\n\n";

    //costruiamo il messaggio in formato HTML
    //corpo del messaggio
    $messaggio = "Ti ringraziamo per la tua iscrizione.<br>
    La tua email è: "
    .$email." <br>
    Il tuo username è: "
    .$username." <br>
    Il tuo codice di conferma è: "
    .$code." <br>
    Per confemare vai alla pagina <p><a href =http://partypoints.altervista.org/conferma.php>http://partypoints.altervista.org/conferma.php</a></p> e inserisci i dati per l'autenticazione.<br>
    *************** <br>
    QUESTA È SOLO UNA NOTIFICA AUTOMATICA: EVENTUALI RISPOSTE NON VERRANNO LETTE.
    SE VUOI CONTATTARCI PUOI FARLO ALL'INDIRIZZO nintendo3dsteam@yahoo.it O TRAMITE IL NOSTRO FORUM.<br>
    *************** <br>"
    ;

    // invio dell'email
    @mail($email, stripslashes($subject),stripslashes($messaggio),$headers);
    }
    }
    }
    }
    }
    }else{
    // form per l'iscrizione
    ?>
    <h1>Modulo di partecipazione alla gara mensile:</h1>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <SPAN STYLE="color: red"><b>E-mail:</b></SPAN><br>
    <input name="email" type="text" size="30"><br>
    <SPAN STYLE="color: red"><b>Username Forumcommunity : </b></SPAN>(se non disponi di un ForumcommunityUsername clicca <a href="http://mynintendo3ds.forumcommunity.net/?act=Reg">qui</a>)<br>
    <input name="username" type="text" size="30"><br>
    <img src="/captcha.php" /><br>
    <input type="text" name="cpt" size="30" /><br>
    <input name="submit" type="submit" value="Partecipa"><br>
    Cliccando sul pulsante "Partecipa" dichiari di aver letto e accettato il <a href="http://partypoints.altervista.org/regolamento.html">Regolamento ufficiale del servizio.</a>
    </form><br>
    <DIV ALIGN="center"><img src="http://partypoints.altervista.org/immagini/iscrizione.png"><br></DIV>
    <DIV ALIGN="center"><a href="http://partypoints.altervista.org/index.html">Vai alla home</a></DIV>
    <?
    }
    ?>
    Se mi dai il permesso te lo pulisco un po'.
    Ciao!

    EDIT:

    La domanda non è questa.
    Grazie mille!!!
    Ora funziona!!!

Regole di scrittura

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