Jump to content

what's wrong with the php generate image bar chart code?


runeveryday

Recommended Posts

the database is right:

 

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);

 

 

the code:

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

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

    $result = mysql_query("SELECT * FORM 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;
    $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);

 

it shows an error: the image...cannot be displayed because it contains errors?. what's wrong with the code? thank you

Link to comment
Share on other sites

You should be developing and debugging your code on a system with error_reporting set to E_ALL and display_errors set to ON so that all the php detected errors will be reported and displayed. You will save a ton of time.

 

Your query is failing due to a typo in sql syntax, you have not defined the $bar_height variable, and you are likely getting an error concerning the font filename.

 

You will need to browse directly to the page containing that code to see the php errors that are output after you set the error_reporting/display_errors settings and if output_buffering is on, you will need to turn that off as well.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.