Search code examples
phpdatabaseformsmysqlifpdf

Getting error output started


I've been breaking my head about this code. It gives me an error:

Fatal error: Uncaught exception 'Exception' with message 'FPDF error: Some data has already been output, can't send PDF file (output started at /customers/0/c/6/wmc-corner.be/httpd.www/DeLijn/Dienstwissel/pdf_wissel.php:1)'

I've created the page and it worked perfectly untill changing a few minor things. Values are sent via a form. The error should be somewhere in the FPDF code but I'm unable to find it.

pdf_wissel.php

<?php
require ($_SERVER['DOCUMENT_ROOT']."/FPDF/fpdf.php");
include ($_SERVER['DOCUMENT_ROOT']."/db/connect-db.php");
$aanvrager=mysqli_real_escape_string($link,htmlspecialchars($_POST['aanvrager']));
$collega= mysqli_real_escape_string($link,htmlspecialchars($_POST['aanvrager']));
$Datumw= mysqli_real_escape_string($link,htmlspecialchars($_POST['Datumw']));
$Datumt= mysqli_real_escape_string($link,htmlspecialchars($_POST['Datumt']));
$Dienstw1= mysqli_real_escape_string($link,htmlspecialchars($_POST['Dienstw1']));
$Dienstw2= mysqli_real_escape_string($link,htmlspecialchars($_POST['Dienstw2']));
$Dienstt1= mysqli_real_escape_string($link,htmlspecialchars($_POST['Dienstt1']));
$Dienstt2= mysqli_real_escape_string($link,htmlspecialchars($_POST['Dienstt2']));
$stelplaats= mysqli_real_escape_string($link,htmlspecialchars($_POST['stelplaats']));

