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.