Ir ao conteúdo
  • Cadastre-se
a.avelar

PHP Pegar dados do Arquivo TXT e gravar no banco MYSQL em PHP

Recommended Posts

Galera, estou tentando pegar de um arquivo TXT, 4 informações que cada linha dele da e gravar numa tabela do banco de dados, e esta dando erro e já mexi e remexi e não sei porque nao da certo, alguem poderias me ajudar?

processa.php

<?php
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);

                    $line = fgets($dados);

                   for($x=0; $x<0; $x++) {
                        $line = fgets($dados);
                    }
                    $ArrayRetornogru = array();
                    echo "dados".$dados;
                    echo "line". $line;
                    break;
                    
                    
                    while ($line = fgets($dados)) {
                                
                            $data_vencto = substr($line, 56,8);
                            $data_pago = substr($line, 101,8);
                            $valor          = substr($line, 122,4);
                            $cpf  = substr($line, 256,11);
                            // captar as 3 variaveis e fazer a busca das inscricoes pelo cpf data e valor
                            echo $data_pago;
                            echo $data_vencto;
                            echo $valor;

                        $nbr_cpf = $cpf;

                        $parte_um     = substr($nbr_cpf, 0, 3);
                        $parte_dois   = substr($nbr_cpf, 3, 3);
                        $parte_tres   = substr($nbr_cpf, 6, 3);
                        $parte_quatro = substr($nbr_cpf, 9, 2);

                        $monta_cpf = "$parte_um.$parte_dois.$parte_tres-$parte_quatro";

                        echo $monta_cpf;

                         $ArrayRetornogru[] = $monta_cpf;
                             
                                echo "<pre>";
                                    print_r($ArrayRetornogru);
                                echo "</pre>";
                                echo "TESTE";
                                
                    }
                    fclose($dados);
                    print_r($ArrayRetornogru);
                    echo "teste 2";
                    break;
                    
                    
foreach($dados as $linha){
    $linha = trim($linha);
    $valor = explode(',', $linha);
    var_dump($valor);
    
    $data_vencto = $ArrayRetornogru[0];
    $data_pago = $ArrayRetornogru[1];
    $valor = $ArrayRetornogru[2];
    $cpf = $ArrayRetornogru[3];
    
    $result_usuario = "INSERT INTO gru_concurso (data_vencto, data_pago, valor, cpf) VALUES ('$data_vencto', '$data_pago', '$valor', '$cpf')";
    
    $resultado_usuario = mysqli_query($conn, $result_usuario);    
}
$_SESSION['msg'] = "<p style='color: green;'>Carregado os dados com sucesso!</p>";
header("Location: index.php");

ARQUIVO TXT:

image.thumb.png.1dfcda85ef8e00635adf5ca8d6c5c4a3.png

 

de cada linha eu preciso tirar as informações datavencto, datapago, valor, cpf e gravar numa tabela a parte.

 

falou galera !!!

image.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

1)7777777777720181011I20181010158121264102158121264102890 011102018 0000000000009554100000000000000000185 091020180000000000000150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1500 0010010329000000000000001000 1011834669500000000000000000001A27CA74C500908CF                                    
2)7777777777720181011I20181010158121264102158121264102890011102018000000000000955410000000000000000018409102018000000000000015000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015000010010329000000000000001000057040671400000000000000000000123AD3C3D2B3FBAC8                                    
3)7777777777720181011I201810101581212641021581212641028900111020180000000000009554100000000000000000183091020180000000000000150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000150000100103290000000000000010001734749660800000000000000000001147859144416F6B1                                    
4)7777777777720181011I2018101015812126410215812126410289001110201800000000000095541000000000000000001820910201800000000000001500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001500001001032900000000000000100016214304642000000000000000000010319728433E8EBB5

QUATRO LINHAS DO ARQUIVO TXT, na 1) linha de exemplo, coloquei em negrito as infomacoes que preciso extrair..

e elas estão as seguintes posições no arquivo:
$data_vencto = substr($line, 56,8);
$data_pago = substr($line, 101,8);
$valor          = substr($line, 122,4);
$cpf  = substr($line, 256,11);

 

Obrigado

adicionado 6 minutos depois

segue o arquivo TXT, Alfrad para você olhrar.

gruretornobco.txt

Compartilhar este post


Link para o post
Compartilhar em outros sites
function mask($val, $mask) {
    $maskared = '';
    $k = 0;
    for($i = 0; $i<=strlen($mask)-1; $i++) {
         if($mask[$i] == '#') {
             if(isset($val[$k]))
                 $maskared .= $val[$k++];
             } else {
                 if(isset($mask[$i]))
                     $maskared .= $mask[$i];
             }
     }
    return $maskared;
}
                                    
$cnpj = "11222333000199";
$cpf = "00100200300";
$cep = "08665110";
$data = "10102010";

echo mask($cnpj,'##.###.###/####-##');
echo mask($cpf,'###.###.###-##');
echo mask($cep,'#####-###');
echo mask($data,'##/##/####');

Você consegue usar essa função para formatar seu CPF.

adicionado 7 minutos depois

Pelo o que eu percebi no seu código, você não está guardando os valores no primeiro while de $data_vencto, $data_pago, $valor e $cpf, e no for você está pegando valores que não existem no $ArrayRetornogru.

adicionado 13 minutos depois

A logica é essa, percorre linha por linha, faz o split nas 4 variáveis, formata quem deve ser formatada e persiste (salva no banco de dados). Não existe necessidade para mais 1 laço (for/while).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver (rsrsrs), o codigo ficou assim, obrigado pela ajuda ALFRAD.

<?php
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);

    $data_vencto = substr($linha, 11,8);
    $vcto = substr($data_vencto,0,4)."-".substr($data_vencto,4,2)."-".substr($data_vencto,6,2);
    
    $data_pago = substr($linha, 20,8);
    $pago = substr($data_pago,0,4)."-".substr($data_pago,4,2)."-".substr($data_pago,6,2);    

    $valor = substr($linha, 122,4);
    $nbr_valor = $valor;
    $parte_um     = substr($nbr_valor, 0, 2);
    $parte_dois  = substr($nbr_valor, 2, 2);
    $monta_valor = "$parte_um.$parte_dois";
    $cpf  = substr($linha, 256,11);
    $parte_um     = substr($cpf, 0, 3);
    $parte_dois   = substr($cpf, 3, 3);
    $parte_tres   = substr($cpf, 6, 3);
    $parte_quatro = substr($cpf, 9, 2);

    $monta_cpf = "$parte_um.$parte_dois.$parte_tres-$parte_quatro";        

    $result_usuario = "INSERT INTO gru_concurso (data_vencto, data_pago, valor, cpf) VALUES ('$vcto', '$pago', '$monta_valor', '$monta_cpf')";
    
    //echo "SQL".$result_usuario;
    $resultado_usuario = mysqli_query($conn, $result_usuario);    
}
$_SESSION['msg'] = "<p style='color: green;'>Carregado os dados com sucesso!</p>";
header("Location: index.php");

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×