Inserir registros de todas as linhas do arquivo txt no banco de dados mysql

Enviada por Emmanuel 
Bom dia pessoal, estou com um problema que é o seguinte tenho 3 arquivos php, 1 para receber os dados via post o insbl.php pelo arquivo cadbl.php e o exportabl.php que serve para enviar os arquivos do arquivo txt para o banco de dados, porém ao executar o arquivo expórtarbl.php somente é salvo no banco de dados a primeira linha e não são salvas as outras linhas dentro do arquivo txt, se alguém puder me ajudar desde já fico muito agradecido.

insbl.php
<?php

session_start();

$cod_mun_bl = $_POST['cod_mun_bl'];
$uso_proc_data_alt = date('Y-m-d');
$bairro_id_bl = $_POST['bairro_id_bl'];
$distrito_bl = $_POST['distrito_bl'];
$setor_bl = $_POST['setor_bl'];
$secao_bl = $_POST['secao_bl'];
$cep_bl = $_POST['cep_bl'];
$cod_logra_bl = $_POST['cod_logra_bl'];
$logra_bl = $_POST['logra_bl'];
$num_de_bl = $_POST['num_de_bl'];
$num_ate_bl = $_POST['num_ate_bl'];
$data_bl = $_POST['data_bl'];
$valor_bl = $_POST['valor_bl'];
$coleta_lixo_bl = $_POST['coleta_lixo_bl'];
$limp_pub_bl = $_POST['limp_pub_bl'];
$ilum_pub_bl = $_POST['ilum_pub_bl'];
$ener_eletr_bl = $_POST['ener_eletr_bl'];
$rede_tel_bl = $_POST['rede_tel_bl'];
$rede_agua_pot_bl = $_POST['rede_agua_pot_bl'];
$rua_pav_bl = $_POST['rua_pav_bl'];
$rede_esg_bl = $_POST['rede_esg_bl'];
$rede_agua_pluv_bl = $_POST['rede_agua_pluv_bl'];
$rua_placa_bl = $_POST['rua_placa_bl'];
$quant_esquina_bl = $_POST['quant_esquina_bl'];
$n_lei_bl = $_POST['n_lei_bl'];
$data_cad_bl = date('Y-m-d');
$ass_bl = $_SESSION['usuario'];
$obs_bl = $_POST['obs_bl'];

//PREPARA O CONTEÚDO A SER GRAVADO
$conteudo = "
$cod_mun_bl,$uso_proc_data_alt,$bairro_id_bl,$distrito_bl,$setor_bl,$secao_bl,$cep_bl,$cod_logra_bl,$logra_bl,$num_de_bl,$num_ate_bl,$data_bl,$valor_bl,$coleta_lixo_bl,$limp_pub_bl,$ilum_pub_bl,$ener_eletr_bl,$rede_tel_bl,$rede_agua_pot_bl,$rua_pav_bl,$rede_esg_bl,$rede_agua_pluv_bl,$rua_placa_bl,$quant_esquina_bl,$n_lei_bl,$data_cad_bl,$ass_bl,$obs_bl\r \n";

//ARQUIVO TXT
$arquivo = "regbl.txt";

//TENTA ABRIR O ARQUIVO TXT
if (!$abrir = fopen($arquivo, "a+",0)) {
echo "Erro abrindo arquivo local ($arquivo)";
exit;
}

//ESCREVE NO ARQUIVO TXT
if (!fwrite($abrir, $conteudo, strlen($conteudo))) {
echo "<script>alert('Erro ao cadastrar - ($arquivo)'); location='cadbl.php';</script>";
exit;
}
else {
echo "<script>alert('Cadastro realizado com sucesso.'); location='cadbl.php';</script>";
}

//FECHA O ARQUIVO
fclose($abrir);
?>

cadbl.php
<!DOCTYPE html>
<html>
<head>

<?php
include("sessao.php");
?>

<title>Boletim de Logradouros - BL</title>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
</head>
<body>

<?php
include("menu.php");
?>

<div class="container-fluid">

<div class="form-row">

<div class="panel panel-default form-group col-xs-12">
<form action="insbl.php" method="post" enctype="multipart/form-data">

<p><h2>Boletim de Logradouros - BL</h2></p>

<br/>

