Problema captcha ?

  • Creatore Discussione Creatore Discussione Manu93
  • Data di inizio Data di inizio

Manu93

Nuovo Utente
14 Set 2015
27
0
0
Buongiorno a tutti, sto provando ad inserire un sistema captcha nel mio form, ho trovato parecchie guide su google (ovviamente), l'unico problema è che qualsiasi codice io scriva mi da il seguente errore "l'immagine non può essere visualizzata perchè contiene errori". Come risolvo? Ecco il codice:

PHP:
<?php
session_start();

$x = 200;
$y = 75;

//creaiamo la stringa random e criptiamola
$crypt = sha1(microtime() * mktime());

//preleviamo una porzione della stringa
$str = substr($crypt,0,6);

$code = $str;
$space = $x / (strlen($code)+1);
$img = imagecreatetruecolor($x,$y);
$bg = imagecolorallocate($img,255,255,255);
$border = imagecolorallocate($img,0,0,0);
$colors[] = imagecolorallocate($img,128,64,192);
$colors[] = imagecolorallocate($img,192,64,128);
$colors[] = imagecolorallocate($img,108,192,64);
imagefilledrectangle($img,1,1,$x-2,$y-2,$bg);
imagerectangle($img,0,0,$x-1,$y-2,$border);
for ($i=0; $i< strlen ($code); $i++)
{
$color = $colors[$i % count($colors)];
imagettftext($img,28+rand(0,8),-20+rand(0,40),($i+0.3)*$space,50+rand(0,10),$color,'Vera.ttf',$code{$i});
}
for($i=0;$i<400;$i++)
{
$x1 = rand(3,$x-3);
$y1 = rand(3,$y-3);
$x2 = $x1-2-rand(0,8);
$y2 = $y1-2-rand(0,8);
imageline($img,$x1,$y1,$x2,$y2,$colors[rand(0,count($colors)-1)]);
}
$_SESSION['control'] = sha1($str);
header("Content-type: image/png");
imagepng($img);
?>
 
Ultima modifica di un moderatore:
Scusa, potresti spiegarmi come inserire questo captcha per favore? Non sono molto pratico con la libreria GD.
 
Allora guarda ti allego lo script che uso io

Crea un file che chiami code.php
PHP:
<?php
session_start();
//Creo un testo random di 5 caratteri
$testo = md5(microtime());
$testo = substr($testo, 0, 5);

//Utilizzo un immagine di sfondo PNG (la trovi allegata)
$img = imagecreatefrompng("code.png");

// Colore testo. Questa funzione è ottima nel caso tu sia molto attento alla parte grafica del sito. E' in formato RGB
$color = imagecolorallocate($img, 0, 0, 0);

// Unisco immagine e testo
imagestring($img, 100, 35, 15, $testo, $color);

// Mi salvo il codice in una variabile di sessione
$_SESSION['COD'] = $testo;

//Visualizzo l'immagine
header("Content-type: image/png");
imagejpeg($img);
?>

questo è il png che puoi utilizzare deve stare nella stessa cartella del file code.php e deve chiamarsi code.png se cambi nome ricordarlo di cambiarlo anche sul codice
code.png

nel form inserisci
HTML:
<img src="code.php" alt="Codice Captcha"/>
<input name="cod" type="text" id="cod" size="5" maxlength="5"/>

nel controllo farai

PHP:
if ($_SESSION['COD']==$_POST['cod'])
{ 
OK
}
else
{
CAPTCHA SBAGLIATO
}
 
Ho fatto ciò che hai detto, quindi ho creato un file chiamato code.php dove ho inserito il primo script, poi in un altro file chiamato "esempio.php" ho inserito : <img src="code.php" alt="Codice Captcha"/>
<input name="cod" type="text" id="cod" size="5" maxlength="5"/>
solo che non mi mostra l'immagine, ma semplicemente la scritta "Codice Captcha" (data dall'attributo 'alt'). Se provo invece ad aprire il file code.php mi da sempre il solito errore, ergo "l'immagine non può essere visualizzata perchè contiene errori".
 
Potresti dirmi come devo utilizzare questo script? O meglio ancora dove sbaglio?
 
code.png

Questa è l'immagine da mettere nella stessa cartella del file code.php
 
Vedi l'allegato 2818

Questa è l'immagine da mettere nella stessa cartella del file code.php

Scusa ma non capisco a cosa ti riferisci. Allora io ho una cartella contenente 3 file: code.php, form.html (con i rispettivi codici che mi hai fornito tu) e l'immagine code.png. Tutti e 3 nella stessa cartella, però se apro form.html, non mi visualizza l'immagine ma solo l'input type text. Se apro code.php mi dice "l'immagine non può essere visualizzata perchè contiene errori". Dove sbaglio?
 
Ultima modifica:
credo il problema sia con la libreria, hai controllato che sia attiva?

PHP:
phpinfo();

gd.JPG
 
credo il problema sia con la libreria, hai controllato che sia attiva?

PHP:
phpinfo();

Vedi l'allegato 2820

Si è attiva. Mi da questi valori.

GD Support enabled
GD Version 2.1.1-dev
FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.5.2
GIF Read Support enabled
GIF Create Support enabled
JPEG Support enabled
libJPEG Version 8
PNG Support enabled
libPNG Version 1.2.51
WBMP Support enabled
XPM Support enabled
libXpm Version 30411
XBM Support enabled
WebP Support enabled
 

Discussioni simili