Dapatkan 'Easy Gammu Installer' - Cara Mudah Install Gammu + Ebook Gammu
Ingin Punya Script SMS Gateway dengan PHP + MySQL?

Dapatkan segera phpSMS V3.0, software SMS Gateway multi fungsi berbasis web buatan saya sendiri untuk keperluan Anda.
[Info Lengkap...]

Ide Membuat Script Grafik PHP Untuk Menampilkan Indeks Prestasi Mahasiswa (Studi Kasus)


June 20th, 2009 | by rosihanari | Cetak Artikel Ini Cetak Artikel Ini

Dalam artikel sebelumnya, saya pernah singgung bagaimana membuat query SQL untuk menampilkan Indeks Prestasi (IP) mahasiswa dalam setiap semester yang telah ditempuhnya. Hasil query ini nanti bisa digunakan untuk melihat progress atau perkembangan prestasi akademik mahasiswa. Oleh karena itu biasanya, query ini sering digunakan dalam suatu sistem informasi akademik.

Selanjutnya dalam artikel ini, saya akan mencoba memaparkan bagaimana menampilkan hasil query SQL di atas ke dalam bentuk grafik (chart) menggunakan script PHP, atau dengan kata lain artikel ini akan membahas bagaimana membuat grafik (chart) untuk menampilkan perkembangan IP setiap semester mahasiswa.

Mengapa harus ditampilkan dalam bentuk grafik (chart)? ya… karena dengan grafik, seseorang dapat dengan mudah membaca suatu informasi. Dengan grafik, seseorang dapat dengan mudah mengetahui apakah prestasi akademiknya semakin turun, ataukah naik atau sedang-sedang saja.

OK deh… trus bagaimana skenario dari script ini? adapun skenarionya adalah pertama akan disajikan terlebih dahulu daftar (list) dari mahasiswa yang ada. Kemudian disetiap mahasiswa terdapat link untuk melihat grafik IP nya. Berikut ini adalah gambarannya.

Photobucket

Apabila link VIEW tersebut diklik, maka akan tampil grafik IP untuk setiap semesternya

Photobucket

OK.. paham ya skenarionya? Nah.. selanjutnya kita mulai rancang tabel-tabel dan field yang diperlukan untuk databasenya. Pada prinsipnya, struktur tabelnya sama seperti di artikel sebelumnya.

Terdapat 3 tabel yang kita perlukan untuk studi kasus ini, yaitu ‘mhs’ (tabel mahasiswa), ‘mk’ (tabel matakuliah) dan ‘ambilmk’ (tabel pengambilan matakuliah)

CREATE TABLE mhs (
  nim varchar(5),
  nama varchar(20),
  PRIMARY KEY (nim)
)
CREATE TABLE mk (
  kodeMK varchar(5),
  namaMK varchar(20),
  sks int(11),
  PRIMARY KEY (kodeMK)
)
CREATE TABLE ambilmk (
  nim varchar(5),
  kodeMK varchar(5),
  nilai float,
  smt varchar(10) default NULL,
  tahun varchar(9) default NULL,
  PRIMARY KEY (nim,kodeMK)
)

Hmm… alangkah baiknya jika Anda menggunakan tipe tabel InnoDB untuk merancang tabel-tabel di atas supaya terdapat referential integration di antara setiap datanya.

Sedangkan untuk sampel recordnya, kita gunakan data seperti di bawah ini

INSERT INTO mhs VALUES ('M002', 'DWI AMALIA FITRIANI');
INSERT INTO mhs VALUES ('M003', 'FAZA FAUZAN');
INSERT INTO mk VALUES ('MK01', 'DATABASE', 3);
INSERT INTO mk VALUES ('MK02', 'PEMROGRAMAN DASAR', 2);
INSERT INTO mk VALUES ('MK03', 'PEMROGRAMAN WEB', 4);
INSERT INTO mk VALUES ('MK04', 'OOP', 3);
INSERT INTO mk VALUES ('MK05', 'PEMROGRAMAN VISUAL', 3);
INSERT INTO ambilmk VALUES ('M002', 'MK01', 3, 'GANJIL', '2008/2009');
INSERT INTO ambilmk VALUES ('M002', 'MK02', 2, 'GANJIL', '2008/2009');
INSERT INTO ambilmk VALUES ('M002', 'MK03', 2, 'GENAP', '2008/2009');
INSERT INTO ambilmk VALUES ('M002', 'MK04', 2, 'GENAP', '2008/2009');
INSERT INTO ambilmk VALUES ('M002', 'MK05', 4, 'GANJIL', '2009/2010');
INSERT INTO ambilmk VALUES ('M003', 'MK01', 2, 'GANJIL', '2008/2009');
INSERT INTO ambilmk VALUES ('M003', 'MK02', 3, 'GANJIL', '2008/2009');
INSERT INTO ambilmk VALUES ('M003', 'MK03', 3, 'GENAP', '2008/2009');
INSERT INTO ambilmk VALUES ('M003', 'MK04', 2, 'GENAP', '2008/2009');
INSERT INTO ambilmk VALUES ('M003', 'MK05', 3, 'GANJIL', '2009/2010');

