Syntax error when executing INSERT on MariaDB [closed]

0

I am not able to identify why this error please if someone can help thank you.

Error:

error in your SQL syntax; check the manual that corresponds to your MariaDB line at 3

I'm trying to save the data inside a txt file and then insert it into the database.

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";

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

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

        //ESCREVE NO ARQUIVO TXT
        if (!fwrite($abrir, $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><?phpinclude("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");

    while(!feof($arquivo)) {

        $linhas = fgets($arquivo);
        $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();  
?>

COMPLETE ERROR:

  

Column count does not match value count at row 1INSERT INTO bl   (cod_mun_bl, uso_proc_data_alt, bairro_id_bl, distrito_bl, sector_bl, secao_bl, cep_bl, cod_logra_bl, logra_bl, num_of_bl, num_ate_bl, data_bl, value_bl, coleta_lixo_bl,   limp_pub_bl, ilumin_pub_bl, ener_eletr_bl, rede_tel_bl, rede_agua_pot_bl, rua_pav_bl, rede_esg_bl, rede_agua_pluv_bl, rua_plate_bl, quant_esquina_bl, n_lei_bl, data_cad_bl, ass_bl, obs_bl)   VALUES   ('15581851,2018-08-02,1,1541851,454752,72742,51541-222,42742, Street   Such, 1500,2345,2018-08-02,5151, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, Yes, 45,1,254 / 2018,2018-08-02, saulo, None. ')

    
asked by anonymous 02.08.2018 / 20:09

1 answer

1

This is because when you saved in .txt the columns were not with single quotes

$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";

As soon as you execute this part:

... VALUES ('$linhas')";

It is converted into something like:

... VALUES ('foo,bar,baz')";

So it's as if you only have one column, except that what was entered in .txt may also contain single quotes , so it will generate something like:

... VALUES ('foo,'bar',baz')";

What will cause the syntax failure, the correct one is you set the value of:

$linhas = fgets($arquivo);

Applying columns and escaping invalid characters, for example:

//Remove quebra de linha que vem no fgets
$linhas = trim(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);
    
02.08.2018 / 20:19