Monday, March 10, 2014

Upload and display gambar menggunakan database mysql dan framework codeigniter

Image merupakan salah satu komponen penting dalam design web. Menejemen upload image dalam web bisa ditangani menggunakan lokasi server sesuai path yang sudah ditentukan. Tetapi terkadang menyimpan file image dalam folder membuat sedikit ribet dalam mengolahnya. Saya mencoba menggunakan codeigniter dan mysql sebagai databasenya untuk mengolah upload file pada database. Sehingga saat pemanggilan atau ingin menampilkan image tinggal menggunakan Query seperti pengolahan data-data yang lazim diolah menggunakan database.

Codeigniter merupakan framework yang digunakan, menggunakan Codeigniter harus memahami konsep MVC. Berikut langkah pertama membuat database di MYSQL menggunakan type data blob:

1. Membuat database upload

CREATE DATABASE UPLOAD

2. Membuat table pada database upload

CREATE TABLE store ( id INT(11) NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, image BLOB NOT NULL, PRIMARY KEY (id) );

3. Setting database pada Application/database.php dengan nama database upload untuk menghubungkan dengan database.

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'upload';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

4.  Masuk dalam Model pada codeigniter, diasumsikan konfigurasi awal pada codeigniter sudah terconfig dengan baik. Membuat file Model dengan nama m_upload.php

<?php
class m_upload extends CI_model{

function __construct  ()
{
parent::__construct();
}

function tampil_upload($k){
$query = $this->db->query("SELECT * FROM store where id='$k'");
foreach($query->result_array() as $ok){
//header('Content-type: image');
$image = $ok['image'];
}
//header("Content-type: image/*");
echo $image;
}

function simpan($image_name,$image){
$query = $this->db->query("INSERT INTO store (name,image) VALUES ('$image_name','$image')");
return $query;
}
}
?>

5. Setelah model selesai lanjut ke Controller. Membuat file Controller dengan nama upload_blob.php

<?php if(! defined('BASEPATH')) exit('No direct script access allowed');

class upload_blob extends MX_Controller{

public function __construct()
{
parent::__construct();
$this->load->model('m_upload');
}

function gambar(){
$this->load->view('upload');
}

function tampil_gambar($k){
$this->load->model('m_upload');
$this->m_upload->tampil_upload($k);
//echo "galih";
}

function simpan(){
$this->load->library('upload');
$file = $_FILES['file']['tmp_name'];
$image_name = mysql_real_escape_string($_FILES['file']['name']);
$image = mysql_real_escape_string(file_get_contents($file));
//echo $image;
$this->load->model('m_upload');
$this->m_upload->simpan($image_name,$image);
}
}

6. Setelah Controller selesai masuk ke view. Membuat file View dengan nama upload.php

<form enctype="multipart/form-data" method="post" action="<?php echo base_url(); ?>index.php/upload_blob/simpan">
File:
<input type="file" name="file" accept="image/*">
<button type="submit">Upload</button>
</form>

<img src="<?php echo base_url(); ?>index.php/upload_blob/tampil_gambar/29">


7. Proses sudah selesai tinggal mengakses alamat localhost/nama_folder_ci/index.php/upload_blob/gambar
8. Pilih gambar dan upload, setelah itu back ke localhost/nama_folder_ci/index.php/upload_blob/gambar
9. O iya silahkan ubah <img src="<?php echo base_url(); ?>index.php/upload_blob/tampil_gambar/29"> yang angka 29 sesuai dengan id gambar pada database karena id diset auto increment jadi akan terus bertambah saat ada gambar yang diupload masuk pada database.

10. Saya masih belajar dalam hal penyampaian, jadi mohon dimaafkan tulisan yang corat-coret diatas tidak jelas. Semoga kedepannya bisa lebih baik.... :)






Konfigurasi awal pada codeigniter

Codeigniter adalah salah satu framework PHP yang sangat membantu dalam menejemen file saat membuat aplikasi yang menggunakan PHP. MVC merupakan konsep awal yang perlu dipahami terlebuih dahulu sebelum mendalaminya ketingkat lanjut. Saya masih menggunakan codeigniter karena mudah dalam mempelajarinya dan sudah mumpuni untuk kebutuhan aplikasi yang saya buat, walaupun kepingin juga mempelajari framework yang lain tapi untuk sementara ini belum dulu karena masih dalam tahap belajar.

Konfiguraasi awal yang perlu diperhatikan saat pertama kali menggunakan Codeigniter adalah masuk dalam folder Application dan kita bisa fokus pada file config.php, autoload.php, route.php, dan jika menggunakan database maka perlu settingan di database.php. Kemudahan menggunakan codeigniter yaitu sudah disediakan library-library yang siap jalan, kita tinggal menggunakannya saja lah mungkin begitu secara pemahaman saya.

pada file config.php settingan yang perlu diperhatikan

$config['base_url'] = 'http://localhost/sesuai_nama_folder_ci/';

$config['encryption_key'] = 'galih';
//terkadang jika menggunakan autoload sission settingan encryption_key perlu diisi

