我的任務是使用數據庫中的數據創建圖形。我已經用給定的信息完成了以下PHP代碼。使用PHP的圖形用法(使用數據庫中的數據創建條形圖)
<?php
# ------- The graph values in the form of associative array
$values1 = array (
"Shopping" => 8491,
"Transport" => 8098,
"Food & beverages" => 7975,
"Accommodation" => 6130,
"Expenditure" => 894,
"Others" => 2667
);
$values2 = array (
"Shopping" => 13149,
"Transport" => 10019,
"Food & beverages" => 9691,
"Accommodation" => 5028,
"Expenditure" => 1097,
"Others" => 3362
);
$img_width = 450;
$img_height = 300;
$margins = 20;
# ---- Find the size of graph by substracting the size of borders
$graph_width = $img_width - $margins * 2;
$graph_height = $img_height - $margins * 2;
$img = imagecreate($img_width, $img_height);
$bar_width = 20;
$total_bars = count($values1 + $values2);
$gap = ($graph_width - $total_bars * $bar_width)/($total_bars + 1);
# ------- Define Colors ----------------
$bar_color = imagecolorallocate($img, 0, 64, 128);
$bar_color2 = imagecolorallocate($img, 100, 64, 128);
$label_color = imagecolorallocate($img, 0, 0, 0);
$background_color = imagecolorallocate($img, 240, 240, 255);
$border_color = imagecolorallocate($img, 200, 200, 200);
$line_color = imagecolorallocate($img, 220, 220, 220);
# ------ Create the border around the graph ------
imagefilledrectangle($img, -10, 1, $img_width + 8, $img_height - 2, $border_color);
imagefilledrectangle($img, $margins, $margins, $img_width - 1 - $margins, $img_height - 1 - $margins, $background_color);
# ------- Max value is required to adjust the scale -------
$max_value = max($values2);
$ratio = $graph_height/$max_value;
# -------- Create scale and draw horizontal lines --------
$horizontal_lines = 20;
$horizontal_gap = $graph_height/$horizontal_lines;
for($i = 1; $i <= $horizontal_lines; $i++) {
$y = $img_height - $margins - $horizontal_gap * $i ;
imageline($img, $margins, $y, $img_width - $margins, $y, $line_color);
$v = intval($horizontal_gap * $i/$ratio);
imagestring($img, 0, 0, $y - 5, $v, $bar_color);
}
# ----------- Draw the bars here ------
for($i = 0; $i < $total_bars; $i++) {
# ------ Extract key and value pair from the current pointer position
list($key, $value) = each($values1);
$x1 = $margins + $gap + $i * ($gap + $bar_width) ;
$x2 = $x1 + $bar_width;
$y1 = $margins + $graph_height - intval($value * $ratio) ;
$y2 = $img_height - $margins;
imagestring($img, 0, $x1 + 1, $y1 - 10, $value, $bar_color);
imagestring($img, 0, $x1 + 1, $img_height - 15, $key, $label_color);
imagefilledrectangle($img, $x1, $y1, $x2, $y2, $bar_color);
}
for($i = 0; $i < $total_bars; $i++) {
# ------ Extract key and value pair from the current pointer position
list($key, $value) = each($values2);
$x1 = ($margins + $gap + $i * ($gap + $bar_width)) + 22 ;
$x2 = $x1 + $bar_width;
$y1 = $margins + $graph_height - intval($value * $ratio) ;
$y2 = $img_height - $margins;
imagestring($img, 0, $x1 + 1, $y1 - 10, $value, $bar_color2);
imagefilledrectangle($img, $x1, $y1, $x2, $y2, $bar_color2);
}
header("Content-type:image/png");
imagepng($img);
當我嘗試將給定的信息替換爲下面的代碼時,它不起作用。
include('conn.php');
# ------- The graph values in the form of associative array
$values1_query = mysql_query("SELECT * FROM domestic_visitors WHERE year = 2010");
if(!$values1_query) {
die("Database query failed: " . mysql_error());
}
while ($row = mysql_fetch_array($values1_query)) {
$values1_array = array($row["component"] => $row["total"]);
}
已經嘗試了幾天,但我只是不知道錯誤是什麼。
謝謝你的幫助。
試過你的代碼,它不起作用。該圖還沒有顯示出來。預期的輸出是這樣的 - > https://drive.google.com/file/d/0B4evf35NA5_5NG8zM2hUY2tRREk/view?usp=sharing –
您的問題(第一個框)中的代碼已經生成了您發佈的預期輸出,當我嘗試。所以它已經滿足了預期的輸出!那麼你面臨的問題是什麼?據我所知,你已經編寫了繪製圖表的代碼(就像在第一個框中一樣),而你現在在使用MySQL表中的數據並將數據放入條形圖時遇到了問題,這就是我試圖回答。 –