Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como importar e exportar arquivos CSV usando PHP e MySQL


O PHP é amplamente usado para criar uma ampla variedade de produtos, desde aplicativos da Web até aplicativos de nível empresarial. A chave para um código PHP eficiente é seguir fluxos de trabalho adequados e automatizar processos. O resultado é um código de alta qualidade e livre de bugs.

Em quase todos os aplicativos PHP, os dados são armazenados, acessados ​​e trocados entre vários componentes do aplicativo. Para garantir que essa troca e acesso aos dados ocorra sem problemas e sem problemas, a equipe de desenvolvimento deve garantir que os bancos de dados e os dumps de dados estejam no formato adequado.



Importar e exportar dados de e para bancos de dados é um procedimento bastante comum no desenvolvimento PHP. Outra atividade importante é o backup e transferência de bancos de dados.

Neste artigo, explicarei como salvar tabelas de arquivos CSV no MySQL e vice-versa. Você precisa se inscrever no Cloudways para iniciar um servidor e um aplicativo PHPstack. Antes de se inscrever, olhar para todas as opções de preços dos provedores de hospedagem de classe mundial como AWS, DigitalOcean, Linode, Vultr e GCP é uma boa ideia para que você possa encontrar aquele que se adapta perfeitamente às suas necessidades.

Hospedagem PHP:Melhor Hospedagem na Web PHP 7 e PHP 5.6

Criar um banco de dados no MySQL


A primeira etapa neste tutorial é a criação de um banco de dados MySQL. Como o Cloudways fornece o gerenciador mysql personalizado na plataforma que contém um banco de dados para app. você pode criar tabelas executando consultas SQL. Crie uma tabela `employeeinfo` no banco de dados usando a seguinte consulta 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)
)



Isso criará uma nova tabela `employeeinfo` no banco de dados. Vou usar esta tabela para inserir dados do arquivo CSV.

Pare de perder tempo com servidores


A Cloudways cuida do gerenciamento de servidores para você, para que você possa se concentrar na criação de ótimos aplicativos e manter seus clientes satisfeitos.
Comece grátis

Criar conexão MySQL em PHP


Para importar e exportar banco de dados no MySql, será criado um arquivo separado `config.php`. Adicione o código a seguir e substitua as credenciais do banco de dados pelas suas. Você pode encontrar suas credenciais de banco de dados em detalhes de acesso ao aplicativo:


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

Relacionado: Como conectar o banco de dados MySQL com sites PHP

Importar CSV para MySQL em PHP


Após a criação do banco de dados, preciso de um arquivo HTML  que possa fazer upload do arquivo CSV. Para este arquivo HTML, usarei o uploader de arquivo HTML em um formulário de inicialização simples.

Crie um arquivo e nomeie-o como `index.php`  . Este é um formulário simples para fazer upload de arquivo CSV. Este arquivo também mostrará os resultados em uma tabela simples na mesma página. Quando o usuário enviar o formulário, todos os registros serão salvos no banco de dados.

Primeiro, adicionarei Bootstrap CDN ao 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>

Em seguida, no `corpo`  adicione o seguinte código HTML para o formulário 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>



Você pode notar que eu configurei uma ação para `functions.php` Arquivo. Na próxima etapa, criarei esse arquivo e adicionarei código a ele. Eu também incluí um método `get_all_records()` perto do final do arquivo. Este método busca todos os registros do banco de dados e exibe os registros na tabela na página de índice.

Em seguida, criarei `functions.php` arquivo e adicione o seguinte código nele.
<?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 o carregar botão for clicado, o nome do arquivo temporário será armazenado na memória e usando o botão `enquanto` loop os dados são salvos em $getData variável. Uma vez que o processo tenha sido concluído, os dados são classificados em colunas e, finalmente, inseridos no `employeeinfo` tabela.

Observe que `fgetcsv()` analisa as linhas do arquivo aberto, verificando os campos CSV e `fopen()` abre um arquivo ou um URL. Esse código pode ser testado importando um arquivo CSV com dados de teste.

Exibir os registros salvos


Depois que o arquivo CSV for importado, exibirei os dados por meio de uma função simples, `get_all_records()`, inicializado em `index.php`. Copie esta função para `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";
}
}

Nesse método realmente simples, eu simplesmente selecionei todos os registros e exibi esses registros na página de índice por meio do método. Sempre que o usuário fizer upload de um arquivo CSV, os registros serão salvos na tabela e exibidos na página de índice.

Exportar MySQL para CSV com PHP


Exportar dados do banco de dados MySQL para um arquivo CSV também é muito fácil. Para demonstrar isso, usarei o index.php que criei anteriormente.

Adicione o seguinte código ao arquivo.
 <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>

Depois de adicionar essa marcação HTML, o Exportar  botão aparecerá abaixo da tabela. Agora adicione a seguinte condição em 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 o `Exportar`  botão for clicado, os cabeçalhos `Content-Type:text/csv` com um anexo `data.csv` é enviado.

Desde `php://output` é um fluxo somente gravação que permite acesso de gravação ao mecanismo de buffer de saída, selecionei todos os dados da tabela na próxima linha e passei para `fputcsv()`  método. Este método formata uma linha (passada como uma matriz de campos) como CSV e a grava (terminada por uma nova linha) no arquivo especificado. Finalmente, o arquivo com todos os dados desejados é baixado.

Por fim, após integrar todo o código, você verá a seguinte forma final de aplicação.


Você também pode gostar de: CRUD simples em PHP e MySQL

Conclusão


Neste artigo, discuti como você pode exportar dados de e para arquivos CSV usando PHP e MySQL. Este é um exemplo simples que você pode adicionar lógica e validações mais complexas de acordo com seus requisitos. Você também pode criar casos de teste para verificar o código e integrar com o GitHub usando as ferramentas de integração contínua do PHP. Se você deseja adicionar à discussão ou gostaria de fazer uma pergunta, deixe um comentário abaixo.
perguntas frequentes

Como importo e exporto CSV usando php e MySQL?

  • Aprove o registro enviado, seja um arquivo CSV substancial.
  • Inspecione o status da transferência do arquivo CSV usando a função is_uploaded_file() do PHP.
  • Acesse o arquivo CSV utilizando a função PHP fopen().
  • Analisar dados do registro CSV utilizando a função PHP fgetcsv().
  • Inserir ou atualizar dados no banco de dados com base no e-mail do membro.