$Wissel=date('d/m/Y',strtotime($Datumw));
$Tegenprestatie=date('d/m/Y',strtotime($Datumt));
$status="Aangevraagd";
$vandaag = date("d/m/Y");
if(isset($_POST['submit']))
{
$aanvrager=$_POST['aanvrager'];
$collega=$_POST['collega'];
$stelplaats=$_POST['stelplaats'];

 if($Dienstw1 == "X" or $Dienstw1 =="T" or $Dienstw1 == "WV" or $Dienstw1 =="WV01" or $Dienstw1 =="CV" or $Dienstw1 =="CV01" or $Dienstw1 =="HU" or $Dienstw1 =="HU01" or $Dienstw1 =="AV01" or $Dienstw1 =="AV" or $Dienstw2 == "X" or $Dienstw2 =="T" or $Dienstw2 == "WV" or $Dienstw2 =="WV01" or $Dienstw2 =="CV" or $Dienstw2 =="CV01" or $Dienstw2 =="HU" or $Dienstw2 =="HU01" or $Dienstw2 =="AV01" or $Dienstw2 =="AV" )
 {

$Datumw=mysqli_real_escape_string($link,htmlspecialchars($_POST['Datumw']));
$Datumt=mysqli_real_escape_string($link,htmlspecialchars($_POST['Datumt']));
$Dienstw1=mysqli_real_escape_string($link,htmlspecialchars($_POST['Dienstw1']));
$Dienstw2=mysqli_real_escape_string($link,htmlspecialchars($_POST['Dienstw2']));
$Dienstt1=mysqli_real_escape_string($link,htmlspecialchars($_POST['Dienstt1']));
$Dienstt2=mysqli_real_escape_string($link,htmlspecialchars($_POST['Dienstt2']));
 }
 else
 {
$Datumt=$Datumw;
$Dienstw1=mysqli_real_escape_string($link,htmlspecialchars($_POST['Dienstw1']));
$Dienstw2=mysqli_real_escape_string($link,htmlspecialchars($_POST['Dienstw2']));
$Dienstt1="";
$Dienstt2="";
 }  


    $result1 = mysqli_query($link,"SELECT * FROM WMC_users WHERE id='$A_id'") 
    or die(mysqli_error()); 
    $row1 = mysqli_fetch_array( $result1 );
    $aanvrager=$row1['name'];
    $pnr_aanvrager=$row1['pnr'];
    $kast_aanvrager=$row1['kast'];
    $aanvrager_sign=$row1['sign'];
    $aanvrager_email=$row1['email'];

     $result2 = mysqli_query($link,"SELECT * FROM WMC_users WHERE id='$T_id'") 
    or die(mysqli_error()); 
    $row2 = mysqli_fetch_array( $result2 );
    $chauffeur2=$row2['name'];
    $pnr_chauffeur2=$row2['pnr'];
    $chauffeur2_sign=$row2['sign'];
    $chauffeur2_email=$row2['email'];
class PDF extends FPDF
{

    function Header()
{


$this->Image('http://www.wmc-corner.be/images/DeLijn.png',5,3,25);
// Arial bold 15
$this->SetFont('Arial','B',16);
$this->Cell(80);
$this->Cell(20,2,'AANVRAAG DIENSTWISSEL',0,0,'C');
$this->Ln(25);


}

// Page footer
function Footer()
{
// Position at 1.5 cm from bottom
$this->SetY(-15);
// Arial italic 8
$this->SetFont('Arial','I',8);
// Page number
$this->Cell(0,10,'Pagina '.$this->PageNo().'/{nb}',0,0,'C');
}
}
$pdf = new PDF();
$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->SetFont('Times','B',8);
$pdf->cell(30,2,'================================================================================================================',0,1);
$pdf->SetFont('Times','',6);
$pdf->MultiCell(0,5,"De afspraken over het wisselen van diensten bij chauffeurs zijn vermeld in dienstbevel 2186",0);
$pdf->MultiCell(0,5,"Bijzondere aandachtspunten:",0);
$pdf->MultiCell(0,5,"1) De diensten die gewisseld worden dienen evenredig te zijn qua duur.",0);
$pdf->MultiCell(0,5,"2) Er is alleen een tegenprestatie vereist bij een wissel dienst om rustdag. De tegenprestatie moet plaatsvinden binnen hetzelfde trimester als de initiele wissel, indien dit niet lukt, gelieve zich te wenden tot de dienst Planning of jouw stelplaatsverantwoordelijke.",0);
$pdf->MultiCell(0,5,"3) De aanvraag voor een wissel mag pas ingediend worden nadat de betrokkenen hebben nagekeken dat de minimale nachtrust (8u) gerespecteerd wordt en dat ze minimaal 1 rustdag hebben om de 7 kalenderdagen. ",0);
$pdf->MultiCell(0,5,"4) Als de wissel om ziekte of dwingende verlof niet kan doorgaan, dan zal de chauffeur die ziek of in dwingend verlof is, de planning of de betrokken stelplaats op de hoogte brengen. Als de wissel reeds goedgekeurd werd, voorziet de dienst planning of de betrokken stelplaats een planning in functie van de ruil. Was de wissel nog niet goedgekeurd dan komt de aanvraag te vervallen.",0);
$pdf->SetFont('Times','B',8);
$pdf->Cell(30,10,'Datum: '.$vandaag,0,0,'B');
$pdf->Cell(80);
$pdf->Cell(30,10,'Stelplaats: '.$stelplaats,0,0,'B');
$pdf->Ln(10);
$x = $pdf->GetX();
$y = $pdf->GetY();
$pdf->Cell(80,10,'formulier invullen vanuit standpunt van de aanvrager ',1,0,'B');
$pdf->SetXY($x + 80, $y);
$pdf->Cell(80,10,'tegenprestatie enkel invullen bij wissel rustdag om dienst',1,0,'B');
$pdf->Ln(10);
$x = $pdf->GetX();
$y = $pdf->GetY();
$pdf->multiCell(80,5,"Datum wissel: ".$Datumw." \nDienst oorspronkelijk: ".$Dienstw1." \n(geplande dienst aanvrager) \nNieuw: ".$Dienstw2."\n(geplande dienst chauffeur 2)",1,'L',0);
$pdf->SetXY($x + 80, $y);
$pdf->multiCell(80,5,"Datum tegenprestatie: ".$datumt." \nDienst oorspronkelijk:".$Dienstt1." \nNieuw: ".$Dienstt2."\n  \n   ",1,'L',0);
if( empty ($aanvrager_sign) &&  empty ($chauffeur2_sign))
{
$t_aanvrager_sign="";
$t_chauffeur2_sign="";

}
if( empty ($aanvrager_sign)  && !empty ($chauffeur2_sign))
{
$t_aanvrager_sign="";
$t_chauffeur2_sign=$pdf->image($chauffeur2_sign,140,132,20);

}
if(empty ($chauffeur2_sign ) && !empty ($aanvrager_sign))
{
$t_aanvrager_sign=$pdf->image($aanvrager_sign,30,132,20);
$t_chauffeur2_sign="";

}

if(!empty ($chauffeur2_sign ) && !empty ($aanvrager_sign))
{
$t_aanvrager_sign=$pdf->image($aanvrager_sign,30,132,20);
$t_chauffeur2_sign=$pdf->image($chauffeur2_sign,140,132,20);
}
  $pdf->multiCell(160,5,"Aanvrager: ".$aanvrager."                                                                                                                        Chauffeur2:  ".$chauffeur2." \nPersoneelsnr: ".$pnr_aanvrager."                                Kastnr: ".$kast_aanvrager."                                                                            Personeelsnr: ".$pnr_chauffeur2." \n  \n \nHandtekening:   ".$t_aanvrager_sign."                                                                                                                                 Handtekening: ".$t_chauffeur2_sign,1,'L',0); 


 $pdf->Ln(5);
$pdf->cell(30,2,'================================================================================================================',0,1);
$pdf->Ln(5);
$pdf->Cell(80);
$pdf->SetFont('Arial','B',16);
$pdf->Cell(20,2,'TOEWIJZING DIENSTWISSEL',0,0,'C');
$pdf->Ln(5);
$pdf->SetFont('Times','B',8);
$x = $pdf->GetX();
$y = $pdf->GetY();
$pdf->Cell(80,10,'formulier invullen vanuit standpunt van de aanvrager ',1,0,'B');
$pdf->SetXY($x + 80, $y);
$pdf->Cell(80,10,'tegenprestatie enkel invullen bij wissel rustdag om dienst',1,0,'B');
$pdf->Ln(10);
$pdf->SetFont('Times','B',8);
$x = $pdf->GetX();
$y = $pdf->GetY();
$pdf->multiCell(80,5,"Datum wissel: ".$Datumw." \nDienst oorspronkelijk: ".$Dienstw1." \n(geplande dienst aanvrager) \nNieuw: ".$Dienstw2."\n(geplande dienst chauffeur 2)",1,'L',0);
$pdf->SetXY($x + 80, $y);
$pdf->multiCell(80,5,"Datum tegenprestatie: ".$Datumt." \nDienst oorspronkelijk:".$Dienstt1." \nNieuw: ".$Dienstt2."\n  \n   ",1,'L',0);
if( empty ($aanvrager_sign) &&  empty ($chauffeur2_sign))
{
$t_aanvrager_sign="";
$t_chauffeur2_sign="";

}
if( empty ($aanvrager_sign)  && !empty ($chauffeur2_sign))
{
$t_aanvrager_sign="";
$t_chauffeur2_sign=$pdf->image($chauffeur2_sign,140,210,20);

}
if(empty ($chauffeur2_sign ) && !empty ($aanvrager_sign))
{
$t_aanvrager_sign=$pdf->image($aanvrager_sign,30,210,20);
$t_chauffeur2_sign="";

}

if(!empty ($chauffeur2_sign ) && !empty ($aanvrager_sign))
{
$t_aanvrager_sign=$pdf->image($aanvrager_sign,30,210,20);
$t_chauffeur2_sign=$pdf->image($chauffeur2_sign,140,210,20);
}
$pdf->multiCell(160,5,"Aanvrager: ".$aanvrager."                                                                                                                        Chauffeur2:  ".$chauffeur2." \nPersoneelsnr: ".$pnr_aanvrager."                                Kastnr: ".$kast_aanvrager."                                                                            Personeelsnr: ".$pnr_chauffeur2." \n  \n \nHandtekening:   ".$t_aanvrager_sign."                                                                                                                                 Handtekening: ".$t_chauffeur2_sign,1,'L',0); 

$pdf->Ln(10);
$pdf->multiCell(160,5,"1) Voor ontvangst:                                        Datum:                                                            Naam: \n2) Goedkeuring van de verantwoordelijke:               Ja      Nee    \n3)  Registratie:                                         OK                                                                                          Handtekening:",1,'L',0);
 $filename = "Dienstwissel_".$Datumw.".pdf";  
$pdf->Output($filename,'I');             
}
?>

