2011-08-18 21 views
0

数据库是正确的:为什么条形图代码不起作用?

DATABASE `poll`; TABLE `results` CREATE TABLE `results` ( 
    book_type VARCHAR(50), 
    num_votes INT 
); 

INSERT INTO `results` values 
    ('Classic', 15), 
    ('Fantasy', 7), 
    ('Humor', 32), 
    ('Mystery', 12), 
    ('Poetry', 25); 

代码

<?php 
    $dbhandle = mysql_connect("localhost","root","123") or die("unable to connect to mysql"); 

    $selected = mysql_select_db("poll",$dbhandle); 

    $result = mysql_query("SELECT * FROM results"); 

    $num_poller = mysql_num_rows($result); 

    $total_votes = 0; 
    while($row = mysql_fetch_array($result)){ 
     $total_votes += $row{'num_votes'}; 

    } 

    mysql_data_seek($result,0); 
    mysql_close($dbhandle); 

    putenv('GDFONTPATH=C:\WINDOWS\Fonts'); 
    $font = 'arial'; 
    $y = 50; 
    $width =700; 
    $bar_height =20; 
    $height = $num_poller * $bar_height *1.5 + 70; 
    $bar_unit = ($width - 400)/100; 

    $image = imagecreate($width,$height); 

    $white = imagecolorallocate($image,255,255,255); 
    $black = imagecolorallocate($image,0,0,0); 
    $red = imagecolorallocate($image,255,0,0); 
    $blue = imagecolorallocate($image,0,0,255); 

    imagefill($image,$width,$height,$white); 

    imagerectangle($image,0,0,$width-1,$height-1,$black); 

    imagettftext($image,16,0,$width/3+50,$y-20,$black,$font,'poll results'); 

    while($row = mysql_fetch_object($result)){ 
     if($total_votes > 0){ 
      $percent = intval(round(($row->num_votes/$total_votes)*100)); 

     }else{ 
      $percent =0; 

    } 

    imagettftext($image,12,0,10, $y+($bar_height/2), $black, $font, $row->book_type); 
    //Output percentage for a particular value 
    imagettftext($image, 12, 0, 170, $y + ($bar_height/2),$red,$font,$percent.'%'); 

    $bar_length = $percent * $bar_unit; 

    //Draw a shape that corresponds to 100% 
    imagerectangle($image, $bar_length+221, $y-2, (220+(100*$bar_unit)), $y+$bar_height, $black); 
    //Output a bar for a particular value 
    imagefilledrectangle($image,220,$y-2,220+$bar_length, $y+$bar_height, $blue); 
    //Output the number of votes 
    imagettftext($image, 12, 0, 250+100*$bar_unit, $y+($bar_height/2), $black, $font, $row->num_votes.' votes cast.'); 


    $y = $y + ($bar_height * 1.5); 

    }  

    header("Content-Type: image/jpeg");  

    imagejpeg($image);  

    imagedestroy($image); 

它显示了一个错误:the image...cannot be displayed because it contains errors?。代码有什么问题?谢谢。

+3

['的error_reporting(E_ALL);'](http://php.net/manual/en/function.error-reporting.php)应先上。 –

+0

我加了error_reporting(E_ALL);到代码第一。仍然没有任何错误提示。 – zhuanzhou

+1

通过代码和'出口(的var_dump($ some_variables))'去,并确保你看到的你应该。 –

回答

0

要得到实际的错误,你似乎运行到你想打开使用error_reporting像@Wesley在意见建议。 error_reporintg(-1);然后醚看着你php.error-log或删除header("Content-Type: image/jpeg");所以你的错误在您的浏览器,如果你已经把display_errors上。

通常你得到一个“畸形”的错误,因为响应看起来是这样的:

Warning: Some error..... 
ZWW$%$%BINARY-IMAGE-STUFF 

你的浏览器不能得到从输出合适的JPEG头。

相关问题