Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách nhập và xuất tệp CSV bằng PHP và MySQL

PHP được sử dụng rộng rãi để xây dựng nhiều loại sản phẩm khác nhau, từ ứng dụng web đến ứng dụng cấp doanh nghiệp. Chìa khóa để tạo mã PHP hiệu quả là tuân theo quy trình làm việc phù hợp và tự động hóa các quy trình. Kết quả là mã chất lượng cao và không có lỗi.

Trong hầu hết các ứng dụng PHP, dữ liệu được lưu trữ, truy cập và trao đổi giữa các thành phần khác nhau của ứng dụng. Để đảm bảo rằng quá trình trao đổi và truy cập dữ liệu này diễn ra suôn sẻ và không gặp bất kỳ sự cố nào, nhóm phát triển phải đảm bảo rằng cơ sở dữ liệu và kết xuất dữ liệu có định dạng phù hợp.

Nhập và xuất dữ liệu đến và đi từ cơ sở dữ liệu là một thủ tục đủ phổ biến trong quá trình phát triển PHP. Một hoạt động quan trọng khác là sao lưu và chuyển cơ sở dữ liệu.

Trong bài viết này, tôi sẽ giải thích cách lưu bảng từ tệp CSV sang MySQL và ngược lại. Bạn cần đăng ký tại Cloudways để khởi chạy máy chủ và ứng dụng PHPstack. Trước khi đăng ký, hãy xem xét tất cả các tùy chọn giá cả từ các nhà cung cấp dịch vụ lưu trữ đẳng cấp thế giới như AWS, DigitalOcean, Linode, Vultr và GCP là một ý tưởng hay để bạn có thể tìm thấy một trong những tùy chọn hoàn toàn phù hợp với nhu cầu của mình.

Lưu trữ PHP:Lưu trữ web PHP 7 &PHP 5.6 tốt nhất

Tạo cơ sở dữ liệu trong MySQL

Bước đầu tiên trong hướng dẫn này là tạo cơ sở dữ liệu MySQL. Vì Cloudways cung cấp trình quản lý mysql tùy chỉnh trong nền tảng chứa cơ sở dữ liệu cho ứng dụng. bạn có thể tạo bảng bằng cách chạy các truy vấn SQL. Tạo bảng ` staffinfo` trong cơ sở dữ liệu bằng cách sử dụng truy vấn SQL sau.

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)
)

Thao tác này sẽ tạo một bảng mới ` staffinfo` trong cơ sở dữ liệu. Tôi sẽ sử dụng bảng này để chèn dữ liệu từ tệp CSV.


Ngừng lãng phí thời gian trên máy chủ

Cloudways xử lý việc quản lý máy chủ cho bạn để bạn có thể tập trung vào việc tạo ra các ứng dụng tuyệt vời và giữ cho khách hàng của bạn hài lòng.

Bắt đầu miễn phí

Tạo kết nối MySql trong PHP

Để nhập và xuất cơ sở dữ liệu trong MySql sẽ tạo một tệp riêng biệt `config.php '. Thêm mã sau và thay thế thông tin đăng nhập cơ sở dữ liệu bằng của bạn. Bạn có thể tìm thấy thông tin đăng nhập db của mình trong Chi tiết quyền truy cập ứng dụng:

<?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;
}
?>

Liên quan:Cách kết nối cơ sở dữ liệu MySQL với trang web PHP

Nhập CSV sang MySQL trong PHP

Sau khi cơ sở dữ liệu đã được tạo, tiếp theo, tôi cần một tệp HTML có thể tải lên tệp CSV. Đối với tệp HTML này, tôi sẽ sử dụng trình tải tệp HTML lên ở dạng bootstrap đơn giản.

Tạo một tệp và đặt tên là ` index.php` . Đây là một biểu mẫu đơn giản để tải lên tệp CSV. Tệp này cũng sẽ hiển thị kết quả trong một bảng đơn giản trên cùng một trang. Khi người dùng gửi biểu mẫu, tất cả các bản ghi sẽ được lưu trong cơ sở dữ liệu.

Đầu tiên, tôi sẽ thêm Bootstrap CDN vào 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>

Tiếp theo, trong phần ` body` , thêm mã HTML sau cho biểu mẫu 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>

Bạn có thể nhận thấy rằng tôi đã đặt một hành động thành ` functions.php` tập tin. Trong bước tiếp theo, tôi sẽ tạo tệp này và thêm mã vào nó. Tôi cũng đã bao gồm một phương thức ` get_all_records () ' gần cuối tệp. Phương thức này tìm nạp tất cả các bản ghi từ cơ sở dữ liệu và hiển thị các bản ghi trong bảng trên trang chỉ mục.

