Atualizado em 10 de Janeiro de 2014

Importando Dados do Excel para MySQL com PHP

Olá pessoal,

Como prometido no post anterior (Exportando Dados do MySQL para Excel com PHP) vamos ver como fazer o processo inverso de importar os dados do Excel para MySQL com PHP.

O primeiro procedimento que devemos fazer e salvar o arquivo do Excel no formato CSV (separado por vírgulas) (*.csv), como mostra a imagem abaixo:

Importando Dados do Excel para MySQL com PHP

É necessário fazer este procedimento para que o PHP leia as informações do arquivo para salvar os dados no Banco de Dados.

Depois basta usar o script abaixo:

<?php
// inclui a conexão
include_once('conexao.php');

// Abre o Arquvio no Modo r (para leitura)
$arquivo = fopen ('dados_emails.csv', 'r');

// Lê o conteúdo do arquivo
while(!feof($arquivo))
 {
  // Pega os dados da linha
  $linha = fgets($arquivo, 1024);

  // Divide as Informações das celular para poder salvar
  $dados = explode(';', $linha);

  // Verifica se o Dados Não é o cabeçalho ou não esta em branco
  if($dados[0] != 'Nome' && !empty($linha))
  {
   mysql_query('INSERT INTO emails (nome, email) VALUES ("'.$dados[0].'", "'.$dados[1].'")');
  }
 }

// Fecha arquivo aberto
 fclose($arquivo);
?>

A imagem abaixo mostra como ficou o banco de dados após a execução do mesmo:

Banco de Dados após execução do script


Curta a nossa página



E isso aí pessoal, até a próxima.


ATENÇÃO! Quer aprender a Linguagem mais usada pelos programadores na Web Passo a passo por apenas R$99,00??? Faça agora a sua matrícula no Curso de PHP Básico. Saiba mais

Comentários

Sua foto do perfil

WALLACE SANTOS RAIMUNDO

15 de Fevereiro de 2016 - 21:41

Sua foto do perfil

Mauricio Programador

Olá Wallace,

Ele vai repetir o loop ate o final da planilha, se você criar uma planilha grande ele irá fazer um loop maior.

Veja se o seu código esta igual, pois eu testei aqui novamente e esta tudo ok.

Abraço.

19 de Fevereiro de 2016 - 15:00

Sua foto do perfil

Mauro Garcia

21 de Janeiro de 2016 - 11:54

Sua foto do perfil

Mauricio Programador

Olá Mauro,

não sei de nenhuma extensão que você possa usar com o xlxs.

Abraço.

25 de Janeiro de 2016 - 14:56

Sua foto do perfil

welleson

parabens mauricio, obrigado por ajudar.
poderia mostrar como armazenar arquivos como o pdf jpg no banco, desde ja obrigado

20 de Janeiro de 2016 - 11:12

Sua foto do perfil

Mauricio Programador

Olá Welleson,

Vou criar um post com este tema.

Abraço.

25 de Janeiro de 2016 - 14:53

Sua foto do perfil

Guilherme

28 de Agosto de 2015 - 11:27

Sua foto do perfil

Mauricio Programador

Olá Guilherme,

Claro, mas sabendo os nomes das colunas basta criar um IF ou Switch para pegar a coluna que desejar.

Mas posta ai a sua dúvida.

Abraço.

04 de Setembro de 2015 - 11:01

Sua foto do perfil

Kaio

Muito obrigado, me ajudou muito.

13 de Agosto de 2015 - 09:27

Sua foto do perfil

Alexandre Ramos

11 de Agosto de 2015 - 20:49

Sua foto do perfil

Mauricio Programador

Olá Alexandre,

O erro que esta apresentando é no SQL do banco de dados e como não tenho o banco de dados que você esta usando e nem os arquivos não tenho muito como ajudar.

Mas faz o seguinte teste de um echo ou print no seu SQL que esta mandando para a função mysql_query e pegue a string que ele vai lhe mostrar e coloque no seu administrador do banco de dados, seja ele phpMyAdmin ou o que estiver usando então ele vai me lhe mostrar uma mensagem de erro que vai facilitar para ajustar o erro.

Abraço

17 de Agosto de 2015 - 10:25

Sua foto do perfil

Ricardo

05 de Agosto de 2015 - 21:18

Sua foto do perfil

Mauricio Programador

Olá Ricardo,

Obrigado.

Basta fazer o um formulário de upload. O formulário precisa estar com a propriedade enctype="multipart/form-data" ativa.