After this page, normally a pdf is created and puts values in the database. The code for putting it in a databse is not with it. A second person needs to push a link in a list (edit.php?id=$id) that turns to a other php file. Except this one takes the values from the database and creates a new pdf file. The same as the code above. Strangely this second page works great...

edit.php

<?php
$id=$_GET['id'];

$vandaag = date("d/m/Y");
require ($_SERVER['DOCUMENT_ROOT']."/FPDF/fpdf.php"); 

 $server = 'xxxx';
 $user = 'xxxx';
 $pass = 'xxxx';
 $db = 'xxxx';
 $link = mysqli_connect($server, $user, $pass);
  $dbs= mysqli_select_db($link,$db);
  $result = mysqli_query($link,"SELECT * FROM WMC_DeLijn_Wissel WHERE w_id='$id'") 
    or die(mysqli_error()); 
    $row = mysqli_fetch_array( $result );

    $w_id=$row['w_id'];
    $A_id=$row['A_id'];
    $T_id=$row['T_id'];
    $Dienstw1=$row['AW_Dienst'];
    $Dienstw2=$row['TW_Dienst'];
    $Dienstt1=$row['AT_Dienst'];
    $Dienstt2=$row['TT_Dienst'];
    $Datumw=date("d/m/Y",strtotime($row['Datumw']));
    $datumw=$row['Datumw'];
    $Datumt=$row['Datumt'];
    //$datumw= date("Y-m-d",strtotime($row['Datumw']));
    $status= "Goedgekeurd";
    $datumt= date('d/m/Y',strtotime($Datumt));
    $datumt2= date('Y-m-d',strtotime($Datumt));



 $Link="https://www.wmc-corner.be/DeLijn/Dienstwissel/Wissels/Dienstwissel_(".$id.")".$Datumw.".pdf";

 mysqli_query($link," UPDATE WMC_DeLijn_Wissel SET Link='$Link', STATUS='Goedgekeurd' WHERE w_id='$id'")
            or die(mysqli_error()); 


 if($Dienstw1 == "X" or $Dienstw1 =="T" or $Dienstw1 == "WV" or $Dienstw1 =="WV01" or $Dienstw1 =="CV" or $Dienstw1 =="CV01" or $Dienstw1 =="HU" or $Dienstw1 =="HU01" or $Dienstw1 =="AV01" or $Dienstw1 =="AV" or $Dienstw2 == "X" or $Dienstw2 =="T" or $Dienstw2 == "WV" or $Dienstw2 =="WV01" or $Dienstw2 =="CV" or $Dienstw2 =="CV01" or $Dienstw2 =="HU" or $Dienstw2 =="HU01" or $Dienstw2 =="AV01" or $Dienstw2 =="AV" )
 {

    $Dienstw1=$row['AW_Dienst'];
    $Dienstw2=$row['TW_Dienst'];
    $Dienstt1=$row['AT_Dienst'];
    $Dienstt2=$row['TT_Dienst'];
 }
 else
 {
 $datumt="";
 $Dienstt1="";
 $Dienstt2="";
 }

    $stelplaats=$row['stelplaats'];

     $result1 = mysqli_query($link,"SELECT * FROM WMC_users WHERE id='$A_id'") 
    or die(mysqli_error()); 
    $row1 = mysqli_fetch_array( $result1 );
    $aanvrager=$row1['name'];
    $pnr_aanvrager=$row1['pnr'];
    $kast_aanvrager=$row1['kast'];
    $aanvrager_sign=$row1['sign'];
    $aanvrager_email=$row1['email'];

     $result2 = mysqli_query($link,"SELECT * FROM WMC_users WHERE id='$T_id'") 
    or die(mysqli_error()); 
    $row2 = mysqli_fetch_array( $result2 );
    $chauffeur2=$row2['name'];
    $pnr_chauffeur2=$row2['pnr'];
    $chauffeur2_sign=$row2['sign'];
    $chauffeur2_email=$row2['email'];

