Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment importer et exporter des fichiers CSV avec PHP et MySQL

PHP est largement utilisé pour créer une large gamme de produits allant des applications Web aux applications de niveau entreprise. La clé d'un code PHP efficace est de suivre des flux de travail appropriés et d'automatiser les processus. Le résultat est un code de haute qualité et sans bogue.

Dans presque toutes les applications PHP, les données sont stockées, consultées et échangées entre les différents composants de l'application. Pour s'assurer que cet échange et cet accès aux données se déroulent sans problème et sans aucun problème, l'équipe de développement doit s'assurer que les bases de données et les vidages de données sont au bon format.

L'importation et l'exportation de données vers et depuis des bases de données est une procédure assez courante dans le développement PHP. Une autre activité importante est la sauvegarde et le transfert de bases de données.

Dans cet article, j'expliquerai comment enregistrer des tables à partir de fichiers CSV dans MySQL et vice versa. Vous devez vous inscrire sur Cloudways pour lancer un serveur et une application PHPstack. Avant de vous inscrire, examinez toutes les options de tarification des fournisseurs d'hébergement de classe mondiale comme AWS, DigitalOcean, Linode, Vultr et GCP est une bonne idée afin que vous puissiez trouver celui qui correspond parfaitement à vos besoins.

Hébergement PHP :Meilleur hébergement Web PHP 7 et PHP 5.6

Créer une base de données dans MySQL

La première étape de ce tutoriel est la création d'une base de données MySQL. Étant donné que Cloudways fournit le gestionnaire mysql personnalisé dans la plate-forme qui contient une base de données pour l'application. vous pouvez créer des tables en exécutant des requêtes SQL. Créer une table `infos employé` dans la base de données à l'aide de la requête SQL suivante.

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

Cela créera une nouvelle table `info employé` dans la base de données. Je vais utiliser ce tableau pour insérer des données à partir du fichier CSV.


Arrêtez de perdre du temps sur les serveurs

Cloudways gère la gestion des serveurs pour vous afin que vous puissiez vous concentrer sur la création d'applications géniales et sur la satisfaction de vos clients.

Commencez gratuitement

Créer une connexion MySql en PHP

Pour l'importation et l'exportation de la base de données dans MySql, créera un fichier séparé `config.php`. Ajoutez le code suivant et remplacez les informations d'identification de la base de données par les vôtres. Vous pouvez trouver vos informations d'identification de base de données dans Détails d'accès à l'application :

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

Connexe : Comment connecter une base de données MySQL à des sites Web PHP

Importer CSV vers MySQL en PHP

Une fois la base de données créée, j'ai ensuite besoin d'un fichier HTML pouvant importer un fichier CSV. Pour ce fichier HTML, j'utiliserai le téléchargeur de fichier HTML dans un simple formulaire d'amorçage.

Créez un fichier et nommez-le `index.php`  . Il s'agit d'un formulaire simple pour télécharger un fichier CSV. Ce fichier affichera également les résultats dans un tableau simple sur la même page. Lorsque l'utilisateur soumet le formulaire, tous les enregistrements sont enregistrés dans la base de données.

Tout d'abord, je vais ajouter 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>

Ensuite, dans le `corps` tag, ajoutez le code HTML suivant pour le formulaire 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>

Vous remarquerez peut-être que j'ai défini une action sur `functions.php` dossier. Dans l'étape suivante, je vais créer ce fichier et y ajouter du code. J'ai également inclus une méthode `get_all_records()` vers la fin du fichier. Cette méthode récupère tous les enregistrements de la base de données et affiche les enregistrements dans la table sur la page d'index.

Ensuite, je vais créer `functions.php` fichier et ajoutez-y le code suivant.

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


 ?>

Lorsque le téléchargement est cliqué, le nom du fichier temporaire sera stocké en mémoire et en utilisant le `while` boucle les données sont enregistrées dans $getData variable. Une fois le processus terminé, les données sont triées par colonne puis finalement insérées dans `info employé` table.

Notez que `fgetcsv()` analyse les lignes du fichier ouvert, vérifie les champs CSV et `fopen()` ouvre un fichier ou une URL. Ce code pourrait être testé en important un fichier CSV avec des données de test.

Afficher les enregistrements enregistrés

Une fois le fichier CSV importé, j'afficherai les données via une fonction simple, `get_all_records()`, initialisé dans `index.php`. Copiez cette fonction dans `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";
}
}

Dans cette méthode très simple, j'ai simplement sélectionné tous les enregistrements et affiché ces enregistrements sur la page d'index via la méthode. Chaque fois que l'utilisateur télécharge un fichier CSV, les enregistrements sont enregistrés dans le tableau, puis affichés sur la page d'index.

Exporter MySQL vers CSV avec PHP

L'exportation de données de la base de données MySQL vers un fichier CSV est également très simple. Pour le démontrer, je vais utiliser le index.php que j'ai créé plus tôt.

Ajoutez le code suivant au fichier.

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

Après avoir ajouté ce balisage HTML, le bouton Exporter  apparaîtra sous le tableau. Ajoutez maintenant la condition suivante dans 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);  
 }  

Lorsque l'option `Exporter`  est cliqué, les en-têtes `Content-Type :text/csv` avec une pièce jointe `data.csv` est envoyé.

Depuis `php://output` est un flux en écriture seule qui permet l'accès en écriture au mécanisme de tampon de sortie, j'ai sélectionné toutes les données de la table dans la ligne suivante et je les ai transmises à `fputcsv()`  méthode. Cette méthode formate une ligne (transmise en tant que tableau de champs) en CSV et l'écrit (terminée par une nouvelle ligne) dans le fichier spécifié. Enfin, le fichier avec toutes les données souhaitées est téléchargé.

Enfin, après avoir intégré tout le code, vous verrez la forme finale suivante de l'application.

Vous pourriez également aimer : CRUD simple en PHP et MySQL

Conclusion

Dans cet article, j'ai expliqué comment exporter des données depuis et vers des fichiers CSV à l'aide de PHP et MySQL. Ceci est un exemple simple que vous pouvez ajouter une logique et des validations plus complexes selon vos besoins. Vous pouvez également créer des cas de test pour vérifier le code et l'intégrer avec GitHub à l'aide des outils d'intégration continue PHP. Si vous souhaitez ajouter à la discussion ou si vous souhaitez poser une question, laissez un commentaire ci-dessous.

Questions fréquemment posées

Comment puis-je importer et exporter des fichiers CSV à l'aide de PHP et MySQL ?

  • Approuver l'enregistrement soumis, qu'il s'agisse d'un fichier CSV substantiel
  • Inspectez l'état du transfert de fichiers CSV à l'aide de la fonction PHP is_uploaded_file().
  • Accéder au fichier CSV à l'aide de la fonction PHP fopen().
  • Analyser les données de l'enregistrement CSV à l'aide de la fonction PHP fgetcsv().
  • Insérer ou mettre à jour des données dans la base de données en fonction de l'e-mail du membre.