Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara Mengimpor dan Mengekspor File CSV Menggunakan PHP dan MySQL

PHP banyak digunakan untuk membangun berbagai macam produk mulai dari aplikasi web hingga aplikasi tingkat perusahaan. Kunci untuk kode PHP yang efisien adalah mengikuti alur kerja yang tepat dan mengotomatisasi proses. Hasilnya adalah kode berkualitas tinggi dan bebas bug.

Di hampir semua aplikasi PHP, data disimpan, diakses, dan dipertukarkan antara berbagai komponen aplikasi. Untuk memastikan pertukaran dan akses ke data ini berjalan dengan lancar dan tanpa masalah, tim pengembangan harus memastikan bahwa database dan dump data dalam format yang tepat.

Impor dan ekspor data ke dan dari database adalah prosedur yang cukup umum dalam pengembangan PHP. Aktivitas penting lainnya adalah backup dan transfer database.

Pada artikel ini, saya akan menjelaskan cara menyimpan tabel dari file CSV ke MySQL dan sebaliknya. Anda perlu mendaftar di Cloudways untuk meluncurkan server dan aplikasi PHPstack. Sebelum mendaftar, melihat semua opsi harga dari penyedia hosting kelas dunia seperti AWS, DigitalOcean, Linode, Vultr, dan GCP adalah ide yang bagus sehingga Anda dapat menemukan yang paling sesuai dengan kebutuhan Anda.

Hosting PHP:Hosting Web PHP 7 &PHP 5.6 Terbaik

Membuat Database di MySQL

Langkah pertama dalam tutorial ini adalah membuat database MySQL. Karena Cloudways menyediakan manajer mysql khusus di platform yang berisi database untuk aplikasi. Anda dapat membuat tabel dengan menjalankan kueri SQL. Buat tabel `employeeinfo` dalam database menggunakan query SQL berikut.

CREATE TABLE employeeinfo(
emp_id VARCHAR(50) UNSIGNED PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date VARCHAR(50)
)

Ini akan membuat tabel baru `employeeinfo` dalam database. Saya akan menggunakan tabel ini untuk memasukkan data dari file CSV.


Berhenti Membuang Waktu di Server

Cloudways menangani manajemen server untuk Anda sehingga Anda dapat fokus membuat aplikasi hebat dan membuat klien Anda senang.

Mulai Gratis

Buat Koneksi MySql di PHP

Untuk import dan export database di MySql akan dibuatkan file terpisah `config.php`. Tambahkan kode berikut dan ganti kredensial database dengan milik Anda. Anda dapat menemukan kredensial db Anda di detail Akses Aplikasi:

<?php
function getdb(){
$servername = "localhost";
$username = "huscqxzwaw";
$password = "2WWKxxxxHr";
$db = "huscqxzwaw";

try {
   
    $conn = mysqli_connect($servername, $username, $password, $db);
     //echo "Connected successfully"; 
    }
catch(exception $e)
    {
    echo "Connection failed: " . $e->getMessage();
    }
    return $conn;
}
?>

Terkait: Cara Menghubungkan Database MySQL Dengan Situs Web PHP

Impor CSV ke MySQL dalam PHP

Setelah database dibuat, selanjutnya saya memerlukan file HTML yang dapat mengupload file CSV. Untuk file HTML ini, saya akan menggunakan pengunggah File HTML dalam bentuk bootstrap sederhana.

Buat file dan beri nama `index.php`  . Ini adalah formulir sederhana untuk mengunggah file CSV. File ini juga akan menampilkan hasilnya dalam tabel sederhana di halaman yang sama. Saat pengguna mengirimkan formulir,  semua catatan akan disimpan dalam database.

Pertama, saya akan menambahkan Bootstrap CDN ke index.php .

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" crossorigin="anonymous">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" crossorigin="anonymous">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" crossorigin="anonymous"></script>

Selanjutnya, di `body` tag,  tambahkan kode HTML berikut untuk formulir Bootstrap.

<!DOCTYPE html>
<html lang="en">

<head>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" crossorigin="anonymous">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" crossorigin="anonymous">
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" crossorigin="anonymous"></script>

