2017-09-05 2 views
0

Ich habe ein Problem mit der Übergabe von Variablen an fpdf. Beim ersten Skript wird der Post-Text an die Filterklasse gesendet. Die Klasse gibt gefilterte POST-s als 2-Element-Array zurück. Erste Skript sieht wie folgt aus:Übergabe von Variablen an fpdf

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

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

Ich Extrahieren $filter Array-Variablen aus, es zu erhalten (Filterung Skript Variablen des POST erstellen, die gesendet werden, und ich kann sie echo, damit ich weiß nicht, ob dies ist sogar notwendig).

Das zweite Skript sieht wie folgt aus:

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(); 

und ich bekomme diese Fehlermeldung:

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 

Wie soll ich die Variablen übergeben? Interessant: es funktioniert, wenn ich die ungefilterte $_POST mit dem folgenden Code verwenden:

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(); 

EDIT: Ich werde die ursprüngliche Form und Filterfunktion schreiben:
Form:

<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> 

Filterfunktion:

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

Ich vermute, dass Sie '$ tytul = $ _POST ['tytul'];' im zweiten Skript verwenden? Oder ist das in einem anderen Skript festgelegt, das nicht gegeben ist? Ohne zu wissen, wie sie gesetzt werden, kann ich Ihnen keine gute Antwort geben, aber es ist wahrscheinlich, dass Sie Klassenvariablen verwenden, die Sie nicht korrekt verwenden. –

+0

Ich denke, Sie könnten Recht haben "Klassenvariablen" nicht richtig verwenden. Aber das ganze Skript läuft so ab: 2 Textformen (tytul i petycja) übergeben von $ _POST an das erste Skript -> filtern $ _POST -> gefilterte Variablen zurück zum ersten Skript -> Variablen an zweites Skript übergeben. Wenn Sie mehr Code benötigen, lassen Sie mich wissen, was ich schreiben soll. – korni

+0

Ja, ich würde gerne sehen, wie die Variablen gesetzt werden. Also, wenn Sie diesen Code zur Verfügung stellen würden und wie diese Datei verlinkt ist (inklusive/erforderlich). –

Antwort

0

Nun, ich bin dumm. Das Problem wurde mit Klassenvariablen in Verbindung gebracht. Code, der für mich arbeiten passiert:

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(); 
     } 
} 

Jetzt brauche ich einen Weg zu denken, polieren Symbole in fpdf und Zeilenumbrüchen angezeigt werden (aber das vielleicht mit Texteditor isntead von nur Textbox getan).

Verwandte Themen