OK.. tabel dan sampel record sudah ready, selanjutnya kita mulai membuat script untuk menampilkan list mahasiswanya terlebih dahulu.

mhs.php

<?php

mysql_connect("dbhost", "dbuser", "dbpass");
mysql_select_db("dbname");

echo "<h1>Data Mahasiswa</h1>";

$query = "SELECT * FROM mhs";
$hasil = mysql_query($query);

echo "<table border='1'>";
echo "<tr><th>NIM</th><th>Nama Mhs</th><th>Statistik IP</th></tr>";
while ($data = mysql_fetch_array($hasil))
{
  echo "<tr>
         <td>".$data['nim']."</td>
         <td>".$data['nama']."</td>
         <td><a href='statistik.php?nim=".$data['nim']."'>View</a></td>
        </tr>";
}

echo "</table>";

?>

Perhatikan script mhs.php di atas! Untuk menampilkan list mahasiswa kita cukup membuat query SQL yang memanfaatkan tabel ‘mhs’. Kemudian di setiap baris data mahasiswa dalam tabel, kita buat link ‘VIEW’ yang diarahkan ke script ‘statistik.php’. Link ke script ini kita sertakan parameter ‘?nim=…’ karena NIM ini nanti digunakan sebagai acuan untuk membuat grafik IP si mahasiswa yang memiliki NIM tersebut. Hasil dari script mhs.php ini tampak seperti pada gambar pertama di atas.

Selanjutnya kita membuat script statistik.php nya

statistik.php

<?php

mysql_connect("dbhost", "dbuser", "dbpass");
mysql_select_db("dbname");

// membaca nim dari parameter
$nim = $_GET['nim'];

// query untuk menampilkan NIM dan Nama Mahasiswa berdasarkan NIM
$query = "SELECT * FROM mhs WHERE nim = '$nim'";
$hasil = mysql_query($query);
$data  = mysql_fetch_array($hasil);

echo "<h1>Statistik Indeks Prestasi</h1>";

echo "<table>";
echo "<tr><td>NIM</td><td>:</td><td>".$data['nim']."</td></tr>";
echo "<tr><td>Nama Mhs</td><td>:</td><td>".$data['nama']."</td></tr>";
echo "</table>";

// menampilkan image grafik IP dari mahasiswa berdasarkan NIM
echo "<img src='stat.php?nim=".$nim."'>";

?>

Script statistik.php di atas pada prinsipnya adalah menggabungkan antara informasi si mahasiswa (NIM dan Nama) dengan grafik IP nya. Untuk menampilkan informasi si mahasiswa, cukup kita buat query SQL SELECT * FROM mhs WHERE nim = '$nim', dan grafiknya kita embed menggunakan tag <img src='stat.php?nim=".$nim."'>. Script ‘stat.php’ adalah script untuk membuat grafiknya. Mengapa dalam tag <img> ini perlu ada parameter ‘?nim=…’ nya? Ya… karena NIM itu nanti juga digunakan untuk acuan dalam membuat script grafik IP dari mahasiswa tersebut.

Mungkin Anda bertanya, mengapa tidak dijadikan satu saja antara script untuk menampilkan informasi mahasiswa dengan script untuk grafiknya? He.. 3x jawabannya adalah ‘tidak bisa’. Karena script stat.php ini akan menghasilkan output berupa image. Sedangkan informasi mahasiswanya (statistik.php) outputnya berupa dokumen HTML sehingga keduanya tidak bisa langsung dipadukan menjadi satu. Solusinya adalah mengembed script grafiknya ke dalam script dokumen HTML menggunakan tag <img src="...">.

