sql >> Database >  >> RDS >> Mysql

CSV-bestanden importeren en exporteren met PHP en MySQL

PHP wordt veel gebruikt voor het bouwen van een breed scala aan producten, variërend van web-apps tot applicaties op bedrijfsniveau. De sleutel tot efficiënte PHP-code is om de juiste workflows te volgen en processen te automatiseren. Het resultaat is code van hoge kwaliteit en foutloos.

In bijna alle PHP-applicaties worden gegevens opgeslagen, ontsloten en uitgewisseld tussen verschillende onderdelen van de app. Om ervoor te zorgen dat deze uitwisseling en toegang tot gegevens soepel en zonder problemen verloopt, moet het ontwikkelteam ervoor zorgen dat de databases en gegevensdumps in het juiste formaat zijn.

Het importeren en exporteren van gegevens van en naar databases is een gebruikelijke procedure in PHP-ontwikkeling. Een andere belangrijke activiteit is de back-up en overdracht van databases.

In dit artikel leg ik uit hoe je tabellen uit CSV-bestanden opslaat in MySQL en vice versa. U moet zich aanmelden bij Cloudways om een ​​server en PHPstack-applicatie te starten. Voordat u zich aanmeldt, is het een goed idee om alle prijsopties van de hostingproviders van wereldklasse zoals AWS, DigitalOcean, Linode, Vultr en GCP te bekijken, zodat u degene kunt vinden die perfect bij uw behoeften past.

PHP-hosting:beste PHP 7 &PHP 5.6-webhosting

Een database maken in MySQL

De eerste stap in deze tutorial is het maken van een MySQL-database. Omdat Cloudways de aangepaste mysql-manager in het platform biedt, die een database voor app bevat. u kunt tabellen maken door SQL-query's uit te voeren. Maak een tabel `employeeinfo` in de database met behulp van de volgende SQL-query.

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

Dit zal een nieuwe tabel maken `employeeinfo` in de databank. Ik zal deze tabel gebruiken om gegevens uit het CSV-bestand in te voegen.


Stop met het verspillen van tijd aan servers

Cloudways regelt het serverbeheer voor u, zodat u zich kunt concentreren op het maken van geweldige apps en het tevreden houden van uw klanten.

Begin gratis

Maak een MySql-verbinding in PHP

Voor het importeren en exporteren van database in MySql maakt u een apart bestand `config.php`. Voeg de volgende code toe en vervang de databasereferenties door die van u. U kunt uw db-inloggegevens vinden in Details van toepassingstoegang:

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

Gerelateerd: Hoe MySQL-database verbinden met PHP-websites

CSV importeren naar MySQL in PHP

Nadat de database is gemaakt, heb ik vervolgens een HTML-bestand nodig dat een CSV-bestand kan uploaden. Voor dit HTML-bestand gebruik ik de HTML-bestandsuploader in een eenvoudige bootstrap-vorm.

Maak een bestand en noem het `index.php`  . Dit is een eenvoudig formulier voor het uploaden van een CSV-bestand. Dit bestand toont de resultaten ook in een eenvoudige tabel op dezelfde pagina. Wanneer de gebruiker het formulier verzendt, worden alle records in de database opgeslagen.

Eerst zal ik Bootstrap CDN toevoegen aan 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>

Vervolgens in de `body` tag,  voeg de volgende HTML-code toe voor het Bootstrap-formulier.

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

Het is je misschien opgevallen dat ik een actie heb ingesteld op `functions.php` het dossier. In de volgende stap zal ik dit bestand maken en er code aan toevoegen. Ik heb ook een methode `get_all_records()` . toegevoegd aan het einde van het bestand. Deze methode haalt alle records uit de database en geeft de records weer in de tabel op de indexpagina.

Vervolgens maak ik `functions.php` bestand en voeg de volgende code erin toe.

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


 ?>

Wanneer de upload wordt geklikt, wordt de tijdelijke bestandsnaam in het geheugen opgeslagen en gebruikt u de `while` loop de gegevens worden opgeslagen in $getData variabel. Zodra het proces is voltooid, worden de gegevens kolomgewijs gesorteerd en vervolgens ingevoegd in de `employeeinfo` tafel.

Merk op dat `fgetcsv()` ontleedt regels uit het geopende bestand, controleert op CSV-velden en `fopen()` opent een bestand of een URL. Deze code kan worden getest door een CSV-bestand met testgegevens te importeren.

Toon de opgeslagen records

Zodra het CSV-bestand is geïmporteerd, zal ik de gegevens weergeven via een eenvoudige functie, `get_all_records()`, geïnitialiseerd in `index.php`. Kopieer deze functie naar `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";
}
}

Bij deze heel eenvoudige methode heb ik eenvoudig alle records geselecteerd en deze records via de methode op de indexpagina weergegeven. Telkens wanneer de gebruiker een CSV-bestand uploadt, worden de records opgeslagen in de tabel en vervolgens weergegeven op de indexpagina.

Exporteer MySQL naar CSV met PHP

Het exporteren van gegevens uit de MySQL-database naar een CSV-bestand is eveneens heel eenvoudig. Om dit aan te tonen, gebruik ik de index.php die ik eerder heb gemaakt.

Voeg de volgende code toe aan het bestand.

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

Nadat u deze HTML-opmaak hebt toegevoegd, wordt de Exporteren  knop verschijnt onder de tabel. Voeg nu de volgende voorwaarde toe in 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);  
 }  

Wanneer de `Exporteren`  knop is geklikt, de headers `Content-Type:text/csv` met een bijlage `data.csv` is verstuurd.

Sinds `php://output` is een alleen-schrijven stream die schrijftoegang geeft tot het uitvoerbuffermechanisme. Ik heb alle gegevens uit de tabel in de volgende regel geselecteerd en doorgegeven aan `fputcsv()`  methode. Deze methode formatteert een regel (doorgegeven als een veldenarray) als CSV en schrijft deze (beëindigd door een nieuwe regel) naar het opgegeven bestand. Ten slotte wordt het bestand met alle gewenste gegevens gedownload.

Eindelijk, na het integreren van alle code, zie je de volgende uiteindelijke vorm van de applicatie.

Misschien vind je dit ook leuk: Eenvoudige CRUD in PHP en MySQL

Conclusie

In dit artikel heb ik besproken hoe je gegevens van en naar CSV-bestanden kunt exporteren met PHP en MySQL. Dit is een eenvoudig voorbeeld dat u volgens uw vereisten complexere logica en validaties kunt toevoegen. U kunt ook testcases maken om de code te verifiëren en te integreren met GitHub met behulp van PHP Continuous Integeration Tools. Als je iets aan de discussie wilt toevoegen of een vraag wilt stellen, laat dan hieronder een reactie achter.

Veel Gestelde Vragen

Hoe importeer en exporteer ik CSV met php en MySQL?

  • Keur het ingediende record goed, of het nu een substantieel CSV-bestand is.
  • Inspecteer de status van de CSV-bestandsoverdracht met de PHP-functie is_uploaded_file() .
  • Toegang tot het CSV-bestand met de PHP fopen()-functie.
  • Ontleed gegevens uit het CSV-record met behulp van de PHP fgetcsv()-functie.
  • Gegevens invoegen of bijwerken in de database op basis van de e-mail van het lid.

  1. MAX() – Vind de maximale waarde in een kolom in MySQL

  2. DATEDIFF() Voorbeelden in SQL Server

  3. Android Sqlite onupgrade verwijder tabel uit database

  4. Hoe de status van de PostgreSQL-server Mac OS X te controleren