<fieldset>
<legend>PARA USO DO PROCESSAMENTO</legend>
<div class="form-group form-inline">
<label for="cod_mun_bl">Código do munícipio: </label>
<input type="text" class="form-control " name="cod_mun_bl" placeholder="Código do munícipio" required>

</div>
</fieldset>

<fieldset>
<legend>INFORMAÇÕES GERAIS</legend>
<div class="form-group">

<input type="text" class="form-control" name="textbox" id="textbox" placeholder="Digite o bairro">
<label for="bairro_id_bl">Bairro: </label>
<select class="form-control" name="bairro_id_bl" id="select">
<?php
include ("conexao.php");
$query = "SELECT * FROM bairros";
$consulta = mysqli_query($con,$query);

while ($dados = mysqli_fetch_assoc($consulta)) { ?>
<option value="<?php echo $dados['id_bairros']; ?>"><?php echo $dados['nome_bairros']; ?></option> <?php
}
?>
</select>

<div class="form-inline">
<label for="distrito_bl">Distrito: </label>
<input type="text" class="form-control" name="distrito_bl" placeholder="Distrito" required>

<label for="setor_bl">Setor: </label>
<input type="text" class="form-control" name="setor_bl" placeholder="Setor" required>

<label for="secao_bl">Seção: </label>
<input type="text" class="form-control" name="secao_bl" placeholder="Seção" required>

<label for="cep_bl">CEP: </label>
<input type="text" class="form-control" name="cep_bl" placeholder="Código de logradouro" required>

<label for="cod_logra_bl">Código de logradouro: </label>
<input type="text" class="form-control" name="cod_logra_bl" placeholder="Código de logradouro" required>

<label for="logra_bl">Logradouro: </label>
<input type="text" class="form-control" name="logra_bl" placeholder="Logradouro" required>

<div class="form-inline">
de <input type="text" class="form-control" name="num_de_bl" required> até <input type="text" class="form-control" name="num_ate_bl" required>
</div>

</div>
</div>
</fieldset>

<div class="form-group form-inline">
<label for="data_bl">Data: </label>
<input type="date" class="form-control" name="data_bl" placeholder="Data" required>

<label for="valor_bl">Valor: </label>
<input type="text" class="form-control" name="valor_bl" placeholder="Setor anterior" required>

<label for="coleta_lixo_bl">Coleta de lixo</label>
<select class="form-control" name="coleta_lixo_bl">
<option value=" "> </option>
<option value="Sim">Sim</option>
<option value="Não">Não</option>
</select>

<label for="limp_pub_bl">Limpeza pública</label>
<select class="form-control" name="limp_pub_bl">
<option value=" "> </option>
<option value="Sim">Sim</option>
<option value="Não">Não</option>
</select>

<label for="ilum_pub_bl">Iluminação pública</label>
<select class="form-control" name="ilum_pub_bl">
<option value=" "> </option>
<option value="Sim">Sim</option>
<option value="Não">Não</option>
</select>

<label for="ener_eletr_bl">Energia Elétrica</label>
<select class="form-control" name="ener_eletr_bl">
<option value=" "> </option>
<option value="Sim">Sim</option>
<option value="Não">Não</option>
</select>

<label for="rede_tel_bl">Rede de telefone</label>
<select class="form-control" name="rede_tel_bl">
<option value=" "> </option>
<option value="Sim">Sim</option>
<option value="Não">Não</option>
</select>

<label for="rede_agua_pot_bl">Rede de água potável</label>
<select class="form-control" name="rede_agua_pot_bl">
<option value=" "> </option>
<option value="Sim">Sim</option>
<option value="Não">Não</option>
</select>

<label for="rua_pav_bl">Rua pavimentada</label>
<select class="form-control" name="rua_pav_bl">
<option value=" "> </option>
<option value="Sim">Sim</option>
<option value="Não">Não</option>
</select>

<label for="rede_esg_bl">Rede de esgoto</label>
<select class="form-control" name="rede_esg_bl">
<option value=" "> </option>
<option value="Sim">Sim</option>
<option value="Não">Não</option>
</select>

<label for="rede_agua_pluv_bl">Rede de esgoto</label>
<select class="form-control" name="rede_agua_pluv_bl">
<option value=" "> </option>
<option value="Sim">Sim</option>
<option value="Não">Não</option>
</select>

