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($img, rand(0, imagesx($img)), rand(0, imagesy($img)));
$r = ($source >> 16 & 0xff) + 50;
$g = ($source >> 8 & 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($img, 5, (imagesx($img) - strlen($row['captcha']) * 5)/ 2, 5, $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($img, 5, (imagesx($img) - strlen('ciao pippo') * 5)/ 2, 10, '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.