Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alanartes

Erro no upload do csv

Recommended Posts

Estou tentando fazer um uploado de csv por php e estou com esse erro:

 

Column count doesn't match value count at row 1

 

o codigo está assim:

<?php 
$nome_temporario=$_FILES["arquivo"]["tmp_name"];
$nome_arquivo = "ARQUIVO.csv"; // qualquer que seja o nome enviado e renomeado
copy($nome_temporario,"arquivos/$nome_arquivo");

$abraArq = fopen("arquivos/ARQUIVO.csv", "r");
if (!$abraArq){
echo ("<p>Arquivo não encontrado</p>");
}else{
while ($valores = fgetcsv ($abraArq, 2048, ";")) {
$query_salva = "INSERT INTO novos_dados VALUES (NULL, '.$valores[1].')";
$salva = mysql_query($query_salva, $conexao) or die(mysql_error());
}}
fclose($abraArq);

unlink("arquivos/$nome_arquivo"); // depois de tudo apaga o CSV 
?>

No CSV está assim:

12,"teste","1","2","3","4","1","2","3","4","12","1","7","4","2015-09-04"

e a tabela é esta


CREATE TABLE IF NOT EXISTS `novos_dados` (
`contrato` int(11) NOT NULL AUTO_INCREMENT,
`Nome` varchar(50) DEFAULT '0',
`cnpj` varchar(50) DEFAULT '0',
`email` varchar(50) DEFAULT '0',
`codigo_area` varchar(2) NOT NULL,
`telefone_fixo` varchar(50) DEFAULT '0',
`telefone_cel` varchar(50) DEFAULT '0',
`endereco` text,
`cidade` varchar(100) NOT NULL,
`UF` int(2) NOT NULL,
`contato` varchar(50) DEFAULT '0',
`cargo` varchar(50) DEFAULT '0',
`operador` varchar(30) DEFAULT '0',
`status` int(3) NOT NULL,
`data` varchar(25) NOT NULL,
PRIMARY KEY (`contrato`)
)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode tentar carregar pelo banco com LOAD DATA INFILE.

 

Exemplo:

LOAD DATA LOCAL INFILE '{caminho completo do arquivo}' # Pode utilizar a função realhpath("arquivos/$nome_arquivo") do PHP
IGNORE
INTO TABLE novos_dados
FIELDS
  TERMINATED BY '\n'
  OPTIONALLY ENCLOSED BY '"'
  ESCAPED BY '\t'
IGNORE 1 LINES # caso exista um titulo no arquivo
    [(col_name_or_user_var,...)] # colunas ou variáveis (@exemplo_de_variavel_mysql) a armazenar os valores
    [SET col_name = expr,...] # Caso a data venha como string: SET `data` = STR_TO_DATE(@variavel_data, '%d/%m/%Y')

Função realpath() do PHP:

<?php

$caminho_real = realpath("arquivos/$nome_arquivo");

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alan, vou te passar um código que está funcionando.

Você pode fazer duas coisas:

- aproveitar o código e alterar a teu critério;

- comparar com o teu codigo;



<?php
// inclui a conexao
$banco = 'nomeDoBanco';
$host = 'localhost'; // host
$usuario = 'root'; // usuario
$senha = 'senha'; // senha

mysql_connect($host, $usuario, $senha);
mysql_select_db($banco);
//***********************************************************************************************************************


if (isset($_POST['submit'])) {

if (is_uploaded_file($_FILES['botaoUpload']['tmp_name'])) {

echo "<h1>" . "File ". $_FILES['botaoUpload']['name'] ." uploaded successfully." . "</h1>";

echo "<h2>Displaying contents:</h2>";

readfile($_FILES['botaoUpload']['tmp_name']);

}


// Abre o Arquvio no Modo r (para leitura)
$arquivo = fopen($_FILES['botaoUpload']['tmp_name'], "r");
//$arquivo = fopen ('arquivo_csv.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[1] != 'Nome' && !empty($linha))
{

mysql_query('INSERT tb_tabela(Campo1, Campo2, Campo3, Campo4) VALUES ("'.$dados[0].'", "'.$dados[1].'","'.$dados[2].'", "'.$dados[3].'")');
}
}
}
// Fecha arquivo aberto
fclose($arquivo);
?>

 

Abraço!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera, tudo certo?
       
      Seguinte: No servidor A estou tentando fazer uma consulta com o servidor B, mas está dando erro.
      Estou usando o mesmo código de conexão do servidor B que funciona perfeitamente, mas no servidor A, dá erro.
      Segue código:
       
      $host = 'servidor B';
      $user = 'user';
      $pass = '********';
      $db   = 'banco';
       
      // conexão e seleção do banco de dados
      $conexao = mysqlI_connect($host, $user, $pass, $db);
      mysqlI_set_charset($conexao,"utf8");
      //print "Conexão rodando e OK!"; 
      //mysqlI_close($conexao);
       
      Alguém pode me ajudar?
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.