Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Articolo sul captcha di G. Farina non genera immagine

    Ciao a tutti,

    Ho seguito l'articolo di G. Farina che però non genera l'immagine. Il suo primo script l'ho chiamato captcha.php mentre quello che deve mostrare l'immagine indicata con sopra la stringa csuale di 6 lettere validate_captcha.php.

    Premetto che già uso le GD sia per avere delle thumbnails che un watermark sopra alle immagini e uso inoltre la nuova API di PHP - PDO - per eseguire le query al mio db.

    Qui ho aggiunto la tabella validation della guida e poi nella cartella del mio sito ho messo (sono in locale per ora con Xampp) una foto .jpeg e NON .png come nella guida di Farina , e perciò ho modificato poi di conseguenza lo script captcha.php, come qui sotto mostro.

    Il file validate_captcha.php l'ho lasciato come indicato dal tutorial.

    Ecco lo script captcha.php (ho inserito solo la query nel costrutto try/catch):

    Codice PHP:
    <?php    
    /*
    Qui mi sono creato una tabella (validation) nel mio db, in questo modo:

    CREATE TABLE validation (id_validation INT UNSIGNED NOT NULL AUTO_INCREMENT, url_key CHAR(40) UNIQUE NOT NULL, captcha CHAR(32) NOT NULL, expire_date DATETIME NOT NULL, PRIMARY KEY(id_validation));
    */

        
    require_once 'config_db.php'
           
           try
               {
                   
    $stmt $pdo->prepare("SELECT * FROM validation WHERE url_key = ? AND expire_date > NOW()");
           
                
    $stmt->execute(array($_GET['token']));

                
    $row $stmt->fetch(PDO::FETCH_ASSOC);
               }
           catch(
    PDOException $e)
            {
                echo 
    "Error!: " $e->getMessage() . "
    "
    ;
                die(); 
            } 
            
            
    //indico il percorso all'immagine
            
    $img imagecreatefromjpeg('fiore.jpeg');

            
    $source imagecolorat($imgrand(0imagesx($img)), rand(0imagesy($img)));
            
    $r = ($source >> 16 0xff) + 50;
            
    $g = ($source >> 0xff) + 50;
            
    $b = ($source 0xff) + 50
            
    $text_color imagecolorallocate($img$r$g$b);        
            
            
    //scrivo la stringa estratta dal db, contenuta nell'array $row sopra all'immagine
            
    imagestring($img5, (imagesx($img) - strlen($row['captcha']) * 5)/ 25,  $row['captcha'], $text_color); //imagestring(resource $image , int $font , int $x , int $y , string $string , int $color)

            # questa va
            //imagestring($img, 5, 20, 10, 'ciao pippo', $text_color);
             
            # anche questa va 
            //imagestring($img, 5, (imagesx($img) - strlen('ciao pippo') * 5)/ 2, 10, 'ciao pippo', $text_color); 

            
            //mostro a video l'immagine
            
    header("Content-type: image/jpeg");
            
    imagejpeg($img);
            
    imagedestroy($img);
    ?>
    Come vedete (nei commenti su imagestring() ) ho provato a fare dei tentativi, nel dubbio che forse validate_captcha.php NON riusciva ad estrarre l'array $row['captcha'] ovvero la stringa di 6 lettere da scrivere sopra all'immagine.
    Infatti se decido io di scrivere ad 'ciao pippo' sopra ecco che poi validate_captcha.php mi mostra CORRETTAMENTE la foto con la scritta!!!!.

    Traducendo in PHP se scrivo:

    Codice PHP:
    imagestring($img5, (imagesx($img) - strlen('ciao pippo') * 5)/ 210'ciao pippo'$text_color); 
    vedo la foto con la scritta in validate_captcha.php.
    Mistero!.

    Gradirei un aiuto, e sapere se ad altri lo script di Farina funziona.
    Grazie e ciao.

  2. #2
    Chiedo scusa, ma nella fretta mi sono dimenticato di inserire il link all'articolo di G. Farina che citavo:

    http://www.html.it/articoli/captcha-con-php-1/

    Purtroppo non vedo errori nel codice indicato, e non capisco il motivo per il quale non venga mostrata l'immagine con la stringa da inserire.

    Grazie e scusate ancora per il mancato link.
    Ciao

  3. #3
    Ciao,

    Della serie "chi la dura, la vince" sono riuscito a risolvere da solo, dopo almeno tre giorni di tentativi: il problema stava - come sospettavo - nel file captcha.php che non generava l'immagine a causa del file che includevo all'inizio con require, ovvero require_once 'db_config.php'.
    Infatti la guida in rete si connetteva al proprio db senza nessun include o require, e mostrava una classica stringa:

    $pdo = new PDO('mysql:host=localhost;dbname=captcha', 'root', '');

    allora ho tolto il require_once con il file, ed ho inserito PER ESTESO i dati per la connessione al db e tutto è andato a posto.

    Vorrei solo capire il motivo di tutto questo: essendo questo file - captcha.php - un file con un header destinato a creare un'immagine, ciò va allora a contrastare con la sua generazione, se io all'interno del file, gli passo un altro file tramite include oppure require?

    Grazie. Penso sia per questo, ma vorrei una risposta da qualcuno più esperto del sottoscritto.
    Ciao.

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.