class PDF extends FPDF
{

    function Header()
{


    $this->Image('http://www.wmc-corner.be/images/DeLijn.png',5,3,25);

    $this->SetFont('Arial','B',16);
    $this->Cell(80);
    $this->Cell(20,2,'AANVRAAG DIENSTWISSEL',0,0,'C');
    $this->Ln(25);


 }

 /

/ Page footer
     function Footer()
    {
    // Position at 1.5 cm from bottom
    $this->SetY(-15);
    // Arial italic 8
    $this->SetFont('Arial','I',8);
    // Page number
    $this->Cell(0,10,'Pagina '.$this->PageNo().'/{nb}',0,0,'C');
}
}
$pdf = new PDF();
$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->SetFont('Times','B',8);
$pdf->cell(30,2,'================================================================================================================',0,1);
$pdf->SetFont('Times','',6);
$pdf->MultiCell(0,5,"De afspraken over het wisselen van diensten bij chauffeurs zijn vermeld in dienstbevel 2186",0);
$pdf->MultiCell(0,5,"Bijzondere aandachtspunten:",0);
$pdf->MultiCell(0,5,"1) De diensten die gewisseld worden dienen evenredig te zijn qua duur.",0);
$pdf->MultiCell(0,5,"2) Er is alleen een tegenprestatie vereist bij een wissel dienst om rustdag. De tegenprestatie moet plaatsvinden binnen hetzelfde trimester als de initiele wissel, indien dit niet lukt, gelieve zich te wenden tot de dienst Planning of jouw stelplaatsverantwoordelijke.",0);
$pdf->MultiCell(0,5,"3) De aanvraag voor een wissel mag pas ingediend worden nadat de betrokkenen hebben nagekeken dat de minimale nachtrust (8u) gerespecteerd wordt en dat ze minimaal 1 rustdag hebben om de 7 kalenderdagen. ",0);
$pdf->MultiCell(0,5,"4) Als de wissel om ziekte of dwingende verlof niet kan doorgaan, dan zal de chauffeur die ziek of in dwingend verlof is, de planning of de betrokken stelplaats op de hoogte brengen. Als de wissel reeds goedgekeurd werd, voorziet de dienst planning of de betrokken stelplaats een planning in functie van de ruil. Was de wissel nog niet goedgekeurd dan komt de aanvraag te vervallen.",0);
$pdf->SetFont('Times','B',8);
$pdf->Cell(30,10,'Datum: '.$vandaag,0,0,'B');
$pdf->Cell(80);
$pdf->Cell(30,10,'Stelplaats: '.$stelplaats,0,0,'B');
$pdf->Ln(10);
$x = $pdf->GetX();
$y = $pdf->GetY();
$pdf->Cell(80,10,'formulier invullen vanuit standpunt van de aanvrager ',1,0,'B');
$pdf->SetXY($x + 80, $y);
$pdf->Cell(80,10,'tegenprestatie enkel invullen bij wissel rustdag om dienst',1,0,'B');
$pdf->Ln(10);
$x = $pdf->GetX();
$y = $pdf->GetY();
$pdf->multiCell(80,5,"Datum wissel: ".$Datumw." \nDienst oorspronkelijk: ".$Dienstw1." \n(geplande dienst aanvrager) \nNieuw: ".$Dienstw2."\n(geplande dienst chauffeur 2)",1,'L',0);
$pdf->SetXY($x + 80, $y);
$pdf->multiCell(80,5,"Datum tegenprestatie: ".$datumt." \nDienst oorspronkelijk:".$Dienstt1." \nNieuw: ".$Dienstt2."\n  \n   ",1,'L',0);
if( empty ($aanvrager_sign) &&  empty ($chauffeur2_sign))
{
    $t_aanvrager_sign="";
    $t_chauffeur2_sign="";

}
if( empty ($aanvrager_sign)  && !empty ($chauffeur2_sign))
{
    $t_aanvrager_sign="";
    $t_chauffeur2_sign=$pdf->image($chauffeur2_sign,140,132,20);

}
if(empty ($chauffeur2_sign ) && !empty ($aanvrager_sign))
{
    $t_aanvrager_sign=$pdf->image($aanvrager_sign,30,132,20);
    $t_chauffeur2_sign="";

}

