SitePoint Sponsor

User Tag List

Results 1 to 3 of 3
  1. #1
    SitePoint Enthusiast
    Join Date
    May 2003
    Location
    Norway
    Posts
    47
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    need help for error

    I know it's a long script but I can't fix it myself
    PHP Code:
    <html>
    <head>
    <title>sqlrapport</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <body>
    <?php
    define
    (FPDF_FONTPATH,'pdf/font/');
    require(
    'pdf/fpdf.php');

    class 
    PDF extends FPDF{

    var 
    $tablewidths;
    var 
    $headerset;
    var 
    $footerset;

    function 
    _beginpage($orientation) {
        
    $this->page++;
        if(!
    $this->pages[$this->page]) // solved the problem of overwriting a page, if it already exists
            
    $this->pages[$this->page]='';
        
    $this->state=2;
        
    $this->x=$this->lMargin;
        
    $this->y=$this->tMargin;
        
    $this->lasth=0;
        
    $this->FontFamily='';
        
    //Page orientation
        
    if(!$orientation)
            
    $orientation=$this->DefOrientation;
        else
        {
            
    $orientation=strtoupper($orientation{0});
            if(
    $orientation!=$this->DefOrientation)
                
    $this->OrientationChanges[$this->page]=true;
        }
        if(
    $orientation!=$this->CurOrientation)
        {
            
    //Change orientation
            
    if($orientation=='P')
            {
                
    $this->wPt=$this->fwPt;
                
    $this->hPt=$this->fhPt;
                
    $this->w=$this->fw;
                
    $this->h=$this->fh;
            }
            else
            {
                
    $this->wPt=$this->fhPt;
                
    $this->hPt=$this->fwPt;
                
    $this->w=$this->fh;
                
    $this->h=$this->fw;
            }
            
    $this->PageBreakTrigger=$this->h-$this->bMargin;
            
    $this->CurOrientation=$orientation;
        }
    }

    function 
    Header()
    {
        global 
    $maxY;

        
    // Check if header for this page already exists
        
    if(!$this->headerset[$this->page]) {

            foreach(
    $this->tablewidths as $width) {
                
    $fullwidth += $width;
            }
            
    $this->SetY(($this->tMargin) - ($this->FontSizePt/$this->k)*2);
            
    $this->cellFontSize $this->FontSizePt ;
            
    $this->SetFont('Arial','',( ( $this->titleFontSize) ? $this->titleFontSize $this->FontSizePt ));
            
    $this->Cell(0,$this->FontSizePt,$this->titleText,0,1,'C');
            
    $l = ($this->lMargin);
            
    $this->SetFont('Arial','',$this->cellFontSize);
            foreach(
    $this->colTitles as $col => $txt) {
                
    $this->SetXY($l,($this->tMargin));
                
    $this->MultiCell($this->tablewidths[$col], $this->FontSizePt,$txt);
                
    $l += $this->tablewidths[$col] ;
                
    $maxY = ($maxY $this->getY()) ? $this->getY() : $maxY ;
            }
            
    $this->SetXY($this->lMargin,$this->tMargin);
            
    $this->setFillColor(200,200,200);
            
    $l = ($this->lMargin);
            foreach(
    $this->colTitles as $col => $txt) {
                
    $this->SetXY($l,$this->tMargin);
                
    $this->cell($this->tablewidths[$col],$maxY-($this->tMargin),'',1,0,'L',1);
                
    $this->SetXY($l,$this->tMargin);
                
    $this->MultiCell($this->tablewidths[$col],$this->FontSizePt,$txt,0,'C');
                
    $l += $this->tablewidths[$col];
            }
            
    $this->setFillColor(255,255,255);
            
    // set headerset
            
    $this->headerset[$this->page] = 1;
        }

        
    $this->SetY($maxY);
    }

    function 
    Footer() {
        
    // Check if footer for this page already exists
        
    if(!$this->footerset[$this->page]) {
            
    $this->SetY(-15);
            
    //Page number
            
    $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
            
    // set footerset
            
    $this->footerset[$this->page] = 1;
        }
    }

    function 
    morepagestable($lineheight=8) {
        
    // some things to set and 'remember'
        
    $l $this->lMargin;
        
    $startheight $h $this->GetY();
        
    $startpage $currpage $this->page;

        
    // calculate the whole width
        
    foreach($this->tablewidths as $width) {
            
    $fullwidth += $width;
        }

        
    // Now let's start to write the table
        
    $row 0;
        while(
    $data=mysql_fetch_row($this->results)) {
            
    $this->page $currpage;
            
    // write the horizontal borders
            
    $this->Line($l,$h,$fullwidth+$l,$h);
            
    // write the content and remember the height of the highest col
            
    foreach($data as $col => $txt) {

                
    $this->page $currpage;
                
    $this->SetXY($l,$h);
                
    $this->MultiCell($this->tablewidths[$col],$lineheight,$txt,0,$this->colAlign[$col]);

                
    $l += $this->tablewidths[$col];

                if(
    $tmpheight[$row.'-'.$this->page] < $this->GetY()) {
                    
    $tmpheight[$row.'-'.$this->page] = $this->GetY();
                }
                if(
    $this->page $maxpage)
                    
    $maxpage $this->page;
                unset(
    $data[$col]);
            }
            
    // get the height we were in the last used page
            
    $h $tmpheight[$row.'-'.$maxpage];
            
    // set the "pointer" to the left margin
            
    $l $this->lMargin;
            
    // set the $currpage to the last page
            
    $currpage $maxpage;
            unset(
    $datas[$row]);
            
    $row++ ;
        }
        
    // draw the borders
        // we start adding a horizontal line on the last page
        
    $this->page $maxpage;
        
    $this->Line($l,$h,$fullwidth+$l,$h);
        
    // now we start at the top of the document and walk down
        
    for($i $startpage$i <= $maxpage$i++) {
            
    $this->page $i;
            
    $l $this->lMargin;
            
    $t = ($i == $startpage) ? $startheight $this->tMargin;
            
    $lh = ($i == $maxpage) ? $h $this->h-$this->bMargin;
            
    $this->Line($l,$t,$l,$lh);
            foreach(
    $this->tablewidths as $width) {
                
    $l += $width;
                
    $this->Line($l,$t,$l,$lh);
            }
        }
        
    // set it to the last page, if not it'll cause some problems
        
    $this->page $maxpage;
    }

    function 
    connect($host='',$username='',$passwd='',$db=''){
        
    $this->conn mysql_connect($host,$username,$passwd) or die(mysql_error() );
        
    mysql_select_db($db,$this->conn) or die( mysql_error() );
        return 
    true;

    }

    function 
    query($query){
        
    $this->results mysql_query($query,$this->conn);
        
    $this->numFields mysql_num_fields($this->results);
    }

    function 
    mysql_report($query,$dump=false,$attr=array()){

        foreach(
    $attr as $key=>$val){
            
    $this->$key $val ;
        }

        
    $this->query($query);

        
    // if column widths not set
        
    if(!isset($this->tablewidths)){

            
    // starting col width
            
    $this->sColWidth = (($this->w-$this->lMargin-$this->rMargin))/$this->numFields;

            
    // loop through results header and set initial col widths/ titles/ alignment
            // if a col title is less than the starting col width / reduce that column size
            
    for($i=0;$i<$this->numFields;$i++){
                
    $stringWidth $this->getstringwidth(mysql_field_name($this->results,$i)) + ;
                if( (
    $stringWidth) < $this->sColWidth){
                    
    $colFits[$i] = $stringWidth ;
                    
    // set any column titles less than the start width to the column title width
                
    }
                
    $this->colTitles[$i] = mysql_field_name($this->results,$i) ;
                switch (
    mysql_field_type($this->results,$i)){
                    case 
    'int':
                        
    $this->colAlign[$i] = 'R';
                        break;
                    default:
                        
    $this->colAlign[$i] = 'L';
                }
            }

            
    // loop through the data, any column whose contents is bigger that the col size is
            // resized
            
    while($row=mysql_fetch_row($this->results)){
                foreach(
    $colFits as $key=>$val){
                    
    $stringWidth $this->getstringwidth($row[$key]) + ;
                    if( (
    $stringWidth) > $this->sColWidth ){
                        
    // any col where row is bigger than the start width is now discarded
                        
    unset($colFits[$key]);
                    }else{
                        
    // if text is not bigger than the current column width setting enlarge the column
                        
    if( ($stringWidth) > $val ){
                            
    $colFits[$key] = ($stringWidth) ;
                        }
                    }
                }
            }

            foreach(
    $colFits as $key=>$val){
                
    // set fitted columns to smallest size
                
    $this->tablewidths[$key] = $val;
                
    // to work out how much (if any) space has been freed up
                
    $totAlreadyFitted += $val;
            }

            
    $surplus = (sizeof($colFits)*$this->sColWidth) - ($totAlreadyFitted);
            for(
    $i=0;$i<$this->numFields;$i++){
                if(!
    in_array($i,array_keys($colFits))){
                    
    $this->tablewidths[$i] = $this->sColWidth + ($surplus/(($this->numFields)-sizeof($colFits)));
                }
            }

            
    ksort($this->tablewidths);

            if(
    $dump){
                
    Header('Content-type: text/plain');
                for(
    $i=0;$i<$this->numFields;$i++){
                    if(
    strlen(mysql_field_name($this->results,$i))>$flength){
                        
    $flength strlen(mysql_field_name($this->results,$i));
                    }
                }
                switch(
    $this->k){
                    case 
    72/25.4:
                        
    $unit 'millimeters';
                        break;
                    case 
    72/2.54:
                        
    $unit 'centimeters';
                        break;
                    case 
    72:
                        
    $unit 'inches';
                        break;
                    default:
                        
    $unit 'points';
                }
                print 
    "All measurements in $unit\n\n";
                for(
    $i=0;$i<$this->numFields;$i++){
                    
    printf("%-{$flength}s : %-10s : %10f\n",
                        
    mysql_field_name($this->results,$i),
                        
    mysql_field_type($this->results,$i),
                        
    $this->tablewidths[$i] );
                }
                print 
    "\n\n";
                print 
    "\$pdf->tablewidths=\n\tarray(\n\t\t";
                for(
    $i=0;$i<$this->numFields;$i++){
                    (
    $i<($this->numFields-1)) ?
                    print 
    $this->tablewidths[$i].", /* ".mysql_field_name($this->results,$i)." */\n\t\t":
                    print 
    $this->tablewidths[$i]." /* ".mysql_field_name($this->results,$i)." */\n\t\t";
                }
                print 
    "\n\t);\n";
                exit;
            }

        } else { 
    // end of if tablewidths not defined

            
    for($i=0;$i<$this->numFields;$i++){
                
    $this->colTitles[$i] = mysql_field_name($this->results,$i) ;
                switch (
    mysql_field_type($this->results,$i)){
                    case 
    'int':
                        
    $this->colAlign[$i] = 'R';
                        break;
                    default:
                        
    $this->colAlign[$i] = 'L';
                }
            }
        }

        
    mysql_data_seek($this->results,0);
        
    $this->Open();
        
    $this->setY($this->tMargin);
        
    $this->AddPage();
        
    $this->morepagestable($this->FontSizePt);
        
    $this->Output();
    }

    }
    $pdf=new PDF('L','pt','A3');
    $pdf->SetFont('Arial','',9);
    $pdf->AliasNbPages();
    $pdf->connect('host,'username','password','db');
    $attr=array('
    titleFontSize'=>18,'titleText'=>'Oversikt over heiser');
    $pdf->mysql_report("SELECT * FROM Heis",false,$attr);
    ?> 
    </body>
    </html>
    The error message I get is:Warning: Cannot modify header information - headers already sent by (output started at sqlrapp.php:7) in fpdf.php on line 997
    FPDF error: Some data has already been output to browser, can't send PDF file

  2. #2
    SitePoint Addict BenANFA's Avatar
    Join Date
    Apr 2003
    Location
    Bath, UK
    Posts
    353
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I assume that sqlrapp.php is the name of the file listed. It sounds like the included file fpdf.php is trying to call the php function header at some point. However you have already started outputing the html page.

    If I am right then you will have edit you file so that it includes the file fpdf.php before outputing any html (i.e. before the <html> tag).

    This is also true for cookies and sessions.

  3. #3
    SitePoint Enthusiast
    Join Date
    May 2003
    Location
    Norway
    Posts
    47
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    ok..thanks.

    didn't know that...


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •