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:

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

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

WALLACE SANTOS RAIMUNDO
15 de Fevereiro de 2016 - 21:41

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

Mauro Garcia
21 de Janeiro de 2016 - 11:54

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

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

Mauricio Programador
Olá Welleson,
Vou criar um post com este tema.
Abraço.
25 de Janeiro de 2016 - 14:53

Guilherme
28 de Agosto de 2015 - 11:27

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

Kaio
Muito obrigado, me ajudou muito.
13 de Agosto de 2015 - 09:27

Alexandre Ramos
11 de Agosto de 2015 - 20:49

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

Ricardo
05 de Agosto de 2015 - 21:18

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

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

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

Max Basilio
27 de Julho de 2015 - 15:41

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

Leandro
16 de Julho de 2015 - 15:08

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

clayton
23 de Maio de 2015 - 09:41

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

Rodolfo
16 de Maio de 2015 - 18:24

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

Fabio Reche
15 de Maio de 2015 - 16:53

Morales Lima
14 de Maio de 2015 - 22:55

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

Débora Gonçalves
30 de Março de 2015 - 08:21

Mauricio Programador
Olá Débora,
sim, basta usar o campo FILE do HTML.
Abraço.
31 de Março de 2015 - 10:10

Renan
23 de Fevereiro de 2015 - 14:12

Mauricio Programador
Olá Renan,
obrigado e fico feliz em ajudar.
grande abraço.
24 de Fevereiro de 2015 - 09:54

Renato Monfredo
20 de Fevereiro de 2015 - 16:13

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

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

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

Naldo
13 de Fevereiro de 2015 - 00:26

Brecha Virtual
22 de Janeiro de 2015 - 16:12

Fernando
19 de Dezembro de 2014 - 23:26

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

Felipe
05 de Dezembro de 2014 - 14:18

Mauricio Programador
Olá Felipe,
tens toda razão, já alterei.
Obrigado.
08 de Dezembro de 2014 - 09:26

Félix
24 de Novembro de 2014 - 22:36

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

Talyta
20 de Outubro de 2014 - 15:49

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

Renato
15 de Outubro de 2014 - 14:16

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

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

Mauricio Programador
Renato,
Manda para o meu e-mails os seus arquivos para eu ver.
Abraço.
20 de Outubro de 2014 - 10:39

ALEXANDER FERDINANDO
11 de Setembro de 2014 - 18:17

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

Lucas de Oliveira
07 de Setembro de 2014 - 15:24

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

Ivomar Santos
02 de Setembro de 2014 - 11:04

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

AIRTON
21 de Agosto de 2014 - 12:11

Everton
05 de Agosto de 2014 - 15:43

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

Wandreus
19 de Maio de 2014 - 08:26

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

vieira
Deu um erro no $dados
04 de Maio de 2014 - 23:23

Mauricio Programador
Olá Vieira,
qual erro? Seu arquivo de conexão esta certinho?
Fico no aguardo.
05 de Maio de 2014 - 09:03

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

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

Mauricio Programador
Olá Vieira,
coloca todo o seu script para eu poder analisar.
Abraço.
14 de Maio de 2014 - 12:52

Paulo
26 de Março de 2014 - 16:16

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

Adelor da Silva
14 de Março de 2014 - 14:39

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