Trus… kita akan membuat script grafiknya. Untuk grafik, kita akan menggunakan JpGraph karena free and mudah digunakan :-) Mau menggunakan Open Flash Chart nya yang digunakan KPU, gak jadi, coz it’s very ribet :-) Ane pengin yang simpel-simpel aja deh.

Untuk grafiknya, seperti yang kita lihat pada sampel di atas, akan kita pilih grafik yang merupakan gabungan dalam bentuk batang (bar chart) dan garis (line chart).

stat.php

<?php

mysql_connect("dbhost", "dbuser", "dbpass");
mysql_select_db("dbname");

// membaca parameter NIM dari <img src="stat.php?nim=...">
$nim = $_GET['nim'];

// menyiapkan array untuk menyimpan smt dan tahun
$smtThn = array();

// menyiapkan array untuk menyimpan ip
$ip = array();

// memanggil modul JpGraph untuk membuat grafik batang dan garis
// modul ini terletak dalam folder bernama 'modul'
include ("modul/jpgraph.php");
include ("modul/jpgraph_bar.php");
include ("modul/jpgraph_line.php");

// query sql untuk mendapatkan IP setiap semester dari mahasiswa
$query = "SELECT smt, tahun, sum(nilai * sks)/sum(sks) as ip
          FROM ambilmk, mk
          WHERE ambilmk.kodemk = mk.kodemk AND ambilmk.nim = '$nim'
          GROUP BY tahun, smt";

$hasil = mysql_query($query);
while ($data = mysql_fetch_array($hasil))
{
  // menyimpan data semester dan tahun hasil query ke dalam array $smtThn
  // smt dan tahun digabung dalam satu string untuk ditampilkan dalam sumbu-y grafik
  array_unshift($smtThn, $data['smt']." ".$data['tahun']);

  // menyimpan data IP hasil query ke dalam array $ip
  array_unshift($ip, $data['ip']);
}

// membuat image ukuran 500 x 300 pixel
$graph = new Graph(500,300,"auto");

// membuat skala grafik. Nilai 4 di sini adalah nilai maksimum sumbu Y nya, mengingat IP maks adalah 4
$graph->SetScale("textlin", 1, 4);

// membuat bayangan dari image
$graph->SetShadow();

// mengatur batas margin grafik
$graph->SetMargin(50,50,40,40);

// membuat bar plot dari data IP
$barplot = new BarPlot($ip);

// membuat line plot dari data IP
$lineplot=new LinePlot($ip);

// memberi warna merah pada bar plot
$barplot->SetFillColor("red");

// menampilkan value IP pada setiap bar
$barplot->value->show();

// mengatur tampilan value IP dengan format 1 digit desimal di belakang koma
$barplot ->value->SetFormat("%3.1f");

// mengatur ketebalan garis pada lineplot
$lineplot->SetWeight(3);

// mengatur posisi ujung line plot supaya terletak di tengah-tengah bar
$lineplot->SetBarCenter();

// menampilkan barplot ke dalam image
$graph->Add($barplot);

// menampilkan lineplot ke dalam image
$graph->Add($lineplot);

// menampilkan smt dan tahun pada sumbu X
$graph->xaxis-> SetTickLabels($smtThn);

// menampilkan title grafik
$graph->title->Set("Grafik Indeks Prestasi Mahasiswa");

// memberi label pada sumbu X
$graph->xaxis->title->Set("Semester");

// memberi label pada sumbu Y
$graph->yaxis->title->Set("Indeks Prestasi (IP)");

// mengatur jenis font pada title, label sumbu X dan label sumbu Y
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);

// menampilkan output grafik
$graph->Stroke();
?>

Catatan:
Query SQL untuk menghasilkan data IP setiap semester dari mahasiswa untuk ditampilkan ke dalam grafik, sama dengan query SQL yang pernah dibahas pada artikel sebelumnya.

Jika Anda ingin mendapatkan script di atas sekaligus modul JpGraph nya, maka dapat didownload di bawah ini.

[ Download Script ]

