Autor Tópico: TCPDF ERROR: Some data has already been output, can't send PDF file  (Lida 1002 vezes)

Spybr

  • Iniciante
  • **
  • Mensagens: 79
TCPDF ERROR: Some data has already been output, can't send PDF file
« Online: Janeiro 29, 2016, 11:24:00 am »
Estou utilizando uma aplicacao BLANK que faz consulta ao banco Oracle.

Esse codigo abaixo estava funcionado normalmente.

$sql =
         "SELECT
            curso.ano_realizacao,
            curso.evt,
            curso.prioridade,
            area_conhecimento.descricao,
            curso.nome_curso,
            cargo.descricao,
            curso.projeto_pesquisa,
            instituicao.nome || ' ' ||instituicao.cidade || ' ' || instituicao.pais,
            curso.duracao,
            om.nome,
            om.nome,   
            curso.numero_participantes || ' ' || curso.publico,
            curso.vinculo

         FROM
            curso, area_conhecimento, tipo_curso, cargo, instituicao, om
         WHERE
            curso.area_conhecimento = area_conhecimento.idarea_conhecimento
         AND   
            curso.tipo_curso_idtipo_curso = tipo_curso.idtipo_curso
         AND   
            curso.cargo_idcargo = cargo.idcargo
         AND   
            curso.local = instituicao.idinstituicao
         AND   
            curso.omp = om.idom
         AND
            curso.ano_realizacao = ".$counter;

   sc_select(rs, $sql); 



Tive que adicionar mais alguns campos no where e apareceu esse erro:
Atenção
Undefined offset: 0
TCPDF ERROR: Some data has already been output, can't send PDF file


Já tentei de tudo e nâo consegui resolver o problema. Alguem tem alguma ideia?

"SELECT
            curso.ano_realizacao,
            curso.evt,
            curso.prioridade,
            area_conhecimento.descricao,
            curso.nome_curso,
            cargo.descricao,
            curso.projeto_pesquisa,
            instituicao.nome || ' ' ||instituicao.cidade || ' ' || instituicao.pais,
            curso.duracao,
            om.nome,
            om.nome,   
            curso.numero_participantes || ' ' || curso.publico,
            curso.vinculo

         FROM
            curso, area_conhecimento, tipo_curso, cargo, instituicao, om
         WHERE
            curso.area_conhecimento = area_conhecimento.idarea_conhecimento
         AND   
            curso.tipo_curso_idtipo_curso = tipo_curso.idtipo_curso
         AND   
            curso.cargo_idcargo = cargo.idcargo
         AND   
            curso.local = instituicao.idinstituicao
         AND   
            curso.omp = om.idom
         AND
            instituicao.pais = 'Brasil'
         AND
            tipo_curso.descricao = 'Stricto-sensu'

                        AND
            curso.ano_realizacao = ".$counter;


                sc_select(rs, $sql); 
« Última modificação: Janeiro 29, 2016, 01:06:57 pm por Spybr »

Maurélio

  • Avançado
  • ****
  • Mensagens: 304
  • O eterno Aprendiz.'.
    • Email
Re:TCPDF ERROR: Some data has already been output, can't send PDF file
« Responder #1 Online: Janeiro 29, 2016, 11:28:53 am »
Não tem aspas sobrando  " ?
Dá uma olhada.
Marco Aurélio

Kleyber

  • Expert
  • *****
  • Mensagens: 2239
    • Email
Re:TCPDF ERROR: Some data has already been output, can't send PDF file
« Responder #2 Online: Janeiro 29, 2016, 11:31:50 am »
Todo campo que é mesclado (campo + outro campo) deve ter o AS e o um alias pra identificar. Tipo:

CONCAT (instituicao.nome, ' - ' , instituicao.cidade,' - ',instituicao.pais) AS instituicao,
CONCAT (curso.numero_participantes,' ', curso.publico) AS num_participantes,
Kleyber Derick

