Codice Captcha

di il
0 risposte

Codice Captcha

Ho provato a mettere a posto il codice più volte per fare un controllo captcha su un form,

esegue la scrittura sul database, non mi dà alcun errore, ma non riesco a vedere l'immagine,

già dal primo avvio dell'applicazione, del codice captcha da inserire nel textbox :

<?php


function random_string($len)
{
   $string = "";
   $chars = array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
               "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
               "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G",
               "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
               "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2",
               "3", "4", "5", "6", "7", "8", "9");
   for($i = 0; $i < $len; ++$i)
   {
      shuffle($chars);
      $string .= $chars[0];
   }
   
   return $string;
}

$message = 'Inserisci la scringa alphanumerica <br/> per effettuare la validazione:';

$pdo = new PDO('mysql:host=localhost;dbname=miodb', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

if(isset($_POST['validate_token']))
{
   // Eseguo la validazione
   $stmt = $pdo->prepare("SELECT * FROM validation WHERE url_key = ? AND expire_date > NOW()");
   $stmt->execute(array($_POST['token']));

   $row = $stmt->fetch(PDO::FETCH_ASSOC);
   
   $message = ($row && ($row['captcha'] == $_POST['validate_token'])) ? 'token corretto' : 'token <strong>NON</strong> corretto';
   $stmt = $pdo->prepare("DELETE FROM validation WHERE url_key = ?");
   $stmt->execute(array($_POST['token']));
}

// Elimino tutti i record scaduti
$pdo->query("DELETE FROM validation WHERE expire_date <= NOW()");

// Genero casualmente un record per la tabella validation
$url_key = sha1(uniqid(rand(), true)); // Possiamo (e dovremmo) fare meglio
$captcha = random_string(6);
$stmt = $pdo->prepare("INSERT INTO validation (id, url_key, captcha, expire_date) VALUES ('', ?, ?, DATE_ADD(NOW(), INTERVAL 5 MINUTE))");
$stmt->execute(array($url_key, $captcha));

?>
<?php

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

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

$row = $stmt->fetch(PDO::FETCH_ASSOC);

$texture = imagecreatefrompng('texture3.png');

$source = imagecolorat($texture, rand(0, imagesx($texture)), rand(0, imagesy($texture)));
$r = ($source >> 16 & 0xff) + 50;
$g = ($source >> 8 & 0xff) + 50;
$b = ($source & 0xff) + 50;
$text_color = imagecolorallocate($texture, $r, $g, $b);

imagestring($texture, 5, (imagesx($texture) - strlen($row['captcha']) * 5)/ 2, 5,  $row['captcha'], $text_color);

header('Content-Type: img/png');

imagepng($texture);

imagedestroy($texture);

?> 
Devi accedere o registrarti per scrivere nel forum
0 risposte