bab5
-
Upload
fahmidmzydhimas -
Category
Documents
-
view
14 -
download
0
description
Transcript of bab5
BAB V
IMPLEMENTASI
5.1 Implementasi Sistem
Sistem yang dibangun meliputi dua kelompok yaitu sistem yang ada di
DPW dan sistem yang tersebar di DPC. Pada sisi DPW, kebutuhan hardware,
jaringan dan koneksi ke internet sudah terimplementasi dengan baik, tinggal
menambahkan Server Basis Data dan Web Server yang akan dipakai untuk
menempatkan sistem yang dibangun ini. Pada sisi DPW sistem harus 24jam
terkoneksi ke internet, dimana DPC‐DPC yang akan melakukan koneksi data ke
basis data di DPW tidak mengalami kendala begitu juga end user yang mengakses
data melalui internet akan terlayani dengan baik. Untuk itu diperlukan sebuah IP
PUBLIC untuk mengatasi hal tersebut.
DPC dalam hal ini bersifat mobile dan tidak selamanya terkoneksi ke
internet, sehingga kebutuhan koneksi ke internet hanya digunakan untuk
melakukan sinkronisasi data dari dan ke DPW serta bersifat temporer.
5.1.1 Kebutuhan Perangkat Keras
Kebutuhan perangkat keras untuk DPW bisa dilihat pada tabel 5.1.
Tabel 5.1 Perangkat Keras DPW
Nama Perangkat Keterangan Server PC Server dengan spesifikasi :
Processor : Intel Xeon 3000 series Memory : 8GB ECC
Perangkat Jaringan dan Hotspot
Hotspot Router D‐Link AirPlus G+ 2,4GHz DWL‐2000AP+
Terminal PC dengan fasilitas browser dan koneksi jaringan Perangkat Koneksi ke Internet
PC‐Router, line telpon untuk koneksi menggunakan Speedy
84
Kebutuhan perangkat keras untuk DPC bisa dilihat pada tabel 5.2.
Tabel 5.2 Perangkat Keras DPC
Nama Perangkat Keterangan Server PC/Laptop dengan spesifikasi:
Processor: Intel Dual Core T2250 1,7GHz Memory : 1GB
Perangkat jaringan dan Hotspot
Hotspot router D‐Link AirPlus G+ 2,4GHz DWL‐2000AP+
Terminal PC dengan fasilitas browser dan koneksi jaringan Perangkat koneksi ke internet
Line Telpon
Modem GSM untuk SMS Gateway
Modem GSM ZTE
5.1.2 Kebutuhan Perangkat Lunak
Kebutuhan perangkat lunak meliputi Web Server, Database Server serta
SMS Gateway. Dalam penelitian ini Web Server dan Database Server
menggunakan AppServ Open Project ‐ 2.5.7 for Windows dengan perincian pada
tabel 5.3
Tabel 5.3 Kebutuhan Perangkat Lunak
Kebutuhan Perangkat Lunak Keterangan Web Server Apache Web Server Versi 2.2.3 Script Pemrograman PHP Script Language Versi 5.1.6 Database Server MySQL Database versi 5.0.24a Sistem Operasi Window XP sp2 SMS Gateway Gammu
*khusus untuk DPC
Perangkat lunak ini dipasang pada sisi DPW maupun DPC. Untuk DPC
ditambahkan SMS Gateway menggunakan software gammu yang digunakan
untuk mengelola sms dari saksi pemilu.
85
5.1.3 Instalasi Jaringan
Instalasi jaringan pada DPW seperti sudah digambarkan pada gambar 4.8
sudah tersedia di DPW, meliputi:
1. Server : Menggunakan PC Server
2. Hotspot : D‐Link AirPlus G+ 2,4GHz DWL‐2000AP+
3. Internet : menggunakan jaringan speedy 2GB
Instalasi jaringan pada DPC seperti sudah digambarkan pada gambar 4.9
meliputi:
1. Server : Menggunakan Laptop atau PC
2. SMS Gateway :Menggunakan software Gammu
3. Hotspot : D‐Link AirPlus G+ 2,4GHz DWL‐2000AP+
4. Internet : Menggunakan jaringan Speedy
5.1.4 Desain Tabel
Basis Data untuk mendukung aplikasi ini di buat dengan menggunakan
MySQL Database versi 5.0.24a menggunakan engine InnoDB, dimana tabel jenis
ini mendukung penggunaan constraint foreign key yang sangat diperlukan dalam
penelitian ini. Untuk beberapa tabel yang tidak memanfaatkan constraint masih
digunakan jenis MyISAM dengan alasan untuk kecepatan proses. Sistem Partial
Replica yang diangkat dalam penelitian ini menggunakan basis data yang sama
untuk master maupun slave (homogen). Tabel‐tabel yang digunakan dalam
sistem ini disimpan dalam basis data bernama ‘pileg’ yang dapat dijelaskan
sebagai berikut:
1. Tabel Dapil
Tabel ini digunakan untuk menyimpan data daerah pemilihan, dengan
primary key kddapil, berikut ini struktur dan contoh data dari tabel dapil.
86
mysql> describe dapil; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | kddapil | varchar(7) | NO | PRI | | | | nama | varchar(40) | YES | | NULL | | | level | tinyint(1) | NO | | | | +---------+-------------+------+-----+---------+-------+ 3 rows in set (0.00 sec) mysql> select * from dapil limit 0,10; +---------+-------------------------------+-------+ | kddapil | nama | level | +---------+-------------------------------+-------+ | 34 | Dapil Pusat Propinsi DIY | 1 | | 3401 | Dapil 1 DIY Yogyakarta (Kota) | 2 | | 34011 | Dapil 1 Kota | 3 | | 34012 | Dapil 2 Kota | 3 | | 34013 | Dapil 3 Kota | 3 | | 34014 | Dapil 4 Kota | 3 | | 34015 | Dapil 5 Kota | 3 | | 3402 | Dapil 2 DIY Bantul | 2 | | 34021 | Dapil 1 Bantul | 3 | | 34022 | Dapil 2 Bantul | 3 | +---------+-------------------------------+-------+ 10 rows in set (0.00 sec)
2. Tabel kodelokasi
Tabel kodelokasi digunakan untuk menyimpan data induk lokasi dari
penyelenggaraan pemilu dari tingkat pusat sampai tingkat desa/kelurahan,
dengan kdlokasi sebagai primary key, dan tabel ini memiliki ketergantungan
terhadap tabel dapil pada field dp1 untuk dapil pusat atau DPR Pusat, dp2 untuk
dapil tingkat I atau DPRD Propinsi dan dp3 untuk dapil tingkat II atau DPRD
Kabupaten. Berikut ini struktur dan contoh data dari tabel kodelokasi.
mysql> describe kodelokasi; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | kdlokasi | varchar(8) | NO | PRI | | | | nama | varchar(30) | YES | | NULL | | | dp1 | varchar(8) | YES | MUL | NULL | | | dp2 | varchar(8) | YES | MUL | NULL | | | dp3 | varchar(8) | YES | MUL | NULL | | | level | smallint(2) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+
87
6 rows in set (0.02 sec) mysql> select * from kodelokasi limit 0,10; +----------+---------------+------+------+-------+-------+ | kdlokasi | nama | dp1 | dp2 | dp3 | level | +----------+---------------+------+------+-------+-------+ | 34 | DI Yogyakarta | NULL | NULL | NULL | 2 | | 3401 | Kulon Progo | 34 | 3403 | NULL | 3 | | 340101 | Samigaluh | 34 | 3403 | 34051 | 4 | | 34010101 | Banjarsari | 34 | 3403 | 34051 | 5 | | 34010102 | Gerbosari | 34 | 3403 | 34051 | 5 | | 34010103 | Kebon Harjo | 34 | 3403 | 34051 | 5 | | 34010104 | Ngargosari | 34 | 3403 | 34051 | 5 | | 34010105 | Pagerharjo | 34 | 3403 | 34051 | 5 | | 34010106 | Purwoharjo | 34 | 3403 | 34051 | 5 | | 34010107 | Sidoharjo | 34 | 3403 | 34051 | 5 | +----------+---------------+------+------+-------+-------+ 10 rows in set (0.00 sec)
3. Tabel tps
Tabel tps menampung data tps per desa/kelurahan, dengan primary key
komposit (kdlokasi+notps), tabel ini memiliki ketergantungan terhadap tabel
kodelokasi pada field kdlokasi. Field nama berisi nama tps, lelaki berisi jumlah dpt
lelaki dan wanita berisi jumlah dpt wanita. Berikut ini struktur dan contoh data
dari tabel tps.
mysql> describe tps; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | kdlokasi | varchar(8) | NO | PRI | | | | notps | varchar(3) | NO | PRI | | | | nama | varchar(30) | YES | | NULL | | | lelaki | int(11) | YES | | NULL | | | wanita | int(11) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 5 rows in set (0.02 sec) mysql> select * from tps order by kdlokasi,notps limit 0,10; +----------+-------+-------------+--------+--------+ | kdlokasi | notps | nama | lelaki | wanita | +----------+-------+-------------+--------+--------+ | 34010501 | 01 | banunan | 100 | 100 | | 34020101 | 001 | isian yaa | 23 | 32 | | 34020101 | 002 | isian 2 | 89 | 89 | | 34040104 | 001 | BLUMBANG | 136 | 162 | | 34040104 | 002 | SALAM | 152 | 167 |
88
| 34040104 | 003 | DERMO | 130 | 163 | | 34040104 | 004 | KEMBANG | 101 | 111 | | 34040104 | 005 | KANTONGAN A | 125 | 132 | | 34040104 | 006 | KANTONGAN B | 206 | 202 | | 34040104 | 007 | SOKA TEGAL | 122 | 138 | +----------+-------+-------------+--------+--------+ 10 rows in set (0.00 sec)
4. Tabel dpt
Tabel dpt merupakan detail dari pemilih untuk masing‐masing tps, tabel
dengan primary key nip, dengan foreign key kdlokasi dan notps. Tabel ini memiliki
ketergantungan terhadap tabel tps pada field komposit (kdlokasi+notps). Nip
merupakan nomor induk penduduk secara nasional, Berikut ini struktur dan
contoh data dari tabel berikut ini.
mysql> describe dpt; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | nip | varchar(20) | NO | PRI | | | | kdlokasi | varchar(8) | YES | MUL | NULL | | | notps | varchar(3) | YES | MUL | NULL | | | nama | varchar(50) | YES | | NULL | | | sex | varchar(15) | YES | | NULL | | | tgllahir | date | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 6 rows in set (0.02 sec) mysql> select * from dpt limit 0,10; +------------------+----------+-------+----------------+------+----------+ | nip | kdlokasi | notps | nama | sex | tgllahir | +------------------+----------+-------+----------------+------+----------+ | 3404090101680002 | 34041004 | 003 | SARJANA | Lk | NULL | | 3404090102630005 | 34041004 | 003 | SUHANA | Lk | NULL | | 3404090102670001 | 34041004 | 004 | MANGUN SARJONO | Lk | NULL | | 3404090102750001 | 34041004 | 002 | WARSONO | Lk | NULL | | 3404090102750003 | 34041004 | 003 | SANTOSO | Lk | NULL | | 3404090104710001 | 34041004 | 003 | PONIRIN | Lk | NULL | | 3404090105820005 | 34041004 | 002 | TRI MARYANTO | Lk | NULL | | 3404090106860002 | 34041004 | 001 | WASIS SUSIANTO | Lk | NULL | | 3404090107280005 | 34041004 | 003 | ATMO WIYARJO | Lk | NULL | | 3404090107530008 | 34041004 | 002 | ARJO SUPARNO | Lk | NULL | +------------------+----------+-------+----------------+------+----------+ 10 rows in set (0.00 sec)
5. Tabel Saksi
Tabel saksi digunakan untuk menampung data saksi pemilu, tabel ini
89
mempunyai ketergantungan terhadap tabel tps pada field kdlokasi+notps,
adapun primary key dalam tabel ini adalah nohp. Adapun struktur dan contoh
datanya adalah sebagai berikut:
mysql> describe saksi; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | nohp | varchar(15) | NO | PRI | | | | kdlokasi | varchar(8) | YES | MUL | NULL | | | notps | varchar(3) | YES | MUL | NULL | | | nama | varchar(50) | YES | | NULL | | | status | varchar(20) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 5 rows in set (0.00 sec) mysql> select * from saksi; +----------------+----------+-------+------+--------+ | nohp | kdlokasi | notps | nama | status | +----------------+----------+-------+------+--------+ | +6281293345405 | 34010501 | 001 | Abah | saksi | | 081328645 | 34010501 | 001 | joni | saksi | | +62392657405 | 34040901 | 001 | anwar| saksi | +----------------+----------+-------+------+--------+ 2 rows in set (0.00 sec)
6. Tabel sms
Berisikan data tentang sms saksi yang didapat dari proses tigger dari tabel
inbox dari SMS Gateway. Adapun struktur dan contoh datanya adalah sebagai
berikut:
mysql> describe sms; +-------+------------+----+---+-------------------+--------------+ | Field | Type |Null|Key| Default | Extra | +-------+------------+----+---+-------------------+--------------+ | id | int(11) |YES |PRI| NULL |auto_increment| | nohp | varchar(15)|YES |MUL| NULL | | | tgl | timestamp |YES | | CURRENT_TIMESTAMP | | | isi | text |YES | | NULL | | +-------+------------+----+---+-------------------+--------------+ 3 rows in set (0.02 sec) mysql> select * from sms order by tgl desc limit 0,10; +----+--------------+---------------------+---------------------+ | id | nohp | tgl | isi | +----+--------------+---------------------+---------------------+ | 27 | +62392657405 | 2010-01-29 23:46:17 | SUARAX08X2X02X11111 |
90
| 26 | +62392657405 | 2010-01-29 23:45:52 | SUARAX08X2X00X100 | | 25 | +62392657405 | 2010-01-29 23:28:02 | SUARAx08x2x02x150 | | 24 | +62392657405 | 2010-01-29 23:24:35 | SUARAx08x2x02x150 | | 23 | +62392657405 | 2010-01-29 23:17:44 | SUARAx08x2x00x100 | | 22 | +62392657405 | 2010-01-29 23:14:52 | SUARAx08x3x00x555 | | 21 | +62392657405 | 2010-01-29 21:24:27 | SUARAx08x2x77x777 | | 20 | +62392657405 | 2010-01-29 21:18:08 | SUARAx08x2x00x1920 | | 19 | +62392657405 | 2010-01-29 21:08:42 | SUARAx08x2x00x100 | | 18 | +62392657405 | 2010-01-29 21:05:50 | SUARAx08x1x00x100 | +----+--------------+---------------------+---------------------+ 10 rows in set (0.00 sec)
7. Tabel suaratidaksah
Tabel suaratidaksah berisikan data tentang pelaporan sms dari saksi di tps
yang telah di validasi. Data yang masuk merupakan data suara selain suara sah,
meliputi kertas suara rusak, kertas suara dipakai, kertas suara sisa dll. Adapun
struktur dan contoh datanya adalah sebagai berikut:
mysql> describe suaratidaksah; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | kdlokasi | varchar(8) | NO | PRI | | | | notps | varchar(3) | NO | PRI | | | | keterangan | varchar(10) | NO | PRI | | | | tingkat | varchar(8) | NO | PRI | | | | jumlah | int(11) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 5 rows in set (0.00 sec) mysql> select * from suaratidaksah; +----------+-------+------------+---------+--------+ | kdlokasi | notps | keterangan | tingkat | jumlah | +----------+-------+------------+---------+--------+ | 34040901 | 001 | GUGUR | 1 | 35 | | 34040901 | 001 | PAKAI | 4 | 5 | | 34040901 | 001 | RUSAK | 2 | 35 | | 34040901 | 001 | SISAK | 1 | 30 | +----------+-------+------------+---------+--------+ 4 rows in set (0.00 sec)
8. Tabel suara
Tabel suara adalah tabel akhir penghitungan suara, tabel ini didapat dari
proses trigger pada tabel sms, dimana tabel suara ini akan menampung suara sah
dari peserta pemilu (caleg) untuk tiap tps. Masing‐masing caleg akan memiliki
91
satu rekaman untuk satu tps. Dengan primary key komposit (kdlokasi+notps),
tabel ini memiliki ketergantungan terhadap tabel tps dengan field komposit
(kdlokasi+notps) serta ketergantungan terhadap tabel caleg dengan field idcaleg.
Adapun struktur dan contoh datanya adalah sebagai berikut:
mysql> describe suara; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | kdlokasi | varchar(8) | NO | PRI | | | | notps | varchar(3) | NO | PRI | | | | idcaleg | varchar(10) | NO | MUL | | | | suara | int(11) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec) mysql> select * from suara; +----------+-------+----------+-------+ | kdlokasi | notps | idcaleg | suara | +----------+-------+----------+-------+ | 34020101 | 001 | 00010001 | 200 | | 34040101 | 001 | 08030025 | 300 | | 34040101 | 002 | 08010051 | 1000 | | 34040901 | 001 | 00010008 | 1500 | +----------+-------+----------+-------+ 4 rows in set (0.00 sec) mysql> \t
9. Tabel advokasi
Tabel advokasi, adalah tabel hasil trigger dari tabel sms, dimana isi dari
tabel ini memiliki ketergantungan terhadap tabel saksi dengan field nohp, dengan
primary key komposit (nohp+tgl), tabel ini menampung semua sms dari saksi
yang tidak bisa di masukkan ke tabel suara maupun tabel suaratidaksah. Adapun
struktur dan contoh datanya adalah sebagai berikut:
mysql> describe advokasi; +-------+-------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+-------------------+----------------+ | nohp | varchar(15) | NO | PRI | | | | tgl | timestamp | YES | PRI | CURRENT_TIMESTAMP | | | isi | text | YES | | NULL | | +-------+-------------+------+-----+-------------------+----------------+ 4 rows in set (0.00 sec)
92
mysql> select * from advokasi; +----+--------------+---------------------+----------------------------------------------------------------+ | id | nohp | tgl | isi | +----+--------------+---------------------+-------------------------------------------------+ | 1 | @nohp | 2010-01-29 17:30:43 | @kunci | | 2 | +62392657405 | 2010-01-29 17:31:48 | SUARA biji | | 3 | +62392657405 | 2010-01-29 17:49:03 | select kdlokasi from saksi where nohp=@nohp | | 4 | +62392657405 | 2010-01-30 01:17:51 | TPS KAMI SIAP MENGHITUNG, MOHON DOA ANTUM SEMUA | +----+--------------+---------------------+-------------------------------------------------+
4 rows in set (0.00 sec)
10. Tabel dewan
Tabel dewan, menampung data tentang tingkatan atau kelompok posisi
pemilihan suara, meliputi DPD, DPR dari pusat, propinsi dan kabupaten/kota.
Dengan primary key tingkat, tabel ini sifatnya hanya sebagai denormasilasi dari
tabel caleg dalam menentukan posisi pemilihan suara. Adapun struktur dan
contoh datanya adalah sebagai berikut:
mysql> describe dewan; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | tingkat | varchar(8) | NO | PRI | | | | ket | varchar(40) | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> select * from dewan; +---------+-----------------------------------+ | tingkat | ket | +---------+-----------------------------------+ | DPD | Dewan Perwakilan Daerah | | DPR | Dewan Perwakilan Rakyat Pusat | | DPRDI | Dewan Perwakilan Rakyat Propinsi | | DPRDII | Dewan Perwakilan Rakyat Kabupaten | +---------+-----------------------------------+ 4 rows in set (0.00 sec) mysql> \t
11. Tabel caleg
Tabel caleg, merupakan tabel untuk menampung data calon anggota
legislatif yang diusulkan partai atau Daerah untuk posisi DPD, dengan primary key
idcaleg, dengan ketergantungan terhadap tabel partai dengan field nopartai, dan
tabel dapil dengan field kddapil serta tabel dewan dengan field tingkat. Adapun
93
struktur dan contoh datanya adalah sebagai berikut:
mysql> describe caleg; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | idcaleg | varchar(10) | NO | PRI | | | | nopartai | varchar(2) | YES | MUL | NULL | | | nama | varchar(50) | YES | | NULL | | | tgllahir | date | YES | | NULL | | | sex | varchar(15) | YES | | NULL | | | kddapil | varchar(7) | YES | MUL | NULL | | | tingkat | varchar(8) | YES | MUL | NULL | | | nu | varchar(2) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 8 rows in set (0.00 sec) mysql> select * from caleg limit 0,10; +----------+----------+----------------------------------+----------+------+---------+---------+------+ | idcaleg | nopartai | nama | tgllahir | sex | kddapil | tingkat | nu | +----------+----------+----------------------------------+----------+------+---------+---------+------+ | 00010001 | 00 | Drs. HA Hafid Asrom, MM | NULL | NULL | 34 | DPD | 01 | | 00010002 | 00 | H. Cholid Mahmud, ST, MT | NULL | NULL | 34 | DPD | 02 | | 00010003 | 00 | GKR Hemas | NULL | NULL | 34 | DPD | 03 | | 00010004 | 00 | Idham Ibty | NULL | NULL | 34 | DPD | 04 | | 00010005 | 00 | Muhammad Afnan Hadi Kusumo | NULL | NULL | 34 | DPD | 05 | | 00010006 | 00 | Anwar, SH | NULL | NULL | 34 | DPD | 06 | | 00010007 | 00 | H. Soetarjo Soerjo Goeritno, BSc | NULL | NULL | 34 | DPD | 07 | | 00010008 | 00 | Drs. H Subechi, MM, Msi | NULL | NULL | 34 | DPD | 08 | | 00010009 | 00 | Drs. H. Sugito, Msi | NULL | NULL | 34 | DPD | 09 | | 00010010 | 00 | Sulistya, SH | NULL | NULL | 34 | DPD | 10 | +----------+----------+----------------------------------+----------+------+---------+---------+------+
10 rows in set (0.00 sec)
12. Tabel partai
Tabel partai adalah tabel yang menampung data partai‐partai peserta
pemilu legislatif, dengan primary key nopartai. Tabel ini sebagai acuan dari tabel
caleg. Adapun struktur dan contoh datanya adalah sebagai berikut:
mysql> select * from partai limit 0,10; +----------+-----------------------------------------+ | nopartai | nama | +----------+-----------------------------------------+ | 00 | DPD RI | | 01 | Partai Hati Nurani Rakyat | | 02 | Partai Karya Peduli Bangsa | | 03 | Partai Pengusaha dan Pekerja Indonesia | | 04 | Partai Peduli Rakyat Nasional | | 05 | Partai Gerakan Indonesia Raya | | 06 | Partai Barisan Nasional | | 07 | Partai Keadilan dan Persatuan Indonesia | | 08 | Partai Keadilan Sejahtera | | 09 | Partai Amanat Nasional | +----------+-----------------------------------------+ 10 rows in set (0.00 sec)
94
13. Tabel link
Tabel link adalah tabel yang menampung alamat‐alamat link website lain
untuk mendukung interface dari sistem yang dibangun ini. Adapun struktur dan
contoh datanya adalah sebagai berikut:
mysql> describe link; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | link | varchar(30) | NO | PRI | | | | ket | varchar(30) | NO | | | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec) mysql> select * from link limit 0,10; +-------------------------+------------------+ | link | ket | +-------------------------+------------------+ | http://pk-sejahtera.org | PK Sejahtera | | http://pks-jogja.org | PKS Jogja | | http://akprind.ac.id | IST Akprind Joga | | http://mkom.ugm.ac.id | Mkom UGM | +-------------------------+------------------+ 4 rows in set (0.00 sec)
14. Tabel brita
Tabel brita adalah tabel yang menampung data berita dari user yang
memiliki hak untuk menuliskan berita ke sistem ini. Adapun struktur dan contoh
datanya adalah sebagai berikut:
mysql> describe brita; +---------+--------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+-------------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | tgl | timestamp | YES | | CURRENT_TIMESTAMP | | | judul | varchar(30) | NO | | | | | author | varchar(15) | NO | | | | | utama | varchar(150) | NO | | | | | lengkap | longtext | NO | | | | | dibaca | tinyint(3) | NO | | | | | aktiv | tinyint(1) | YES | | 0 | | +---------+--------------+------+-----+-------------------+----------------+ 8 rows in set (0.00 sec)
95
mysql> select id,tgl,judul,author from brita limit 0,10; +----+---------------------+------------------+--------+ | id | tgl | judul | author | +----+---------------------+------------------+--------+ | 3 | 2010-01-06 06:23:58 | isi dikelas | jack | | 5 | 2010-01-06 06:23:53 | judulxxx | jack | | 7 | 2010-01-06 06:24:03 | judulxxx | jack | | 9 | 2010-01-06 06:57:42 | judulxxx | jack | | 10 | 2010-01-06 06:24:24 | judulxxx | jack | | 13 | 2010-01-09 16:31:19 | ssss | tiga | | 14 | 2010-01-10 17:14:17 | ahad istimewa | jack | | 16 | 2010-01-10 18:43:53 | semalam begadang | jack | +----+---------------------+------------------+--------+ 8 rows in set (0.00 sec) mysql>
15. Tabel login
Tabel login, digunakan untuk menampung data‐data user yang
menggunakan sistem ini, dengan primary key field pemakai, adapun struktur dan
contoh datanya adalah sebagai berikut:
mysql> describe login; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | pemakai | varchar(15) | NO | PRI | | | | kunci | varchar(15) | YES | | NULL | | | kapan | varchar(30) | YES | | NULL | | | aktif | tinyint(1) | YES | | NULL | | | darimana | varchar(15) | YES | | NULL | | | sidnya | varchar(50) | YES | | NULL | | | level | tinyint(1) | YES | | NULL | | +----------+-------------+------+-----+---------+-------+ 7 rows in set (0.00 sec) mysql> select * from login limit 0,10; +---------+--------+-------------------+-------+----------+--------+-------+ | pemakai | kunci | kapan | aktif | darimana | sidnya | level | +---------+--------+-------------------+-------+----------+--------+-------+ | bejo | slamet | NULL | NULL | NULL | NULL | 1 | | data | data | NULL | 0 | NULL | NULL | 2 | | dua | | 27 Jan 2010 06:52 | 0 | NULL | | 2 | | jack | NULL | NULL | NULL | NULL | NULL | 3 | | tiga | | NULL | NULL | NULL | NULL | 3 | +---------+--------+-------------------+-------+----------+--------+-------+ 5 rows in set (0.00 sec) mysql> \t
96
16. Tabel inbox
Tabel inbox adalah tabel dari aplikasi SMS Gateway, yang menampung
semua data sms yang masuk. Tabel ini sebagai sumber data input melaui sms,
dengan menggunakan trigger after insert, tabel ini akan menyebarkan datanya ke
tabel sms. Berikut ini adalah struktur dan contoh datanya.
mysql> describe inbox\G *************************** 1. row *************************** Field: UpdatedInDB Type: timestamp Null: YES Key: Default: CURRENT_TIMESTAMP Extra: *************************** 2. row *************************** Field: ReceivingDateTime Type: timestamp Null: YES Key: Default: 0000-00-00 00:00:00 Extra: *************************** 3. row *************************** Field: Text Type: text Null: NO Key: Default: Extra: *************************** 4. row *************************** Field: SenderNumber Type: varchar(20) Null: NO Key: Default: Extra: *************************** 5. row *************************** Field: Coding Type: enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression') Null: NO Key: Default: 8bit Extra: *************************** 6. row *************************** Field: UDH
97
Type: text Null: NO Key: Default: Extra: *************************** 7. row *************************** Field: SMSCNumber Type: varchar(20) Null: NO Key: Default: Extra: *************************** 8. row *************************** Field: Class Type: int(11) Null: NO Key: Default: -1 Extra: *************************** 9. row *************************** Field: TextDecoded Type: varchar(160) Null: NO Key: Default: Extra: *************************** 10. row *************************** Field: ID Type: int(11) unsigned Null: NO Key: PRI Default: NULL Extra: auto_increment *************************** 11. row *************************** Field: RecipientID Type: text Null: NO Key: Default: Extra: *************************** 12. row *************************** Field: Processed Type: enum('false','true') Null: NO Key: Default: false Extra: 12 rows in set (0.00 sec)
98
mysql> select receivingdatetime,sendernumber,textdecoded from inbox limit 15,10; +---------------------+----------------+--------------------------------------------------------------------+ | receivingdatetime | sendernumber | textdecoded | +---------------------+----------------+--------------------------------------------------------------------+ | 2009-04-09 07:34:52 | +6281392374657 | Amin... Trimakasih. | | 2009-04-09 07:37:05 | +628995086846 | Siap | | 2009-04-09 07:37:09 | +6287839849289 | amin allohuma amin | | 2009-04-09 07:37:13 | +622746680315 | AMIN3X, txq | | 2009-04-09 07:37:30 | +6285643394859 | Allah hu akbar | | 2009-04-09 08:19:47 | +628995086846 | Pye lek plz y, kok blm msk...?? | | 2009-04-09 08:20:38 | +628995086846 | Pye lek plz y, kok blm msk...?? | | 2009-04-09 10:02:56 | +6285743725411 | Asep081340706100 | | 2009-04-09 10:35:39 | +6285228033951 | SELAMAT BERJUANG, kita buka hati nurani tuk mlh calek yg kualitas. | | 2009-04-09 11:40:33 | +6281578699972 | Tp 16 aman terkendali,kondisi masih fit |
----------------------------------------------------------------+ +---------------------+----------------+----
10 rows in set (0.00 sec)
17. Desain Relasional antar tabel
Desain relational antar tabel dari basis data pileg ini adalah sebagai
berikut :
-- Constraints for table `advokasi` -- ALTER TABLE `advokasi` ADD CONSTRAINT `advokasi_ibfk_1` FOREIGN KEY (`nohp`) REFERENCES `saksi` (`nohp`) ON DELETE NO ACTION ON UPDATE CASCADE; -- -- Constraints for table `caleg` -- ALTER TABLE `caleg` ADD CONSTRAINT `caleg_ibfk_3` FOREIGN KEY (`kddapil`) REFERENCES `dapil` (`kddapil`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `caleg_ibfk_1` FOREIGN KEY (`nopartai`) REFERENCES `partai` (`nopartai`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `caleg_ibfk_2` FOREIGN KEY (`tingkat`) REFERENCES `dewan` (`tingkat`) ON DELETE NO ACTION ON UPDATE CASCADE; -- -- Constraints for table `dpt` -- ALTER TABLE `dpt` ADD CONSTRAINT `dpt_ibfk_1` FOREIGN KEY (`kdlokasi`) REFERENCES `tps` (`kdlokasi`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `dpt_ibfk_2` FOREIGN KEY (`notps`) REFERENCES `tps` (`notps`) ON DELETE NO ACTION ON UPDATE CASCADE; -- -- Constraints for table `kodelokasi` -- ALTER TABLE `kodelokasi`
99
ADD CONSTRAINT `kodelokasi_ibfk_1` FOREIGN KEY (`dp1`) REFERENCES `dapil` (`kddapil`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `kodelokasi_ibfk_2` FOREIGN KEY (`dp2`) REFERENCES `dapil` (`kddapil`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `kodelokasi_ibfk_3` FOREIGN KEY (`dp3`) REFERENCES `dapil` (`kddapil`) ON DELETE NO ACTION ON UPDATE CASCADE; -- -- Constraints for table `saksi` -- ALTER TABLE `saksi` ADD CONSTRAINT `saksi_ibfk_1` FOREIGN KEY (`kdlokasi`) REFERENCES `tps` (`kdlokasi`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `saksi_ibfk_2` FOREIGN KEY (`notps`) REFERENCES `tps` (`notps`) ON DELETE NO ACTION ON UPDATE CASCADE; -- -- Constraints for table `sms` -- ALTER TABLE `sms` ADD CONSTRAINT `sms_ibfk_1` FOREIGN KEY (`nohp`) REFERENCES `saksi` (`nohp`) ON DELETE NO ACTION ON UPDATE CASCADE; -- -- Constraints for table `suara` -- ALTER TABLE `suara` ADD CONSTRAINT `suara_ibfk_1` FOREIGN KEY (`kdlokasi`) REFERENCES `tps` (`kdlokasi`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `suara_ibfk_3` FOREIGN KEY (`notps`) REFERENCES `tps` (`notps`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `suara_ibfk_2` FOREIGN KEY (`idcaleg`) REFERENCES `caleg` (`idcaleg`) ON DELETE NO ACTION ON UPDATE CASCADE; -- -- Constraints for table `suaratidaksah` -- ALTER TABLE `suaratidaksah` ADD CONSTRAINT `suaratidaksah_ibfk_1` FOREIGN KEY (`kdlokasi`) REFERENCES `tps` (`kdlokasi`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `suaratidaksah_ibfk_2` FOREIGN KEY (`notps`) REFERENCES `tps` (`notps`) ON DELETE NO ACTION ON UPDATE CASCADE, ADD CONSTRAINT `suaratidaksah_ibfk_3` FOREIGN KEY (`tingkat`) REFERENCES `dewan` (`tingkat`) ON DELETE NO ACTION ON UPDATE CASCADE;
100
-- -- Constraints for table `tps` -- ALTER TABLE `tps` ADD CONSTRAINT `tps_ibfk_1` FOREIGN KEY (`kdlokasi`) REFERENCES `kodelokasi` (`kdlokasi`) ON DELETE NO ACTION ON UPDATE CASCADE;
5.1.5 Pengaturan Site pada DPW
Site pada sisi DPW ditempatkan pada posisi server PUBLIC, sehingga bisa
diakses oleh pemakai lain selama 24jam penuh, begitu juga basis data pileg. Site
pada DPW ini akan sebagai master terhadap basis data pileg dan tabel‐tabel pada
basis data tersebut berikut ini : dapil, kodelokasi, tps, dpt, caleg, dewan, partai,
link, brita. Sehingga semua kejadian terhadap database pileg akan dicatat pada
file log, yang nantinya file‐log ini yang akan di sinkronisasikan ke DPC sesuai
dengan aturan yang berlaku.
Untuk mengatur konfigurasi master dan slave, file my.ini yang terletak di folder
MySQL seperti pada gambar 5.1.
Gambar 5.1 Lokasi my.ini
101
File my.ini sebagai konfigurasi dari database MySQL perlu dilakukan penambahan
script untuk mendefinisikan sebagai master dan atau slave dengan konfigurasi
sebagai berikut :
Master:
[mysqld] #sebagai server log-bin=pileg34-log server-id=34 binlog-do-db=pileg
Script 5.1 Setting Konfigurasi Master
Dengan penjelasan sebagai berikut :
log-bin=pileg34-log, untuk mengaktifkan pencatatan pada file binary log
dengan nama file pileg34‐log. Sehingga semua kejadian
terhadap database akan di catat pada file log ini.
server-id=34, mengidentifikasi master dengan nilai 34.
binlog-do-db=pileg, mengidentifikasikan bahwa proses transaksi
terhadap basis data ‘pileg’ yang akan dicatat pada file
log, yang artinya hanya database ‘pileg’ ini saja yang akan
dicatat lognya dan yang akan di sinkronisasikan ke slave.
Untuk melihat status master bisa dilakukan dengan perintah show master status;
mysql> show master status; +-------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------+----------+--------------+------------------+ | pileg34-log.000001| 98 | pileg | | +-------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
Sedangkan untuk melihat file log digunakan show binlog events
mysql> show binlog events\G *************************** 1. row *************************** Log_name: pileg34-log.000001
102
Pos: 4 Event_type: Format_desc Server_id: 34 End_log_pos: 98 Info: Server ver: 5.0.24a-community-nt-log, Binlog ver: 4 1 row in set (0.00 sec)
Dari tampilan diatas terlihat bahwa master berjalan dan mencatat
kegiatan pada file log pileg34‐log.000001 mulai posisi 98, sedangkan pada events
terlihat bahwa ada satu kejadian (1. row) pada log pileg34‐log.000001 posisi awal
4 pada server‐id 34 dan posisi akhir log adalah 98.
Agar master ini bisa di koneksikan ke slave, maka pada Site master harus
dibuatkan user dengan hak Replication Slave sebagai berikut:
Mysql>CREATE USER 'pcku'@ '%' IDENTIFIED BY '****'; mysql>GRANT REPLICATION SLAVE ON *.* TO ->'pcku'@ '%' IDENTIFIED BY '****';
5.1.6 Pengaturan Site pada DPC
Site pada sisi DPC ditempatkan di masing‐masing DPC dengan sifat
intranet, yaitu hanya bisa diakses oleh user‐user dalam lokasi DPC tersebut,
sedangkan untuk melakukan proses sinkronisasi data ke DPW, site pada DPC
sebelumnya harus dikoneksikan ke internet dengan memasang nomor IP yang
bisa dibaca oleh site dari DPW, sehigga basis data yang ada di DPC bisa di akses
oleh DPW untuk sinkronisasi datanya. Selain itu pada site DPC ini juga di pasang
perangkat SMS Gateway, berupa sebuah modem GSM yang akan digunakan
untuk menerima sms dari saksi di masing‐masing TPS pada DPC tersebut.
Site DPC akan bertindak sebagai slave dan hanya akan melakukan
pembacaan log terhadap basis data pileg dan tabel‐tabel pada basis data master
berikut ini : dapil, kodelokasi, tps, dpt, caleg, dewan, partai, link, brita. Sehingga
semua kejadian pada master terhadap basis data pileg untuk tabel‐tabel tersebut
akan dikirimkan ke slave.
103
File my.ini sebagai konfigurasi dari database MySQL perlu dilakukan penambahan
script untuk mendefinisikan sebagai slave dengan konfigurasi sebagai berikut :
Slave:
[mysqld] server-id= 340407 #sebagai slave master-host=10.10.10.1 master-user=pcku master-password=pcku #slave hanya mengakses dB pileg dan tabel-tabel tertentu replicate-do-db=pileg replicate-do-table=pileg.dapil replicate-do-table=pileg.kodelokasi replicate-do-table=pileg.tps replicate-do-table=pileg.dpt replicate-do-table=pileg.caleg replicate-do-table=pileg.dewan replicate-do-table=pileg.partai replicate-do-table=pileg.brita replicate-do-table=pileg.link
Script 5.2 Setting Konfigurasi Slave
Dengan penjelasan sebagai berikut :
server‐id= 340407, server‐id digunakan untuk mengidentifikasi server
MySQL, dalam hal ini digunakan kdlokasi dari kecamatan
(slave). master‐host=10.10.10.1, master‐host digunakan untuk menunjukkan bahwa
master basis data yang ditunjuk adalah nomor ip address
10.10.10.1.
master‐user=pcku, master‐user digunakan untuk mendefinisikan user
MySQL master yang diberi hak sebagai replication slave.
master‐password=pcku, digunakan untuk mendefinisikan password dari user
yang telah ditunjuk diatas.
104
replicate‐do‐db=pileg, digunakan untuk mendefinisikan bahwa database yang
direplikasi adalah pileg.
replicate‐do‐table=pileg.dapil, digunakan untuk mendefinisikan bahwa tabel‐
tabel yang akan di sinkronisasi datanya, dalam hal ini
tabel dapil dari database pileg.
Setelah konfigurasi master dan slave tersebut di terapkan, maka kedua sisi
database server sudah akan bertindak sebagai master dan slave.
Untuk melihat posisi slave sudah jalan apa belum kita bisa menggunakan show
slave status pada prompt MySQL sebagai berikut:
mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Connecting to master Master_Host: 10.10.10.1 Master_User: pcku Master_Port: 3306 Connect_Retry: 60 Master_Log_File: pileg34-log.000001 Read_Master_Log_Pos: 98 Relay_Log_File: prive-f558ee00e-relay-bin.000022 Relay_Log_Pos: 234 Relay_Master_Log_File: pileg34-log.000001 Slave_IO_Running: No Slave_SQL_Running: Yes Replicate_Do_DB: pileg Replicate_Ignore_DB: Replicate_Do_Table: pileg.dapil, pileg.kodelokasi, pileg.tps, pileg.dpt, pileg.caleg,
pileg.dewan, pileg.partai, pileg.link, pileg.brita
Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 98 Relay_Log_Space: 234 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File:
105
Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: NULL mysql>
Slave_IO_State, menunjukkan kondisi slave saat ini, Connecting to master
mengandung arti bahwa slave sedang menunggu koneksi ke master.
5.1.7 Pengaturan MultiMaster
Pengaturan Site pada DPW dan Site pada DPC diatas akan menjadikan Site
DPW menjadi master dan Site DPC menjadi slave, artinya data‐data transaksi
yang terjadi di Site DPW (master) akan dikirimkan ke Site DPC (Slave).
Multimaster digunakan untuk menjadikan site DPW selain menjadi master juga
dijadikan sebagai slave, begitu juga site DPC selain menjadi slave juga dijadikan
sebagai master.
Tabel‐tabel yang akan sinkronasikan dari site DPW ke DPC sudah
dijelaskan di sub. 5.1.6 dan 5.1.7 diatas, sedangkan tabel‐tabel yang akan
disinkronisasikan dari DPC ke DPW adalah saksi, advokasi, suaratidaksah dan
suara.
Konfigurasi multimaster yang dilakukan pada file my.ini adalah sebagai
berikut :
Pada Sisi DPW:
[mysqld] #sebagai server log-bin=pileg34-log server-id=34 binlog-do-db=pileg #slave hanya mengakses dB pileg dan tabel-tabel tertentu replicate-do-db=pileg replicate-do-table=pileg.saksi replicate-do-table=pileg.advokasi replicate-do-table=pileg.suaratidaksah replicate-do-table=pileg.suara replicate-do-table=pileg.inbox
Script 5.3 Setting Konfigurasi Multi‐Master Site DPW
106
Pada Sisi DPC
[mysqld] #sebagai server log-bin=pileg340407-log server-id= 340407 binlog-do-db=pileg #sebagai slave master-host=10.10.10.1 master-user=pcku master-password=pcku #slave hanya mengakses dB pileg dan tabel-tabel tertentu replicate-do-db=pileg replicate-do-table=pileg.dapil replicate-do-table=pileg.kodelokasi replicate-do-table=pileg.tps replicate-do-table=pileg.dpt replicate-do-table=pileg.caleg replicate-do-table=pileg.dewan replicate-do-table=pileg.partai replicate-do-table=pileg.brita replicate-do-table=pileg.link
Script 5.4 Setting Konfigurasi Multi‐Master Site DPC
Untuk sisi Site DPW karena sifatnya yang pasif, maka Site DPW pada waktu
melakukan sinkronisasi terhadap Site DPC akan dilakukan oleh Site DPC sendiri
dengan mengaktifkan atau menjalankan prosedur slave sebagai berikut :
mysql> CHANGE MASTER TO -> MASTER_HOST='master_host_name', -> MASTER_USER='replication_user_name', -> MASTER_PASSWORD='replication_password', -> MASTER_LOG_FILE='recorded_log_file_name', -> MASTER_LOG_POS=recorded_log_position;
DPC akan melakukan login ke database server di DPW menggunakan user yang
telah disediakan (user dengan hak akses replication slave), master‐host, master‐
user dan master‐password di Script 5.4 adalah host, user dan password dari
database server di site DPW. Identitas tersebut yang akan digunakan oleh Site
DPC untuk masuk ke database Server di Site DPW, lalu menjalankan perintah
(change master) sebagai berikut:
107
C:\AppServ\MySQL\bin>mysql –h 10.10.10.1 –u pcku –p pcku Mysql> STOP SLAVE; mysql> CHANGE MASTER TO -> MASTER_HOST='10.10.10.2', -> MASTER_USER='340407', -> MASTER_PASSWORD='340407', -> MASTER_LOG_FILE='', -> MASTER_LOG_POS=98; mysql> START SLAVE;
Script 5.5 Setting Change Master Site DPW oleh Site DPC
Prosedur ini dilakukan karena Site DPW akan melakukan sinkronisasi data dari
DPC‐DPC yang tersebar diseluruh Wilayah DIY, dimana DPC‐DPC tersebut tidak
full on‐line, sehingga pihak DPC sendiri yang akan melakukan proses itu, dan
dialamatkan ke alamat dari DPC yang melakukannya.
5.2 Implementasi Program Aplikasi
Program aplikasi yang dibangun baik untuk sisi DPW maupun DPC adalah
sama, yang membedakan hanya dari posisi login dan basis datanya saja. Program
aplikasi ini dibangun menggunakan PHP dan didukung dengan teknologi ajax,
serta pemanfaatan trigger.
5.1.1 Web Page Main Menu
Main menu DPW menampilkan informasi halaman depan dari sistem yang
dibangun, pada gambar 5.2, tampilan ini memperlihatkan pada bagian utama
(tengah) diawali dengan bagian atas (header), bagian kiri (left), bagian tengah
(content) serta bagian kanan (right).
108
Gambar 5.2 Web Page Main Menu DPW
Halaman ini di bangun menggunakan metode frame dengan script terlihat
pada script 5.6:
<frameset rows="85,*" border="0" framespacing="0"> <frame name="head" src="head.php" frameborder="0" scrolling="no"> <frameset cols="175,*,200" border="0" framespacing="0"> <frame name="navi" src="left.php" frameborder="0" scrolling="no"> <frame name="content" src="main.php" frameborder="0" marginwidth="20" scrolling="auto"> <frame name="kanan" src="kanan.php" frameborder="0" scrolling="auto"> </frameset> </frameset>
Script 5.6 Script Frame Utama
a. Bagian Atas (header)
Bagian ini akan menampilkan judul dan informasi dari sistem disertai
dengan letak dari sistem ini (DPW atau DPC), letak dari sistem ini di ambil dari
basis data yang ada, script untuk mengambil data tersebut bisa dilihat pada script
109
5.7 berikut ini.
include 'config/open.php'; if(!mysql_select_db($db,$con)) die("database salah "); $s="select kdlokasi,nama from kodelokasi where level=4"; $hs1=mysql_query($s,$con); if(!$hs1) die("permintaan gagal, coba ulangi lagi TPS"); $member=null;$lgn=null; $hed="SISTEM PELAPORAN PERHITUNGAN SUARA DPW PKS PROP. DIY"; if(mysql_num_rows($hs1)==1) { $dt1=mysql_fetch_row($hs1); $hed="REPLIKASI PELAPORAN PENGHITUNGAN SUARA KECAMATAN
$dt1[0]/$dt1[1]"; } mysql_close($con); echo "<td width=90% align=center valign=top><h1>$hed</h1>";
Script 5.7 Script Frame Header
b. Bagian Kiri (Left)
Bagian ini memuat menu utama yang terdiri dari menu umum, menu
admin, menu login dan link.
c. Bagian Tengah (Content)
Bagian ini memuat semua tampilan hasil dari pilihan dari menu kiri
maupun menu kanan.
d. Bagian Kanan (Right)
Bagian ini memuat menu pencarian, deteksi user aktif, 5 berita terlaris,
Top Score dan SMS Box.
5.1.2 Web Page Login
Web Page Login ini digunakan untuk mengakses ke sistem, dengan
memasukkan nama pemakai dan password. Maka akan diperoleh fasilitas menu
sesuai dengan kelompok user. Sedangkan untuk mendapatkan user, sepenuhnya
dikelola oleh administrator dari Web Site ini seperti pada gambar 5.4.
110
Gambar 5.4 Web Page Login
Form login ini menggunakan teknologi ajax untuk melakukan validasi
pemakai maupun password, pada text box pemakai pada script 5.8, digunakan
event onchange untuk mengaktifkan ajax guna mencari pemakai yang
dimasukkan ke tabel login,
Pemakai : <input type=text name=pemakai size=15 onchange='showuser(this.value)'>
Script 5.8 Textbox pemakai
onchange akan melakukan pemanggilan function showuser(this.value) dari java
script pada script 5.9 yang telah ditentukan sebagai berikut:
111
..
.. function showuser(str) { xmlHttp=GetXmlHttpObject() if (xmlHttp==null) { alert ("Browser tidak support HTTP Request") return } var url="mbrita/login.php" url=url+"?q="+str url=url+"&sid="+Math.random() xmlHttp.onreadystatechange=stateChanged xmlHttp.open("GET",url,true) xmlHttp.send(null) } function stateChanged() { if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") { xmlDoc=xmlHttp.responseXML; document.getElementById("login").innerHTML=xmlHttp.responseText; } } .. ..
Script 5.9 Java Script Showuser
Function showuser(str) akan memanggin script mbrita/login.php?q=str
pada script 5.10 dan akan mengembalikan nilai ke pemanggil dengan nama
elemen login.
<?php $q=$_GET["q"]; include '../config/open.php'; .. .. $s="select * from login where pemakai like '$q%'"; $hs1=mysql_query($s,$con); if(!$hs1) die("permintaan gagal, coba ulangi lagi TPS"); if(mysql_num_rows($hs1)) { $tg1=null;$tg=null;$tg3=null; $dt1=mysql_fetch_row($hs1); if(!empty($dt1[5]) and ($dt1[5]!=session_id())) $tg1=" Dipakai "; if(!empty($dt1[2])) { $d=(substr($dt1[2],1,10)==$td);
112
$tg=" sejak $dt1[2]"; } if($tg1 and $tg and $d) $tg3="<a href=module/logout.php?pemakai=$dt1[0]>Logout</a>"; if(empty($tg1) and empty($tg) and empty($tg3)) $tg=" Masukkan Password"; $lgn= "Hai Mr. $dt1[0], $tg $tg1 $tg3"; } else { $lgn= "Maaf user $q tidak ada di database"; } echo "$lgn"; ?>
Script 5.10 Script login.php
Hasil dari script 5.7 ini akan menjadi dua kelompok, kelompok pertama adalah
user yang dimasukkan belum terdaftar di database, hasil kedua adalah bahwa
user yang dimasukkan ada di database dan kita diminta untuk memasukkan
password dari user tersebut.
Proses pada permintaan password ini menggunakan teknik yang sama dengan
proses pada pengisian user sebelumnya, proses ini akan menghasilkan dua
pilihan juga yaitu : Maaf Password tidak cocok, lalu proses tidak dilanjutkan
sedangkan yang kedua adalah jika password dan user cocok, maka akan
dilanjutkan dengan menampilkan form [LOGIN], dengan memilih click pada
tombol [LOGIN], maka user akan dibawa masuk ke Menu User sesuai dengan
level atau hak yang diperuntukkan untuk user tersebut.
5.1.3 Web Page Menentukan Nomor Urut Caleg
Web Page ini digunakan untuk mengolah calon yang diusung oleh partai
untuk ditempatkan pada posisi Daerah Pemilihan, Tingkatan Pemilihan serta
Nomor Urut dari calon tersebut.
Sebelum caleg mendapatkan nomor urut dan dapil, sebulumnya caleg
harus sudah diusulkan oleh partai dan memperoleh idcaleg, setelah diperoleh
113
idcaleg tersebut maka seorang caleg baru bisa diproses untuk mendapatkan
Nomor Urut caleg yang akan ditempati pada posisi dapil tertentu dan tingkat
pemilihan tertentu, setelah menentukan caleg selanjutnya akan dilakukan
penempatan calon anggota legislatif seperti pada gambar 5.5.
Gambar 5.5 Web Page Penempatan Caleg ke Dapil
Tingkatan Dewan, option untuk menentukan (DPD, DPR, DPRDI, DPRDII), onclick
dari option ini akan menjalankan ajax dengan parameter pada gambar 5.6.
Gambar 5.6 Params q caleg.js
Script dapile.php akan mengirimkan parameter q=DPRDI melalui script caleg.js
untuk kemudian di oleh oleh script yang menghasilkan response pada gambar 5.7
114
Gambar 5.7 Response q caleg.js
Response pada gambar 5.7 akan menghasilkan output html dengan button untuk
memilih pilihan dapil, onclick pada salah satu button akan mengirimkan data ke
form addpartai textbox kdp akan diisi oleh data pada button yang dipilih ,
onclick=’document.addpartai.kdp.value=3406’. Adapun script yang menghasilkan
gambar 5.7 terlihat pada script 5.11 adalah:
<?php $aw=$_GET['q']; include '../config/open.php'; if($aw=='DPR') $dpe=1; elseif($aw=='DPRDI') $dpe=2; elseif($aw=='DPRDII') $dpe=3; else $dpe=1; .. $s="select kddapil,nama,level from dapil where level<='$dpe' order by kddapil,level"; $hs=mysql_query($s,$con); .. while($dt=mysql_fetch_row($hs)) { $nu++; if($dt[2]!=$dpe) { echo "<tr class='even'>"; echo "<td>$dt[0]</td><td>$dt[1]</td><tr> <td valign=top>DAPIL</td><td valign=top>"; } else { $t=substr($dt[1],0,7); echo "<input type=button value='$t' onclick=\"document.addpartai.kdp.value=$dt[0]\">";
115
} } ?>
Script 5.11 Script dapile.php
Textbox selanjutnya adalah pemberian nomor urut caleg, pada proses ini juga
dilakukan validasi terhadap nomor urut yang dimasukkan, jika dimasukkan ‘001’,
maka event onkeyup(‘cari(…..)’) akan dijalankan dengan parameter pada gambar
5.8.
Gambar 5.8 Params kdp caleg.js
Dari gambar 5.8 diatas terlihat bahwa parameter mengirimkan
q=99?DPRDI?3403?00, maka akan menghasilkan reponse pada gambar 5.9.
Gambar 5.9 Response 00 caleg.js
Dari gambar 5.9 diatas terlihat, bahwa parameter yang dikirimkan seperti pada
gambar 5.8 diberi response “Jangan Pake ‘00’. Adapun script yang digunakan
terlihat pada script 5.12 sebagai berikut:
<?php $aw=$_GET['q']; $dw=explode("?",$aw); if(!empty($dw[3])) { if($dw[3]=='00') echo "Jangan Pake '00'"; else { include '../config/open.php';
116
if(!$con) { die("Mysql belum diaktifkan, silahkan aktifkan dulu"); } if(!mysql_select_db($db,$con)) die("database salah "); $s="select idcaleg from caleg where nopartai='$dw[0]' and tingkat='$dw[1]' and kddapil='$dw[2]' and nu='$dw[3]' order by nu desc"; $hs=mysql_query($s,$con); if(mysql_numrows($hs)) echo "Sudah ada"; else echo "Belum Ada"; } } ?>
Script 5.12 Script Carinu.php
Hasil dari script ini ada 3 informasi, yaitu :
Jangan Pake ‘00’, penomoran ‘00’ sudah digunakan untuk nomor urut partai.
Sudah Ada, berarti nomor yang dimasukkan sudah ada di database.
Belum Ada, berarti nomor yang dimasukkan bisa digunakan.
Validasi menggunakan teknik ajax ini akan memudahkan end‐user dalam
menjalankan transaksi, dan tentunya data yang akan dimasukkan atau diproses
dari form ini sudah merupakan data yang bisa dipertanggungjawabkan
kebenarannya.
5.1.4 Web Page Distribusi Data
Web page distribusi data ini digunakan untuk melakukan proses distribusi
dari DPW ke DPC‐DPC dengan menggunakan metode partial replica, yaitu
replikasi yang dikombinasikan dengan fragmentasi horisontal. Dengan
menentukan kecamatan atau DPC yang akan di buatkan replikasinya, dialog ini
akan memberikan langkah‐langkah fragmentasinya 1 sampai dengan 8 langkah
fragmentasi. Setelah selesai dilakukan fragmentasi, maka basis data hasil
fragmentasi bisa di unduh dalam bentuk file SQL, yang kemudian bisa di ekstrak
di server DPC, selain menyediakan file hasil fragmentasi, dialog ini juga
menyediakan file konfigurasi untuk slave, file ini (my.ini) sudah dikonfigurasi
117
untuk slave yang terhubung dengan site DPW, sehingga DPC sudah tidak
melakukan setting slave lagi. Pada dialog yang disajikan pada gambar 5.10 ini juga
disediakan button untuk melihat data hasil fragmentasi.
Proses ini pertama‐tama dari menu Replikasi pada bagian kiri, kita
memilih option Kabupaten yang ada, event onchange ini teknik ajax akan
menampilkan data kecamatan dari kabupaten yang dipilih. Selanjutnya kita
memilih kecamatan yang akan dibuatkan replikasinya, selanjutnya seperti pada
gambar 5.10.
Gambar 5.10 Web Page Proses Distribusi
Tahap‐tahap dalam melakukan proses distribusi ini adalah sebagai berikut:
1. Menyiapkan database temporari
118
Menyiapkan database temporari yang akan digunakan untuk
menampung hasil fragmentasi sementara dan membuat copy file sumber seperti
pada script 5.13 berikut ini.
$q=$_REQUEST["in"]; //in adalah kodelokasiyang dipilih //membuat copy dari pileg.zip ke tmpxxxxx $t="tm$q.sql.zip"; copy("pileg.zip",$t); $tmp="tmppileg"; include "..\config\open.php"; mysql_query("drop database $tmp",$con); mysql_query("create database $tmp",$con);
Script 5.12 Membuat Database Temporari
Setelah database temporari siap, maka dilakukan proses pembuatan
tabel‐tabel kedalam database temporari tersebut. Sumber tabel sudah disiapkan
berbentuk file SQL ‘pileg.zip’ yang isinya sudah hilangkan semua fungsi relasinya,
pada script 5.13 memperlihatkan proses pembacaan file SQL dan menuliskannya
ke database temporari.
$struk=’pileg.zip’; if(file_exists($struk)) { $bc=fopen("$struk","r"); $n=''; while(!feof($bc)) { $n=$n.(fgets($bc,500)); if(eregi("DELIMITER",$n)) { $x=substr_count($n,"DELIMITER"); if($x==2) { //akhir $nn=eregi_replace("DELIMITER","",$n); mysql_query($nn,$con); $nn=''; $n=''; } } else { if(ereg(";",$n)) { mysql_query($n,$con);
119
$n=''; } } } fclose($bc); }
Script 5.13 Menuliskan Tabel ke Database Temporari
2. Langkah‐1, Fragmentasi Kodelokasi
Proses ini akan dilakukan fragmentasi horisontal terhadap tabel
kodelokasi berdasarkan kdlokasi yang telah dimasukkan diawal. Proses ini juga
akan melakukan penulisan SQL ke file SQL dengan modus ‘Add’, pada script 5.14
berikut memperlihatkan proses fragmentasi yang dilakukan.
$tb="SELECT * FROM kodelokasi where level>=4 and kdlokasi like '$kec%' order by level"; if(mysql_select_db($db,$con)) { $hs1=mysql_query($tb,$con); $r=0; while($dt=mysql_fetch_row($hs1)) { $i++; $s="insert into kodelokasi values("; for($j=0;$j<count($dt);$j++) { $s=$s."'".$dt[$j]."'"; if($j<count($dt)-1) $s=$s.","; } $s=$s.");"; if(mysql_db_query($tmp,$s,$con)) { tulissql($kec,$s); $r++; } } }
Script 5.14 Fragmentasi Horisontal tabel kodelokasi
3. Langkah‐2, Fragmentasi TPS
Proses ini akan dilakukan fragmentasi horisontal terhadap tabel tps
berdasarkan kdlokasi yang telah dimasukkan diawal. Proses ini juga akan
melakukan penulisan SQL ke file SQL dengan modus ‘Add’, pada script 5.15
berikut memperlihatkan proses fragmentasi yang dilakukan.
120
$tb= "SELECT tps.kdlokasi,tps.notps,tps.nama,tps.lelaki,tps.wanita FROM tps where tps.kdlokasi like '$kec%'"; if(mysql_select_db($db,$con)) { $hs1=mysql_query($tb,$con); $r=0; while($dt=mysql_fetch_row($hs1)) { $i++; $s="insert into tps values("; for($j=0;$j<count($dt);$j++) { $s=$s."'".$dt[$j]."'"; if($j<count($dt)-1) $s=$s.","; } $s=$s.");"; if(mysql_db_query($tmp,$s,$con)) { $r++; tulissql($kec,$s); } } }
Script 5.15 Fragmentasi Horisontal tabel tps
4. Langkah‐3, Fragmentasi DPT
Proses ini akan dilakukan fragmentasi horisontal terhadap tabel dpt
berdasarkan kdlokasi yang telah dimasukkan diawal. Proses ini juga akan
melakukan penulisan SQL ke file SQL dengan modus ‘Add’, pada script 5.16
berikut memperlihatkan proses fragmentasi yang dilakukan.
$tb="select * from dpt where kdlokasi like '$kec%'"; if(mysql_select_db($db,$con)) { $hs1=mysql_query($tb,$con); while($dt=mysql_fetch_row($hs1)) { $i++; $s="insert into dpt values("; for($j=0;$j<count($dt);$j++) { $s=$s."'".$dt[$j]."'"; if($j<count($dt)-1) $s=$s.","; } $s=$s.");"; if(mysql_db_query($tmp,$s,$con)) { tulissql($kec,$s); } }
121
}
Script 5.16 Fragmentasi Horisontal tabel tps
Langkah‐4, Fragmentasi Dapil
n fragmentasi horisontal terhadap tabel dapil
berdasark k Pr
script
t
5.
Proses ini akan dilakuka
an kdlo asi yang telah dimasukkan diawal. oses ini juga akan
melakukan penulisan SQL ke file SQL dengan modus ‘Add’, pada 5.17
berikut memperlihatkan proses fragmen asi yang dilakukan.
$tb="select distinct a.kddapil, a.nama, a.level from dapil a, kodelokasi b where b.kdlokasi like '$kec%' and (dp1=kddapil or dp2=kddapil or dp3=kddapil)"; if(mysql_select_db($db,$con)) { $hs1=mysql_query($tb,$con); while($dt=mysql_fetch_row($hs1)) { $i++;$j=0; $s="insert into dapil values("; for($j=0;$j<count($dt);$j++) { $s=$s."'".$dt[$j]."'"; if($j<count($dt)-1) $s=$s.","; } $s=$s.");"; if(mysql_db_query($tmp,$s,$con)) { tulissql($kec,$s); } } }
Script 5.17 Fragmentasi Horisontal tabel dapil
6. Langkah‐5, Fra
fragmentasi horisontal terhadap tabel caleg
berdasark k Pr
script
gmentasi Caleg
Proses ini akan dilakukan
an kdlo asi yang telah dimasukkan diawal. oses ini juga akan
melakukan penulisan SQL ke file SQL dengan modus ‘Add’, pada 5.18
berikut memperlihatkan proses fragmentasi yang dilakukan.
$tb="select caleg.idcaleg, caleg.nopartai, caleg.nama, caleg.tgllahir, caleg.sex, caleg.kddapil,
122
caleg.tingkat, caleg.nu from caleg where kddapil in ( select distinct a.kddapil f rom dapil a, kodelokasi b where b.kdlokasi like '$kec%' and (dp1=kddapil or dp2=kddapil or dp3=kddapil))"; if(mysql_select_db($db,$con)) { $hs1=mysql_query($tb,$con); while($dt=mysql_fetch_row($hs1)) { $i++; $s="insert into caleg values("; for($j=0;$j<count($dt);$j++) { $s=$s."'".$dt[$j]."'"; if($j<count($dt)-1) $s=$s.","; } $s=$s.");"; if(mysql_db_query($tmp,$s,$con)) { tulissql($kec,$s); } } }
Script 5.18 Fragmentasi Horisontal tabel caleg
7. Langkah‐6, Fra
fragmentasi horisontal terhadap tabel partai
berdasark k
script
t
gmentasi Partai
Proses ini akan dilakukan
an kdlo asi yang telah dimasukkan diawal. Proses ini juga akan
melakukan penulisan SQL ke file SQL dengan modus ‘Add’, pada 5.19
berikut memperlihatkan proses fragmen asi yang dilakukan.
$tb="select nopartai,nama from partai where nopartai in ( select distinct nopartai from caleg where kddapil in ( select distinct a.kddapil from dapil a, kodelokasi b where b.kdlokasi like '$kec%' and (dp1=kddapil or dp2=kddapil or dp3=kddapil)))"; if(mysql_select_db($db,$con)) { $hs1=mysql_query($tb,$con); while($dt=mysql_fetch_row($hs1)) { $i++; $s="insert into partai values("; for($j=0;$j<count($dt);$j++) { $s=$s."'".$dt[$j]."'"; if($j<count($dt)-1) $s=$s.","; } $s=$s.");"; if(mysql_db_query($tmp,$s,$con))
123
{ tulissql($kec,$s); } } }
Script 5.19 Fragmentasi Horisontal tabel partai
8. Langkah‐7, Fr
a tidak dilakukan fragmentasi
horison
FROM dewan";
agmentasi Dewan, Link, Brita
Proses pada tabel dewan, link dan brit
tal karena semua isi dari tabel dewan akan ikut didistribusikan. Proses ini
juga akan melakukan penulisan SQL ke file SQL dengan modus ‘Add’, pada script
5.20. Selain melakukan proses untuk dewan, link dan brita, bagian ini juga
melakukan proses penambahan data pada tabel login, untuk memberikan default
login bagi user database replikasi, berikut memperlihatkan proses fragmentasi
yang dilakukan.
$tb="SELECT * if(mysql_select_db($db,$con)) { $hs1=mysql_query($tb,$con); echo "<table class='table_utama' width=80%>"; while($dt=mysql_fetch_row($hs1)) { $i++; $s="insert into dewan values("; for($j=0;$j<count($dt);$j++) { $s=$s."'".$dt[$j]."'"; if($j<count($dt)-1) $s=$s.","; } $s=$s.");"; if(mysql_db_query($tmp,$s,$con)) { tulissql($kec,$s); } } } //masukkan lo in default admin passwg ord nimda level 1 $lg="insert into login(pemakai,kunci,level) values('admin','nimda',1);"; mysql_db_query($tmp,$lg,$con); tulissql($kec,$lg); //table link $tb="select * from link"; if(mysql_select_db($db,$con)) { $hs1=mysql_query($tb,$con); while($dt=mysql_fetch_row($hs1)) { $i++; $s="insert into link values("; for($j=0;$j<count($dt);$j++) {
124
$s=$s."'".$dt[$j]."'"; if($j<count($dt)-1) $s=$s.","; } $s=$s.");"; if(mysql_db_query($tmp,$s,$con)) { tulissql($kec,$s); } } } //table brita $tb="select * from brita"; if(mysql_select_db($db,$con)) { $hs1=mysql_query($tb,$con); while($dt=mysql_fetch_row($hs1)) { $i++; $s="insert into brita(tgl,judul,author,utama,lengkap, dibaca,aktiv) values("; for($j=1;$j<count($dt);$j++) { $s=$s."'".$dt[$j]."'"; if($j<count($dt)-1) $s=$s.","; } $s=$s.");"; if(mysql_db_query($tmp,$s,$con)) { tulissql($kec,$s); } } }
Script 5.20 Fragmentasi Horisontal tabel dewan
9. Penerapan At
al dilakukan dengan melakukan penulisan data
sumber
uran Relasional
Penerapan aturan relasion
dari file SQL yang telah disiapkan yaitu ‘constrain.zip’ dari file ini akan di
masukkan ke database temporari dan juga akan dituliskan ke file SQL dengan
modus ‘Add’ , script 5.21 memperlihatkan bagaimana proses tersebut dilakukan.
$struk="constrain.zip"; if(file_exists($struk)) { $bc=fopen("$struk","r"); $s='';$i=0; $n=''; while(!feof($bc)) { $n=$n.(fgets($bc,500)); if(ereg(";",$n)) { if(mysql_query($n,$con)) { tulissql($kec,"$n");
125
} $n=''; } } fclose($bc); echo "<pre>Oke Constraint sudah di tambahkan</pre>"; }
Script 5.21 Penerapan Aturan Relasional
10. Melihat Hasil Fragmentasi
Hasil fragme pakah fragmentasi
atau belum, teknik yang dilakukan dalam
menam
a
ntasi perlu dilihat untuk memastikan a
yang dilakukan telah sesuai
pilkan hasil fragmentasi disini adalah menggunakan ajax, button yang
digunakan untuk menangkap events diberi nama deng n nama dari tabel yang
akan dilihat hasilnya, dan nama itu pula yang akan dijadikan parameter untuk
menghasilkan response yang diinginkan script 5.22 memperlihatkan button dan
events tersebut.
echo"<input type='submit' value='tps' size=10 onclick='show(this.value)'>";
Script 5.22 Melihat Hasil Fragmentasi tps
kan parameter this.values seperti
diperlihatkan pada
Event onclick=’show(this.value)’ akan mengirim
gambar 5.11 berikut ini.
Gambar 5.11 Parameter listtabel.php
Response dari proses diatas diperlihatkan pada gambar 5.12 berikut ini.
126
Gambar 5.12 Response listtabel.php
Script listtabel script 5.23 dibawah
ini, dim
.php yang digunakan bisa dilihat pada
ana parameter yang dikirim akan sebagai masukan pada script ini.
$q=$_GET["q"]; if($q=='tutup') {echo ""; return;} include '../config/open.php'; $dbm="tmppileg"; if(!$con) { die("Mysql belum diaktifkan, silahkan aktifkan dulu"); } if(!mysql_select_db($dbm,$con)) die("database salah "); $s="select * from $q"; if($q=='caleg') $s="select * from $q where nu !='00'"; $hs=mysql_query($s,$con); $nu=0; echo "<div align=center><b>Data Hasil Fragmentasi horisontal Tabel $q</b><table class='table_utama' width='100%'>"; while($dt=mysql_fetch_row($hs)) { $nu++; echo "<tr class='even'><td valign=top>$nu</td>"; $n=count($dt); if($q=='brita') $n=4; for($i=0;$i<$n;$i++) { echo "<td valign=top>$dt[$i]</td>"; } } echo "</table></div>"; mysql_close($con);
Script 5.23 Script listtabel.php
11. Mengunduh data hasil Fragmentasi
127
Mengunduh tabel hasil fragmentasi terdiri dari dua macam yaitu script
konfigurasi slave MySQL dan file SQL hasil fragmentasi. Dalam pengujian ini
kedua file diberi ekstensi “.zip”, tetapi pada dasarnya kedua file tersebut teks
murni pada script 5.24 menunjukkan proses mengunduh kedua file tersebut.
echo "<br>Oke silahkan download : [ <a href=my.ini.zip>Konfigurasi MySQL (my.ini)</a> ] [ <a href=$t>Data Hasil Fragmentasi Horisontal</a> ]</div>";
Script 5.24 Script Mengunduh Data Hasil Fragmentasi
5.1.5 Web P
pada gambar 5.14 ditampilkan saat
pertam
age Setting Database DPC
Web page Setting Database DPC
a kali sistem di DPC di panggil, dan belum memiliki database dan atau
masih ada sebuah file ‘install.txt’, sehingga sistem akan secara otomatis
mengalihkan tampilan indexnya ke halaman ini.
Dialog ini digu hasil distribusi data
DPW ke
Gambar 5.14 Setting Database DPC
nakan untuk mengekstrak database
site DPC, Pada Konfigurasi Database digunakan untuk memasukkan nama
128
file hasil unduhan di proses distribusi data, dengan memilih browse, maka akan
ditampilkan explorer untuk memilih file yang akan di ekstrak. User Root
digunakan untuk memasukkan nama user setingkat ‘root’ atau ‘root’ itu sendiri
dan password root digunakan untuk memasukkan password dari user tersebut.
Nama Database secara default ‘pileg’, nama file tersebut bisa diubah. Dan tombol
proses digunakan untuk memulai proses memasukkan data ke MySQL database,
Script Konfigurasi Database yang digunakan seperti pada Script 5.25. Form
dengan memanfaatkan <form ….. enctype=multipat/form‐data> dan <input
type=file name=sumb value=’’> mengakibatkan input tersebut akan membuka
explorer untuk memilih sebuah file yang akan di masukkan dan diterima oleh
variabel “sumb”. Dengan memanfaatkan teknik ajax, user dan password di chek
menggunakan onchange='cek(document.sms.user.value,this.value)', sehingga akan
langsung ke valid tidaknya user dan password yang dimasukkan. Begitu juga
dengan teknik yang sama untuk isian Nama Database.
<form name=sms action=buat.php method=post enctype=multipart/form-data> <b>Konfigurasi Database</b> <table class='table_utama' width=100%> <tr><td>File Sumber</td> <td>:<input type=file name=sumb value=''></td> <tr><td>User Root</td> <td>:<input type=text name=user value='root'></td> <tr><td>Password Root</td> <td>:<input type=password name=passw value='' onchange='cek(document.sms.user.value,this.value)'> <span id=ck></span></td> <tr><td>Nama Database</td> <td>:<input type=text name=db value='pileg' onchange='cekdb(document.sms.user.value, document.sms.passw.value, this.value,document.sms.sumb.value)'> <span id=ck2></span></td> <tr><td></td><td><input type=submit value=Proses></form>
Script 5.25 Script Desain Konfigurasi Database
129
Konfigurasi Slave (my.ini) adalah file konfigurasi untuk my.ini yang
diguna
a
gunakan untuk melakukan sinkronisasi data
dari DP
kan untuk konfigurasi slave. File Konfigurasi MySQL telah disiapkan oleh
DPW dan diunduh pada saat Distribusi Data, Browse digunakan untuk memilih
file tersebut. Folder MySQL, adalah alamat atau folder dari software MySQL yang
digunakan untuk menampung file my.ini. Setelah konfigurasi MySQL selesai di
proses, lalukan restart terhadap database server MySQL, agar aturan yang baru
saja di aplikasikan bisa digunakan.
5.1.6 Web Page Sinkronisasi Dat
Web page sinkronisasi data di
W ke DPC maupun sebaliknya. Site DPW diletakkan pada server public,
sehingga selalu aktif dan menggunakan domain atau nomor ip address yang
tetap, sedangkan DPC akan aktif dalam melakukan proses sinkronisasi, baik untuk
melakukan sinkronisasi data pendukung pemilu maupun pelaporan hasil
penghitungan suara ke DPW. Sehingga dialog ini diletakan pada Site DPC. Dialog
pada gambar 5.13 memperlihatkan status dari site kecamatan dengan filelog
laptop‐log.000007 dengan position 6247 untuk basis data pileg, lalu disebelah
kanannya adalah form untuk melakukan koneksi ke site lain dalam hal ini adalah
site DPW, dengan menyebutkan host, user dan password. Jika koneksi berhasil
maka site DPC ini bisa melakukan sinkronisasi ke DPW. Sedangkan dibagian
bawah ada informasi Status Slave, yang dipanggil dari tombol [Show Slave], dari
tampilan tersebut akan bisa dilihat status slave dari lokasi yang dipilih terhadap
master di site lain. Sedangan tombol [laptop‐log.000007] digunakan untuk
melihat log transaksi sebagai master, kejadian apa saja yang telah terjadi di
master, yang akan mempangaruhi data (insert, update, delete dll).
130
Gambar 5.13 Web Page Sinkronisasi Database
Untuk melihat status master pada sisi DPC (Localhost) menggunakan
perintah show status bisa dilihat pada script 5.25 berikut ini.
include '../config/open.php'; $s="show master status"; echo "<fieldset><h2>Status Master '<i>localhost</i>'</h2>"; $hs1=mysql_query($s,$con); if(!$hs1) die("permintaan gagal, coba ulangi lagi TPS"); $dt=mysql_fetch_row($hs1); echo "<table width='100%'> <tr><td>File</td><td>$dt[0]</td> <tr><td>Position</td><td>$dt[1]</td> <tr><td>Binlog_do_DB</td><td>$dt[2]</td> <tr><td>Binlog_ignore_DB</td><td>$dt[3]</td></table></fieldset>";
Script 5.25 Script Status Master DPC
Status dari master akan terlihat dari nama file log, position, database yang
dicatat lognya (binlog_do_DB).
Tiga button dibawah status adalah tombol untuk melihat detail log,
131
kondisi slave DPC dan tombol tutup untuk menutup tampilan kedua tombol
sebelumnya.
Laptop‐log.00007, adalah tombol yang menggunakan teknik ajax untuk
menampilkan data binary log dari master, script 5.26 menunjukkan event yang
digunakan untuk menjalankannya.
(1) <input type=button name=log value=\"$dt[0]\" onclick='showlog(this.value,0)'> (2) <input type=button name=log value=\"Show Slave\" onclick='sslave(this.value,0)'> (3) <input type=button name=log value='Tutup' onclick='sslave(this.value,0)'>
Script 5.26 Script Event Showlog master
Dari script 5.26 akan mengirimkan parameter seperti terlihat pada gambar 5.14
dan response pada gambar 5.15 untuk nomor script (1).
Gambar 5.14 Parameter showlog.php
Gambar 5.15 Response showlog.php
Script showlog.php yang dijalankan ditampilkan pada script 5.27 dibawah ini.
$s1="show binlog events"; $hs11=mysql_query($s1,$con); if(!$hs11) die("permintaan gagal, coba ulangi lagi TPS"); $nn=mysql_num_rows($hs11); if($nn)
132
{ echo "<b>$s1</b><table width='100%' border=1><tr bgcolor=blue><td>Nu</td> <td>Pos</td><td>Event_type</td><td>Server_id</td><td>End_log_pos</td><td>Info</td>"; $i=0; while($dt1=mysql_fetch_row($hs11)) { $i++; echo "<tr><td>$i</td><td>$dt1[1]</td><td>$dt1[2]</td> <td>$dt1[3]</td><td>$dt1[4]</td><td>$dt1[5]</td>"; } echo "</table>"; }
Script 5.27 Script showlog.php
Parameter dan response dari script 5.27 nomor (2) diatas akan terlihat
pada gambar 5.16 dan gambar 5.17.
Gambar 5.16 Parameter slave.php
Gambar 5.17 Response slave.php
Script slave.php yang dijalankan ditampilkan pada script 5.28 dibawah ini.
$s1="show slave status"; $sr=mysql_query('slave_running',$con); $hs11=mysql_query($s1,$con); if(!$hs11) die("permintaan gagal, coba ulangi lagi TPS"); if(mysql_num_rows($hs11)) { $dt1=mysql_fetch_row($hs11); for($i=0;$i<26;$i++) { $x2=$dt1[$i]; if($i==14)
133
{ $xx=explode(",",$dt1[$i]); $x2=implode(", ",$xx); } echo "<tr><td>$k[$i]</td><td>$x2</td>"; } echo "</table>"; }
Script 5.28 Script slave.php
5.1.6 Trigger Suara Mas
i menggunakan metode after insert, trigger ini akan
diterap
igger pada tabel Inbox
enerima sms dan dimasukkan ke tabel inbox ini,
sehingg
sms
di
mysql> show triggers\G
uk
Trigger suara masuk in
kan terhadap tabel inbox, sms, suara dan advokasi serta file temporari
tmp.
1. Tr
SMS Gateway akan m
a trigger after insert pertama pada script 5.29 di terapkan pada tabel ini,
untuk kemudian sms masuk di insertkan ke tabel sms, dimana tabel sms adalah
tabel yang mempunyai ketergantungan terhadap tabel saksi pada field nohp.
Data yang bisa masuk ke tabel sms hanya sms yang SenderNumber‐nya
sudah terdaftar tabel saksi.
*************************** 1. row *************************** Trigger: addsms Event: INSERT Table: inbox Statement: begin insert into sms(nohp,isi) values(new.sendernumber, new.TextDecoded); delete from tmp where nohp=new.sendernumber; end ming: A Ti FTER Created: NULL sql_mode: NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION Definer: root@localhost 1 row in set (0.00 sec)
Script 5.29 Script Trigger addsms
2. Trigger pada tabel sms
134
Tabel sms, diterapkan juga trigger after insert, trigger ini akan
memis
o a script o
2. row ***************************
ahkan apakah sms yang masuk itu termasuk kelompok suara,
suaratidaksah atau adv kasi dijelask n pada 5.30. Jika termasuk kel mpok
suara, maka data akan dimasukkan ke tabel tmp (tabel sementara) serta di
hubungkan dengan tabel saksi untuk mendapatkan data kdlokasi, notps. Jika
termasuk kelompok advokasi data akan langsung ditambahkan ke tabel advokasi
(nohp, isi). Sedangkan jika termasuk gugur, rusak, sisak dan pakai, maka data
akan dimasukkan ke tabel advokasi dan dihubungkan dengan tabel saksi untuk
mendapatkan kdlokasi dan notps.
*************************** Trigger: insms Event: INSERT Table: sms Statement: begin set @kunci=new.isi; set @nohp=new.nohp; set @key=upper(substr(@kunci,1,5)); if(@key='SUARA') then begin INSERT INTO tmp SELECT a.kdlokasi,a.notps,substr(@kunci,7,2),
substr(@kunci,10,1), substr(@kunci,12,2), substr(@kunci,15,10),@nohp from saksi a where a.nohp=@nohp;
end; elseif((@key='GUGUR') or (@key='RUSAK') or (@key='SISAK') or (@key='PAKAI')) then begin set @t=substr(@kunci,7,1); if(@t=0) then set @ti='DPD'; elseif(@t=1) then set @ti='DPR'; elseif(@t=2) then set @ti='DPRDI'; else set @ti='DPRDII'; end if; INSERT INTO suaratidaksah SELECT a.kdlokasi,a.notps,@key,@ti,substr(@kunci,9,10) from saksi a where a.nohp=@nohp
on duplicate key update suaratidaksah.jumlah=substr(@kunci,9,10);
135
end; else insert into advokasi(nohp,isi) values(@nohp,@kunci); end if; end Timing: AFTER Created: NULL sql_mode: NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION Definer: root@localhost
Script 5.30 Script Trigger insms
3. Trigger pada tabel tm
bel temporari yang akan membantu dalam proses
pemilahan
suar e
p
te pr
p
Tabel ini sebagai ta
dan seleksi data dari beberapa tabel yang terkait. Pada tabel tmp ini di
terapkan trigger after insert, script 5.31 akan menjelaskan bagaimana proses
pemasukan data a, serta p nyeleksian data nu, idcaleg, kodelokasi dan notps
dan pada trigger ini juga diterapkan metode on duplicate key update yang
digunakan untuk mengatasi transaksi insert terhada data yang sudah ada yang
mengakibatkan kesalahan karena duplikasi data, maka akan dihandel oleh
metode ini menjadi proses update rhadap data. Dan akhirnya oses itu akan
dimasukkan ke tabel suara sebagai produk akhir pelaporan suara.
*************************** 4. row *************************** Trigger: aitmp Event: INSERT Table: tmp Statement: begin if(new.level=1) then insert into suara select new.kdlokasi,new.notps,a.idcaleg,new.jumlah from kodelokasi c, dapil b, caleg a where c.kdlokasi=new.kdlokasi and c.dp1=b.kddapil and b.kddapil=a.kddapil and a.nu=new.nu and a.nopartai=new.nopartai on duplicate key update suara.suara=new.jumlah; elseif(new.level=2) then insert into suara select new.kdlokasi,new.notps,a.idcaleg,new.jumlah from kodelokasi c, dapil b, caleg a where c.kdlokasi=new.kdlokasi and c.dp2=b.kddapil and b.kddapil=a.kddapil and a.nu=new.nu and a.nopartai=new.nopartai
136
on duplicate key update suara.suara=new.jumlah; elseif(new.level=3) then insert into suara select new.kdlokasi,new.notps,a.idcaleg,new.jumlah from kodelokasi c, dapil b, caleg a where c.kdlokasi=new.kdlokasi and c.dp3=b.kddapil and b.kddapil=a.kddapil and a.nu=new.nu and a.nopartai=new.nopartai on duplicate key update suara.suara=new.jumlah; end if; end Timing: AFTER Created: NULL sql_mode: NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION Definer: root@localhost
Script 5.31 Script Trigger aitmp