ITIL® V3 Foundation Certified
Analista de Sistemas
São Luís - Maranhão
www.tkinformidia.net

Spybr

  • Iniciante
  • **
  • Mensagens: 79
Re:TCPDF ERROR: Some data has already been output, can't send PDF file
« Responder #3 Online: Janeiro 29, 2016, 01:09:56 pm »
Tinha colocado o codigo errado, ja corrigi. Tentei essa dica do CONCAT mas nâo deu certo.
Dá a impressão que a variavel $sql que armazena o consulta está estourando o limite, pq sem aquelas duas linhas em vermelho funciona. Rodei o codigo da consulta direto no banco Oracle e funcionou normalmente.

Jailton

  • Expert
  • *****
  • Mensagens: 2041
Re:TCPDF ERROR: Some data has already been output, can't send PDF file
« Responder #4 Online: Janeiro 29, 2016, 01:45:33 pm »
Essa mensagem esta dando por que como você adicionou filtros na SQL, se não tiver campos com os critérios ele não vai trazer nada.

Ai você tem que fazer um tratametno se o retorno do SQL vir nulo.
Undefined offset: 0

Depois do sc_select(rs, $sql); trate ele com isso:
Código: [Selecionar]
/* Macro sc_select */

sc_select(meus_dados, "
SELECT
    CodigoClienteID,
    NomeCliente,
    CPF
FROM
    clientes
");

/* Erro no select */
if ({meus_dados} === false) {
     // Sua Base + _erro
sc_error_message("Ocorreu um erro no acesso ao<BR>banco de dados: {meus_dados_erro}.<BR>");
}
else {

/* Inclua aqui sua rotina de processamento */

// Qtde de Registros Retornados.
$QtdeRegistros=$meus_dados->RecordCount();

     if ($meus_dados->EOF) {

         sc_error_message("Nenhum valor foi retornado pelo banco.<BR>");

} else {

while (!$meus_dados->EOF) {

{CodigoClienteID} = $meus_dados->fields[0];
{NomeCliente} = $meus_dados->fields[1];
{CPF} = $meus_dados->fields[2];

// Avança para o próximo registro do BANCO DE DADOS.
$meus_dados->MoveNext();

} // while (!$meus_dados->EOF)

} // if ($meus_dados->EOF)

} // sc_select(meus_dados,    ** Nao deixar aspas aqui...

// Limpa tudo até a conexão
$meus_dados->Close();
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Spybr

  • Iniciante
  • **
  • Mensagens: 79
Re:TCPDF ERROR: Some data has already been output, can't send PDF file
« Responder #5 Online: Fevereiro 03, 2016, 01:16:26 pm »
Voce tinha razao. Aquele erro esta aparecendo quando nao encontra nenhum resultado na consulta.
Eu tentei fazer o tratamento do erro (sem resultado) verificando se o rs estava vazio, mas não deu certo. Quando tem resultado na consulta os dados são preenchidos corretamente, mas quando nao tem aparece o erro: Undefined offset: 0


      sc_select(rs, $sql); 

   
      if ( $rs->fields[0]  )
      {
         $hasResult = true;

         $pdf->Write(0, 'ANO DE '.$counter, '', 0, 'C', true, 0, false, false, 0);
         
         if ( $i < 3 )
            $pdf->Write(0, 'Evento no País', '', 0, 'C', true, 0, false, false, 0);
         else
            $pdf->Write(0, 'Evento no Exterior', '', 0, 'C', true, 0, false, false, 0);
            
         switch ( $i % 3 ) {
         
            case 0:
         $pdf->Write(0, 'Stricto-Sensu', '', 0, 'L', true, 0, false, false, 0);
                  break;
            
            case 1:
         $pdf->Write(0, 'Lato-Sensu', '', 0, 'L', true, 0, false, false, 0);
                  break;
            
            case 2:
         $pdf->Write(0, 'Qualificação Profissional', '', 0, 'L', true, 0, false, false, 0);
                  break;
         
         }
         
         $pdf->ln();


         //------------------------------------------
         //Generating the HEADER Table
         //

         $tbl = '<table border="1" align="center">
            <tr bgcolor="#DDDDDD" valign="middle">
               <th rowspan="2">ANO<br></th>
               <th rowspan="2">EVT<br></th>
               <th rowspan="2">PRIORIDADE</th>
               <th rowspan="2">ÁREA DE CONHECIMENTO<br></th>
               <th rowspan="2">CURSO/ESTÁGIO<br></th>
               <th colspan="2">FINALIDADE<br></th>
               <th rowspan="2" width="80">LOCAL (INSTITUIÇÃO/CIDADE)<br></th>
               <th rowspan="2">DURAÇÃO (SEMANAS)<br></th>
               <th rowspan="2">OMOT<br></th>
               <th rowspan="2">OMP<br></th>
               <th rowspan="2">PÚBLIVO ALVO<br></th>
               <th rowspan="2">VÍNCULO/DISSEMINAÇÃO DESEJADA<br></th>      
            </tr>
            <tr bgcolor="#DDDDDD" valign="middle">
               <td>CARGO/FUNÇÃO EM TL</td>
               <td>PROJETO/PESQUISA A'.$counter.'</td>
            </tr>';

         //</table>';



         while (!$rs->EOF)
         {
            $tbl = $tbl . "<tr>";
               $tbl = $tbl . "<td>".$rs->fields[0]."</td>";
               $tbl = $tbl . "<td>".$rs->fields[1]."</td>";
               $tbl = $tbl . "<td>".$rs->fields[2]."</td>";
               $tbl = $tbl . "<td>".$rs->fields[3]."</td>";
               $tbl = $tbl . "<td>".$rs->fields[4]."</td>";
               $tbl = $tbl . "<td>".$rs->fields[5]."</td>";
               $tbl = $tbl . "<td>".$rs->fields[6]."</td>";
               $tbl = $tbl . "<td>".$rs->fields[7]."</td>";
               $tbl = $tbl . "<td>".$rs->fields[8]."</td>";
               $tbl = $tbl . "<td>".$rs->fields[9]."</td>";
               $tbl = $tbl . "<td>".$rs->fields[10]."</td>";
               $tbl = $tbl . "<td>".$rs->fields[11]."</td>";
               $tbl = $tbl . "<td>".$rs->fields[12]."</td>";
            $tbl = $tbl . "</tr>";

            $rs->MoveNext();
         }
         $tbl = $tbl . "</table>";

         
         $pdf->writeHTML($tbl, true, false, false, false, '');
         $pdf->ln();

      }//;
      $rs->Close();
      if ($newPage && $hasResult ){
         $pdf->AddPage();
         $pdf->LastPage();   
      }
   
   } // end for
      
   $counter++;
   
      
}//end while





Tentei fazer desse jeito que voce falou mas tambem nao consegui. POderia me dar uma ajuda?
« Última modificação: Fevereiro 03, 2016, 02:11:02 pm por Spybr »

Jailton

  • Expert
  • *****
  • Mensagens: 2041
Re:TCPDF ERROR: Some data has already been output, can't send PDF file
« Responder #6 Online: Fevereiro 03, 2016, 02:46:05 pm »
É só na blank colocar ele para validar se tem dados antes de gerar o pdf se não tiver aborta com uma mensagem acusando que não existe dados e faz um desvio dos códigos que iriam gerar o pdf.
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Spybr

  • Iniciante
  • **
  • Mensagens: 79
Re:TCPDF ERROR: Some data has already been output, can't send PDF file
« Responder #7 Online: Fevereiro 03, 2016, 07:41:41 pm »
Uma coisa que achei estranho é que esse mesmo codigo no banco mysql funciona normalmente. Já no Oracle apresenta esse problema Undefined offset: 0