Ir para conteúdo
Guilherme Luiz

Fputcsv insere apenas uma linha

Recommended Posts

Olá pessoal,

 

Estou com um problema para escrever um arquivo csv utilizando a função FPUTCSV.

<?php 
$queryList  = "SELECT
wzap.id        as id,
wzap.mobile    as mobile,
wzap.ddi       as ddi,
wzap.pushname  as pushname,
wzap.photo     as photo,
wzap.dlr_date  as dataDlr,
case
  when wzap.status = '0' then 'Pendente'
  when wzap.status = '1' then 'Enviado'
  when wzap.status = '2' then 'Entregue'
  when wzap.status = '3' then 'Não entregue'
  when wzap.status = '4' then 'Rejeitado'
  when wzap.status = '5' then 'Expirou'
  when wzap.status = '6' then 'Agendado'
  when wzap.status = '7' then 'Falha'
end as status,
case
  when wzap.status = '1' and wzap.substatus = '1' then 'Processado'
  when wzap.status = '2' and wzap.substatus = '1' then 'Ok'
  when wzap.status = '6' and wzap.substatus = '1' then 'Processado'
  when wzap.status = '7' and wzap.substatus = '1' then 'Sem saldo'
  when wzap.status = '7' and wzap.substatus = '2' then 'Erro no processamento'
end as descricao,
wzap.cost      as tarifa,
wzap.currency  as moeda,
wzap.text      as texto,
w.country      as pais,
channel.name   as canalNome
FROM wzap_mt   as wzap
INNER JOIN worldwide   as w ON w.ddi = wzap.ddi
LEFT JOIN wzap_channel as channel ON channel.id = wzap.channel_id
WHERE wzap.user_id='{$userID}' and wzap.channel_id {$canalID} and wzap.dlr_date BETWEEN '".$inicio." 00:00:00' and '".$final." 23:59:59'
UNION ALL
SELECT
wzap.id        as id,
wzap.mobile    as mobile,
wzap.ddi       as ddi,
null           as pushname,
null           as photo,
wzap.dlr_date  as dataDlr,
case
  when wzap.status = '0' then 'Pendente'
  when wzap.status = '1' then 'Enviado'
  when wzap.status = '2' then 'Entregue'
  when wzap.status = '3' then 'Não entregue'
  when wzap.status = '4' then 'Rejeitado'
  when wzap.status = '5' then 'Expirou'
  when wzap.status = '6' then 'Agendado'
  when wzap.status = '7' then 'Falha'
end as status,
case
  when wzap.status = '1' and wzap.substatus = '1' then 'Processado'
  when wzap.status = '2' and wzap.substatus = '1' then 'Ok'
  when wzap.status = '6' and wzap.substatus = '1' then 'Processado'
  when wzap.status = '7' and wzap.substatus = '1' then 'Sem saldo'
  when wzap.status = '7' and wzap.substatus = '2' then 'Erro no processamento'
end as descricao,
wzap.cost      as tarifa,
wzap.currency  as moeda,
wzap.text      as texto,
w.country      as pais,
channel.name   as canalNome
FROM wzap_mt_temp as wzap
INNER JOIN worldwide   as w ON w.ddi = wzap.ddi
LEFT JOIN wzap_channel as channel ON channel.id = wzap.channel_id
WHERE wzap.user_id='{$userID}' and wzap.channel_id {$canalID} and wzap.dlr_date BETWEEN '".$inicio." 00:00:00' and '".$final." 23:59:59'
UNION ALL
SELECT
wzap.id        as id,
wzap.mobile    as mobile,
wzap.ddi       as ddi,
wzap.pushname  as pushname,
wzap.photo     as photo,
wzap.dlr_date  as dataDlr,
case
  when wzap.status = '8' then 'Recebido'
end as status,
case
  when wzap.status = '8' and wzap.substatus = '1' then 'Resposta recebida'
