<?PHP 
session_start(); 
session_register('login_validate'); 
$type = 'gif'; 
$width= 40; 
$height= 16; 
header("Content-type: image/".$type); 
srand((double)microtime()*1000000); 
$randval = randStr(4,""); 
if($type!='gif' && function_exists('imagecreatetruecolor')){ 
$im = @imagecreatetruecolor($width,$height); 
}else{ 
$im = @imagecreate($width,$height); 

$r = Array(225,211,255,223); 
$g = Array(225,236,237,215); 
$b = Array(225,236,166,125); $key = rand(0,3); $backColor = ImageColorAllocate($im,$r[$key],$g[$key],$b[$key]);//背景色(随机) 
$borderColor = ImageColorAllocate($im, 0, 0, 0);//边框色 
$pointColor = ImageColorAllocate($im, 255, 170, 255);//点颜色 @imagefilledrectangle($im, 0, 0, $width - 1, $height - 1, $backColor);//背景位置 
@imagerectangle($im, 0, 0, $width-1, $height-1, $borderColor); //边框位置 
$stringColor = ImageColorAllocate($im, 255,51,153); for($i=0;$i<=100;$i++){ 
$pointX = rand(2,$width-2); 
$pointY = rand(2,$height-2); 
@imagesetpixel($im, $pointX, $pointY, $pointColor); 
} @imagestring($im, 3, 5, 1, $randval, $stringColor); 
$ImageFun='Image'.$type; 
$ImageFun($im); 
@ImageDestroy($im); 
$_SESSION['login_validate'] = $randval; 
//产生随机字符串 
function randStr($len=6,$format='ALL') { 
switch($format) { 
case 'ALL': 
$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; break; 
case 'CHAR': 
$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; break; 
case 'NUMBER': 
$chars='0123456789'; break; 
default : 
$chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; 
break; 

$string=""; 
while(strlen($string)<$len) 
$string.=substr($chars,(mt_rand()%strlen($chars)),1); 
return $string; 

?>调用代码
<script language="javascript">
function RefershImage(){
     var el = document.getElementById("chkimg");
     el.src = 'show.php';
    }
</script>
<body>
      <img src="yz.php" name="chkimg" onMouseUP="RefershImage()" /> //yz.php就是上面生成验证码的文件名
<?body>有两个问题
1.只显示红X,但4位验证码已经生成了。为什么?
2.RefershImage()点击刷新验证码的函数,好像无效。哪写错了

解决方案 »

  1.   

    php 是否有支持GD库的DLL.没有就将这个DLL加入 
    php.ini
    extension=php_gd2.dll
    去掉前面的;
      

  2.   

     <img src="yz.php" name="chkimg" onMouseUP="RefershImage()" /> //yz.php就是上面生成验证码的文件名
    这里哪有id属性?可是你的引用上却用到了
    <script language="javascript">
        function RefershImage(){
             var el = document.getElementById("chkimg");
             el.src = 'show.php';
        }
    </script>当然问题也许不是这样。还有你可以用多种浏览器进行测试!看是否有的能显示,而有不行。先排除是否浏览器兼容问题。从JS,到后台。再到细节化PHP调试。
      

  3.   

    生成验证码的文件中不要有任何的 html 输出
      

  4.   

    session_register('login_validate'); 
    这种写法必须完善的设置过 php.ini 后才能使用。应改做对 $_SESSION 赋值
      

  5.   


    <?php
    session_start(); 
    $type = 'gif'; 
    header("Content-type: image/".$type); 
    $width= 40; 
    $height= 16; 
    $im=imagecreatetruecolor($width,$height);
    srand((double)microtime()*1000000); 
    $randval = randStr(4,""); /*
    if($type!='gif' && function_exists('imagecreatetruecolor')){ 
    $im = @imagecreatetruecolor($width,$height); 
    }else{ 
    $im = @imagecreate($width,$height); 

    */$r = Array(225,211,255,223); 
    $g = Array(225,236,237,215); 
    $b = Array(225,236,166,125); 
    $key = rand(0,3);$backColor = ImageColorAllocate($im,$r[$key],$g[$key],$b[$key]);//背景色(随机) 
    $borderColor = ImageColorAllocate($im, 0, 0, 0);//边框色 
    $pointColor = ImageColorAllocate($im, 255, 170, 255);//点颜色 
    imagefill($im,0,0,$backColor);
    $border_color = imagecolorallocate($im,200,200,200);
    imagerectangle($im, 0, 0, $width-1, $height-1, $borderColor); //边框位置 
    $stringColor = ImageColorAllocate($im, 255,51,153); for($i=0;$i<=100;$i++){
    $pointX = rand(2,$width-2);
    $pointY = rand(2,$height-2);
    imagesetpixel($im,$pointX,$pointY,$pointColor);
    }imagestring($im,3,5,1,$randval,$stringColor); 
    //$ImageFun='Image'.$type; 
    //$ImageFun($im); $_SESSION['login_validate'] = $randval; 
    imagegif($im);
    imagedestroy($im); 
    //$_SESSION['login_validate'] = $randval; 
    //产生随机字符串 
    function randStr($len=6,$format='ALL') { 
    switch($format) { 
    case 'ALL': 
    $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; break; 
    case 'CHAR': 
    $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; break; 
    case 'NUMBER': 
    $chars='0123456789'; break; 
    default : 
    $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; 
    break; 

    $string=""; 
    while(strlen($string)<$len) 
    $string.=substr($chars,(mt_rand()%strlen($chars)),1); 
    return $string; 

    ?>可以了.你先把这个PHP执行一下看看能否直接生成图片验证,可以了再去做JS下的测试!错误总共有3个地方,具体我就不标注了,改了3个地方,风格和楼主你的代码尽可能一致!不做过多修改!区别点,自己比对一下以前的代码就可以了!