将变量传递给fpdf

时间:2017-09-05 10:10:02

标签: pdf fpdf

将变量传递给fpdf时遇到问题。第一个脚本是将发送文本发送到过滤类,该类将过滤后的POST-s作为2元素数组返回。第一个脚本如下所示:

include('service.php');
include('pdf.php');

    $pdf_filter = new Pdf_filter;
    $filter = $pdf_filter->pdfFilter();
    var_dump($filter);
    extract($filter);

我正在提取$filter数组以从中获取变量(过滤脚本正在创建发送的POST变量,我可以echo它们所以我不知道这是否是必要的)。

第二个脚本如下所示:

require('E:\Xampp\php\fpdf181\fpdf.php');

$pdf = new FPDF();

$pdf->AddPage();
$pdf->SetFont('Arial','B',12);
$pdf->Cell(195,5, $tytul, 0,1,'C');
$pdf->Cell(195,5, $petycja, 0,1,'C');
$pdf->Output();

我收到了这个错误:

Notice: Undefined variable: tytul in E:\Xampp\htdocs\php\bazy_danych\obiektowe\my\pdf.php on line 10

Notice: Undefined variable: petycja in E:\Xampp\htdocs\php\bazy_danych\obiektowe\my\pdf.php on line 11

Fatal error: Uncaught exception 'Exception' with message 'FPDF error: Some data has already been output, can't send PDF file' in E:\Xampp\php\fpdf181\fpdf.php:271 
Stack trace: #0 E:\Xampp\php\fpdf181\fpdf.php(1063): FPDF->Error('Some data has a...') 
#1 E:\Xampp\php\fpdf181\fpdf.php(999): FPDF->_checkoutput() 
#2 E:\Xampp\htdocs\php\bazy_danych\obiektowe\my\pdf.php(12): FPDF->Output() 
#3 E:\Xampp\htdocs\php\bazy_danych\obiektowe\my\test.php(3): include('E:\\Xampp\\htdocs...') 
#4 {main} thrown in E:\Xampp\php\fpdf181\fpdf.php on line 271

我应该如何传递变量?有趣的是:如果我使用未经过滤的$_POST并使用以下代码,则可以使用:

require('E:\Xampp\php\fpdf181\fpdf.php');

$pdf = new FPDF();

$pdf->AddPage();
$pdf->SetFont('Arial','B',12);
$pdf->Cell(195,5, $_POST['tytul'], 0,1,'C');
$pdf->Cell(195,5, $_POST['petycja'], 0,1,'C');
$pdf->Output();  

编辑:我将发布初始表格和过滤功能:
表格:

<form action="test.php" method="POST">
    Wpisz tytuł petycji (35 znaków):<br>
        <input type="text" name="tytul" maxlength="35" size="35" placeholder="Tytuł petycji" required><br>
    Wpisz treść petycji (500 znaków):<br>
        <textarea name="petycja" maxlength="500" rows="4" cols="50" placeholder="Treść petycji" required></textarea><br>
        <input type="submit" value="Napisz petycje">        
    </form>

过滤功能:

class Pdf_filter{
    protected $title;
    protected $text;
        public function pdfFilter(){
            if (isset($_POST)){

            foreach ($_POST as $key => $val) {

            $filterVal = strip_tags($val);
            $filterVal = htmlspecialchars($filterVal);
            $filterVal = stripslashes($filterVal);
            $filterVal = str_replace("\\", "", $filterVal);

            $filter = array($key => $filterVal);
                foreach ($filter as $key => $val) {
                    echo "[$$key]";
                    echo "$val<br>";
                    ${$key} = $val;
                    }
            }
        if(!preg_match("/^[\sa-zA-ZĄĆĘŁŃÓŚŹŻąćęłńóśźż0-9-_,.:\'?()]+$/", $tytul)){
            echo "Niedozwolone znaki $tytul!";
            exit();
            }
            elseif(!preg_match("/^[\sa-zA-ZĄĆĘŁŃÓŚŹŻąćęłńóśźż0-9-_,.:\'?()]+$/", $petycja)){
                echo "Niedozwolone znaki $petycja!";
                exit();
            }
            else{
                return $filter = array('tytul'=>$tytul,'petycja'=>$petycja);
            }
    }
    else{
        echo "Proszę wypełnić wszytskie pola!";
        }
    }
}

1 个答案:

答案 0 :(得分:0)

嗯,我很蠢。问题与类变量有关。恰好适用于我的代码:

class Pdf extends FPDF{
        protected $filter;
        protected $tytul;
        protected $petycja;
        public function __construct($filter){
            $this->filter = extract($filter);
            $this->tytul = $tytul;
            $this->petycja = $petycja;
        }
        public function tytul(){
            return $this->tytul;
        }
        public function petycja(){
            return $this->petycja;
        }
        public function dokument(){
            parent::__construct();
            $this->AddPage();
            $this->SetFont('Arial','B',15);
            $this->Cell(195,5, $this->tytul, 0,1,'C');
            $this->Cell(195,5, $this->petycja, 0,1,'C');
            $this->Output();
        }
}

现在我需要考虑一种在fpdf和换行符中显示抛光符号的方法(但可能使用文本编辑器而不仅仅是文本框)。