Monday, March 9, 2015

Import Data Dari CSV ke MySQL dengan PHP

Pada artikel kali ini akan saya sharingkan cara import file CSV ke dalam database MySQL. CSV adalah singkatan dari Comma Separated Values yang jika diterjemahkan kedalam bahasa inggris berarti Banyak data yang dipisahkan dengan tanda koma. Lebih jelasnya CSV adalah sebuah format file yang berisi banyak data dimana masing-masing field data dipisahkan oleh tanda koma (,) atau titik koma(;) dan setiap baris data dipisahkan dengan tanda enter.

Format file CSV adalah file teks, artinya kita bisa membuka file CSV melalui teks editor. File CSV ini bisa secara manual dengan teks editor atau dari hasil ekspor file sebuah aplikasi penglahan data seperti Microsoft Excel atau Libre Office Spreadsheet.

File CSV sangat berguna ketika kita akan melakukan insert data secara masal kedalam sebuah database seperti MySQL. Langkah ini diambil ketika melakukan input data secara manual satu per satu sudah tidak memungkinkan karena banyaknya data.

Agar data-data pada file CSV dapat dimasukkan kedalam database MySQL kita harus melakukan proses yang disebut import data. Proses ini bisa dilakukan secara langsung pada aplikasi PhpMyAdmin atau bisa kita buatkan script PHP sendiri untuk menangani proses upload file CSV, preview dan validasi data sampai terakhir selesai proses import data.

Contoh proses import data dari CSV ke MySQL dengan PHP

1. Buat tabel karyawan dengan struktur field berikut ini :

  • nama, varchar(50)
  • alamat, varchar(100)
  • tanggal, date
  • bagian, varchar(50)

2. Buat file upload CSV berikut ini lalu simpan, misalnya dengan nama import.csv.php

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
 <html xmlns="http://www.w3.org/1999/xhtml">   
 <head>   
 <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />   
 <title>Import File CSV</title>   
 </head>   
   
 <body>   
 <h1>Import File CSV</h1>  
 <form action="preview.import.php" method="post" enctype="multipart/form-data" name="form1" id="form1">   
  Pilih File CSV yang akan di import: <br />  
  <input name="csv" type="file" id="csv"/>   
  <input type="submit" name="Import" value="Enter" />   
 </form>   
 <br/>  
 <b>Note :</b><br/>  
  <font color=red>Pastikan urutan kolom pada file CSV= nama,alamat,tanggal lahir,pekerjaan</font><br/>  
  <font color=red>Pastikan tidak ada nama kolom pada baris atas</font><br/>    
 </body>   
 </html>   

3. Buat file preview sebelum di insert ke database seperti berikut ini lalu simpan sesuai dengan nama pada action form diatas, yaitu preview.import.php

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
 <html xmlns="http://www.w3.org/1999/xhtml">   
 <head>   
 <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />   
 <title>Preview File CSV</title>   
 </head>   
   
 <body>   
 <h1>Preview File CSV</h1>  
 <?php  
 if(isset($_POST['Import']))  
 {  
 if ($_FILES['csv']['size'] > 0) {   
   
   $file = $_FILES['csv']['tmp_name'];   
   $handle = fopen($file,"r");   
   $data = fgetcsv($handle,1000,",","'");  
   $step=1;  
 ?>  
 <form action="insert.sql.php" method="post" enctype="multipart/form-data" name="form1" id="form1">   
 <?php  
 echo "  
 <table border=0>  
 <tr>  
 <th>No</th>  
 <th>Nama</th>  
 <th>Alamat</th>  
 <th>Tanggal Lahir</th>  
 <th>Bagian</th>  
 </tr>";  
   do {   
     if (count($data)==4) {  
         if($data[3])  
         {   
 echo "<tr>";  
 echo "<td align=center>".$step."</td>";  
 echo "<td><input type='text' name='nama".$step."' value='".$data[0]."'/></td>";  
 echo "<td><input type='text' name='alamat".$step."' value='".$data[1]."'/></td>";  
 echo "<td><input type='text' name='tanggal".$step."' value='".$data[2]."'/></td>";  
 echo "<td><input type='text' name='bagian".$step."' value='".$data[3]."'/></td>";  
 echo "</tr>";  
 $step++;}  
     }  
     else echo "ERROR! jumlah field tidak sesuai<br/>";   
   } while ($data = fgetcsv($handle,1000,",","'"));   
 }   
 }  
 echo "<tr>";  
 echo "<td colspan=5 align=right><font color=blue>JUMLAH DATA = </font><input type='text' name='count' value='".($step-1)."'/></td>";  
 echo "</tr>";  
 ?>   
 <tr>  
 <td colspan=4><b><font color=red>PASTIKAN DATA SUDAH BENAR BARU TEKAN ENTER =></font></b></td>  
 <td><input type='submit' name='enter' value='Enter'/></td>  
 </tr>  
 </table>  
 </form>  
 </body>  
 </html>  

