sql >> Databáze >  >> RDS >> Mysql

Jak importovat a exportovat soubory CSV pomocí PHP a MySQL

PHP se široce používá pro vytváření široké škály produktů od webových aplikací až po aplikace na podnikové úrovni. Klíčem k efektivnímu kódu PHP je dodržování správných pracovních postupů a automatizace procesů. Výsledkem je vysoce kvalitní a bezchybný kód.

Téměř ve všech aplikacích PHP jsou data ukládána, zpřístupňována a vyměňována mezi různými součástmi aplikace. Aby se zajistilo, že tato výměna a přístup k datům probíhají hladce a bez jakýchkoli problémů, musí vývojový tým zajistit, aby databáze a výpisy dat byly ve správném formátu.

Import a export dat do az databází je dostatečně běžný postup při vývoji PHP. Další důležitou činností je zálohování a přenos databází.

V tomto článku vysvětlím, jak ukládat tabulky ze souborů CSV do MySQL a naopak. Chcete-li spustit server a aplikaci PHPstack, musíte se zaregistrovat na Cloudways. Než se zaregistrujete, je dobré podívat se na všechny cenové možnosti od světových poskytovatelů hostingu, jako jsou AWS, DigitalOcean, Linode, Vultr a GCP, abyste našli ten, který dokonale vyhovuje vašim potřebám.

PHP Hosting:Nejlepší webový hosting PHP 7 a PHP 5.6

Vytvoření databáze v MySQL

Prvním krokem v tomto tutoriálu je vytvoření databáze MySQL. Protože Cloudways poskytuje vlastní správce mysql na platformě, která obsahuje databázi pro aplikaci. tabulky můžete vytvářet spuštěním SQL dotazů. Vytvořte tabulku `informace o zaměstnanci` v databázi pomocí následujícího SQL dotazu.

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

Tím se vytvoří nová tabulka `informace o zaměstnanci` v databázi. Tuto tabulku použiji pro vložení dat ze souboru CSV.


Přestaňte plýtvat časem na serverech

Cloudways za vás spravují správu serverů, takže se můžete soustředit na vytváření skvělých aplikací a zajištění spokojenosti vašich klientů.

Začněte zdarma

Vytvoření připojení MySql v PHP

Pro import a export databáze v MySql vytvoří samostatný soubor `config.php`. Přidejte následující kód a nahraďte přihlašovací údaje k databázi svými. Své přihlašovací údaje db najdete vPodrobnosti o přístupu k aplikaci:

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

Související: Jak propojit databázi MySQL s webovými stránkami v PHP

Import CSV do MySQL v PHP

Po vytvoření databáze budu dále potřebovat soubor HTML, který by mohl nahrát soubor CSV. Pro tento HTML soubor použiji HTML File uploader v jednoduché bootstrap formě.

Vytvořte soubor a pojmenujte jej `index.php`  . Toto je jednoduchý formulář pro nahrání souboru CSV. Tento soubor také zobrazí výsledky v jednoduché tabulce na stejné stránce. Když uživatel odešle formulář, všechny záznamy se uloží do databáze.

Nejprve přidám Bootstrap CDN do 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>

Dále v `těle`  přidejte následující kód HTML pro formulář 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>

Možná jste si všimli, že jsem nastavil akci na `functions.php` soubor. V dalším kroku vytvořím tento soubor a přidám do něj kód. Zahrnul jsem také metodu `get_all_records()` blízko konce souboru. Tato metoda načte všechny záznamy z databáze a zobrazí záznamy v tabulce na stránce indexu.

Dále vytvořím `functions.php` a přidejte do něj následující kód.

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


 ?>

Při nahrání po kliknutí na tlačítko , název dočasného souboru se uloží do paměti a pomocí `zatímco` smyčky jsou data uložena v $getData variabilní. Po dokončení procesu se data seřadí podle sloupců a nakonec se vloží do `informace o zaměstnanci` stůl.

Všimněte si, že `fgetcsv()` analyzuje řádky z otevřeného souboru, kontroluje pole CSV a `fopen()` otevře soubor nebo adresu URL. Tento kód lze otestovat importem souboru CSV s testovacími daty.

Zobrazit uložené záznamy

Jakmile bude soubor CSV naimportován, zobrazím data pomocí jednoduché funkce `get_all_records()`, inicializováno v `index.php`. Zkopírujte tuto funkci do `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";
}
}

V této opravdu jednoduché metodě jsem jednoduše vybral všechny záznamy a pomocí metody tyto záznamy zobrazil na stránce indexu. Kdykoli uživatel nahraje soubor CSV, záznamy se uloží do tabulky a poté se zobrazí na stránce indexu.

Exportujte MySQL do CSV pomocí PHP

Export dat z databáze MySQL do souboru CSV je podobně velmi snadný. Abych to demonstroval, použiji index.php které jsem vytvořil dříve.

Přidejte do souboru následující kód.

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

Po přidání tohoto označení HTML se Exportovat  tlačítko se objeví pod tabulkou. Nyní přidejte následující podmínku do 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);  
 }  

Když se zobrazí `Export`  po kliknutí na tlačítko, záhlaví `Content-Type:text/csv` s přílohou `data.csv` je poslán.

Od `php://output` je stream pouze pro zápis, který umožňuje zápis do mechanismu výstupní vyrovnávací paměti, vybral jsem všechna data z tabulky na dalším řádku a předal je `fputcsv()`  metoda. Tato metoda naformátuje řádek (předaný jako pole polí) jako CSV a zapíše jej (ukončený novým řádkem) do určeného souboru. Nakonec se stáhne soubor se všemi požadovanými daty.

Nakonec, po integraci veškerého kódu, uvidíte následující konečný tvar aplikace.

Mohlo by se vám také líbit: Jednoduché CRUD v PHP a MySQL

Závěr

V tomto článku jsem diskutoval o tom, jak můžete exportovat data z a do souborů CSV pomocí PHP a MySQL. Toto je jednoduchý příklad, který můžete přidat složitější logiku a ověřování podle vašich požadavků. Můžete také vytvořit testovací případy pro ověření kódu a integraci s GitHub pomocí PHP Continuous Integeration Tools. Pokud se chcete přidat do diskuze nebo se chcete na něco zeptat, zanechte níže komentář.

Často kladené otázky

Jak importuji a exportuji CSV pomocí php a MySQL?

  • Schvalte odeslaný záznam, ať už jde o podstatný soubor CSV.
  • Zkontrolujte stav přenosu souboru CSV pomocí funkce PHP is_uploaded_file().
  • Získejte přístup k souboru CSV pomocí funkce PHP fopen().
  • Analyzujte data ze záznamu CSV pomocí funkce PHP fgetcsv().
  • Vložte nebo aktualizujte data do databáze na základě e-mailu člena.

  1. Oznámení ClusterControl 1.4.1 - vydání ProxySQL

  2. Podporované modely formátů pro datové funkce ROUND() a TRUNC() v Oracle

  3. Jak interpretovat hodnotu txid_current() PosgreSQL

  4. sp_executesql je pomalý s parametry