E dentro do formulário você usa um campo do tipo FILE.

Com isso você vai conseguir enviar o arquivo, e depois no lugar do nome do arquivo que mostra no script assim, basta usar: $_FILES['file']['tmp_name'].

Espero que ajude.

Abraço.

10 de Agosto de 2015 - 10:09

Sua foto do perfil

Ricardo

Boa noite.

Cara desculpa minha ignorância mas sou novo na linguagem e fiz a seguinte pergunta "Primeiro queria dar os parabéns pelo post, estou fazendo um sistema que necessita importar dados do Excel, o usuário iria selecionar o arquivo e importar. Como ficaria este comando para o usuário selecionar e importar este arquivo?"
Não entendi direto sua resposta "Com isso você vai conseguir enviar o arquivo, e depois no lugar do nome do arquivo que mostra no script assim, basta usar: $_FILES['file']['tmp_name']." Se possível você poderia me explicar melhor. Obrigado pela atenção.

14 de Agosto de 2015 - 09:31

Sua foto do perfil

Mauricio Programador

Ricardo,

Aqui no comentário não teria como eu colocar todo o código para você fazer esta ação, mas vou colocar o passo a passo que você deve fazer para realizar esta operação.

1) Criar um formulário com o campo do tipo FILE, que é o campo onde o usuário pode selecionar arquivos para enviar. (Que no seu caso vai ser enviado o arquivo CVS).

2) Depois quando enviar o arquivo pelo formulário ele tem que executar o código deste post e a única alteração que vai ter que fazer no código acima seria trocar a linha:

$arquivo = fopen ('dados_emails.csv', 'r');

por:

$arquivo = fopen ($_FILES['file']['tmp_name'], 'r');

So não esqueça de colocar nas propriedade do seu formulário o parâmetro enctype="multipart/form-data"

Abraço.

14 de Agosto de 2015 - 09:32

Sua foto do perfil

Max Basilio

27 de Julho de 2015 - 15:41

Sua foto do perfil

Mauricio Programador

Olá Max,

Se o seu banco de dados MySQL esta com o campo da Data com o tipo DATE o formato que ele espera receber é ANO-MÊS-DIA (2004-12-01).

Então quando você pegar esta informação do Excel vai ter que converter ela para ficar neste formato e assim poder salvar no banco de dados.

Abraço.

31 de Julho de 2015 - 16:54

Sua foto do perfil

Leandro

16 de Julho de 2015 - 15:08

Sua foto do perfil

Mauricio Programador

Olá Leandro,

na verdade ali e apenas uma imagem do phpMyAdmin, e a construção da tabela e bem simples tem apenas três campos.

Você fico com dúvida em algo ali?

Abraço.

20 de Julho de 2015 - 09:59

Sua foto do perfil

clayton

23 de Maio de 2015 - 09:41

Sua foto do perfil

Mauricio Programador

Olá Clayton,

Geralmente este tipo de situação não e comum, pois quando fizemos a importação de dados entre arquivos e criado um padrão para que seja realizada a operação sem ter erros.

Mas se você precisar muito fazer isso você terá que fazer validações dentro do seu código.

Por exemplo:

Verifique se o conteúdo da coluna 2 é um email (Validar Email PHP), se for ele salva na campo email, se não for salva no campos telefone.

Para isso basta criar uma variável $sql por exemplo e no if que verifica se e email coloca se ele deve salvar no campo de email ou no campo de telefone.

Qualquer coisa retorne.

Abraço.

25 de Maio de 2015 - 09:50

Sua foto do perfil

Rodolfo

16 de Maio de 2015 - 18:24

Sua foto do perfil

Mauricio Programador

Olá Rodolfo,

basta usar a função str_replace que vai resolver o problema.

Abraço.

18 de Maio de 2015 - 09:00

Sua foto do perfil

Fabio Reche

15 de Maio de 2015 - 16:53

Sua foto do perfil

Morales Lima

14 de Maio de 2015 - 22:55

Sua foto do perfil

Mauricio Programador

Olá Morales,

Obrigado.

Na verdade o seu erro é em seu banco de dados. Ele esta informando que você não tem nenhum campos de referencia para poder fazer as operações citadas.

Verifique o seu banco de dados.

Abraço.

18 de Maio de 2015 - 08:56

Sua foto do perfil

Débora Gonçalves

30 de Março de 2015 - 08:21

Sua foto do perfil

Mauricio Programador

Olá Débora,

sim, basta usar o campo FILE do HTML.

Abraço.