if(!empty ($chauffeur2_sign ) && !empty ($aanvrager_sign))
{
    $t_aanvrager_sign=$pdf->image($aanvrager_sign,30,132,20);
    $t_chauffeur2_sign=$pdf->image($chauffeur2_sign,140,132,20);
}
   $pdf->multiCell(160,5,"Aanvrager: ".$aanvrager."                                                                                                                        Chauffeur2:  ".$chauffeur2." \nPersoneelsnr: ".$pnr_aanvrager."                                Kastnr: ".$kast_aanvrager."                                                                            Personeelsnr: ".$pnr_chauffeur2." \n  \n \nHandtekening:   ".$t_aanvrager_sign."                                                                                                                                 Handtekening: ".$t_chauffeur2_sign,1,'L',0); 


$pdf->Ln(5);
$pdf->cell(30,2,'================================================================================================================',0,1);
$pdf->Ln(5);
$pdf->Cell(80);
$pdf->SetFont('Arial','B',16);
$pdf->Cell(20,2,'TOEWIJZING DIENSTWISSEL',0,0,'C');
$pdf->Ln(5);
$pdf->SetFont('Times','B',8);
$x = $pdf->GetX();
$y = $pdf->GetY();
$pdf->Cell(80,10,'formulier invullen vanuit standpunt van de aanvrager ',1,0,'B');
$pdf->SetXY($x + 80, $y);
$pdf->Cell(80,10,'tegenprestatie enkel invullen bij wissel rustdag om dienst',1,0,'B');
$pdf->Ln(10);
$pdf->SetFont('Times','B',8);
$x = $pdf->GetX();
$y = $pdf->GetY();
$pdf->multiCell(80,5,"Datum wissel: ".$Datumw." \nDienst oorspronkelijk: ".$Dienstw1." \n(geplande dienst aanvrager) \nNieuw: ".$Dienstw2."\n(geplande dienst chauffeur 2)",1,'L',0);
$pdf->SetXY($x + 80, $y);
$pdf->multiCell(80,5,"Datum tegenprestatie: ".$Datumt." \nDienst oorspronkelijk:".$Dienstt1." \nNieuw: ".$Dienstt2."\n  \n   ",1,'L',0);
if( empty ($aanvrager_sign) &&  empty ($chauffeur2_sign))
{
    $t_aanvrager_sign="";
    $t_chauffeur2_sign="";

}
if( empty ($aanvrager_sign)  && !empty ($chauffeur2_sign))
{
    $t_aanvrager_sign="";
    $t_chauffeur2_sign=$pdf->image($chauffeur2_sign,140,210,20);

}
if(empty ($chauffeur2_sign ) && !empty ($aanvrager_sign))
{
    $t_aanvrager_sign=$pdf->image($aanvrager_sign,30,210,20);
    $t_chauffeur2_sign="";

}

