Popular tabela MySql com arquivo texto e código PHP

Apesar de ser muito mais simples popular uma tabela MySql através do PhpMyAdmin, muitas vezes utilizo popular tabelas através de código em uma página php.leia mais

Para fazer isso obviamente precisamos ter uma arquivo texto com os dados a serem inseridos na tabela. Este arquivo pode ser texto comum ou csv. Na verdade você precisa definir uma tabulação, que pode ser retorno de carro/ pular linha, ou ponto e virgula “;”.

O script php vai abrir este arquivo ler e separar os campos de acordo com sua tabulação e inserir na tabelas estes dados.

Vamos dar um exemplo da como isso funciona começando por criar uma tabela no MySql. Você pode usar o PhpMyAdmin para ou criar a tabela via linha de comando no  MySql, seguindo o procedimento abaixo:

CREATE TABLE  cadastro (idtbcadastro int(11) auto_increment, nome varchar(60) default NULL, email varchar(60) default NULL, idade int(2) default ‘0′, PRIMARY KEY (idtbcadastro));

Agora vamos ver como seria o arquivo texto com os dados que vamos inserir na tabela:

Arquivo dados.txt

Roberto Carlos

robertocarlos@futebol.com.br

40

Ronaldo Fenomeno

ronaldo@futebol.com.br

30

Airton Sena

airton@formula.com.br

30

Como funciona este arquivo texto:

Em nosso exemplo para cada campo da tabela, menos o idtbcadastro que é “auto-increment” ou seja o dado e adicionado automaticamente, existe uma linha no arquivo texto com o dado daquele campo. Portanto o script le a primeira linha e coloca no primeiro campo da tabela, le a segunda linha e coloca no segundo campo da tabela, le a terceira linha e coloca no terceiro campo da tabela.

Lembre-se que o primeiro campo é o nome não o idtbcadastro que é adicionado automaticamente pelo MySql.

É muito importante que este arquivo texto tenha os dados na ordem certa para que um dados não seja inserido em campo errado, o que muitas vezes causa erro fatal ao sistema. Caso algum dado esteja faltando deve-se colocar pelo menos um caracter que pode ser espaço, para que exista a linha e não apenas o caracter de retorno de carro “Enter”.

No caso de usar um arquivo “CSV”, que podemos extrair de uma tabela de Excel, o arquivo virá tabulado por “;”. Cada campo separado por ponto e virgula. Portanto o script tem que pegar cada linha do arquivo csv, desmembrar os dados separdos por ponto e virgula e colocar na ordem em que se encontram na tabela MySql.

Vamos ver então como é o script que vai fazer este “servicinho” para nós. Em primeiro lugar com arquivo texto comum, ou seja cada dado em uma linha.

Primeiro devemos indicar aonde esta o arquivo texto, ou csv, exemplo:

$path = “http://www.meusite.com.br/arquivo_de_dados.txt”;

// Criando o arquivo com permissão de leitura apenas. Não vamos precisar escrever nele.

$arq = fopen($path, “r”);

// enquanto não chegar ao fim

while (!feof ($arq)) {

// pega cada linha e insere na array “$linhas”

$linhas[ ] = fgets($arq, 4096);

}
fclose ($arq);

O código de inserção de dados:

// Verifica o tamanho da array

$tam = count($linhas)-1;

// o laço

$u = 0;

for($i = 0; $i < $tam; $i++)

{

mysql_query(”INSERT INTO cadastro ( nome, email, idade ) VALUES ( ‘$linhas[$u]‘, ‘$linhas[$u+1]‘, ‘$linhas[$u+2]‘ “);

// o apontador de indice é adiconado em 3 para inserir os próximos dados

$u += 3;

}

Agora vamos ver como é isso com arquivo “CSV”.

$arq = fopen($path, “r”);

// enquanto não chegar ao fim

while (!feof ($arq)) {

// pega cada linha e insere na array “$linhas”

$linhas[ ] = fgets($arq, 4096);

}
fclose ($arq);

Esta parte ai de cima é igual. O script pega cada linha do arquivo e coloca na array. Agora pecisamos desdobrar as linhas fazendo assim:

// aqui utilizei o foreach para o laço

foreach($linhas as $dados)

{

// aqui desmembramos cada linha do arquivo csv, separado por ponto e virgula.

$ar_dados = explode(”;”, $dados);

// aqui inserimos os dados. Lembre-se que em array o primeiro indice é “0″ zero.

mysql_query(”INSERT INTO cadastro ( nome, email, idade ) VALUES ( ‘$ar_dados[0]‘, ‘$ar_dados[1]‘, ‘$ar_dados[2]‘ “);

}

Script PHP

If you enjoyed this post, please consider to leave a comment or subscribe to the feed and get future articles delivered to your feed reader.

Leave Comment

(required)

(required)