Page Nav

HIDE

Grid

GRID_STYLE

Breaking News

latest

Membuat Hasil Polling dengan Pie Chart di PHP

Pada artikel sebelumnya kita telah mendiskusikan bagaimana membuat pie chart. Sekarang pie chart tersebut akan kita gunakan untuk melengkap...

Pada artikel sebelumnya kita telah mendiskusikan bagaimana membuat pie chart. Sekarang pie chart tersebut akan kita gunakan untuk melengkapi hasil polling yang telah kita buat sebelumnya. Sekedar mengingatkan, skrip dari aplikasi jajak pendapat tersebut adalah sebagai berikut:

<HTML>
<HEAD>
<TITLE> Jajak Pendapat </TITLE>
</HEAD>
<BODY>
<H1> Jajak Pendapat </H1>
<H2> Pilih Calon Presiden Terbaik 2009<br>

<FORM NAME="poll" METHOD="post" ACTION="hasil_polling.php">
<?
$host = "localhost";
$user = "root";
$passwd = "root";
$conn = @mysql_connect($host,$user,$passwd)
    or die("Koneksi gagal: " . mysql_error());
mysql_select_db("polling",$conn);
$strSQL = "select nama from tbl_datapoll";
$qry = @mysql_query($strSQL,$conn)
    or die("Query salah: " . mysql_error());

while ($row = mysql_fetch_array($qry)) {
?>
<INPUT TYPE="radio" NAME="capres" VALUE="<?=$row['nama']?>">
<?=$row['nama']?> <br />
<?
}
?>
<br />
<INPUT TYPE="submit" VALUE="VOTE!">
</FORM>
</BODY>
</HTML>

Nah, sekarang skrip untuk mengolah suara akan kita ganti sehingga output yang dihasilkan nantinya berupa pie chart, bukan balok. Skripnya adalah sebagai berikut:

<?
Header("Content-Type:image/jpeg");
// --- Koneksi ke MySQL --- //
$host = "localhost";
$user = "root";
$passwd = "root";
$capres = $_POST['capres'];
$conn = @mysql_connect($host,$user,$passwd)
    or die("Koneksi gagal: " . mysql_error());
mysql_select_db("polling",$conn);

// --- mengupdate suara --- //
$strSQL = "update tbl_datapoll set suara=suara+1 where nama='$capres'";
$upd = @mysql_query($strSQL,$conn)
    or die("Query salah: " . mysql_error());

// --- Ambil data dari database --- //
$strSQL = "select * from tbl_datapoll";
$qry = @mysql_query($strSQL,$conn)
    or die("Query salah: " . mysql_error());

// --- menentukan data yang akan dibuat pie chartnya --- //
$i=0;
while ($row=mysql_fetch_array($qry)) {
    $data[$i] = $row["suara"];
    $str[$i] = "$row[nama]" . " = " . "$row[suara]";
    $i++;
}

// --- deklarasi variabel --- //
$total = 0;
$d = array();
$kor_x = array();
$kor_y = array();
$t_x = array();
$t_y = array();

// --- menentukan besar sudut setiap bagian pie --- //
for($j=0;$j<=$i-1;$j++) {
    $total += $data[$j];
}
$d[0] = 0;
for($x=1;$x<=$i;$x++) {
    $d[$x] = ($data[$x-1]/$total) * 360;
    $d[$x] += $d[$x-1];
}

// --- menentukan warna --- //
$img = ImageCreate(700,700);
$warna[0] = ImageColorAllocate($img,0,255,0);
$warna[1] = ImageColorAllocate($img,255,0,0);
$warna[2] = ImageColorAllocate($img,0,0,255);
$warna[3] = ImageColorAllocate($img,255,0,255);
$warna[4] = ImageColorAllocate($img,255,255,0);
$warna[5] = ImageColorAllocate($img,128,128,128);
$warna[6] = ImageColorAllocate($img,255,128,0);
$warna[7] = ImageColorAllocate($img,0,150,255);
$warna[8] = ImageColorAllocate($img,112,0,255);
$warna[9] = ImageColorAllocate($img,128,255,0);
$warna[10] = ImageColorAllocate($img,40,255,153);
$hitam = ImageColorAllocate($img,0,0,0);
$putih = ImageColorAllocate($img,255,255,255);
ImageFill($img,0,0,$putih);

// --- membentuk pie --- //
for($k=1;$k<=$i;$k++) {

// --- menggambar bagian-bagian pie --- //
ImageArc($img,150,150,250,250,$d[$k-1],$d[$k],$hitam);
    // --- mencari koordinat batas --- //
    $kor_x[$k] = round(150+(125*cos(deg2rad($d[$k-1]))));
    $kor_y[$k] = round(150+(125*sin(deg2rad($d[$k-1]))));
    // --- mencari titik tengah --- //
    $t = round(($d[$k-1]+$d[$k])/2);
    $t_x[$k] = round(150+(62.5*cos(deg2rad($t))));
    $t_y[$k] = round(150+(62.5*sin(deg2rad($t))));
    ImageLine($img,150,150,$kor_x[$k],$kor_y[$k],$hitam);
}

// --- mewarnai bagian pie --- //
// --- sekaligus membuat keterangan --- //

for($k=1;$k<=$i;$k++) {
    ImageFillToBorder($img,$t_x[$k],$t_y[$k],$hitam,$warna[$k-1]);
    ImageFilledRectangle($img,310,20*$k+50,320,20*$k+60,$warna[$k-1]);
    ImageString($img,2,330,20*$k+50,$str[$k-1],$hitam);
}

// --- output gambar -- //
ImageJPEG($img);
?>

Yang harus diperhatikan, Anda harus mengalokasikan warna sebanyak mungkin agar setiap item pilihan diwakili oleh satu warna. Bila perlu Anda buat database sendiri untuk alokasi warna tersebut. Selamat belajar.

Sumber

Tidak ada komentar