Wednesday, April 13, 2011

Membuat Aplikasi Jajak Pendapat Dengan PHP

Akhir-akhir ini aplikasi jajak pendapat cukup marak terdapat di situs-situs internet. Masalah yang diangkat pun bisa beragam, misalnya politik, sosial, budaya, sains, dan lain-lain. Situs-situs yang bernuansa khusus juga seringkali memiliki jajak pendapat sesuai dengan nuansa yang dimilikinya. Misalnya situs sepakbola akan mengangkat jajak pendapat siapa pemain terbaik di suatu liga, situs tentang Linux akan mengangkat jajak pendapat tentang distro apa yang paling favorit, situs handphone akan mengangkat jajak pendapat tentang ringtone favorit, dan masih banyak lagi.

Nah, sekalipun tema yang diangkat bisa bermacam-macam, namun pada dasarnya aplikasi jajak pendapat cukup mudah untuk dibuat. Umumnya aplikasi jajak pendapat hanya terdiri dari 2 halaman saja, yaitu form HTML yang berisi item-item pilihan dan hasil dari jajak pendapat tersebut. Hasil jajak pendapat dapat ditampilkan dengan bantuan HTML biasa atau dengan suatu aplikasi yang dapat menghasilkan gambar-gambar yang menarik sehingga hasil jajak pendapat dapat ditampilkan dalam bentuk pie chart misalnya. Untungnya, PHP juga dapat digunakan untuk menghasilkan gambar.

Aplikasi jajak pendapat yang akan dibahas pada bagian ini nantinya akan memberikan output berupa Pie Chart.

Untuk menyimpan hasil jajak pendapat diperlukan database, sehingga aplikasi ini juga akan menggunakan MySQL.

Aplikasi jajak pendapat yang kita buat kali ini akan mengangkat tema Pemain Terbaik Liga Italia musim kompetisi 2005/2006. Mengapa bukan tema yang berbau komputer? Distro Linux favorit misalnya? Yah, semata-mata hanya untuk “having fun” saja agar otak kita nggak berisi komputer melulu.

Mula-mula kita persiapkan dahulu databasenya. Kita akan buat database baru bernama poll sebuah tabel bernama favplayer yang berisi dua buah kolom yaitu “nama” dan “suara”. Langkah-langkahnya adalah sebagai berikut:

mysql> create database poll;

mysql> use poll

Database changed

mysql> create table favplayer(

-> nama varchar(20),

-> suara int);

Query OK, 0 rows affected (0.05 sec)

Anda juga dapat memanfaatkan phpMyAdmin untuk membuat database di atas.

Sebagai nilai awal kita isikan dahulu beberapa data sebagai berikut:












































NamaSuara
Del Piero101
Totti23
Nedved215
Toni73
Adriano36
Kaka41
Ibrahimovic100
Trezeguet88
Cassano25

Setelah database disiapkan, sekarang kita buat halaman form yang berisi item-item pilihan. Script dari halaman item pilihan diberikan pada listing 1.






Listing 1. Halaman item pilihan

<HTML>

<HEAD>

<TITLE> Jajak Pendapat </TITLE>

</HEAD>

<BODY>

<H1> Jajak Pendapat </H1>

<H2> Pilih pemain terbaik <br>

Liga Italia musim 2005/2006 </H2>

<FORM NAME="poll" METHOD="post" ACTION="result.php">

<?

$host = "localhost";

$user = "myuser";

$pswd = "rahasia";

$conn = @mysql_connect($host,$user,$pswd)

or die("Koneksi gagal: " . mysql_error());

mysql_select_db("poll",$conn);

$strSQL = "select nama from favplayer";

$qry = @mysql_query($strSQL,$conn)

or die("Query salah: " . mysql_error());

while ($row = mysql_fetch_array($qry)) {

?>

<INPUT TYPE="radio" NAME="player" VALUE="<?=$row['nama']?>">

<?=$row['nama']?> <BR>

<?

}

?>

<BR>

<INPUT TYPE="submit" VALUE="VOTE!">

</FORM>

</BODY>

</HTML>

Berilah nama skrip ini dengan polling.php. Jika dijalankan di browser akan nampak seperti gambar 1.

Item-item pilihan yang terdapat pada halaman ini diambil dari record-record pada field “nama” tabel favplayer. Dengan demikian jika isi dari field nama diubah, otomatis item pilihan tersebut akan ikut berubah, sehingga memudahkan Anda untuk berganti tema jajak pendapat.

Jika Anda klik tombol “VOTE!”, maka data-data pada form ini akan diolah di halaman result.php. Nah, isi skrip file result.php diberikan pada listing 2.






Listing 2. Hasil jajak pendapat

<?

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

// --- Koneksi ke MySQL --- //

$host = "localhost";

$user = "root";

$pswd = "";

$player = $_POST['player'];

$conn = @mysql_connect($host,$user,$pswd)

or die("Koneksi gagal: " . mysql_error());

mysql_select_db("poll",$conn);

// --- mengupdate suara --- //

$strSQL = "update favplayer set suara=suara+1 where nama='$player'";

$upd = @mysql_query($strSQL,$conn)

or die("Query salah: " . mysql_error());

// --- Ambil data dari database --- //

$strSQL = "select * from favplayer";

$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,255,255,255);

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

?>

Pada dasarnya isi skrip ini adalah menghitung jumlah total suara, kemudian mengambil seluruh data jajak pendapat dari database dan kemudian menampilkannya dalam bentuk pie chart.

Sekarang aplikasi tersebut sudah siap. Jika Anda memberikan suara Anda, maka hasil jajak pendapat akan ditampilkan seperti pada gambar 2.

Anda dapat menambahkan sedikit skrip JavaScript untuk mencegah agar pemilih tidak dapat men-submit form sebelum dia memberikan suaranya.

Artikel Terkait:

  • Share this
  • Sumbit to Digg
  • Sumbit to StumbleUpon
  • Sumbit to Delicious
  • Sumbit to Technorati
  • Sumbit to Reddit
  • Sumbit to Mixx
  • Sumbit to Twitter
  • Sumbit to Furl
  • Sumbit to Design Float
  • Sumbit to Blinklist
  • Sumbit to Yahoo Buzz
  • Sumbit to Google Bookmarks

0 comments:

Post a Comment

Silahkan anda berkomentar, tapi jangan nyepam . . . .