untuk settingan awal pada file config.php masih bisa diabaikan, jika ada tambahan selanjutnya bisa ditambahkan.

pada file autoload.php settingan agar dapat berjalan mulus maka perlu ditambahkan

$autoload['libraries'] = array('database', 'session', 'xmlrpc', 'upload');

$autoload['helper'] = array('url','file','form');

pada route.php bisa diisi untuk load pertma saat aplikasi ci/ folder ci diakses pada browser
seperti dibawah ini default_controller adalah welcome maka controller yang diload saat pertama adalah wellcome.

$route['default_controller'] = "welcome";
$route['404_override'] = '';

file database.php disetting jika menggunakan database, selain itu pada autoload.php jika tidak menggunakan database maka tidak perlu menambahkan autoload database.

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'adhijasa';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

Sesuaikan dengan hostname, username, password, nama database dan driver menggunakan database apa,

Jika settingan awal sudah benar maka saat melakukan coding menggunakan codeigniter perlu diperhatikan penulisan, artinya harus teliti meskipun tidak teliti 100% tapi 75% saja cukup hehehe...

Tulisan diatas menjadi pengingat saya saat ingin membuat aplikasi baru menggunakan codeigniter agar tidak menyimpang jauh dari awal, jika ada yang kesasar ke blog saya dan bisa menambahkan masalah CI maka saya sangat senang menerima komentar teman-teman... :)

Sunday, March 9, 2014

Mengakses lebih dari satu database pada codeigniter

Codeigniter sudah memberikan library untuk mengkoneksikan aplikasi yang kita buat dengan database. Kita tinggal menyetting nama hostname, nama username, nama database dan password. Library untuk database pada codeigniter terdapat pada folder applications/database.php. Secara default sudah disediakan tempat untuk mengisikan hostname, username, password, dan nama database untuk mysql, jika menggunakan database selain mysql tinggal setting driver menyesuaikan software database yang digunakan. Setelah konfiguraasi pada file database.php jangan lupa konfigurasi pada file autoload.php yang terletak sama pada folder applications. setting autoload.php autoload library database.

Secara default akses pada file database hanya mengakses 1 database seperti dibawah :

$active_group = 'default';
$active_record = TRUE;

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = 'amazon';
$db['default']['database'] = 'badger';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

Jika ingin menambahkan database lain maka perlu ditambahkan :

$db['upload']['hostname'] = 'localhost';
$db['upload']['username'] = 'root';
$db['upload']['password'] = '';
$db['upload']['database'] = 'upload';
$db['upload']['dbdriver'] = 'mysql';
$db['upload']['dbprefix'] = '';
$db['upload']['pconnect'] = TRUE;
$db['upload']['db_debug'] = TRUE;
$db['upload']['cache_on'] = FALSE;
$db['upload']['cachedir'] = '';
$db['upload']['char_set'] = 'utf8';
$db['upload']['dbcollat'] = 'utf8_general_ci';
$db['upload']['swap_pre'] = '';
$db['upload']['autoinit'] = TRUE;
$db['upload']['stricton'] = FALSE;

Hostname diatas masih sama hanya databasenya yang berbeda. Hostname berbeda maka tinggal mengganti nama hostnamenya. Secara default database yang digunakan adalah badger. Database upload dapat digunakan jika pada model saat pemanggilan tabel pada database upload diload database upload seperti berikut :

$db2 = $this->load->database('upload',TRUE);
$query = $db2->query("QUERY SQL");

Secara lengkap pada model jika ingin menggunakan database yang kedua saya menggunakan seperti ini:

<?php
function tampil_upload(){
$db2 = $this->load->database('upload', TRUE);
$query = $db2->query("SELECT * FROM store");
return $query;
}
?>

Tulisan diatas hanya corat-coret saya saja untuk membuat saya mudah mengingat jika suatu saat saya lupa. Tentunya saya tidak bisa membuat secara mendetail dan jelas karena saya bukan orang yang mahir dalam hal tersebut. Jika ada teman-teman yang membacanya saya mohon maaf jika tulisan saya ini mengecewakan karena tidak bagus. Tetapi saya berusaha untuk bisa lebih baik lagi, jika ada teman teman ada yang ingin menambahkan silahkan diisikan pada komentar.

Thursday, March 6, 2014

sql in mysql

Sql (Structured Query Language) menurut saya adalah bahasa didalam hubungan relasional database, pengartian tersebut hanya untuk mempermudah saya saja dalam pengimlentasiannya. Pengartian yang sebenarnya dapa di pahami sesuai imajinasi masing masing di http://id.wikipedia.org/wiki/SQL. Pertama kali memahami bahasa sql harus menguasai tentang select insert update dan perintah perintah dasar lainnya.

MySQL menurut saya lagi adalah software database yang menggunakan perintah SQL untuk mengelolanya. Pemahaman saya tersebut saya peroleh dari http://id.wikipedia.org/wiki/MySQL. MySQL yang merupakan salah satu software database yang bisa menjadi salah satu referensi untuk belajar pengelolaan database. Database MySQL biasanya diimplementasikan dengan bahasa pemrograman PHP untuk membangun sebuah aplikasi yang berbasis web.