<label for="rua_placa_bl">Rua com placa</label>
<select class="form-control" name="rua_placa_bl">
<option value=" "> </option>
<option value="Sim">Sim</option>
<option value="Não">Não</option>
</select>

<label for="quant_esquina_bl">Quantidade de esquinas: </label>
<input type="text" class="form-control" name="quant_esquina_bl" placeholder="Quantidade de esquinas" required>

<label for="n_lei_bl">Número da Lei/Denominação: </label>
<input type="text" class="form-control" name="n_lei_bl" placeholder="Número da Lei/Denominação" required>

</div>

<label for="obs_bl">Observações: </label>
<input type="areatext" class="form-control" name="obs_bl">
</div>
<button type="submit" name="cadastrar" id="cadastrar" class="btn btn-primary">Cadastrar</button>


</form>
</div>
</div>

</div>

<script>
jQuery.fn.filterByText = function(textbox, selectSingleMatch) {
return this.each(function() {
var select = this;
var options = [];
$(select).find('option').each(function() {
options.push({value: $(this).val(), text: $(this).text()});
});
$(select).data('options', options);
$(textbox).bind('change keyup', function() {
var options = $(select).empty().data('options');
var search = $(this).val().trim();
var regex = new RegExp(search,"gi");

$.each(options, function(i) {
var option = options[i];
if(option.text.match(regex) !== null) {
$(select).append(
$('<option>').text(option.text).val(option.value)
);
}
});
if (selectSingleMatch === true && $(select).children().length === 1) {
$(select).children().get(0).selected = true;
}
});
});
};

$(function() {
$('#select').filterByText($('#textbox'), false);
$("select option").click(function(){
alert(1);
});
});
</script>

</body>
</html>

exportabl.php
<?php

include("conexao.php");

$arquivo = fopen("regbl.txt","r");

//Remove quebra de linha que vem no fgets
$linhas = fgets($arquivo);

//Divide em um array
$colunas = explode(',', $linhas);

//Passa os valores como
foreach ($colunas as &$coluna) {
//Escapa o valor de cada coluna, como é referencia vai aplicar diretamente a array
$coluna = mysqli_real_escape_string($con, $coluna);

//Junta os valores da array de volta em um string e aplica as aspas simples
$linhas = '\'' . implode('\', \'', $colunas) . '\'';

$sql = "INSERT INTO bl (cod_mun_bl,uso_proc_data_alt,bairro_id_bl,distrito_bl,setor_bl,secao_bl,cep_bl,cod_logra_bl,logra_bl,num_de_bl,num_ate_bl,data_bl,valor_bl,coleta_lixo_bl,
limp_pub_bl,ilum_pub_bl,ener_eletr_bl,rede_tel_bl,rede_agua_pot_bl,rua_pav_bl,rede_esg_bl,rede_agua_pluv_bl,rua_placa_bl,quant_esquina_bl,n_lei_bl,data_cad_bl,ass_bl,obs_bl)
VALUES ($linhas)";

}

$result = mysqli_query($con, $sql);


if ($result) {
echo "<script>alert('Cadastro realizado com sucesso.'); location='./cadbl.php';</script>";
} else {
echo "<script>alert('Erro ao cadastrar.'); </script>";
}

$erro = mysqli_error($con);
echo $erro;

echo $sql;

$con->close();
?>
Jayme A. C. Gimenez
Re: Inserir registros de todas as linhas do arquivo txt no banco de dados mysql
06 de August de 2018 às 06:40PM
Acredito que você tenha que executar a query de inserção no banco dentro do foreach.

Fiquei curioso com uma coisa nesses seus posts: você precisa do arquivo txt, é isso? É por isso que você salva os dados no txt antes de colocá-los no bd, é isso?
Sim é exatamente isso, pois o cenário é o seguinte, os locais onde vou fazer o cadastro não existe sinal de celular ou wifi ai preciso salvar em um arquivo txt pra quando eu voltar para o centro da cidade descarregar pela internet os dados do arquivo txt.
Como fecho o post?

Funcionou retirando o \n do arquivo insbl.php e quebrando a linha na variavel $conteudo.
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.