[RESOLVIDO] Gravar txt ao banco de dados

1 resposta Resolvido
mysqlphp
A

Tenho um arquio txt separado por pipes: |texto|texto|texto|. Quando eu executo o arquivo ele começa identificando o que vem antes do primeiro | como se fosse um dos dados, então a primeira coluna fica em branco.

Como posso corrigir?

Meu código:

session_start();

//Incluir a conexao com BD
include_once("conexao.php");

//Receber os dados do formulário
//$arquivo = $_FILES['arquivo'];
//var_dump($arquivo);
$arquivo_tmp = $_FILES['arquivo']['tmp_name'];

//ler todo o arquivo para um array
$dados = file($arquivo_tmp);
//var_dump($dados);

foreach($dados as $linha){
	$linha = trim($linha);
	$valor = explode('|', $linha);
	var_dump($valor);
	
	$nome = $valor[0];
	$email = $valor[1];
	$usuario = $valor[2];
	$senha = $valor[3];
	
	$result_usuario = "INSERT INTO usuarios (nome, email, usuario, senha) VALUES ('$nome', '$email', '$usuario', '$senha')";
	
	$resultado_usuario = mysqli_query($conn, $result_usuario);	
}
$_SESSION['msg'] = "<p style='color: green;'>Carregado os dados com sucesso!</p>";
header("Location: index.php");

1 Resposta

rodevops
Solucao aceita

Na verdade ele está fazendo correto, já que o pipe representa coluna e seu arquivo está formatado incorretamente (deveria ser texto|texto|texto)… mas você tem algumas opções:

1 - Ignorar o $valor[0] e começar a preencher a partir de $valor[1] para nome, etc…
2 - Remover o primeiro pipe antes de “explodir” a linha:

$linha = trim($linha);
$linha = substr($linha, 1); //texto|texto|texto|etc...

3 - Usar trim para remover as colunas das pontas:

$linha = trim($linha); //normal, limpa espaços...
$linha = trim($linha, "|"); //2º param charlist...

Sempre leia a documentação…

http://php.net/manual/pt_BR/function.trim.php

Criado 13 de agosto de 2018
Ultima resposta 13 de ago. de 2018
Respostas 1
Participantes 2