Perintah SQL sangat banyak sehingga saya perlu mencatatnya satu persatu agar tidak terlupa. Saya akan menuliskan dibawah tentang perintah-perintah SQL di MySQL yang pernah saya gunakan.

Untuk menampilkan semua isi dalam tabel
SELECT * FROM NAMA_TABLE

Untuk melihat semua database yang pernah dibuat
SHOW DATABASES

Untuk melihat tabel yang pernah dibuat
SHOW TABLES

Untuk menggunakan database
USE NAMA_DATABASE

Untuk menampilkan struktur column dalam table
DESCRIBE NAMA_TABLE

Untuk mengubah type data pada calomn table
ALTER TABLE NAMA_TABLE
MODIFY COLUMN NAMA_COLUMN TYPE_DATA_BARU;

Untuk mnambahkan column baru pada table
ALTER TABLE TABLE_NAME
ADD COLUMN COL_NAME COL_DEFINITION
FIRST | AFTER COL_NAME


HTML ke PDF menggunakan dompdf dengan codeigniter

Dua bulan sudah berlalu ditahun 2014. Sekarang memasuki bulan ke tiga. Usia semakin menua tetapi ilmu tidak cepat berkembang karena masih sibuk mempelajari beberapa hal yang sebenarnya sudah seharusnya dikuasai. Banyak hal yang belum diketahui dan harus di pelajari. Sehari hanya disediakan waktu 24 jam dan hampir setengahnya digunakan untuk tidur. Waktu tidak terasa berjalan begitu ceapat walaupun hanya berlalu detik demi detik menit demi menit jam demi jam dan seterusnya. Jadwal yang sudah dibuat untuk mengalahkan waktu terkadang tidak bisa dijalankan karena terlalu lamanya waktu dan kurangnya kekuatan untuk terus bertahan dengan kondisi badan yang tidak bisa selalu prima. Usaha dan upaya untuk tepap hidup dan bertahan harus tetap dilakukan. Salah satunya dengan terus menulis agar tau isi dalam otak ini.

Sebelum ngelantur lebih baik saya menulis tentang beberapa hal yang saya lakukan di codeigniter. Awal membuat sistem menggunakan codeigniter dan dapat selesai walaupun hanya sebuah sistem untuk menampilkan laporan dalam bentuk web saya sudah merasa senang. Masalah selanjutnya muncul saat laporan tersebut akan di print dan di download dalam bentuk pdf. Waktu itu sungguh merasa sangat bodoh dan tidak tau apa yang seharusnya dilakukan. setelah searching-searching banyak tutorial yang memberitahu bagaimana cara membuat laporan dari html ke pdf. Saya tambahkan lagi masalahnya bagaimana membuat laporan pdf dari html menggunakan framework codeigniter. Ternyata dari google saya mengetahui ada beberapa cara penyelesaian yaitu menggunakan dompdf.

 Diasumsikan sudah bisa codeigniter
1. Siapkan codeigniter 2.1.0 atau versi diatasnya juga tidak masalah.
2. download dompdf dari https://code.google.com/p/dompdf/downloads/list pilih yang terbaru
3. extrack dompdf
4. buat new folder di application dengan nama third-party
5. copy semua file dan folder dalam exctract dompdf kedalam folder third-party
6. buat file library di folder application/library dengan format/ nama  Pdf.php
codenya seperti berikut :
------------------------------------------------------------------------------------------------------------
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Pdf {



function pdf_create($html, $filename='', $stream=TRUE){
   require_once(APPPATH."third_party/dompdf_config.inc.php");//Require Loader Class n Config
   spl_autoload_register('DOMPDF_autoload');//Autoload Resource

   ini_set("memory_limit", "999M");
ini_set("max_execution_time", "999");

   $dompdf = new DOMPDF();//Instansiasi
   $dompdf->load_html($html);//Load HTML File untuk dirender
   $dompdf->set_paper(array(0,0, 8.5 * 72, 13.5 * 72),"landscape" ); //array(0,0, 8.5 * 72, 11 * 72)
   $dompdf->render();//Proses Rendering File
   $canvas = $dompdf->get_canvas();
$font = Font_Metrics::get_font("helvetica", "bold");
$canvas->page_text(830, 578, "Halaman: {PAGE_NUM} dari {PAGE_COUNT}", $font, 8, array(0,0,0));
    if ($stream==TRUE) {
$dompdf->stream($filename, array('Attachment'=>0));
    } else {
$CI =& get_instance();
$CI->load->helper('file');
write_file($filename, $dompdf->output());//file name adalah ABSOLUTE PATH dari tempat menyimpan file PDF
    }
}
}
-----------------------------------------------------------------------------------------------------------
7. contoh script membuat pdf dengan dompdf pada controller
-----------------------------------------------------------------------------------------------------------
$this->load->library('pdf);
$this->pdf->pdf_grafik($this->load->view('v_rapj_belanja/v_grafik_rapj_belanja_js',$data,TRUE), 'grafik_realisasi_anggaran_per_jenis_belanja');