Ir para conteúdo
Fórum Script Brasil
  • 0

Inserção de varios registos de um txt na BD


ShadowRider

Pergunta

Ola pessoal.
Preciso de uma função que insira todos os registos de um ficheiro .txt em 2 tabelas da base de dados.
Já consegui fazer a inserção nas tabelas, mas com alguns erros. se puser so um registo no txt, a função insere correctamente em todos os campos das tabelas, mas se meter mais que um registo, já fica mal inserido, ficando alguns registos dentro dos mesmos campos. Tenho o seguinte código.
 

$arquivo=('registos.txt');

if(file_exists($arquivo)){
	$fp=fopen($arquivo,'r');
	$conteudo = fread($fp,filesize($arquivo));
	$separador = ","; // O que separa os resultados no arquivos TXT ?
	$array = explode($separador, $conteudo);
	$conta = count($array);
	
	
	for ($i=0; $i <= $conta; $i++) {
		$sql = "INSERT INTO nota_e (ref_reg, modelo, cor, tamanho, quant ,num_cli, cliente, colarinho, etiq_reg) VALUES ('" . $array[$i] . "', '" . @$array[$i + 1] . "', '" . @$array[$i + 2] . "', '" . @$array[$i + 3] . "', '" . @$array[$i + 4] . "', '" . @$array[$i + 5] . "', '" . @$array[$i + 6] . "', '" . @$array[$i + 7] . "', '" . @$array[$i + 8] . "')";
		$resultado = mysqli_query($link,$sql);
		$i = $i + 9;
		}
		for ($i=0; $i <= $conta; $i++) {
		$sql1 = "INSERT INTO nota_p (ref_num, mod_num, cor_num, tam_num, quant_num ) values('" . $array[$i] . "','" . @$array[$i + 1] . "','" . @$array[$i + 2] . "','" . @$array[$i + 3] . "','" . @$array[$i + 4] . "')";
		$resultado1 = mysqli_query($link,$sql1);
		$i = $i + 5;
		}
		if($resultado && $resultado1){
			//for ($i=0; $i < $conta; $i++) {
			//$sql1 = "INSERT INTO nota_p (ref_num, mod_num, cor_num, tam_num, quant_num ) values('" . $array[$i] . "','" . @$array[$i + 1] . "','" . @$array[$i + 2] . "','" . @$array[$i + 3] . "','" . @$array[$i + 4] . "')";
			//$resultado1 = mysqli_query($link,$sql1);
			print "Dados copiados com sucesso!";
			//$i = $i + 4;
			//}
		}else{
			print "Não foi possível copiar os dados do arquivo.";
			}
		//echo($conteudo);
}else{
	echo("Não foi possivel abrir o arquivo");
}

No ficheiro arquivo.txt
 

167150,	SLIM R,	3,	42,	2,	1122,	ELEGANTEMAGEM - UNIPESSOAL LDª,	15,	3;
166760,	PARKA,	1,	48,	2,	1122,	ELEGANTEMAGEM - UNIPESSOAL LDª,	13,	2;
166760,	PARKA,	1,	50,	2,	1122,	ELEGANTEMAGEM - UNIPESSOAL LDª,	13,	2;

Como faço para inserir todos correctamente sem que fiquem uns dentro de os mesmos campos e outros fora do campo correcto? Se puderem ajudar agradeço...

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Olá! o ideal seria montar montar queries de inserção com uns 50 inserts por vez

Executar queries uma a uma dentro de uma estrutura de repetição for()... não é uma boa prática

Poste um trecho do .txt pra gente tentar te ajudar

Link para o comentário
Compartilhar em outros sites

  • 0

Olá wash.
Uma parte do .txt já postei no post anterior. Aliás, aquelas 3 ou 3000 linhas iguais a essas são as que vão ser adicionadas às 2 tabelas da BD.
Achei que o for não era a solução mais viável, por isso tentei de outra forma:

$link = mysqli_connect("localhost", "root", "", "modelagem");

/* check connection */
if (mysqli_connect_errno()) {
    printf("A conexão falhou: %s\n", mysqli_connect_error());
    exit();
}

$arquivo=('registos.txt');
$separador = ","; // O que separa os resultados no arquivos TXT ?

if(file_exists($arquivo)){
  $fp=fopen($arquivo,'r');
  while(!feof($fp)){
    $line = trim(fgets($fp));
    if (empty($line)) {
     continue;
    }
    $line = rtrim($arquivo, ';'); //remover o ';' que tens no fim de cada linha
    $array = explode($separador, $line); //separar por $separador

    $sql1 = "INSERT INTO nota_e (ref_reg, modelo, cor, tamanho, quant ,num_cli, cliente, colarinho, etiq_reg) VALUES ('" . $array[0] . "', '" . @$array[1] . "', '" . @$array[2] . "', '" . @$array[3] . "', '" . @$array[4] . "', '" . @$array[5] . "', '" . @$array[6] . "', '" . @$array[7] . "', '" . @$array[8] . "')";
    $sql2 = "INSERT INTO nota_p (ref_num, mod_num, cor_num, tam_num, quant_num ) values('" . $array[0] . "','" . @$array[1] . "','" . @$array[2] . "','" . @$array[3] . "','" . @$array[4] . "')";

    $resultado1 = mysqli_query($link,$sql1);
    $resultado2 = mysqli_query($link,$sql2);

    if(!$resultado1 || !$resultado2){
     print "Falha na linha: " . $line;
    }
  }
  fclose($fp);

  print "Terminado";

No entanto, agora está a inserir apenas valores nulos = 0 nas tabelas. Como devo fazer?

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...