if(!empty ($chauffeur2_sign ) && !empty ($aanvrager_sign))
{
    $t_aanvrager_sign=$pdf->image($aanvrager_sign,30,210,20);
    $t_chauffeur2_sign=$pdf->image($chauffeur2_sign,140,210,20);
}
   $pdf->multiCell(160,5,"Aanvrager: ".$aanvrager."                                                                                                                        Chauffeur2:  ".$chauffeur2." \nPersoneelsnr: ".$pnr_aanvrager."                                Kastnr: ".$kast_aanvrager."                                                                            Personeelsnr: ".$pnr_chauffeur2." \n  \n \nHandtekening:   ".$t_aanvrager_sign."                                                                                                                                 Handtekening: ".$t_chauffeur2_sign,1,'L',0); 

$pdf->Ln(10);
$pdf->multiCell(160,5,"1) Voor ontvangst:                                        Datum:                                                            Naam: \n2) Goedkeuring van de verantwoordelijke:               Ja      Nee    \n3)  Registratie:                                         OK                                                                                          Handtekening:",1,'L',0);
$filenamea = "Dienstwissel_(".$id.")".$Datumw.".pdf";
$filenameb = "Wissels/Dienstwissel_(".$id.")".$datumw.".pdf";
$pdf->Output($filenameb,'F');   
$pdf->Output($filenamea,'I');
$pdf->Output($filenamea,'D');
?>

It's really frustrated that it worked perfect yesterday, and after a few minor changes it stopped working. I've been trying to find the error already 24 hours now. Is there someone withe a clue? Why does the edit.php work and the pdf_wissel.php not? It contains completely the same code except the POST variables in one page, and the database values in the other page.


Solution

  • This is a common problem with FPDF library. You outputing somewhere in your script some message. "For fpdf to work properly, there cannot be any output at all beside what fpdf generates". This includes the echo, print etc statements.

    See these previous examples.

    FPDF error: Some data has already been output by using FPDF

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

    FPDF error: Some data has already been output, can't send PDF file on 000webhost

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