</head>

<body>
    <div id="wrap">
        <div class="container">
            <div class="row">

                <form class="form-horizontal" action="functions.php" method="post" name="upload_excel" enctype="multipart/form-data">
                    <fieldset>

                        <!-- Form Name -->
                        <legend>Form Name</legend>

                        <!-- File Button -->
                        <div class="form-group">
                            <label class="col-md-4 control-label" for="filebutton">Select File</label>
                            <div class="col-md-4">
                                <input type="file" name="file" id="file" class="input-large">
                            </div>
                        </div>

                        <!-- Button -->
                        <div class="form-group">
                            <label class="col-md-4 control-label" for="singlebutton">Import data</label>
                            <div class="col-md-4">
                                <button type="submit" id="submit" name="Import" class="btn btn-primary button-loading" data-loading-text="Loading...">Import</button>
                            </div>
                        </div>

                    </fieldset>
                </form>

            </div>
            <?php
               get_all_records();
            ?>
        </div>
    </div>
</body>

</html>

Anda mungkin memperhatikan bahwa saya telah menyetel tindakan ke `functions.php` mengajukan. Pada langkah selanjutnya, saya akan membuat file ini dan menambahkan kode ke dalamnya. Saya juga telah menyertakan metode `get_all_records()` dekat akhir file. Metode ini mengambil semua catatan dari database dan menampilkan catatan dalam tabel di halaman indeks.

Selanjutnya, saya akan membuat `functions.php` file dan tambahkan kode berikut di dalamnya.