31 de Março de 2015 - 10:10

Sua foto do perfil

Renan

23 de Fevereiro de 2015 - 14:12

Sua foto do perfil

Mauricio Programador

Olá Renan,

obrigado e fico feliz em ajudar.

grande abraço.

24 de Fevereiro de 2015 - 09:54

Sua foto do perfil

Renato Monfredo

20 de Fevereiro de 2015 - 16:13

Sua foto do perfil

Mauricio Programador

Olá Renato,

o seu código esta como acima? Sua conexão com o banco de dados esta funcionando?

Abraço.

23 de Fevereiro de 2015 - 09:36

Sua foto do perfil

Renato Monfredo

Olá Maurício, sim está tudo ok. Consegui importar os dados alterando o código, porém agora quando ele importa, a primeira linha da primeira coluna aparece com um código na frente do registro, ou seja, antes do primeiro registro ele insere a codificação .
Abaixo segue meu código se puder me dar uma ajuda, por favor:

// inclui a conexao
include_once('connection.php');

$handle = fopen('lista_parceiros.csv','r');
while (($data = fgetcsv($handle,1048576, ";"))!== FALSE) {
$sql = "INSERT INTO colaboradores_parceiros (coluna1, coluna2, coluna3, coluna4, coluna5, coluna6, coluna7, coluna8, coluna9, coluna10, coluna11, coluna12, coluna13, coluna14, coluna15) VALUES ('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]', '$data[6]','$data[7]','$data[8]','$data[9]','$data[10]','$data[11]', '$data[12]','$data[13]','$data[14]')";
mysql_query($sql)or die(mysql_error());
}
fclose($handle);

24 de Fevereiro de 2015 - 09:56

Sua foto do perfil

Mauricio Programador

Renato,

Talvez o erro agora seja apenas acentuação teste os comando utf8_encode, utf8_decode para ver se resolve.

Se não resolver poste ai.

Abraço.

24 de Fevereiro de 2015 - 09:57

Sua foto do perfil

Naldo

13 de Fevereiro de 2015 - 00:26

Sua foto do perfil

Brecha Virtual

22 de Janeiro de 2015 - 16:12

Sua foto do perfil

Fernando

19 de Dezembro de 2014 - 23:26

Sua foto do perfil

Mauricio Programador

Olá Fernando,

O que acontece e que o arquivo tem uma extensão diferente da extensão padrão do Excel, por isso ele emite esta mensagem.

Somente após salvar ele com a extensão normal do Excel a mensagem não aparecerá mais.

Abraço.

22 de Dezembro de 2014 - 08:54

Sua foto do perfil

Felipe

05 de Dezembro de 2014 - 14:18

Sua foto do perfil

Mauricio Programador

Olá Felipe,

tens toda razão, já alterei.

Obrigado.

08 de Dezembro de 2014 - 09:26

Sua foto do perfil

Félix

24 de Novembro de 2014 - 22:36

Sua foto do perfil

Mauricio Programador

Olá Félix,

Teria que ver qual e o erro, pois os servidores são configurados para que o script PHP rode dentro de um tempo, se ultrapassar este tempo ele da erro.

Se for este o caso, tente arrumar com a explicação do post abaixo.

Tempo de Execução do Script PHP

Abraço.

25 de Novembro de 2014 - 08:57

Sua foto do perfil

Talyta

20 de Outubro de 2014 - 15:49

Sua foto do perfil

Mauricio Programador

Olá Talyta,

Tirando o IF do comando acima, ele irá importar todos os dados que ele encontrar na planilha.

Abraço.

21 de Outubro de 2014 - 08:51

Sua foto do perfil

Renato

15 de Outubro de 2014 - 14:16

Sua foto do perfil

Mauricio Programador

Olá Renato,

Se ele não gera nenhum erro e nem insere os registros no banco de dados pode ser a linha abaixo:

if($dados[0] != 'Nome' && !empty($linha))

Ela verifica o cabeçalho e se esta vazio, então comenta este IF e testa só para ver se ele vai inserir, caso de certo você deve ver se o nome da coluna de sua planilha esta como indicado no IF.

Qualquer coisa comenta aí, abraço.

16 de Outubro de 2014 - 09:52

Sua foto do perfil

Renato

Olá, eu fiz conforme exemplo, porém roda meu php não dá retorno de nada, nem de erro nem que deu certo.

Pode me ajudar.

20 de Outubro de 2014 - 10:39

Sua foto do perfil

Mauricio Programador

Renato,

