Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да импортирате и експортирате CSV файлове с помощта на PHP и MySQL

PHP се използва широко за изграждане на широка гама от продукти, вариращи от уеб приложения до приложения на корпоративно ниво. Ключът към ефективния PHP код е да следвате правилните работни процеси и да автоматизирате процесите. Резултатът е висококачествен код без грешки.

В почти всички PHP приложения данните се съхраняват, достъпват и обменят между различни компоненти на приложението. За да се гарантира, че този обмен и достъп до данни протичат гладко и без проблеми, екипът за разработка трябва да се увери, че базите данни и дъмповете на данни са в правилен формат.

Импортирането и експортирането на данни към и от бази данни е достатъчно често срещана процедура в разработката на PHP. Друга важна дейност е архивирането и прехвърлянето на бази данни.

В тази статия ще обясня как да запишете таблици от CSV файлове в MySQL и обратно. Трябва да се регистрирате в Cloudways, за да стартирате сървър и приложение PHPstack. Преди да се регистрирате, е добра идея да разгледате всички опции за ценообразуване от доставчици на хостинг от световна класа като AWS, DigitalOcean, Linode, Vultr и GCP, за да можете да намерите този, който идеално отговаря на вашите нужди.

PHP хостинг:Най-добрият уеб хостинг на PHP 7 и PHP 5.6

Създайте база данни в MySQL

Първата стъпка в този урок е създаването на MySQL база данни. Тъй като Cloudways предоставя персонализирания mysql мениджър в платформата, която съдържа база данни за приложението. можете да създавате таблици, като изпълнявате SQL заявки. Създайте таблица `employeeinfo` в база данни с помощта на следната SQL заявка.

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

Това ще създаде нова таблица `employeeinfo` в базата данни. Ще използвам тази таблица, за да вмъкна данни от CSV файла.


Спрете да губите време на сървъри

Cloudways се занимава с управлението на сървъра вместо вас, за да можете да се съсредоточите върху създаването на страхотни приложения и да поддържате клиентите си щастливи.

Започнете безплатно

Създайте MySql връзка в PHP

За импортиране и експортиране на база данни в MySql ще направи отделен файл `config.php`. Добавете следния код и заменете идентификационните данни на базата данни с вашите. Можете да намерите вашите db идентификационни данни в Детайли за достъп до приложения:

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

Свързано: Как да свържете MySQL база данни с PHP уебсайтове

Импортирайте CSV в MySQL в PHP

След като базата данни бъде създадена, трябва да имам HTML файл, който да качи CSV файл. За този HTML файл ще използвам програмата за качване на HTML файлове в обикновена форма за стартиране.

Създайте файл и го наречете `index.php`  . Това е прост формуляр за качване на CSV файл. Този файл също ще покаже резултатите в проста таблица на същата страница. Когато потребителят изпрати формуляра,  всички записи ще бъдат запазени в базата данни.

Първо, ще добавя Bootstrap CDN към 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>

След това в `тялото` маркер, добавете следния HTML код за формуляра 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>

Може да забележите, че съм задал действие на `functions.php` файл. В следващата стъпка ще създам този файл и ще добавя код към него. Включих и метод `get_all_records()` близо до края на файла. Този метод извлича всички записи от базата данни и показва записите в таблицата на индексната страница.

След това ще създам `functions.php` файл и добавете следния код в него.

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


 ?>

Когато качването щракнете върху бутона, името на временния файл ще бъде съхранено в паметта и с помощта на `while` цикъл данните се записват в $getData променлива. След като процесът приключи, данните се сортират по колони и след това накрая се вмъкват в `employeeinfo` маса.

Обърнете внимание, че „fgetcsv()` анализира редове от отворения файл, като проверява за CSV полета и `fopen()` отваря файл или URL. Този код може да бъде тестван чрез импортиране на CSV файл с тестови данни.

Показване на запазените записи

След като CSV файлът бъде импортиран, ще покажа данните чрез проста функция, `get_all_records()`, инициализиран в `index.php`. Копирайте тази функция в `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";
}
}

В този наистина прост метод, аз просто избрах всички записи и показах тези записи на индексната страница чрез метода. Всеки път, когато потребителят качи CSV файл, записите ще бъдат запазени в таблицата и след това ще се покажат на индексната страница.

Експортирайте MySQL в CSV с PHP

Експортирането на данни от  база данни MySQL в CSV файл е също много лесно. За да демонстрирам това, ще използвам index.php които създадох по-рано.

Добавете следния код към файла.

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

След като добавите тази HTML маркировка, Експортиране  бутонът ще се появи под таблицата. Сега добавете следното условие в 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);  
 }  

Когато „Експортиране“  щракнете върху бутона, заглавките `Content-Type:text/csv` с прикачен файл `data.csv` е изпратено.

Тъй като `php://output` е поток само за запис, който позволява достъп за запис до механизма на изходния буфер, аз избрах всички данни от таблицата в следващия ред и ги предадох на `fputcsv()`  метод. Този метод форматира ред (предаден като масив от полета) като CSV и го записва (завършва с нов ред) в посочения файл. Накрая се изтегля файлът с всички желани данни.

Накрая, след като интегрирате целия код, ще видите следната окончателна форма на приложението.

Може да ви хареса още: Прост CRUD в PHP и MySQL

Заключение

В тази статия обсъдих как можете да експортирате данни от и в CSV файлове с помощта на PHP и MySQL. Това е прост пример, можете да добавите по-сложна логика и валидации според вашите изисквания. Можете също да създадете тестови случаи, за да проверите кода и да интегрирате с GitHub, като използвате PHP Continuous Integeration Tools. Ако искате да добавите към дискусията или искате да зададете въпрос, оставете коментар по-долу.

често задавани въпроси

Как да импортирам и експортирам CSV с помощта на php и MySQL?

  • Одобрете изпратения запис, независимо дали е съществен CSV файл.
  • Проверете състоянието на прехвърляне на CSV файл, като използвате функцията is_uploaded_file() на PHP.
  • Достъп до CSV файла, използвайки функцията PHP fopen().
  • Разбирайте данните от CSV записа с помощта на функцията PHP fgetcsv().
  • Вмъкнете или актуализирайте данни в базата данни въз основа на имейла на члена.

  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 да създават бази данни, но позволяват достъп само до собствените си бази данни

  2. Как да покажа съпоставянето на сървъра в MySQL

  3. PHP - Импортиране на CSV файл в mysql база данни с помощта на LOAD DATA INFILE

  4. Актуализирайте SQL режима в MySQL

  5. MySQL група от SUM