2017-09-05 260 views
0

我有一個將變量傳遞給fpdf的問題。第一個腳本獲取發送到過濾類的過帳文本,該類將過濾後的POST-s作爲2元素數組返回。首先劇本是這樣的:將變量傳遞給fpdf

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!"; 
     } 
    } 
} 
+0

我猜你正在使用'$ tytul = $ _POST ['tytul'];'在第二個腳本中?或者是在其他一些沒有給出的腳本中設置?不知道它們是如何設置的,我無法給你一個很好的答案,但很可能你正在使用沒有正確使用的類變量。 –

+0

我想你可能是正確的「使用類變量」不正確。但是整個腳本是這樣的:2個文本形式(tytul i petycja)通過$ _POST傳遞給第一個腳本 - >過濾$ _POST - >將過濾的變量返回到第一個腳本 - >將變量傳遞給第二個腳本。如果您需要更多代碼,請讓我知道要寫什麼。 – korni

+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和換行符拋光符號(但也有可能只用文本框的文本編輯器isntead完成)。