Tiếp theo, tôi sẽ tạo ` functions.php` và thêm mã sau vào đó.

<?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);	
		 }
	}	 


 ?>

Khi tải lên được nhấp vào nút, tên tệp tạm thời sẽ được lưu trong bộ nhớ và sử dụng ký hiệu ` while` lặp lại dữ liệu được lưu trong $ getData Biến đổi. Khi quá trình đã hoàn tất, dữ liệu được sắp xếp theo cột khôn ngoan và cuối cùng được chèn vào ` staffinfo` bàn.

Lưu ý rằng ` fgetcsv ()` phân tích cú pháp các dòng từ tệp đang mở, kiểm tra các trường CSV và ` fopen () ' mở một tệp hoặc một URL. Có thể kiểm tra mã này bằng cách nhập tệp CSV với dữ liệu kiểm tra.

Hiển thị các bản ghi đã lưu

Khi tệp CSV đã được nhập, tôi sẽ hiển thị dữ liệu thông qua một hàm đơn giản, ` get_all_records ()`, được khởi tạo trong ` index.php`. Sao chép hàm này vào ` 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";
}
}

Trong phương pháp thực sự đơn giản này, tôi chỉ cần chọn tất cả các bản ghi và hiển thị các bản ghi này trên trang chỉ mục thông qua phương thức. Bất cứ khi nào người dùng tải lên tệp CSV, các bản ghi sẽ được lưu trong bảng và sau đó được hiển thị trên trang chỉ mục.

Xuất MySQL sang CSV Với PHP

Tương tự, việc xuất dữ liệu từ cơ sở dữ liệu MySQL sang tệp CSV cũng rất dễ dàng. Để chứng minh điều này, tôi sẽ sử dụng index.php mà tôi đã tạo trước đó.

Thêm mã sau vào tệp.

 <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>

Sau khi thêm đánh dấu HTML này, nút Xuất sẽ xuất hiện bên dưới bảng. Bây giờ, hãy thêm điều kiện sau vào 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);  
 }  

Khi ` Xuất khẩu ' được nhấp vào nút, tiêu đề ` Content-Type:text / csv` với một phần đính kèm ` data.csv` đã được gửi.

Vì ` php:// output` là một luồng chỉ ghi cho phép truy cập ghi vào cơ chế bộ đệm đầu ra, tôi đã chọn tất cả dữ liệu từ bảng ở dòng tiếp theo và chuyển nó đến ` fputcsv () ' phương pháp. Phương thức này định dạng một dòng (được truyền dưới dạng mảng trường) dưới dạng CSV và ghi nó (kết thúc bằng một dòng mới) vào tệp được chỉ định. Cuối cùng, tệp với tất cả dữ liệu mong muốn được tải xuống.

Cuối cùng, sau khi tích hợp tất cả mã, bạn sẽ thấy hình dạng cuối cùng của ứng dụng sau đây.

Bạn cũng có thể thích: CRUD đơn giản trong PHP và MySQL

Kết luận

Trong bài viết này, tôi đã thảo luận về cách bạn có thể xuất dữ liệu từ và sang tệp CSV bằng PHP và MySQL. Đây là một ví dụ đơn giản, bạn có thể Thêm logic và xác nhận phức tạp hơn theo yêu cầu của bạn. Bạn cũng có thể tạo các trường hợp thử nghiệm để xác minh mã và Tương tác với GitHub bằng Công cụ Tương tác Liên tục PHP. Nếu bạn muốn thêm vào cuộc thảo luận hoặc muốn đặt câu hỏi, hãy để lại bình luận bên dưới.

Các câu hỏi thường gặp

Làm cách nào để nhập và xuất CSV bằng php và MySQL?

  • Phê duyệt hồ sơ đã gửi, cho dù là một tệp CSV quan trọng.
  • Kiểm tra trạng thái truyền tệp CSV bằng cách sử dụng hàm is_uploaded_file () của PHP.
  • Truy cập tệp CSV bằng cách sử dụng hàm fopen () trong PHP.
  • Phân tích cú pháp dữ liệu từ bản ghi CSV bằng cách sử dụng hàm PHP fgetcsv ().
  • Chèn hoặc cập nhật dữ liệu vào cơ sở dữ liệu dựa trên e-mail của thành viên.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL DATEDIFF () so với TIMEDIFF ():Sự khác biệt là gì?

  2. Cách kiểm tra trạng thái máy chủ trong MySQL Workbench bằng GUI

  3. MySQL - Khắc phục - Lỗi - Mật khẩu của bạn không đáp ứng các yêu cầu chính sách hiện tại

  4. CHỌN / NHÓM THEO - phân đoạn thời gian (10 giây, 30 giây, v.v.)

  5. Tạo bảng số trong MySQL