Manfred: tcpdf erstellt leeres PDF

Moin,
für ein Projekt muss ich Daten aus einer Datenbank in eine PDF schreiben. Dafür nutze ich tcpdf. Bis gestern funktionierte alles einwandfrei, nun wird mir jedoch eine leere Seite ausgegeben. Das komische ist, dass wenn ich den String zur DB-Abfrage änder, sodass keine passende Einträge gefunden werden mir das PDF richtig angezeigt wird. Sobald jedoch Daten in der DB gefunden werde, bekomme ich ein leeres PDF ausgegeben. Ich hab jetzt schon mal Teile aus dem Code genommen, aber es wird mir nur etwas angezeigt bei "leerer" DB-Abfrage. Hat jemand eine Idee woran das liegen könnte?

$data = sprintf(
	"SELECT `Zeiten`.`Name`, `Zeiten`.`Thema`, `Zeiten`.`Tag`, `Zeiten`.`Dauer`, `Zeiten`.`Uhrzeit`, `Partner`.`Raum`, `Partner`.`Anrede`
	FROM `Zeiten`, `Partner`
	WHERE `Person` = '%s' AND `Dauer` != '0' AND `Partner`.`Name` = `Zeiten`.`Name`",
	$mysqli->real_escape_string($_COOKIE['vname'] . ' ' . $_COOKIE['nname'] . ', ' . $_COOKIE['bereich'])
);
$abf = $mysqli->query($data);

// Der Inhalt des PDF
$html = '<table>
	<tr>
		<td style="font-size:1.5em; font-weight: bold;"  colspan="6">
			<br><br><br>Terminbestätigung für den Sprechzeiten<br>
		</td>
	</tr>

	<tr>
		<td colspan="6">Hiermit bestätigen wir Ihnen folgende Termine für <b>' . $_COOKIE['vname'] . ' ' . $_COOKIE['nname'] . '</b> aus dem Bereich ' . $_COOKIE['bereich'] . ':<br><br></td>
	</tr>

	<tr>
		<td style="font-weight: bold;">
			Partner
		</td>
		<td style="font-weight: bold;">
			Thema
		</td>
		<td style="font-weight: bold;">
			Datum
		</td>
		<td style="font-weight: bold;">
			Uhrzeit
		</td>
		<td style="font-weight: bold;">
			Raum
		</td>
		<td style="font-weight: bold;">
			Dauer
		</td>
	</tr>';
while ($row = $abf->fetch_array(MYSQLI_ASSOC)) {
	// Datum
	if($row['Tag'] == $tag1){
        	$date = $row['Tag'] . ', der ' . $date1;
  	} else{
    		$date = $row['Tag'] . ', der ' . $date2;
	}

	// Uhrzeit
	if($row['Dauer'] == 5){
	    list($hour, $min) = explode(':', $row['Uhrzeit']);
	    if($min == 55){
	      $min = 00;
	      $end = $hour . ':' . $min;
	    } else {
	      $min += 5;
	      if(strlen($min) == 1){
	        $end = $hour . ':0' . $min;
	      } else {
	        $end = $hour . ':' . $min;
	      }
	    }
	    $time = $row['Uhrzeit'] . ' - ' . $end;
	    $dauer = '5 Minuten';
	  } elseif($row['Dauer'] == 10){
	    list($hour, $min) = explode(':', $row['Uhrzeit']);
	    if($min == 50){
	      $min = 00;
	      $end = $hour . ':' . $min;
	    } elseif ($min == 55) {
	      $min = 05;
	      $end = $hour . ':' . $min;
	    } else {
	      $min += 10;
	      if(strlen($min) == 1){
	        $end = $hour . ':0' . $min;
	      } else {
	        $end = $hour . ':' . $min;
	      }
	    }
	    $time = $row['Uhrzeit'] . ' - ' . $end;
	    $dauer = '10 Minuten';
	  }
	// Ausgabe PDF
	$html .= '<tr>
		<td>' . $row['Anrede'] . ' ' . $row['Name'] . '</td>
		<td>' . $row['Thema'] . '</td>
		<td>' . $date . '</td>
		<td>' . $time . '</td>
		<td>' . $row['Raum'] . '</td>
		<td>' . $dauer . '</td>
	</tr>';
}
  1. Tach!

    Hat jemand eine Idee woran das liegen könnte?

    Ganz klar: an der Ursache. 😉

    Um sie zu finden, wenn du sie nicht durch Codeanschauen sehen kannst, oder durch eine Fehlermeldung, muss man nun Debugging betreiben. Das heißt, dass man Schritt für Schritt mit Kontrollausgaben das Arbeiten des Programms nachvollzieht.

    Fehlermeldungen sollte zum Debugging eingeschaltet sein. Je nach Konfiguration gibts auch Einträge in Logdateien.

    dedlfix.

    1. Fehlermeldungen sollte zum Debugging eingeschaltet sein.

      <?php
      $html="teste mich!";
      # …
      echo '<pre style="z-index:9999;"><hr><b>DEBUG: $html:</b>'; var_dump($html); echo '<hr></pre>';
      ?>
      

      Meine erste Vermutung: Du hast gestern irgendwo statt $html .= "sonstwas" nur $html = "sonstwas" notiert und $html enthält nichts mehr, was tcpdf verarbeiten kann. Dazu sollte es aber eine Fehlermeldung bzw. Notiz geben.

      1. Tach!

        Fehlermeldungen sollte zum Debugging eingeschaltet sein.

        <?php
        $html="teste mich!";
        # …
        echo '<pre style="z-index:9999;"><hr><b>DEBUG: $html:</b>'; var_dump($html); echo '<hr></pre>';
        ?>
        

        In Schönheit gestorben. So umständlich würde ich das nicht machen, für eine Debugausgabe, die im nächsten Moment wieder rausfliegt. var_dump(…) und davor ein schnödes <pre>, und fertig ist die Laube.

        dedlfix.

        1. Moin,
          Erstmal danke für die Antworten.
          Ich hab die letzten Stunden debugd und jetzt herrausgefunden, dass es nicht an am PHP, sondern an den Daten aus der DB liegt:
          Ich hab in der DB in der Spalte Zeiten.Name zum Teil Namen mit Umlauten. Aus irgendejnem Grund wird mir das PDF nicht angezeigt, wenn in der Abfrage ein Name mit Umlaut abgefragt wird. Sobald ich die entsprechenden Datensätze lösche oder abänder, wir mir das PDF angezeigt.

          Ich hab das jetzt behoben indem ich als erste Abfrage noch

          $mysqli->query("SET NAMES 'utf8'");
          

          eingefügt habe. Jetzt bekomme ich das PDF richtig angezeigt.
          Trotzdem herzlichen Dank für eure Hilfe:)

          Gruß Manfred

          1. Ich hab das jetzt behoben

            Dann hat ja wenigstens der 2. Teil meiner Vermutung gestimmt:

            $html enthält nichts mehr, was tcpdf verarbeiten kann.