Selamat mencoba ya. Mudah-mudahan artikel ini bermanfaat bagi Anda semuanya baik yang sedang belajar, maupun yang sedang mendapat project membuat sistem informasi akademik :-) Kalau sedang dapat project, jangan lupa bagi-bagi ya :-)

VN:F [1.9.3_1094]
Rating: 8.0/10 (1 vote cast)
Ide Membuat Script Grafik PHP Untuk Menampilkan Indeks Prestasi Mahasiswa (Studi Kasus), 8.0 out of 10 based on 1 rating
Anda ingin mendownload beberapa tool programming 100% gratis?
Silakan download di FREE PROGRAMMING TOOLS.
atau ingin berdonasi untuk pengembangan blog ini cukup dengan $1 via Paypal?



Beberapa artikel terkait


Share this article on:

Kata kunci: cara membuat grafik php - chart - grafik - jpgraph - membuat chart php - PHP - php chart - php grafik - script - script grafik - script jpgraph -


Ada 34 komentar dalam artikel ini.

  1. didta says:

    wah, dibaca sekilas ternyata lumayan bingung juga
    .-= didta´s last blog ..kecewa dengan pos indonesia =-.

  2. sewa mobil says:

    sip postingannya….
    gitu dnk
    biar tambah maju IT di indonesia….:)
    sukses ya

  3. ganda says:

    hehehe… memang jpgraph library yang oke punya untuk ini. i like jpgraph.. :D

  4. Ivan says:

    Thank’s ya atas scrip2 PHP
    yg ditulis …

    aqu minta tolong dong …
    kirim dong scrip2 yg lain ke
    alat e_mail aqu ….
    tolong ya …. plizzz
    buat skripsi aqu ….

  5. hilal says:

    Mas, cara buat file index.php pada dreamwaver 8 gimana ya caranya serta bagaimana juga cara buat navigasinya…terinakasih.

  6. ndasgodhog says:

    pak…mau tanya…

    bagaimana kalau mau menampilkan nilai minus(-) pada grafik???

    pada contoh di atas kan semua nilai dari grafik positif(+)…

    apa jg bisa pake jpgraph???

    minta tutorialnya ya pak…terima kasih banyak…
    .-= ndasgodhog´s last blog ..Ngasih Label ke USB Flashdrive =-.

  7. rosihanari says:

    to ndasgodhog: nilai minus bisa juga digunakan di JpGraph. Caranya, ya.. langsung saja diberikan nilainya di data yang mau ditampilkan. Otomatis nilai minus akan muncul sendiri.

  8. ndasgodhog says:

    maaf salah tanya…mksd saya bagaimana kalau yang ditampilkan hanya yang bernilai positif aja???

    karena pada data saya terdapat nilai minus…

  9. rosihanari says:

    to ndasgodhog: berarti anda hanya main diquery nya saja. Anda perlu tambahkan di query SELECT … FROM … WHERE namafield > 0, jadi hasil querynya hanya yang nilainya positif saja.

  10. gotea001 says:

    Mas, di ambilmk kayaknya kelebihan koma “,” di belakang deh. Maaf, sekedar info.

  11. rosihanari says:

    to gotea001: oya mas, he 3x thanks atas koreksiannya.

  12. c0c0 says:

    pak, kalo saya jalan kan di tempat saya kok grafik nya ga keluar ya??
    saya pake xampplite 1.7.2,mohon petunjuknya

  13. rosihanari says:

    to c0c0: coba di lihat di phpinfo() nya, dia support GD library gak?

  14. c0c0 says:

    kalo saya liat di phpinfo() nya sudah aktif (enabled) pak, tapi kok tetap ga keluar ya pak, mohon petunjuknya, terimaksih

  15. Oz LOG says:

    WAh…trick nya bags-bagus nih… salam kenal dari newbie PHP
    .-= Oz LOG´s last blog ..Menghitung selisih jam dengan PHP =-.

  16. Gigih Wiryana says:

    bisa gak buat program kayak one stuby millioner pakek php???
    klo bisa gmana caranya????

  17. rosihanari says:

    @gigih wiryana: apa itu ‘one stuby millioner’? jangan2 maksudnya “Who Wants To Be A Millioner”? :-)

  18. hnd says:

    terimakasih sebelumnya. script di atas sangat membantu sekali.

    yang saya mau tanyakan adalah bagaimana logika query nya, jika kita ingin menghitung ip kumulatif..?

    terimakasih..

  19. hnd says:

    hmm.. yup..

    pertanyaan lagi. saya ingin membuat grafik ipk. jd yg muncul sebagai bar dlm grafik bukan ip, melainkan ipk.

    apakah memang harus menggunakan lbh dr satu query? krn utk menampilkan di grafik pun harus menggunakan -group by semester-, sedangkan utk ipk ini nantinya akan mengambil lbh dr 1 semester (ipk semester 2 dst.)

    terimakasih sebelumnya..

  20. rosihanari says:

    @hnd: IPK itu kan cara ngitungnya total semua nilai MK yang dikalikan dengan SKS dibagi dengan total SKS mas, jadi langsung pakai query saja bisa. dan lagi IPK itu kan bukan rata2 IPK setiap semester? CMIIW

  21. endah says:

    mm… manfaat. tks

  22. deksa syafradha says:

    pak kla kita punya pendapatan tahun 2005 misal 1 juta terus tahun 2006 2 jt, dan tahun 2007 8 jt, total keseluruhan pendapatan 11 juta, bagaimana caranya agar dijadikan persen, dlm bentuk pie terima kasih.

  23. rosihanari says:

    @deksa syafradha: coba anda pelajari JpGraph di ebook tutorial saya di http://rosihanari.net/web-tutorial/php-graphics mas. Mudah2an di situ ada.

  24. Agus says:

    Mas Rosihan Ari, mhn bntuannya. Sya mau buat grafik chart Statistik dengan IP Smster (IPS) dan IP Kumulatif (IPK) dengan PHP, tapi dibuatnya per fakultas dan jurusan. Bgmn ya caranya? Mhn pncerahannya.

    Thanks,
    Agus

  25. rosihanari says:

    @agus: tinggal mainin saja query sql nya mas… semua data tergantung query nya.

  26. afag says:

    thank atas scriptna pak,,,
    mohon maaf, pada waktu saya coba ko muncul

    Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or ‘}’ in D:\XAMPP\xampp\htdocs\q\grafik\modul\jpgraph.php on line 285

    mohon pencerahannya…
    thanks

  27. rosihanari says:

    @afag: anda pake PHP versi berapa mas? usahakan yang terbaru ya…

  28. Mas Rosihan Ari, mksud tinggal mainin saja query sql nya… dan semua data tergantung query nya,bgmn Mas?
    Tlg dong Mas,sya dberi pnjelasan yg detail.Krn sya Newbie PHP dan MySQL.

    Sngt trimaksih skali klau sya mau dbantu.

  29. andino says:

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\stkip\mahasiswa\grafik\stat.php on line 28
    JpGraph Error Empty input data array specified for plot. Must have at least one data point.

    aku dapatnya error gt mas..pie iki?

    dah cocok belum nic?
    // query sql untuk mendapatkan IP setiap semester dari mahasiswa
    $query = “SELECT semester, thn_akademik, sum(nilai_angka * sks)/sum(sks) as ip
    FROM nilai, matakuliah
    WHERE nilai.kode_matkul = matakuliah.kode_matkul AND nilai.nim = ‘$nim’
    “;

    $hasil = mysql_query($query);
    while ($data = mysql_fetch_array($hasil))
    makasih yah sebelumnya

  30. rosihanari says:

    @andino: anda pake xampp kah? coba ganti pake AppServ ya mas…

  31. Kk rosihan ari…saya mau bertanya ….

    kenapa saya ga nampil grafiknya ya,,,

    saya pake xampp 1.4.6…

    ada support jp graph lain ga…

    Saya mu ngumpulin Sidang program ku 3 hari lg..mohon bantuannya

  32. rosihanari says:

    @puja surya: coba pake appserv saja mas.



Tolong beri komentar donk!

Komentar Anda akan berguna untuk kemajuan blog ini.


Mohon maaf, komentar yang menggunakan email palsu atau komentar bernada negatif atau cemooh secara otomatis akan terhapus karena dianggap spam dan tidak akan tampil dalam daftar komentar.

Dimohon jangan pula memasukkan code program dalam bentuk apapun ke dalam komentar karena akan dianggap spam.

*
To prove you're a person (not a spam script), type the security word shown in the picture. Click on the picture to hear an audio file of the word.
Click to hear an audio file of the anti-spam word