2017-09-05 4 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으로 수행).