end as descricao,
wzap.cost      as tarifa,
wzap.currency  as moeda,
wzap.text      as texto,
w.country      as pais,
channel.name   as canalNome
FROM wzap_mo   as wzap
INNER JOIN worldwide   as w ON w.ddi = wzap.ddi
LEFT JOIN wzap_channel as channel ON channel.id = wzap.channel_id
WHERE wzap.user_id='{$userID}' and wzap.channel_id {$canalID} and wzap.dlr_date BETWEEN '".$inicio." 00:00:00' and '".$final." 23:59:59'
ORDER BY dataDlr DESC";
$sqlList = mysqli_query($connect_sql,$queryList);
while($data = mysqli_fetch_assoc($sqlList)){
  $stats[] = [
    "id"        => $data['id'],
    "mobile"    => $data['mobile'],
    "pais"      => $data['pais'],
    "nome"      => $data['pushname'],
    "canal"     => $data['canalNome'],
    "dataDlr"   => date("d/m/y H:i:sa", strtotime($data['dataDlr'])),
    "status"    => $data['status'],
    "desc"      => $data['descricao'],
    "tarifa"    => $data['tarifa'],
    "moeda"     => $data['moeda'],
    "texto"     => $data['texto']
  ];
}
$filename = sha1($userID.date("Y-m-d").rand(1,100000));
$header = ["ID","Número","País","Nome","Canal","DataStatus","Status","Descrição","Tarifa","Moeda","Texto"];
$file   = fopen(BASEPATH."/export/{$filename}.csv", 'w');

//TRECHO PROBLEMATICO ABAIXO
fputs($file, $bom =( chr(0xEF) . chr(0xBB) . chr(0xBF) ));
fputcsv($file,$header,",");
  foreach ($stats as $line) {
    fputcsv($file, $line,",");
  }
//TRECHO PROBLEMATICO ACIMA

$fileSize = filesize(BASEPATH."/export/{$filename}.csv");
?>

Meu código traz uma lista de uma consulta do meu banco de dados que fica salva no array $stats.

Ao fazer o debug do array $stats vejo que os dados são recebidos perfeitamente neste modelo
 

Array
(
    [id] => 25
    [mobile] => 5511945658451
    [pais] => Brasil
    [nome] => Guilherme
    [canal] => guilherme business
    [dataDlr] => 19/11/18 11:51:36am
    [status] => Entregue
    [desc] => Ok
    [tarifa] => 0.1
    [moeda] => BRL
    [texto] => envio via portal - teste de agenda - 11h50m

)
Array
(
    [id] => 28
    [mobile] => 5511950917200
    [pais] => Brasil
    [nome] => Comercial
    [canal] => guilherme business
    [dataDlr] => 19/11/18 11:51:27am
    [status] => Entregue
    [desc] => Ok
    [tarifa] => 0.1
    [moeda] => BRL
    [texto] => envio via portal - teste de agenda - 11h50m

)

Ao fazer o debug também do foreach da variavel $line eu também tenho todos os dados ou seja, minha busca no bd está ok e meu foreach também.
Assim deveria ser escrito meu CSV onde cada indice do array $stats é uma linha separados por virgula.


Porem meu csv quando visualizo, traz apenas uma linha no seguinte formato

ID,Número,País,Nome,Canal,DataStatus,Status,Descrição,Tarifa,Moeda,Texto
27,5511945658451,Brasil,Guilherme,"guilherme business","21/11/18 13:16:41pm",Entregue,Ok,0.1,BRL,"teste foto perfil
 

