Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Como faz para importar arquivos Excel para dentro de tabelas MYSQL já criadas?
:unsure:
Tentei fazer assim. Pego o Excel e gero um CSV. O script abaixo deveria fazer o upload do CSV pro servidor, abrí-lo, pegar os valores e INSERIR numa tabela MYSQL.
Entretanto o script está apenas fazendo o UPLOAD.
O que estou fazendo de errado?
ini_set("memory_limit", "2048M"); // Setando memória limite
set_time_limit(0); // Setando tempo limite
#### Upando o CSV para o servidor ############################################
$arquivo = $_FILES['arquivo'];
// Testamos se o campo está vazio
switch (empty($_FILES['arquivo']['name'])) {
case FALSE: // Se for FALSO, ou seja, tem um arquivo selecionado
// Tratamos o arquivo antes do upload
$config["tamanho"] = 2097200; // Define o tamanho máximo do arquivo (em bytes). 2097200 equivale a 2 MB
$extvalidas = array("csv","cbr"); // Define as extensões válidas
preg_match("/.(csv|cbr){1}$/i", $arquivo["name"], $ext); // Pega extensão do arquivo
if($arquivo){
// Verifica o peso
if($arquivo["size"] > $config["tamanho"]){
print "<script>alert('Arquivo muito pesado! O peso deve ser de no máximo 2 MB. Tente enviar outro arquivo.')</script>";
print "<script>window.location.replace('pagina.php')</script>";
exit();
}
// Verifica o mime-type
if(!in_array($ext[1],$extvalidas)){
print "<script>alert('Arquivo inválido! Serão aceitos apenas arquivos com extensão CSV.')</script>";
print "<script>window.location.replace('pagina.php')</script>";
exit();
}
$imagem_nome = trim($arquivo["name"]); // Gera um nome para o arquivo
$imagem_dir = "csv_eleitores/" . $imagem_nome; // Caminho onde o arquivo será guardado
move_uploaded_file($arquivo["tmp_name"] , $imagem_dir); // Efetua o upload
} //Fecha if($arquivo)
#### Conversão CSV para MYSQL ##############################################
// Estabelece Conexão a Base de Dados
mysql_connect("host do BD", "user", "pass");
// Seleciono a Tabela
mysql_select_db("tabela");
// Usando $abraArq para abrir arquivos com r ou seja como leitura
$abraArq = fopen($imagem_dir, "r"); // Só aceita CSV e tem que estar organizado direito
// Verifica se existe o arquivo
if (!$abraArq){
echo "<p>Arquivo não encontrado</p>";
}else{ // Caso contrário, prossegue
// Gera uma variável chamada $valores que vai conter os valores das colunas para serem inseridas.
while ($valores = fgetcsv($abraArq, 2048, ";")) {
// Insere na base de dados
$sql = "INSERT INTO TabelaUm (nome, email, cpf, unidade, departamento) VALUES ('".$valores[0]."', '".$valores[1]."', '".$valores[2]."', '".$valores[3]."', '".$valores[4]."', '".$valores[5]."')";
$consulta = mysql_query($sql);
}
}
// Fecho o arquivo
fclose($abraArq);
// Sinalizo o final do processo
print "<script>alert('Informações enviadas com sucesso!')</script>";
print "<script>window.location.replace('pagina.php')</script>";
break;
case TRUE: // Se for VERDADEIRO, ou seja, NÃO tem um arquivo selecionado
print "<script>alert('Não há um arquivo selecionado!')</script>";
print "<script>window.location.replace('pagina.php')</script>";
break;
}Ta dando algum erro?
Não ta enviando?
Tenta debugar o código, mostrando todos os erros.
Não tá aparencendo erro nenhum. Ele dá como concluído, o arquivo tá no servidor, mas colunas não são inseridas no MYSQL.
dá uma lida ae :
http://imasters.com.br/artigo/12775/ph...om_php_e_mysql/
(coloca longblob ao invés de meddium como está no tuto)
[]'s
Eu acho que eu não fui bem claro... eu quero enviar o CSV para o servidor, abrir ele e copiar apenas seu conteudo para o MYSQL.
Acrescentei isso
// Define a permissão para utilizar a função
ini_set("allow_url_fopen", 1); //função habilitada
ini_set("allow_url_include", 1); //função habilitada
Mas tb não funcionou. Nada de importar os valores pro BD.
Pega o conteudo do arquivo com file_get_contents(), joga num campo do MySQL (bem grande, tipo LONG TEXT) e depois recria o arquivo, usando file_put_contents().