• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gurzi

Headers

11 mensagens neste tópico

Warning: Cannot modify header information - headers already sent by (output started at /home/novaecl/public_html/catalogando.php:13) in /home/novaecl/public_html/fpdf/fpdf.php on line 1022

FPDF error: Some data has already been output to browser, can't send PDF file

No meu ficheiro tenho 3 includes , functions.php, settings.php e o require do fpdf.php necessário para criar pdfs..

mas quando tento criar um ficheiro ele diz que já foi enviado headers.. (penso que seja pelos includes e isso)

mas como ultrupasso isto ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Deixo aqui o código...

Não me apetecia recorrer ao ob_start();

<?php include("functions.php"); ?>
<? require('fpdf/fpdf.php'); ?>
<? include("settings.php"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Administração .: Nova Ecléctica; :. Powered by Tiago Palhota</title>
<link href="CSS/admin.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
a:link {
color: #333333;
}
a:visited {
color: #333333;
}
a:hover {
color: #666666;
}
a:active {
color: #333333;
}
body,td,th {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
}
-->
</style>
</head>

<body>
<div id="banner"><img src="../images/Nve/topadmin.png" alt="NovaEclectica" width="360" height="34" /></div>
<div id="menu"><a href="index.php" class="menu_link">HOME</a> - <a href="newsletter.php" class="menu_link">Criar Newsletter</a> - <a href="catalogando.php" class="menu_link">Criar Catálogos</a> -
<a href="destaques.php" class="menu_link">Criar Destaques</a> -
<a href="adicionar.php" class="menu_link">Gestão de Livros</a>-
<a href="logado.php?action=logout" class="menu_link">LOGOUT</a> </div>

<div id="conteudo">
<form name="catalogando" method="post">
<table border="0">
<tr>
<td>Nome do Catalogo</td>
<td><input type="text" name="nome"></td></tr>
<tr>
<td>Data</td>
<td> <? echo date("F j, Y, g:i a"); ?></td>
</tr>
</table>
</div>
<div id="rodape"><img src="../images/rodape.jpg" alt="Developed and Designed by Tiago Palhota" /><br />
<a href="../docs/privacidade">política de privacidade</a> - <a href="../docs/parcerias">parcerias</a> - <a href="../docs/copyright">informações de copyright</a></div>
<?
$connect = mysql_connect($server,$user,$pass);
$select_db = mysql_select_db($db);
$query = "SELECT Autor.Apelido,Autor.Nome,Livro.Titulo,Livro.IDLivro FROM Autor,Autoria,Livro WHERE Autor.IDAutor=Autoria.IDAutor AND Autoria.IDLivro=Livro.IDLivro ORDER BY Autor.Apelido";
$do_query=mysql_query($query);



echo "<table border='1' align='center'><FORM NAME='books' METHOD='POST'>
<TR><TD>APELIDO</TD><TD>NOME</TD><TD>LIVRO</TD><TD>Catalogar</TD></TR>";

   
   while($row = mysql_fetch_assoc($do_query)){
        
       
            echo "<tr><td>" .$row['Apelido']."</td><td>".$row['Nome']."</td><td>".$row['Titulo']."<td><input type='checkbox' name=".$row['IDLivro'].">";
            
            
            }
            
      echo "<tr><tr><td align='center' colspan='4'><input type='submit' value='Catalogar' name='catalogar'> </form></tr></table>";
      $nome =  "Catalogos/". $_POST['nome'] .".txt";
      $id = 1; //Incrementador 
      if(isset($_POST['catalogar']))
      {
        $fp = fopen($nome, "w");// Cria o Ficheiro
        //Criar PDF
        $pdf = new FPDF();
        $pdf->AddPage();
        $pdf->SetFont('Arial','B',16);
        $pdf->Cell(40,10,'Hello World!');
        $pdf->Cell(60,10,'Powered by FPDF.',0,1,'C'); 
        $pdf->Output();
         
        $titulo = "############ Catalogo : " . $nome . " ############\n\n";
        $write = fwrite($fp, $titulo);
        $query = "SELECT * FROM Autor,Autoria,Livro WHERE Autor.IDAutor = Autoria.IDAutor AND Autoria.IDLivro = Livro.IDLivro";
        $do_Query = mysql_query($query);
        while($row = mysql_fetch_assoc($do_Query)) {
            if(isset($_POST[$row['IDLivro']])) 
            {
                $texto = $id . "-" . $row['Apelido'] . "," . $row['Nome'] . "-" . $row['titulo']  . "(" . $row['Ano'] . ")\n";
                
                 $write =  fwrite($fp, $texto);
                 if(!$write)
                  echo "Falhou a escrever ficheiro";
                 else
                 echo "Ficheiro escrito com sucesso";
               ++$id;
            }
        }

}
echo '</body>
</html>';
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

gurzi, realmente o link pode ter informação um pouco confusa.

Não enviar O QUE QUER QUE SEJA para o output antes de utilizares a função header()

caracteres, espaços em brancos newlines, etc etc... certifica-te de que quando usas essa função ainda nao incluiste html nenhum nem fizeste echo de nada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

O problema está logo aí. essa mudança de linha fora dos <? ?> equivale a um echo "\n";
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

já tentei por tudo seguido, também não dá!

o problema é que ao fazer Output() para criar o pdf não está a workar :x

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o erro de headers dá quando chamas a função Output()? essa função está onde? fpdf.php? se sim, o problema deve estar ou nesse ficheiro (se foste tu que o escreveste) ou no functions.php

como já te disseram, verifica que não tens qualquer tipo de output nesses 2 ficheiros antes de ser executado o Output()

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Warning: Cannot modify header information - headers already sent by (output started at /home/novaecl/public_html/catalogando.php:13) in /home/novaecl/public_html/fpdf/fpdf.php on line 1022

FPDF error: Some data has already been output to browser, can't send PDF file

O grande problema no teu script está na altura em que fazes a criação do PDF.

Quando dás a instrução para criar o PDF, a classe FPDF entra em acção e algures pela linha 1022 (fpdf.php) existe uma instrução (provavelmente de redireccionamento) que não pode ter nenhum output anterior. Mas tu já realizaste um output antes......

refiz um pouco o teu código.... corrigindo vários erros que por lá tinhas:

<?php 

include("functions.php");
require('fpdf/fpdf.php');
include("settings.php");


$connect = mysql_connect($server,$user,$pass);
$select_db = mysql_select_db($db);
$query = "SELECT Autor.Apelido,Autor.Nome,Livro.Titulo,Livro.IDLivro FROM Autor,Autoria,Livro WHERE Autor.IDAutor=Autoria.IDAutor AND Autoria.IDLivro=Livro.IDLivro ORDER BY Autor.Apelido";
$do_query=mysql_query($query);


$nome =  "Catalogos/". $_POST['nome'] .".txt";
$id = 1; //Incrementador 

if(isset($_POST['catalogar'])) {
	$fp = fopen($nome, "w");// Cria o Ficheiro
	//Criar PDF
        $pdf = new FPDF();
        $pdf->AddPage();
        $pdf->SetFont('Arial','B',16);
        $pdf->Cell(40,10,'Hello World!');
        $pdf->Cell(60,10,'Powered by FPDF.',0,1,'C'); 
        $pdf->Output();
         
        $titulo = "############ Catalogo : " . $nome . " ############\n\n";
        $write = fwrite($fp, $titulo);
        $query = "SELECT * FROM Autor,Autoria,Livro WHERE Autor.IDAutor = Autoria.IDAutor AND Autoria.IDLivro = Livro.IDLivro";
        $do_Query = mysql_query($query);
        	while($row = mysql_fetch_assoc($do_Query)) {
            	if(isset($_POST[$row['IDLivro']])) {
				$texto = $id . "-" . $row['Apelido'] . "," . $row['Nome'] . "-" . $row['titulo']  . "(" . $row['Ano'] . ")\n";
				$write =  fwrite($fp, $texto);
					if(!$write) {
						echo "Falhou a escrever ficheiro";
					}
					else {
						echo "Ficheiro escrito com sucesso";
					}
				++$id;
			}
		}
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Administração .: Nova Ecléctica; :. Powered by Tiago Palhota</title>
<link href="CSS/admin.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
a:link {
color: #333333;
}
a:visited {
color: #333333;
}
a:hover {
color: #666666;
}
a:active {
color: #333333;
}
body,td,th {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
}
-->
</style>
</head>

<body>
<div id="banner">
	<img src="../images/Nve/topadmin.png" alt="NovaEclectica" width="360" height="34" />
</div>
<div id="menu">
	<a href="index.php" class="menu_link">
		HOME
	</a>
	 - 
	<a href="newsletter.php" class="menu_link">
		Criar Newsletter
	</a>
	 - 
	<a href="catalogando.php" class="menu_link">
		Criar Catálogos
	</a> -
	<a href="destaques.php" class="menu_link">
		Criar Destaques
	</a>
	 - 
	<a href="adicionar.php" class="menu_link">
		Gestão de Livros
	</a>
	 - 
	<a href="logado.php?action=logout" class="menu_link">
		LOGOUT
	</a>
</div>
<div id="conteudo">
	<form name="catalogando" method="post">
		<table border="0">
		<tr>
			<td>
				Nome do Catalogo
			</td>
			<td>
				<input type="text" name="nome" />
			</td>
		</tr>
		<tr>
			<td>
				Data
			</td>
			<td>
				 <? echo date("F j, Y, g:i a"); ?>
			</td>
		</tr>
		</table>
	</form>
</div>
<div id="rodape">
	<img src="../images/rodape.jpg" alt="Developed and Designed by Tiago Palhota" />
	<br />
	<a href="../docs/privacidade">
		política de privacidade
	</a>
	 - 
	<a href="../docs/parcerias">
		parcerias
	</a>
	 - 
	<a href="../docs/copyright">
		informações de copyright
	</a>
</div>
<FORM NAME='books' METHOD='POST'>
<table border='1' align='center'>
<TR>
	<TD>
		APELIDO
	</TD>
	<TD>
		NOME
	</TD>
	<TD>
		LIVRO
	</TD>
	<TD>
		Catalogar
	</TD>
</TR>
<?php
while($row = mysql_fetch_assoc($do_query)){
	echo "	<tr>
				<td>" 
					.$row['Apelido']."
				</td>
				<td>"
					.$row['Nome']."
				</td>
				<td>"
					.$row['Titulo']."
				<td>
					<input type='checkbox' name=".$row['IDLivro']." />
				</td>
			</tr>";
}
?>   
<tr>
	<td align='center' colspan='4'>
		<input type='submit' value='Catalogar' name='catalogar' />
	</td>
</tr>
</table>
</form>
</body>
</html>

Testa lá a ver se funciona..... (apenas refiz o código, como é óbvio não consigo testar a funcionalidade).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que já encontrei o teu problema, fui a procura da tua class que usaste para criar ficheiros pdf, http://www.fpdf.org/, e eu li lá que quando crias o ficheiro já não podes ter nenhum conteúdo ou seja não podes dar nenhum output.

Finally, the document is closed and sent to the browser with Output(). We could have saved it in a file by passing the desired file name.

Caution: in case when the PDF is sent to the browser, nothing else must be output, not before nor after (the least space or carriage return matters). If you send some data before, you will get the error message: "Some data has already been output to browser, can't send PDF file". If you send after, your browser may display a blank page.

Logo vais ter de alterar isso tudo, ou pões o ficheiro que cria o pdf a parte ou então tens de fazer um if no inicio do ficheiro, espero que tenha ajudado Gurzi!

Tenta assim

<?php 
include("functions.php");
require('fpdf/fpdf.php'); 
include("settings.php");

      if(isset($_POST['catalogar']))
      {
        $nome =  "Catalogos/". $_POST['nome'] .".txt";
        $id = 1; //Incrementador 
        $fp = fopen($nome, "w");// Cria o Ficheiro
        //Criar PDF
        $pdf = new FPDF();
        $pdf->AddPage();
        $pdf->SetFont('Arial','B',16);
        $pdf->Cell(40,10,'Hello World!');
        $pdf->Cell(60,10,'Powered by FPDF.',0,1,'C'); 
        $pdf->Output();
         
        $titulo = "############ Catalogo : " . $nome . " ############\n\n";
        $write = fwrite($fp, $titulo);
        $query = "SELECT * FROM Autor,Autoria,Livro WHERE Autor.IDAutor = Autoria.IDAutor AND Autoria.IDLivro = Livro.IDLivro";
        $do_Query = mysql_query($query);
        while($row = mysql_fetch_assoc($do_Query)) {
            if(isset($_POST[$row['IDLivro']])) 
            {
                $texto = $id . "-" . $row['Apelido'] . "," . $row['Nome'] . "-" . $row['titulo']  . "(" . $row['Ano'] . ")\n";
                
                 $write =  fwrite($fp, $texto);
                 if(!$write)
                  echo "Falhou a escrever ficheiro";
                 else
                 echo "Ficheiro escrito com sucesso";
               ++$id;
            }
        }

}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Administração .: Nova Ecléctica; :. Powered by Tiago Palhota</title>
<link href="CSS/admin.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
a:link {
color: #333333;
}
a:visited {
color: #333333;
}
a:hover {
color: #666666;
}
a:active {
color: #333333;
}
body,td,th {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
}
-->
</style>
</head>

<body>
<div id="banner"><img src="../images/Nve/topadmin.png" alt="NovaEclectica" width="360" height="34" /></div>
<div id="menu"><a href="index.php" class="menu_link">HOME</a> - <a href="newsletter.php" class="menu_link">Criar Newsletter</a> - <a href="catalogando.php" class="menu_link">Criar Catálogos</a> -
<a href="destaques.php" class="menu_link">Criar Destaques</a> -
<a href="adicionar.php" class="menu_link">Gestão de Livros</a>-
<a href="logado.php?action=logout" class="menu_link">LOGOUT</a> </div>

<div id="conteudo">
<form name="catalogando" method="post">
<table border="0">
<tr>
<td>Nome do Catalogo</td>
<td><input type="text" name="nome"></td></tr>
<tr>
<td>Data</td>
<td> <? echo date("F j, Y, g:i a"); ?></td>
</tr>
</table>
</div>
<div id="rodape"><img src="../images/rodape.jpg" alt="Developed and Designed by Tiago Palhota" /><br />
<a href="../docs/privacidade">política de privacidade</a> - <a href="../docs/parcerias">parcerias</a> - <a href="../docs/copyright">informações de copyright</a></div>
<?
$connect = mysql_connect($server,$user,$pass);
$select_db = mysql_select_db($db);
$query = "SELECT Autor.Apelido,Autor.Nome,Livro.Titulo,Livro.IDLivro FROM Autor,Autoria,Livro WHERE Autor.IDAutor=Autoria.IDAutor AND Autoria.IDLivro=Livro.IDLivro ORDER BY Autor.Apelido";
$do_query=mysql_query($query);



echo "<table border='1' align='center'><FORM NAME='books' METHOD='POST'>
<TR><TD>APELIDO</TD><TD>NOME</TD><TD>LIVRO</TD><TD>Catalogar</TD></TR>";

   
   while($row = mysql_fetch_assoc($do_query)){
        
       
            echo "<tr><td>" .$row['Apelido']."</td><td>".$row['Nome']."</td><td>".$row['Titulo']."<td><input type='checkbox' name=".$row['IDLivro'].">";
            
            
            }
            
      echo "<tr><tr><td align='center' colspan='4'><input type='submit' value='Catalogar' name='catalogar'> </form></tr></table>";
     echo '</body>
     </html>';
?>



0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

RayBacK, a tua resposta foi a mesma que tinha colocado 6 horas antes.....  :cheesygrin: eheheheh (é o que dá não ler os posts todos  :P)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora