Visualizzazione risultati 1 fino 15 di 15

Discussione: Aiuto captcha Anti Spam

  1. #1
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito Aiuto captcha Anti Spam

    Salve,

    Sto provando, su Altervista, a creare un'immagine anti - spam mischiando cose apprese da due tutorial diverse, sono arrivato a scrivere questo codice:
    Codice PHP:
    <?php
    $str
    = md5(microtime());
    $antiSpam = substr($str, 0, 5);

    $texture = imagecreatefrompng("image/anti_spam.png");
    $source = imagecolorat(0, imagesx($texture), round(0, imagesy($texture)));
    $color = imagecolorallocate($texture, 255, 255, 255);
    imagestring($texture, 5, 5, 5);

    header("Content-Type: image/png");
    ?>
    Ora ho un po di domande da farvi su questo codice:

    L'immagine mi viene creata, ma non mi si vede anche se l'immagine esiste, ora mi chiedo, AlterVista supporta le funzione che ho adoperato? se si cosa ho potuto sbagliare?

    Potarsi che ora mi sfugge come fare, ma se includo questo codice dentro ad un form, come potrei visualizzarlo solo in quella parte di codice senza che l'header mi consideri tutta la pagina come immagine?

    Sevenjeak
    Software developer and much more

  2. #2
    L'avatar di foreach
    foreach non è connesso Altervistiano Junior
    Data registrazione
    11-06-2008
    Residenza
    3 metri sotto terra
    Messaggi
    501

    Predefinito

    A prima vista non vedo la funzione che immette il testo sull'immagine, poi devi anche caricare un font ttf da usare come carattere con cui il testo verrà scritto.

    Ricordati: non generare il codice antispam nella stessa pagina in cui crei l'immagine, altrimenti non lo puoi recuperare per confrontarlo con quello digitato dall'utente. Puoi usare una variabile con $_GET che prende il testo da mettere in immagine e fargli passare una stringa random che generi nella pagina dove c'è il form, in modo da mettere la stessa stringa in un input nascosto per poi confrontarlo.


    Tanti saluti,
    foreach
    Codice PHP:
    foreach($vettore as $chiave => $valore) {
    echo 
    "Ciao";


  3. #3
    Guest

    Predefinito

    ho creato una guida
    qui

  4. #4
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    @seingh: sto leggendo proprio ora la guida, vi farò sapere

    EDIT:

    Ok, il codice si capisce e funziona, anche se non conosco alcune funzione che hai usato, cmq grazie a tutti e due

    P.S.: Scusate un'altra domando, ho aggiunto questo codice javascript per aggiornare l'immagine anti-spam:
    Codice HTML:
    <script type="text/javascript">
      function reload_code() 
     {
        var el = document.getElementByUd(/* id elemento */);
        
        el.src = "";
        el.src = /* immagine anti spam */
     }
    </script>
    Ora ho inserito questa funzione nell'href di un link, la funzione mi aggiorna l'immagine, ma solo una volta, come mai? forse non è cosi che dovrei aggiornare l'immagine?
    Ultima modifica di sevenjeak : 27-03-2010 alle ore 13.43.08

    Sevenjeak
    Software developer and much more

  5. #5
    Guest

    Predefinito

    a me sembrava di facile comprensione...
    cmq devi aggiornare l'immagine

  6. #6
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    @sevenjeak
    Per aggiornare l'immagine fai così:
    Codice HTML:
    ...
    el.src = "cartella/captcha.png?reload="+Math.floor(Math.random() * 100);
    ...

  7. #7
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    Citazione Originalmente inviato da seingh Visualizza messaggio
    a me sembrava di facile comprensione...
    cmq devi aggiornare l'immagine
    Cosa indenti, forse mi è sfuggito qualcosa?

    Sevenjeak
    Software developer and much more

  8. #8
    L'avatar di foreach
    foreach non è connesso Altervistiano Junior
    Data registrazione
    11-06-2008
    Residenza
    3 metri sotto terra
    Messaggi
    501

    Predefinito

    Citazione Originalmente inviato da andreafallico Visualizza messaggio
    @sevenjeak
    Per aggiornare l'immagine fai così:
    Codice HTML:
    ...
    el.src = "cartella/captcha.png?reload="+Math.floor(Math.random() * 100);
    ...

    E ricordati anche di aggiornare il contenuto dell'input nascosto per poi confrontarlo




    foreach
    Codice PHP:
    foreach($vettore as $chiave => $valore) {
    echo 
    "Ciao";


  9. #9
    Guest

    Predefinito

    Citazione Originalmente inviato da sevenjeak Visualizza messaggio
    Cosa indenti, forse mi è sfuggito qualcosa?
    no... intendo che secondo me lo script é semplice...
    no... intendo che secondo me lo script é semplice...
    Codice PHP:
    session_start();

    define("Niente", 0);
    define("facile", 30);
    define("medio", 50);
    define("difficile", 80);
    define("super_difficile", 100);

    define("punto", 1);
    define("linea", 2);
    session_start(); avvia una nuova sessione
    Codice PHP:
    define("Niente", 0);
    define("facile", 30);
    define("medio", 50);
    define("difficile", 80);
    define("super_difficile", 100);
    definisci le varie modalitá
    Codice PHP:
    /* dimensioni */
    $x = 200; //larghezza
    $y = 80; //altezza

    $image = imagecreatetruecolor($x, $y); //creo l'immagine
    ci sono i commenti
    $color = array();
    Codice PHP:
    $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);
    definisco un array di colori
    Codice PHP:
    $font = array();
    $font[] = "font/arial.ttf";
    $font[] = "font/abbeyroad_regular.ttf";
    $font[] = "font/roman_sd_regular.ttf";
    $font[] = "font/elephants_in_cherry_trees_normal.ttf";
    definisco un array di font
    Codice PHP:
    $black = imagecolorallocate($image, 0, 0, 0);
    imagefill($image, 0, 0, $black);
    add_noise($image, facile, punto, $x, $y); //aggiungo il disturbo
    "spiego" che $black equivale a nero e aggiungo il disturbo (le linee)
    Codice PHP:
    $_SESSION['CAPTCHA'] = strtolower(getString()); //genero la nuova stringa
    definisco la sessione
    Codice PHP:
    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
    );
    }
    qui ho spiegato tutto nei commenti
    Codice PHP:
    header("Content-type: image/png");

    imagepng($image);
    imagedestroy($image);
    definisco che il contenuto della pagina é una png, creo l'immagine
    Codice PHP:
    function getString() {
    $str = base64_encode(time());
    $str = str_replace("=", "", $str); //elimino gli =
    $str = str_shuffle($str);
    return
    substr($str, 0, 6);
    }
    elimino gli =
    Codice PHP:
    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
    é spiegato nei commenti
    Codice PHP:
    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;
    }
    }

    }
    questo é di facile comprensione

  10. #10
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    Si si, questo come già avevo detto l'ho capito, solamente alcune funzione che non ho mai usato, alcune funzione per l'immagine ad esempio non le conosco, visto che non ho mai creato un'immagine con php fino ad ora.

    Infatti il codice funzione, solamente due cose non ho capito, che non mi permettono di controllare l'immagine quando l'aggiorno, e sono:

    con javascript ricaricho l'immagine utilizzando la variabile reload, il javascript mi funziona, ma la variabile reload dove viene definita? perché a me non risulta esistere

    per input nascosto intendete dire la sessione che contiene il chapcha? visto che aggiorna la pagina il codice non dovrebbe essere rieseguito permettendo l'aggiornamento della sessione?

    Premetto di non aver mail creato un'immagine in php, forse e per questo che non ho molto chiaro quello che dite
    Ultima modifica di sevenjeak : 27-03-2010 alle ore 19.30.04

    Sevenjeak
    Software developer and much more

  11. #11
    L'avatar di andreafallico
    andreafallico non è connesso Super Moderatore
    Data registrazione
    02-06-2009
    Messaggi
    1,981

    Predefinito

    La variabile reload la puoi chiamare come vuoi tu e non deve essere usata. Viene aggiunta solo per cambiare il nome dell'immagine e forzare il browser a visualizzare la versione aggiornata dell'immagine (cache).
    Per la seconda domanda, non viene utilizzato un input nascosto ma, come hai detto tu, vengono utilizzate le sessioni.

  12. #12
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    e come mai lo script mi funziona, ma quando aggiorno la pagina pur scrivendo lo stesso codice non me lo riconosce, anche la sessione dovrebbe essere aggiornata no?
    Ultima modifica di sevenjeak : 27-03-2010 alle ore 20.12.06

    Sevenjeak
    Software developer and much more

  13. #13
    Guest

    Predefinito

    Nella guida ho scritto come integrarlo in HTML e se il codice è sbagliato l'immaggine si aggiorna cmq un reload lo puoi fare così
    assegnare il pezzo dell' immaggine a una variabile per esempio $immagine
    poi fare un link
    Codice:
    onclick="<?php isset($immagine);
    session_start();
    $immagine = 'scrivi il codice dell'immagine (non quello php ma quello per integrarlo in HTML';
    ?>";
    Ultima modifica di musicanapoli : 27-03-2010 alle ore 21.57.59 Motivo: Codice racchiuso tra i tags

  14. #14
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    Ho provato ad aggiungere, nel file chapta.php, sotto session_start() questa condizione:
    Codice PHP:
    if (isset($immaggine)) {
    $_SESSION["CAPTCHA"] = strtolower(getString());
    }
    Non saprei se era quello che intendevi dirmi, resta il fatto che ora funzione ( non so perché non ho pensato di farlo prima ), grazie a tutti per l'aiuto e i chiarimenti sui metodi usati
    Ultima modifica di sevenjeak : 27-03-2010 alle ore 22.31.27

    Sevenjeak
    Software developer and much more

  15. #15
    Guest

    Predefinito

    Si volevo dire questo... :-)

Regole di scrittura

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