4. Buat file untuk insert data ke MySQL lalu simpan sesuai dengan nama action form dari file preview diatas, yaitu insert.sql.php

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
 <html xmlns="http://www.w3.org/1999/xhtml">   
 <head>   
 <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />   
 <title>Insert Data</title>   
 </head>   
   
 <body>   
 <h1>Insert Data</h1>  
 <?php  
 $host = "localhost";  
 $user = "nama user";  
 $pass = "password";  
 $dbnm = "nama database";  
   
 $conn = mysql_connect ($host, $user, $pass);  
 if ($conn) {  
  $buka = mysql_select_db ($dbnm);  
  if (!$buka) {  
  die ("Database tidak dapat dibuka");  
  }  
 } else {  
  die ("Server MySQL tidak terhubung");  
 }  
   
 $error=0;  
 if(isset($_POST['enter']))  
 {  
 $count=$_POST['count']+1;  
 for($j=1;$j<$count;$j++)  
 {  
 $input_nama = "nama".$j;  
 $nama = addslashes (strip_tags ($_POST[$input_nama]));  
 $input_alamat = "alamat".$j;  
 $alamat = addslashes (strip_tags ($_POST[$input_alamat]));  
 $input_tanggal = "tanggal".$j;  
 $tanggal = addslashes (strip_tags ($_POST[$input_tanggal]));  
 $input_bagian = "bagian".$j;  
 $bagian = addslashes (strip_tags ($_POST[$input_bagian]));  
 $q="INSERT INTO karyawan (nama,alamat,tanggal,bagian) VALUES ('$nama','$alamat','$tanggal','$bagian')";  
 $r=mysql_query($q);  
 if(!$r){$error++;}  
 }  
 if($error) { echo "STATUS : IMPORT DATA ERROR";}  
 else echo "STATUS : IMPORT DATA BERHASIL";  
 }  
 ?>  
 </body>  
 </html>  

5. Buat file CSV untuk demo insert data dengan isi seperti ini kemudian simpan dengan nama misalnya karyawan.csv:

agus,kudus,1982-12-28,produksi
tina,jepara,1981-02-13,gudang
evie,bandung,1978-08-04,kantor
6. Setelah semua beres, silahkan buka file import.csv pada browser, lalu upload file CSV yang akan di import kemudian klik enter.
7. Jika benar akan tampak preview file CSV berupa beberapa input text.
8. Untuk melanjutkan ke proses insert data ke tabel MySQL, silahkan klik enter pada halaman preview file.
9. Jika proses import data berhasil akan tampil pesan "STATUS : IMPORT DATA BERHASIL".
10. Sebelumnya silahkan sesuaikan konfigurasi pada koneksi database, sesuaikan dengan setting masing-masing.

1 komentar:

  1. sekalian lah gan kasih file csv nya

    ReplyDelete