Já tentei de tudo e não consigo identificar o porque meu fputcsv está escrevendo apenas uma linha do meu array.
Vendo este código alguem conseguiria me dar uma luz/orientação?

 

 

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

  • Conteúdo Similar

    • Por ElytonSilva
      -- Controller Lista os dados do usuário no card public function listardados(){ $matricula = Matricula::where('user_id', Auth::id())->get(); //dd($matricula); return view('dashboard.renovacao.teste', compact( 'matricula')); } -- Controller Salvar os Registros public function store(RenovacaoRequest $request){ $user = Auth()->user(); $dados = $request->all(); $renovacao = Renovacao::create($dados); return view('dashboard.renovacao.confirmacao', compact ('renovacao')); } -- View form @extends('layouts.app') @section('content') <div class="container"> <div class="row"> <form class="form-horizontal " id="regForm" action="{{route('renovacao.store')}}" method="POST"> <div class="card-panel white"> <h4 class="center">Solicitar Renovação</h4> <div class="row"></div> {{ csrf_field()}} <right> <a>**Dados Cadastrados**</a> </right> <div class="row"></div> <div class="row"></div> <div class="row"> @foreach($matricula as $matric) <div class="row"> <div class="col s6 m6"> <div class="input-field {{$errors->has('user_id') ? 'has-error' : ''}} "> <label for="produto">Nome do Pai:</label> <input type="text" class="form-control" name="nomerespo" value="{{ $matric->nomedopai }}"> </div> </div> <div class="col s6 m6"> <div class="input-field {{$errors->has('user_id') ? 'has-error' : ''}} "> <label for="produto">Nome do Aluno(a):</label> <input type="text" class="form-control" name="nomealuno" value="{{ $matric->nomealuno }}"> </div> </div> </div> @endforeach <div class = "row"> <div class="col s12"> <a title="Voltar Para Página Principal" class="btn orange darken-4 btn-info left " href="/admin">Voltar <i class="material-icons left">arrow_back_ios</i> </a> <button type="submit" class="btn orange darken-4 btn-info right">Confirmar <i class="material-icons left">save</i> </button> </div> </div> </div> </div> </form> </div> </div> @endsection No id do usuário ele tem 2 registro só que na hora de salvar ele só salva 1 registro e não os 2 como deveria
      Como Código acima 
       
      Utilizando dd($dados) ;
       
      ele retorna isso e não traz os outros formulários que estava preenchidos que são as mesma coisa 
       
      array:3 [▼
       
      "_token" => "MZOBw295E6W5SEtPPnsvV4seev2GeH3M94rsrI71"
      "nomerespo" => "Mario"
      "nomealuno" => "Maria Joaquina" ]
       
       
       
      1- Ele traz da tabela matricula o user_id relacionado ao usuário logado, automaticamente ele traz e joga no form e nele usuário verificar o nome do responsável e o nome do filho e clica no botão para salvar para confirmar.
      print -> https://prnt.sc/llsn19
       
      2 - Depois que salva o adm vai na aba relatório para verificar se todos os campos foram salvo só que ele só ta salvando o ultimo nome do aluno e do pai queria que salve todos os dados... como estava no primeiro print.
       
      print tela do adm -> https://prnt.sc/llsof3
       
       
    • Por Alessandro Silva_116859
      public function activate( $purchase, $args ) { $data = array( 'api_key' => $args['token'], 'theme' => ETHEME_PREFIX, 'purchase' => $purchase, ); foreach ( $args as $key => $value ) { $data['item'][$key] = $value; } Erro nº 1    na linha 'api_key => $args ['token']    >>>        Warning: Illegal string offset 'token' in /.../version-check.php on line 296
      Erro nº 2  na linha foreach ( $args as $key => $value ) {   >>> Warning: Invalid argument supplied for foreach() in /.../version-check.php on line 300
       
    • Por Fabio G
      Estou desenvolvendo uma tela de cadastro de fornecedor, porem o meu foreach está pegando só o ultimo registro num total de 3 registros.
      O que eu possa estar fazendo de errado?
      Abaixo o meu código e em anexo a minha tela.
      Muito obrigado
       
      <thead>
                  
                  <tr style="background-color: #CEF6EC">
                    <th>ID</th>
                    <th>Nome Fornecedor</th>
                    <th class="d-none d-sm-table-cell">Contato</th>
                    <th class="d-none d-lg-table-cell">Telefone</th>
                    <th width="100" class="text-center">Ações</th>
                  </tr>
                </thead>
                <tbody>
                  <?php
                  $sql = "SELECT id,nome,con,tel FROM cad_for ";
                  $sql = $pdo->query($sql);
                  If($sql->rowCount()>0){
                    foreach($sql->fetchAll() as $fornecedor){
                    }
                  }
                  ?>
                  <tr>
                    <td><?php echo $fornecedor['id']; ?></td>
                    <td><?php echo $fornecedor['nome']; ?></td>
                    <td class="d-none d-sm-table-cell"><?php echo $fornecedor['con']; ?></td>
                    <td class="d-none d-lg-table-cell"><?php echo $fornecedor['tel']; ?></td>
                    <td>
                      <a href="visualizar.php?id=<?php echo $fornecedor['id']; ?>" class="btn btn-outline-primary btn-sm" data-toggle="tooltip" data-placement="left" title="Visualizar"><i class="fas fa-eye"></i></a>
                      <a href="editar.php?id=<?php echo $fornecedor['id']; ?>" class="btn btn-outline-warning btn-sm" data-toggle="tooltip" data-placement="left" title="Editar cadastro"><i class="fa fa-fw fa-edit"></i></a>
                    </td>
                  </tr>
       
       
    • Por Boca
      Pessoal, bom dia
      Tenho o seguinte array que puxo do banco de dados, para puxar serviços, estou precisando agrupar os serviços para que sejam exibidos da seguinte forma.
       
      Navio Hotel Alimentação Seguro Ou seja preciso agrupar os serviços com o mesmo ID, não posso colocar no banco um simples group by pois irei fazer um sub select com os produtos de cada serviço contratado
       
      Array ( [0] => stdClass Object ( [servico_id] => 10 [produto_id] => 19 [servico_nome] => Navio ) [1] => stdClass Object ( [servico_id] => 7 [produto_id] => 18 [servico_nome] => Hotel ) [2] => stdClass Object ( [servico_id] => 12 [produto_id] => 20 [servico_nome] => Alimentação ) [3] => stdClass Object ( [servico_id] => 9 [produto_id] => 11 [servico_nome] => Seguro ) [4] => stdClass Object ( [servico_id] => 10 [produto_id] => 13 [servico_nome] => Navio ) [5] => stdClass Object ( [servico_id] => 9 [produto_id] => 10 [servico_nome] => Seguro ) [6] => stdClass Object ( [servico_id] => 9 [produto_id] => 10 [servico_nome] => Seguro ) )  
    • Por gust.php
      Prezados,
      Estou tentando usar o datatable com foreach no php e não funciona, ou melhor, funciona quando carrega apenas um registro, se existirem mais registros não funciona, quando recarrego a página para de funcionar tbm.
      Podem ajudar?
      Estou usando assim:
       

      <table class="table table-responsive" id="tableIndexPedido">                     <thead>                     <tr>                       <th>User</th>                       <th>Data</th>                       <th>Hora</th>                       <th>Serviço</th>                       <th data-priority="1">Açao</th>                     </tr>                     </thead>                 <?php foreach ($this->pedido as $p):  ?>                                     <tr>                   <td><?= $p->getUser()->getNome(); ?></td>                   <td><?= $p->getDATA_INICIO()->format("d/m/Y"); ?></td>                   <td><?= $p->getHORA_INICIO()->format("H:i"); ?></td>                   <td><h6><?= \wordwrap($p->getDESCRICAO(), 70, "<br>"); ?></h6></td>                   <td>                       <a href="<?= $this->url('servico', array('action' => 'pedidoServico', 'id' => $p->getIDPEDIDO())); ?>"><span class="label label-primary">Confirma</span></a>                       <a href="<?= $this->url('user', array('action' => 'deletaPedidoServico', 'id' => $p->getIDPEDIDO())); ?>"><span class="label label-danger">Cancela</span></a>                                      </td>                 </tr>                                  <?php endforeach; ?>                               </table>
       

      <script> $(document).ready(function() {     $('#tableIndexPedido').dataTable({         "responsive": true,         "bPaginate": false,         "ordering": false,         "info":     false,         "searching": false,         "columnDefs": [             { responsivePriority: 1, targets: 0 },             { responsivePriority: 2, targets: 4 }         ]     } ); } ); </script>
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.