Manda para o meu e-mails os seus arquivos para eu ver.

Abraço.

20 de Outubro de 2014 - 10:39

Sua foto do perfil

ALEXANDER FERDINANDO

11 de Setembro de 2014 - 18:17

Sua foto do perfil

Mauricio Programador

Olá Alexander,

O sistema de comentários não aceita colocar o html todo da página, mas faz assim me envia os arquivo por email (contato[@]mauricioprogramador.com.br) que dou uma olhada para você.

So me diz qual foi o erro que deu ai.

Abraço.

12 de Setembro de 2014 - 09:59

Sua foto do perfil

Lucas de Oliveira

07 de Setembro de 2014 - 15:24

Sua foto do perfil

Mauricio Programador

Olá Lucas,

Não tem o que agradecer estamos aqui para ajudar ;)

O Problema deve estar no acento do "Código", pois em alguns casos ele não reconhece o acento ou não esta formatado.

Faça um teste de um echo na Variável $dados[0] e veja como esta vindo o texto, se tiver problema no acento só corrija que já irá funcionar.


Abraço.

08 de Setembro de 2014 - 10:41

Sua foto do perfil

Ivomar Santos

02 de Setembro de 2014 - 11:04

Sua foto do perfil

Mauricio Programador

Olá Ivomar,

Obrigado pela palavras.

Neste post abordei somente a Importação, mas para criar a Tabela o script seria:

CREATE TABLE IF NOT EXISTS `emails` (
`idemail` int(11) NOT NULL,
`nome` varchar(70) NOT NULL,
`email` varchar(150) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Abraço.

02 de Setembro de 2014 - 16:38

Sua foto do perfil

AIRTON

21 de Agosto de 2014 - 12:11

Sua foto do perfil

Everton

05 de Agosto de 2014 - 15:43

Sua foto do perfil

Mauricio Programador

Olá Everton,

Bom para fazer a substituição você terá que verificar se os dados já estão no banco de dados, se tiver ele atualiza, se não tiver ele insere.

Não entendi muito bem quanto as 120 colunas.

Abraço.

06 de Agosto de 2014 - 11:44

Sua foto do perfil

Wandreus

19 de Maio de 2014 - 08:26

Sua foto do perfil

Mauricio Programador

Olá Wandreus,

Este script ja tem um verificador (if($dados[0] != 'Nome'...) para não cadastrar quando o valor for vazio, porém se esta linha não esta funcionando tente mudar esta linha para:

if(($dados[0] != 'Nome') && ($linha != ''))

Se não adiantar, posta ai.

Abraço.

19 de Maio de 2014 - 10:15

Sua foto do perfil

vieira

Deu um erro no $dados

04 de Maio de 2014 - 23:23

Sua foto do perfil

Mauricio Programador

Olá Vieira,

qual erro? Seu arquivo de conexão esta certinho?

Fico no aguardo.

05 de Maio de 2014 - 09:03

Sua foto do perfil

VIEIRA

O erro foi esse aqui:
Parse error: syntax error, unexpected '$dados' (T_VARIABLE) in C:\wamp\www\BD_Santino\subir.php on line 17

obrigado

14 de Maio de 2014 - 12:48

Sua foto do perfil

VIEIRA

Na verdade esse erro T_STRING deu na query do sql. Não consigo resolver.

Se puder ajudar, agradeço muito.

14 de Maio de 2014 - 12:51

Sua foto do perfil

Mauricio Programador

Olá Vieira,

coloca todo o seu script para eu poder analisar.

Abraço.

14 de Maio de 2014 - 12:52

Sua foto do perfil

Paulo

26 de Março de 2014 - 16:16

Sua foto do perfil

Mauricio Programador

Olá Paulo,

de uma olhada para ver se e isso que você precisa.

Exportando Dados do MySQL para Excel com PHP

Abraço.

26 de Março de 2014 - 16:24

Sua foto do perfil

Adelor da Silva

14 de Março de 2014 - 14:39

Sua foto do perfil

Mauricio Programador

Olá Adelor,

este parâmetro e o que diz o comprimento máximo que o comando vai ler por linha do arquivo. Se nenhum comprimento for especificado, a leitura continuará até chegar ao final da linha.

E mais para otimizar o código quando sabemos + ou - o tamanho da linha.


Grande abraço.

14 de Março de 2014 - 15:30

NEWSLETTER

Receba dicas de programação
em seu e-mail

TWITTER

Acompanhe tudo o que rola
com Mauricio Programador

NEWSLETTER