<?php


 if(isset($_POST["Import"])){
		
		$filename=$_FILES["file"]["tmp_name"];		


		 if($_FILES["file"]["size"] > 0)
		 {
		  	$file = fopen($filename, "r");
	        while (($getData = fgetcsv($file, 10000, ",")) !== FALSE)
	         {


	           $sql = "INSERT into employeeinfo (emp_id,firstname,lastname,email,reg_date) 
                   values ('".$getData[0]."','".$getData[1]."','".$getData[2]."','".$getData[3]."','".$getData[4]."')";
                   $result = mysqli_query($con, $sql);
				if(!isset($result))
				{
					echo "<script type=\"text/javascript\">
							alert(\"Invalid File:Please Upload CSV File.\");
							window.location = \"index.php\"
						  </script>";		
				}
				else {
					  echo "<script type=\"text/javascript\">
						alert(\"CSV File has been successfully Imported.\");
						window.location = \"index.php\"
					</script>";
				}
	         }
			
	         fclose($file);	
		 }
	}	 


 ?>

Saat mengunggah diklik, nama file sementara akan disimpan dalam memori dan menggunakan `sementara` loop data disimpan di $getData variabel. Setelah proses selesai, data diurutkan berdasarkan kolom dan akhirnya dimasukkan ke dalam `employeeinfo` meja.

Perhatikan bahwa `fgetcsv()` mem-parsing baris dari file yang terbuka, memeriksa bidang CSV dan `fopen()` membuka file atau URL. Kode ini dapat diuji dengan mengimpor file CSV dengan data pengujian.

Menampilkan Catatan yang Disimpan

Setelah file CSV diimpor, saya akan menampilkan data melalui fungsi sederhana, `get_all_records()`, diinisialisasi di `index.php`. Salin fungsi ini ke `function.php` .

function get_all_records(){
    $con = getdb();
    $Sql = "SELECT * FROM employeeinfo";
    $result = mysqli_query($con, $Sql);  


    if (mysqli_num_rows($result) > 0) {
     echo "<div class='table-responsive'><table id='myTable' class='table table-striped table-bordered'>
             <thead><tr><th>EMP ID</th>
                          <th>First Name</th>
                          <th>Last Name</th>
                          <th>Email</th>
                          <th>Registration Date</th>
                        </tr></thead><tbody>";


     while($row = mysqli_fetch_assoc($result)) {

         echo "<tr><td>" . $row['emp_id']."</td>
                   <td>" . $row['firstname']."</td>
                   <td>" . $row['lastname']."</td>
                   <td>" . $row['email']."</td>
                   <td>" . $row['reg_date']."</td></tr>";        
     }
    
     echo "</tbody></table></div>";
     
} else {
     echo "you have no records";
}
}

Dalam metode yang sangat sederhana ini, saya cukup memilih semua catatan dan menampilkan catatan ini pada halaman indeks melalui metode tersebut. Setiap kali pengguna mengunggah file CSV, catatan akan disimpan di tabel dan kemudian ditampilkan di halaman indeks.

Ekspor MySQL ke CSV Dengan PHP

Mengekspor data dari database MySQL ke file CSV juga sangat mudah. Untuk mendemonstrasikan ini, saya akan menggunakan index.php yang saya buat sebelumnya.

Tambahkan kode berikut ke file.

 <div>
            <form class="form-horizontal" action="functions.php" method="post" name="upload_excel"   
                      enctype="multipart/form-data">
                  <div class="form-group">
                            <div class="col-md-4 col-md-offset-4">
                                <input type="submit" name="Export" class="btn btn-success" value="export to excel"/>
                            </div>
                   </div>                    
            </form>           
 </div>

Setelah menambahkan markup HTML ini, Ekspor  tombol akan muncul di bawah tabel. Sekarang tambahkan kondisi berikut di functions.php.

 if(isset($_POST["Export"])){
		 
      header('Content-Type: text/csv; charset=utf-8');  
      header('Content-Disposition: attachment; filename=data.csv');  
      $output = fopen("php://output", "w");  
      fputcsv($output, array('ID', 'First Name', 'Last Name', 'Email', 'Joining Date'));  
      $query = "SELECT * from employeeinfo ORDER BY emp_id DESC";  
      $result = mysqli_query($con, $query);  
      while($row = mysqli_fetch_assoc($result))  
      {  
           fputcsv($output, $row);  
      }  
      fclose($output);  
 }  

Saat `Ekspor`  diklik, header `Content-Type:text/csv` dengan lampiran `data.csv` terkirim.

Sejak `php://output` adalah aliran tulis-saja yang memungkinkan akses tulis ke mekanisme buffer keluaran, saya memilih semua data dari tabel di baris berikutnya, dan meneruskannya ke `fputcsv()`  metode. Metode ini memformat baris (diteruskan sebagai array bidang) sebagai CSV dan menulisnya (dihentikan oleh baris baru) ke file yang ditentukan. Akhirnya, file dengan semua data yang diinginkan diunduh.

Terakhir, setelah mengintegrasikan semua kode, Anda akan melihat bentuk akhir aplikasi berikut.

Anda mungkin juga menyukai: CRUD sederhana di PHP dan MySQL

Kesimpulan

Pada artikel ini, saya membahas bagaimana Anda dapat mengekspor data dari dan ke file CSV menggunakan PHP dan MySQL. Ini adalah contoh sederhana Anda dapat Menambahkan logika dan validasi yang lebih kompleks sesuai kebutuhan Anda. Anda juga dapat membuat kasus uji untuk memverifikasi kode dan Mengintegrasikan dengan GitHub menggunakan PHP Continuous Integeration Tools. Jika Anda ingin menambahkan diskusi atau ingin mengajukan pertanyaan, tinggalkan komentar di bawah.

Pertanyaan yang Sering Diajukan

Bagaimana cara mengimpor dan mengekspor CSV menggunakan php dan MySQL?

  • Setujui catatan yang dikirimkan, baik berupa file CSV yang substansial.
  • Periksa status transfer file CSV menggunakan fungsi PHP is_uploaded_file().
  • Akses file CSV menggunakan fungsi fopen() PHP.
  • Mengurai data dari data CSV menggunakan fungsi PHP fgetcsv().
  • Memasukkan atau memperbarui data ke dalam database berdasarkan email anggota.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lewati parameter ke baris perintah skrip MySQL

  2. Apakah transaksi bersarang diperbolehkan di MySQL?

  3. Apa arti tanda tanya di MySQL di kolom WHERE =??

  4. Prosedur tersimpan MySQL menggunakannya atau tidak menggunakannya

  5. Apa perbedaan antara MyISAM dan InnoDB?