Mysql
 sql >> Database >  >> RDS >> Mysql

Come importare ed esportare file CSV utilizzando PHP e MySQL

PHP è ampiamente utilizzato per creare un'ampia gamma di prodotti che vanno dalle app Web alle applicazioni di livello aziendale. La chiave per un codice PHP efficiente è seguire flussi di lavoro adeguati e automatizzare i processi. Il risultato è un codice di alta qualità e privo di bug.

In quasi tutte le applicazioni PHP, i dati vengono archiviati, consultati e scambiati tra i vari componenti dell'app. Per assicurarsi che questo scambio e accesso ai dati avvenga senza intoppi e senza problemi, il team di sviluppo deve assicurarsi che i database e i dump dei dati siano nel formato corretto.

L'importazione e l'esportazione di dati da e verso i database è una procedura abbastanza comune nello sviluppo di PHP. Un'altra attività importante è il backup e il trasferimento di database.

In questo articolo spiegherò come salvare tabelle da file CSV su MySQL e viceversa. Devi registrarti su Cloudways per avviare un server e un'applicazione PHPstack. Prima di registrarti, esaminare tutte le opzioni di prezzo dei provider di hosting di livello mondiale come AWS, DigitalOcean, Linode, Vultr e GCP è una buona idea in modo da poter trovare quella che si adatta perfettamente alle tue esigenze.

Hosting PHP:il miglior hosting Web PHP 7 e PHP 5.6

Crea un database in MySQL

Il primo passo in questo tutorial è la creazione di un database MySQL. Poiché Cloudways fornisce il gestore mysql personalizzato nella piattaforma che contiene un database per l'app. puoi creare tabelle eseguendo query SQL. Crea una tabella `employeeinfo` nel database utilizzando la seguente query 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)
)

Questo creerà una nuova tabella `employeeinfo` nella banca dati. Userò questa tabella per inserire i dati dal file CSV.


Smetti di perdere tempo con i server

Cloudways gestisce per te la gestione dei server in modo che tu possa concentrarti sulla creazione di fantastiche app e sulla soddisfazione dei tuoi clienti.

Inizia gratis

Crea connessione MySql in PHP

Per l'importazione e l'esportazione del database in MySql creerà un file separato `config.php`. Aggiungi il codice seguente e sostituisci le credenziali del database con le tue. Puoi trovare le tue credenziali db in Dettagli di accesso all'applicazione:

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

Correlato: Come collegare il database MySQL ai siti Web PHP

Importa CSV su MySQL in PHP

Dopo che il database è stato creato, ho bisogno di un file HTML che possa caricare un file CSV. Per questo file HTML, utilizzerò l'uploader di file HTML in un semplice modulo bootstrap.

Crea un file e chiamalo `index.php`  . Questo è un semplice modulo per caricare file CSV. Questo file mostrerà anche i risultati in una semplice tabella nella stessa pagina. Quando l'utente invia il modulo, tutti i record verranno salvati nel database.

Innanzitutto, aggiungerò Bootstrap CDN a 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>

Successivamente, nel `corpo` tag,  aggiungi il seguente codice HTML per il modulo 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>

Potresti notare che ho impostato un'azione su `functions.php` file. Nel passaggio successivo, creerò questo file e aggiungerò codice ad esso. Ho anche incluso un metodo `get_all_records()` verso la fine del file. Questo metodo recupera tutti i record dal database e visualizza i record nella tabella nella pagina dell'indice.

Successivamente, creerò `functions.php` file e aggiungi il seguente codice al suo interno.

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


 ?>

Quando il caricamento viene fatto clic sul pulsante, il nome del file temporaneo verrà archiviato in memoria e utilizzando il `mentre` loop i dati vengono salvati in $getData variabile. Una volta completato il processo, i dati vengono ordinati per colonna e infine inseriti nella `employeeinfo` tavolo.

Nota che `fgetcsv()` analizza le righe dal file aperto, controllando i campi CSV e `fopen()` apre un file o un URL. Questo codice può essere testato importando un file CSV con dati di prova.

Visualizza i record salvati

Una volta importato il file CSV, visualizzerò i dati tramite una semplice funzione, `get_all_records()`, inizializzato in `index.php`. Copia questa funzione in `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";
}
}

In questo metodo davvero semplice, ho semplicemente selezionato tutti i record e visualizzato questi record nella pagina dell'indice attraverso il metodo. Ogni volta che l'utente carica un file CSV, i record verranno salvati nella tabella e quindi visualizzati nella pagina dell'indice.

Esporta MySQL in CSV con PHP

Allo stesso modo, l'esportazione dei dati dal database  MySQL a un file CSV è molto semplice. Per dimostrarlo, userò index.php che ho creato in precedenza.

Aggiungi il codice seguente al file.

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

Dopo aver aggiunto questo markup HTML, Esporta  il pulsante apparirà sotto la tabella. Ora aggiungi la seguente condizione 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);  
 }  

Quando l'opzione `Esporta`  si fa clic sul pulsante, le intestazioni `Tipo di contenuto:testo/csv` con un allegato `data.csv` è inviato.

Da `php://output` è un flusso di sola scrittura che consente l'accesso in scrittura al meccanismo del buffer di output, ho selezionato tutti i dati dalla tabella nella riga successiva e li ho passati a `fputcsv()`  metodo. Questo metodo formatta una riga (passata come array di campi) come CSV e la scrive (terminata da una nuova riga) nel file specificato. Infine viene scaricato il file con tutti i dati desiderati.

Infine, dopo aver integrato tutto il codice, vedrai la seguente forma finale di applicazione.

Ti potrebbe piacere anche: Semplice CRUD in PHP e MySQL

Conclusione

In questo articolo, ho discusso di come esportare dati da e verso file CSV utilizzando PHP e MySQL. Questo è un semplice esempio in cui puoi aggiungere logiche e convalide più complesse secondo le tue esigenze. Puoi anche creare casi di test per verificare il codice e integrare con GitHub utilizzando gli strumenti di integrazione continua PHP. Se desideri aggiungere alla discussione o porre una domanda, lascia un commento qui sotto.

Domande frequenti

Come faccio a importare ed esportare CSV utilizzando php e MySQL?

  • Approva il record inviato, sia esso un file CSV sostanziale.
  • Ispeziona lo stato di trasferimento del file CSV utilizzando la funzione PHP is_uploaded_file().
  • Accedi al file CSV utilizzando la funzione PHP fopen().
  • Analizza i dati dal record CSV utilizzando la funzione PHP fgetcsv().
  • Inserisci o aggiorna i dati nel database in base all'e-mail del membro.