Setelah sebelumnya saya membuat catatan mengenai cara membuat import data excel, kali ini saya akan coba menjelaskan langkah demi langkah untuk import data CSV. Dalam catatan ini, kita menggunakan librari / plugin yang sama dengan catatan import data excel tadi. Yaitu menggunakan librari PHPExcel. Jadi kurang lebih skripnya pun hampir sama dengan import data excel. Cuman memang ada beberap skrip yang beda pastinya. Untuk lebih jelasnya, silahkan ikuti step by step berikut ini : PENTING, MOHON
DIBACA TERLEBIH DAHULU Berikut adalah fitur-fitur yang akan kita buat:
DEMO STEP 1 – PERSIAPAN
STEP 2 – DATABASE
STEP 3 – KONEKSI DATABASE <?php $host = 'localhost'; // Nama hostnya $username = 'root'; // Username $password = ''; // Password (Isi jika menggunakan password) $database = 'mynotescode'; // Nama databasenya // Koneksi ke MySQL dengan PDO $pdo = new PDO('mysql:host='.$host.';dbname='.$database, $username, $password); ?> STEP 4 – VIEW DATA <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Import Data CSV dengan PHP</title> <!-- Load File bootstrap.min.css yang ada difolder css --> <link href="css/bootstrap.min.css" rel="stylesheet"> <!-- Style untuk Loading --> <style> #loading{ background: whitesmoke; position: absolute; top: 140px; left: 82px; padding: 5px 10px; border: 1px solid #ccc; } </style> </head> <body> <!-- -- START HEADER -- Membuat Menu Header / Navbar -- Hapus saja jika tidak diperlukan --> <nav class="navbar navbar-inverse" role="navigation"> <div class="container-fluid"> <div class="navbar-header"> <a class="navbar-brand" href="#" style="color: white;"><b>Import Data Excel dengan PHP</b></a> </div> <p class="navbar-text navbar-right hidden-xs" style="color: white;padding-right: 10px;"> FOLLOW US ON <a target="_blank" style="background: #3b5998; padding: 0 5px; border-radius: 4px; color: #f7f7f7; text-decoration: none;" href="https://www.facebook.com/mynotescode">Facebook</a> <a target="_blank" style="background: #00aced; padding: 0 5px; border-radius: 4px; color: #ffffff; text-decoration: none;" href="https://twitter.com/mynotescode">Twitter</a> <a target="_blank" style="background: #d34836; padding: 0 5px; border-radius: 4px; color: #ffffff; text-decoration: none;" href="https://plus.google.com/118319575543333993544">Google+</a> </p> </div> </nav> <!-- END HEADER --> <!-- Content --> <div style="padding: 0 15px;"> <!-- -- Buat sebuah tombol untuk mengarahkan ke form import data -- Tambahkan class btn agar terlihat seperti tombol -- Tambahkan class btn-success untuk tombol warna hijau -- class pull-right agar posisi link berada di sebelah kanan --> <a href="form.php" class="btn btn-success pull-right"> <span class="glyphicon glyphicon-upload"></span> Import Data </a> <h3>Data Hasil Import</h3> <hr> <!-- Buat sebuah div dan beri class table-responsive agar tabel jadi responsive --> <div class="table-responsive"> <table class="table table-bordered"> <tr> <th>No</th> <th>NIS</th> <th>Nama</th> <th>Jenis Kelamin</th> <th>Telepon</th> <th>Alamat</th> </tr> <?php // Load file koneksi.php include "koneksi.php"; // Buat query untuk menampilkan semua data siswa $sql = $pdo->prepare("SELECT * FROM siswa"); $sql->execute(); // Eksekusi querynya $no = 1; // Untuk penomoran tabel, di awal set dengan 1 while($data = $sql->fetch()){ // Ambil semua data dari hasil eksekusi $sql echo "<tr>"; echo "<td>".$no."</td>"; echo "<td>".$data['nis']."</td>"; echo "<td>".$data['nama']."</td>"; echo "<td>".$data['jenis_kelamin']."</td>"; echo "<td>".$data['telp']."</td>"; echo "<td>".$data['alamat']."</td>"; echo "</tr>"; $no++; // Tambah 1 setiap kali looping } ?> </table> </div> </div> </body> </html> Saya akan coba jelaskan sedikit mengenai kode diatas. include “koneksi.php”; $sql = $pdo->prepare(“SELECT * FROM siswa”); $data = $sql->fetch() echo "<tr>"; echo "<td>".$no."</td>"; echo "<td>".$data['nis']."</td>"; echo "<td>".$data['nama']."</td>"; echo "<td>".$data['jenis_kelamin']."</td>"; echo "<td>".$data['telp']."</td>"; echo "<td>".$data['alamat']."</td>"; echo "</tr>"; Pada kode diatas terdapat variabel $data digunakan untuk mengambil isi dari field-field yang ada pada tabel siswa di database mynotescode. Pada kode diatas juga ada kode yang berada pada tanda [‘……’], kode tersebut harus sama dengan nama field yang ada pada tabel siswa. STEP 5 – FORM DAN PREVIEW <!-- -- Source Code from My Notes Code (www.mynotescode.com) -- -- Follow Us on Social Media -- Facebook : http://facebook.com/mynotescode/ -- Twitter : http://twitter.com/mynotescode -- Google+ : http://plus.google.com/118319575543333993544 -- -- Terimakasih telah mengunjungi blog kami. -- Jangan lupa untuk Like dan Share catatan-catatan yang ada di blog kami. --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Import Data CSV dengan PHP</title> <!-- Load File bootstrap.min.css yang ada difolder css --> <link href="css/bootstrap.min.css" rel="stylesheet"> <!-- Style untuk Loading --> <style> #loading{ background: whitesmoke; position: absolute; top: 140px; left: 82px; padding: 5px 10px; border: 1px solid #ccc; } </style> <!-- Load File jquery.min.js yang ada difolder js --> <script src="js/jquery.min.js"></script> <script> $(document).ready(function(){ // Sembunyikan alert validasi kosong $("#kosong").hide(); }); </script> </head> <body> <!-- -- START HEADER -- Membuat Menu Header / Navbar -- Hapus saja jika tidak diperlukan --> <nav class="navbar navbar-inverse" role="navigation"> <div class="container-fluid"> <div class="navbar-header"> <a class="navbar-brand" href="#" style="color: white;"><b>Import Data Excel dengan PHP</b></a> </div> <p class="navbar-text navbar-right hidden-xs" style="color: white;padding-right: 10px;"> FOLLOW US ON <a target="_blank" style="background: #3b5998; padding: 0 5px; border-radius: 4px; color: #f7f7f7; text-decoration: none;" href="https://www.facebook.com/mynotescode">Facebook</a> <a target="_blank" style="background: #00aced; padding: 0 5px; border-radius: 4px; color: #ffffff; text-decoration: none;" href="https://twitter.com/mynotescode">Twitter</a> <a target="_blank" style="background: #d34836; padding: 0 5px; border-radius: 4px; color: #ffffff; text-decoration: none;" href="https://plus.google.com/118319575543333993544">Google+</a> </p> </div> </nav> <!-- END HEADER --> <!-- Content --> <div style="padding: 0 15px;"> <!-- Buat sebuah tombol Cancel untuk kemabli ke halaman awal / view data --> <a href="index.php" class="btn btn-danger pull-right"> <span class="glyphicon glyphicon-remove"></span> Cancel </a> <h3>Form Import Data</h3> <hr> <!-- Buat sebuah tag form dan arahkan action nya ke file ini lagi --> <form method="post" action="" enctype="multipart/form-data"> <a href="Format.csv" class="btn btn-default"> <span class="glyphicon glyphicon-download"></span> Download Format </a><br><br> <!-- -- Buat sebuah input type file -- class pull-left berfungsi agar file input berada di sebelah kiri --> <input type="file" name="file" class="pull-left"> <button type="submit" name="preview" class="btn btn-success btn-sm"> <span class="glyphicon glyphicon-eye-open"></span> Preview </button> </form> <hr> <!-- Buat Preview Data --> <?php // Jika user telah mengklik tombol Preview if(isset($_POST['preview'])){ $nama_file_baru = 'data.csv'; // Cek apakah terdapat file data.xlsx pada folder tmp if(is_file('tmp/'.$nama_file_baru)) // Jika file tersebut ada unlink('tmp/'.$nama_file_baru); // Hapus file tersebut $nama_file = $_FILES['file']['name']; // Ambil nama file yang akan diupload $tmp_file = $_FILES['file']['tmp_name']; $ext = pathinfo($nama_file, PATHINFO_EXTENSION); // Ambil ekstensi file yang akan diupload // Cek apakah file yang diupload adalah file CSV if($ext == "csv"){ // Upload file yang dipilih ke folder tmp move_uploaded_file($tmp_file, 'tmp/'.$nama_file_baru); // Load librari PHPExcel nya require_once 'PHPExcel/PHPExcel.php'; $inputFileType = 'CSV'; $inputFileName = 'tmp/data.csv'; $reader = PHPExcel_IOFactory::createReader($inputFileType); $excel = $reader->load($inputFileName); // Buat sebuah tag form untuk proses import data ke database echo "<form method='post' action='import.php'>"; // Buat sebuah div untuk alert validasi kosong echo "<div class='alert alert-danger' id='kosong'> Semua data belum diisi, Ada <span id='jumlah_kosong'></span> data yang belum lengkap diisi. </div>"; echo "<table class='table table-bordered'> <tr> <th colspan='5' class='text-center'>Preview Data</th> </tr> <tr> <th>NIS</th> <th>Nama</th> <th>Jenis Kelamin</th> <th>Telepon</th> <th>Alamat</th> </tr>"; $numrow = 1; $kosong = 0; $worksheet = $excel->getActiveSheet(); foreach ($worksheet->getRowIterator() as $row) { // Lakukan perulangan dari data yang ada di csv // Cek $numrow apakah lebih dari 1 // Artinya karena baris pertama adalah nama-nama kolom // Jadi dilewat saja, tidak usah diimport if($numrow > 1){ // START --> // Skrip untuk mengambil value nya $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); // Loop all cells, even if it is not set $get = array(); // Valuenya akan di simpan kedalam array,dimulai dari index ke 0 foreach ($cellIterator as $cell) { array_push($get, $cell->getValue()); // Menambahkan value ke variabel array $get } // <-- END // Ambil data value yang telah di ambil dan dimasukkan ke variabel $get $nis = $get[0]; // Ambil data NIS $nama = $get[1]; // Ambil data nama $jenis_kelamin = $get[2]; // Ambil data jenis kelamin $telp = $get[3]; // Ambil data telepon $alamat = $get[4]; // Ambil data alamat // Cek jika semua data tidak diisi if($nis == "" && $nama == "" && $jenis_kelamin == "" && $telp == "" && $alamat == "") continue; // Lewat data pada baris ini (masuk ke looping selanjutnya / baris selanjutnya) // Validasi apakah semua data telah diisi $nis_td = ($nis == "")? " style='background: #E07171;'" : ""; // Jika NIS kosong, beri warna merah $nama_td = ($nama == "")? " style='background: #E07171;'" : ""; // Jika Nama kosong, beri warna merah $jk_td = ($jenis_kelamin == "")? " style='background: #E07171;'" : ""; // Jika Jenis Kelamin kosong, beri warna merah $telp_td = ($telp == "")? " style='background: #E07171;'" : ""; // Jika Telepon kosong, beri warna merah $alamat_td = ($alamat == "")? " style='background: #E07171;'" : ""; // Jika Alamat kosong, beri warna merah // Jika salah satu data ada yang kosong if($nis == "" or $nama == "" or $jenis_kelamin == "" or $telp == "" or $alamat == ""){ $kosong++; // Tambah 1 variabel $kosong } echo "<tr>"; echo "<td".$nis_td.">".$nis."</td>"; echo "<td".$nama_td.">".$nama."</td>"; echo "<td".$jk_td.">".$jenis_kelamin."</td>"; echo "<td".$telp_td.">".$telp."</td>"; echo "<td".$alamat_td.">".$alamat."</td>"; echo "</tr>"; } $numrow++; // Tambah 1 setiap kali looping } echo "</table>"; // Cek apakah variabel kosong lebih dari 1 // Jika lebih dari 1, berarti ada data yang masih kosong if($kosong > 1){ ?> <script> $(document).ready(function(){ // Ubah isi dari tag span dengan id jumlah_kosong dengan isi dari variabel kosong $("#jumlah_kosong").html('<?php echo $kosong; ?>'); $("#kosong").show(); // Munculkan alert validasi kosong }); </script> <?php }else{ // Jika semua data sudah diisi echo "<hr>"; // Buat sebuah tombol untuk mengimport data ke database echo "<button type='submit' name='import' class='btn btn-primary'><span class='glyphicon glyphicon-upload'></span> Import</button>"; } echo "</form>"; }else{ // Jika file yang diupload bukan File CSV // Munculkan pesan validasi echo "<div class='alert alert-danger'> Hanya File CSV (.csv) yang diperbolehkan </div>"; } } ?> </div> </body> </html> Saya tidak akan menjelaskan soal skrip diatas, karena sudah saya jelaskan per masing-masing skrip (dengan komentar). Tapi saya akan jelaskan alur form import diatas. Pertama, User harus mendownload Format File CSV yang sudah kita buat sebelumnya. Kedua, User megisi data yang akan diimport pada file CSV yang telah di download tadi. Ketiga, user memilih file CSV yang akan diimport datanya lalu klik tombol preview. Keempat, Ketika user mengklik tombol preview, sistem akan melakukan:
STEP 5 – PROSES IMPORT <?php /* -- Source Code from My Notes Code (www.mynotescode.com) -- -- Follow Us on Social Media -- Facebook : http://facebook.com/mynotescode -- Twitter : http://twitter.com/mynotescode -- Google+ : http://plus.google.com/118319575543333993544 -- -- Terimakasih telah mengunjungi blog kami. -- Jangan lupa untuk Like dan Share catatan-catatan yang ada di blog kami. */ // Load file koneksi.php include "koneksi.php"; if(isset($_POST['import'])){ // Jika user mengklik tombol Import // Load librari PHPExcel nya require_once 'PHPExcel/PHPExcel.php'; $inputFileType = 'CSV'; $inputFileName = 'tmp/data.csv'; $reader = PHPExcel_IOFactory::createReader($inputFileType); $excel = $reader->load($inputFileName); $numrow = 1; $worksheet = $excel->getActiveSheet(); foreach ($worksheet->getRowIterator() as $row) { // Cek $numrow apakah lebih dari 1 // Artinya karena baris pertama adalah nama-nama kolom // Jadi dilewat saja, tidak usah diimport if($numrow > 1){ // START --> // Skrip untuk mengambil value nya $cellIterator = $row->getCellIterator(); $cellIterator->setIterateOnlyExistingCells(false); // Loop all cells, even if it is not set $get = array(); // Valuenya akan di simpan kedalam array,dimulai dari index ke 0 foreach ($cellIterator as $cell) { array_push($get, $cell->getValue()); // Menambahkan value ke variabel array $get } // <-- END // Ambil data value yang telah di ambil dan dimasukkan ke variabel $get $nis = $get[0]; // Ambil data NIS $nama = $get[1]; // Ambil data nama $jenis_kelamin = $get[2]; // Ambil data jenis kelamin $telp = $get[3]; // Ambil data telepon $alamat = $get[4]; // Ambil data alamat // Cek jika semua data tidak diisi if($nis == "" && $nama == "" && $jenis_kelamin == "" && $telp == "" && $alamat == "") continue; // Lewat data pada baris ini (masuk ke looping selanjutnya / baris selanjutnya) // Proses simpan ke Database // Buat query Insert $sql = $pdo->prepare("INSERT INTO siswa VALUES(:nis,:nama,:jk,:telp,:alamat)"); $sql->bindParam(':nis', $nis); $sql->bindParam(':nama', $nama); $sql->bindParam(':jk', $jenis_kelamin); $sql->bindParam(':telp', $telp); $sql->bindParam(':alamat', $alamat); $sql->execute(); // Eksekusi query insert } $numrow++; // Tambah 1 setiap kali looping } } header('location: index.php'); // Redirect ke halaman awal ?> Sedikit tambahan penjelasan dari skrip diatas : $nis = $get[0]; // Ambil data NIS Yang saya beri warna merah pada skrip diatas, itu merupakan angka index array. Dimana pada File CSV dimulai dari Kolom A, kolom A ini di aliaskan dengan angka nol (0) index array. Dan seterusnya bertambah 1 sampai kolom yang kita pakai. Untuk lebih jelasnya lihat gambar dibawah ini : Sekian untuk catatan kali ini. Apabila ada yang ingin ditanyakan, silahkan tanyakan pada form komentar di bawah ini. Jangan lupa LIKE dan SHARE nya. Terimakasih. Source Code Sumber & Referensi Tutorial import data dari CSV dengan php dan mysql, Tutorial import data dari CSV dengan PHPExcel, Cara import data CSV dengan php dan mysql, import data CSV dengan PHPExcel, import data dari CSV dengan php dan mysql Import(Total : 16,768 viewers, 1 viewers today) |