Zur Navigation

mehrere pdf´s mittels einer php Datei erzeugen

1 tobi

Hallo,

ich habe ein Datei die mehrere Tabellen ausgibt.

In jeder Tabelle steht dann Name, Vorname, Verein, Status, Betrag und Quittung. Wenn man auf Quittung klickt, soll sich ein pdf generieren.
Ist es möglich, dass man eine eine einzige quittung.php hat, diese aber zu jedem in der Tabelle eine eigene pdf erstellen kann?
Zum Testen hab ich mir von hier

https://www.php-einfach.de/experte/php-codebeispiele/pdf-per-php-erstellen-pdf-rechnung/ alles runtergeladen und dies mal quittung.php genannt und eingebunden.

Tabelle.php
<?php

//Fehlermeldungen ausgeben falls vorhanden
ini_set('display_errors', 1);
error_reporting(E_ALL);

//Einbinden von CSS Datei
include "css.php.inc";

//Einbinden von Datenbankzugang
require_once "dbVerbindung.php.inc";

// Hole die 40 Ältesten Datensätze der Klasse 1 ab und sortiere dann absteigend nach Datum (neueste zuerst)
$pdo_1 = new MyPDO();
$sql_1 = "
    SELECT 
    * 
    FROM 
    (
    	SELECT
        	id, nachname, vorname, verein, ttr, timestamp
    	FROM
        	anmeldungen_2018_samstag
    	WHERE
        	gemeldeteKlasse = '1' AND bezahlstatus = '1'
    	ORDER BY
        	timestamp ASC LIMIT 40 
 	) as daten
    ORDER BY
        nachname ASC 
";

// Hole die 40 Ältesten Datensätze der Klasse 2 ab und sortiere dann absteigend nach Datum (neueste zuerst)
$pdo_2 = new MyPDO();
$sql_2 = "
    SELECT 
    * 
    FROM 
    (
    	SELECT
        	id, nachname, vorname, verein, ttr, timestamp
    	FROM
        	anmeldungen_2018_samstag
    	WHERE
        	gemeldeteKlasse = '2' AND bezahlstatus = '1'
    	ORDER BY
        	timestamp ASC LIMIT 40 
 	) as daten
    ORDER BY
        nachname ASC
";

// Hole die 64 Ältesten Datensätze der Klasse 3 ab und sortiere dann absteigend nach Datum (neueste zuerst)
$pdo_3 = new MyPDO();
$sql_3 = "
    SELECT 
    * 
    FROM 
    (
    	SELECT
        	id, nachname, vorname, verein, ttr, timestamp
    	FROM
        	anmeldungen_2018_samstag
    	WHERE
        	gemeldeteKlasse = '3' AND bezahlstatus = '1'
    	ORDER BY
        	timestamp ASC LIMIT 64 
 	) as daten
    ORDER BY
        nachname ASC
";

// Hole die 64 Ältesten Datensätze der Klasse 1 ab und sortiere dann absteigend nach Datum (neueste zuerst)
$pdo_4 = new MyPDO();
$sql_4 = "
    SELECT 
    * 
    FROM 
    (
    	SELECT
        	id, nachname, vorname, verein, ttr, timestamp
    	FROM
        	anmeldungen_2018_sonntag
    	WHERE
        	gemeldeteKlasse = '1' AND bezahlstatus = '1'
    	ORDER BY
        	timestamp ASC LIMIT 64 
 	) as daten
    ORDER BY
        nachname ASC
";

// Hole die 64 Ältesten Datensätze der Klasse 2 ab und sortiere dann absteigend nach Datum (neueste zuerst)
$pdo_5 = new MyPDO();
$sql_5 = "
    SELECT 
    * 
    FROM 
    (
    	SELECT
        	id, nachname, vorname, verein, ttr, timestamp
    	FROM
        	anmeldungen_2018_sonntag
    	WHERE
        	gemeldeteKlasse = '2' AND bezahlstatus = '1'
    	ORDER BY
        	timestamp ASC LIMIT 64 
 	) as daten
    ORDER BY
        nachname ASC
";

// Hole die 64 Ältesten Datensätze der Klasse 3 ab und sortiere dann absteigend nach Datum (neueste zuerst)
$pdo_6 = new MyPDO();
$sql_6 = "
    SELECT 
    * 
    FROM 
    (
    	SELECT
        	id, nachname, vorname, verein, ttr, timestamp
    	FROM
        	anmeldungen_2018_sonntag
    	WHERE
        	gemeldeteKlasse = '3' AND bezahlstatus = '1'
    	ORDER BY
        	timestamp ASC LIMIT 64 
 	) as daten
    ORDER BY
        nachname ASC
";

try {
    printResult_1($pdo_1->query($sql_1)->fetchAll(), 'Jugend U18 B');
    printResult_2($pdo_2->query($sql_2)->fetchAll(), 'Jugend U18 A');
    printResult_3($pdo_3->query($sql_3)->fetchAll(), 'Aktive D');
    printResult_4($pdo_4->query($sql_4)->fetchAll(), 'Aktive C');
    printResult_5($pdo_5->query($sql_5)->fetchAll(), 'Aktive B');
    printResult_6($pdo_6->query($sql_6)->fetchAll(), 'Aktive A');
} catch (Exception $e) {
    die('Something went wrong...<br />' . $e->getMessage());
}
function printResult_1($res_1, $title) {
    echo "<br/><b>".$title."</b>
        <table class='table_gesamtspielplan'> 
            <tr>
				<td><b></b></td>
                <td><b>Name</b></td>
                <td><b>Vorname</b></td>
                <td><b>Verein</b></td>
                <td><b>Status</b></td>
                <td><b>Betrag</b></td>
                <td><b>Quittung</b></td>
             </tr>
    ";
  
//echo '<pre>';
//print_r($res_1);
//echo '</pre>';
	
$nummerierung = 1;
    foreach ($res_1 as $val_1) {
        $date = DateTime::createFromFormat('Y-m-d H:i:s', $val_1["timestamp"]);
        $newDate = $date->format('d.m.Y H:i');
        echo "
        <tr>
            <td> {$nummerierung} </td>       
            <td> {$val_1["nachname"]} </td>
            <td> {$val_1["vorname"]} </td>
            <td> {$val_1["verein"]} </td>
            <td> bezahlt</td>
            <td> 9 €</td>
            <td> <a href=/quittung.php target=_blank> Quittung</a></td>
        </tr>
        ";
      $nummerierung++;
    }
    echo "</table>";

function printResult_2($res_2, $title) {
    echo "<br/><b>".$title."</b>
        <table class='table_mannschaften'> 
            <tr>
            	<td><b></b></td>
                <td><b>Name</b></td>
                <td><b>Vorname</b></td>
                <td><b>Verein</b></td>
                <td><b>Status</b></td>
                <td><b>Betrag</b></td>
                <td><b>Quittung</b></td>
            </tr>
    ";

$nummerierung = 1;
    foreach ($res_2 as $val_2) {
        $date = DateTime::createFromFormat('Y-m-d H:i:s', $val_2["timestamp"]);
        $newDate = $date->format('d.m.Y H:i');
        echo "
        <tr>
            <td> {$nummerierung} </td>
            <td> {$val_2["nachname"]} </td>
            <td> {$val_2["vorname"]} </td>
            <td> {$val_2["verein"]} </td>
            <td> bezahlt</td>
            <td> 9 €</td>
            <td> <a href=/quittung.php target=_blank> Quittung</a></td>            
        </tr>
        ";
      $nummerierung++;
    }
    echo "</table>";

 function printResult_3($res_3, $title) {
    echo "<br/><b>".$title."</b>
        <table class='table_mannschaften'> 
            <tr>
            	<td><b></b></td>
                <td><b>Name</b></td>
                <td><b>Vorname</b></td>
                <td><b>Verein</b></td>
                <td><b>Status</b></td>
                <td><b>Betrag</b></td>
                <td><b>Quittung</b></td>
</tr>
    ";

$nummerierung = 1;
    foreach ($res_3 as $val_3) {
        $date = DateTime::createFromFormat('Y-m-d H:i:s', $val_3["timestamp"]);
        $newDate = $date->format('d.m.Y H:i');
        echo "
        <tr>
            <td> {$nummerierung} </td>
            <td> {$val_3["nachname"]} </td>
            <td> {$val_3["vorname"]} </td>
            <td> {$val_3["verein"]} </td>
            <td> bezahlt</td>
            <td> 11 €</td>
            <td> <a href=/quittung.php target=_blank> Quittung</a></td>
</tr>
        ";
      $nummerierung++;
    }
    echo "</table>"; 
   
 function printResult_4($res_4, $title) {
    echo "<br/><b>".$title."</b>
        <table class='table_mannschaften'> 
            <tr>
            	<td><b></b></td>
                <td><b>Name</b></td>
                <td><b>Vorname</b></td>
                <td><b>Verein</b></td>
                <td><b>Status</b></td>
                <td><b>Betrag</b></td>
                <td><b>Quittung</b></td>
</tr>
    ";

$nummerierung = 1;
    foreach ($res_4 as $val_4) {
        $date = DateTime::createFromFormat('Y-m-d H:i:s', $val_4["timestamp"]);
        $newDate = $date->format('d.m.Y H:i');
        echo "
        <tr>
            <td> {$nummerierung} </td>
            <td> {$val_4["nachname"]} </td>
            <td> {$val_4["vorname"]} </td>
            <td> {$val_4["verein"]} </td>
            <td> bezahlt</td>
            <td> 11 €</td>
            <td> <a href=/quittung.php target=_blank> Quittung</a></td>
</tr>
        ";
      $nummerierung++;
    }
    echo "</table>"; 

    function printResult_5($res_5, $title) {
    echo "<br/><b>".$title."</b>
        <table class='table_mannschaften'> 
            <tr>
            	<td><b></b></td>
                <td><b>Name</b></td>
                <td><b>Vorname</b></td>
                <td><b>Verein</b></td>
                <td><b>Status</b></td>
                <td><b>Betrag</b></td>
                <td><b>Quittung</b></td>
</tr>
    ";

$nummerierung = 1;
    foreach ($res_5 as $val_5) {
        $date = DateTime::createFromFormat('Y-m-d H:i:s', $val_5["timestamp"]);
        $newDate = $date->format('d.m.Y H:i');
        echo "
        <tr>
            <td> {$nummerierung} </td>
            <td> {$val_5["nachname"]} </td>
            <td> {$val_5["vorname"]} </td>
            <td> {$val_5["verein"]} </td>
            <td> bezahlt</td>
            <td> 11 €</td>
            <td> <a href=/quittung.php target=_blank> Quittung</a></td>
</tr>
        ";
      $nummerierung++;
    }
    echo "</table>"; 
      
       function printResult_6($res_6, $title) {
    echo "<br/><b>".$title."</b>
        <table class='table_mannschaften'> 
            <tr>
            	<td><b></b></td>
                <td><b>Name</b></td>
                <td><b>Vorname</b></td>
                <td><b>Verein</b></td>
                <td><b>Status</b></td>
                <td><b>Betrag</b></td>
                <td><b>Quittung</b></td>
</tr>
    ";

$nummerierung = 1;
    foreach ($res_6 as $val_6) {
        $date = DateTime::createFromFormat('Y-m-d H:i:s', $val_6["timestamp"]);
        $newDate = $date->format('d.m.Y H:i');
        echo "
        <tr>
            <td> {$nummerierung} </td>
            <td> {$val_6["nachname"]} </td>
            <td> {$val_6["vorname"]} </td>
            <td> {$val_6["verein"]} </td>
            <td> bezahlt</td>
            <td> 11 €</td>
            <td> <a href=/quittung.php target=_blank> Quittung</a></td>
</tr>
        ";
      $nummerierung++;
    }
    echo "</table>"; 
   
}
}
}
}
}
}
?>

quittung.php
<?php
//============================================================+
// License: GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html)
// -------------------------------------------------------------------
// Copyright (C) 2016 Nils Reimers - PHP-Einfach.de
// This is free software: you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// Nachfolgend erhaltet ihr basierend auf der open-source Library TCPDF (https://tcpdf.org/)
// ein einfaches Script zur Erstellung von PDF-Dokumenten, hier am Beispiel einer Rechnung.
// Das Aussehen der Rechnung ist mittels HTML definiert und wird per TCPDF in ein PDF-Dokument übersetzt. 
// Die meisten HTML Befehle funktionieren sowie einige inline-CSS Befehle. Die Unterstützung für CSS ist 
// aber noch stark eingeschränkt. TCPDF läuft ohne zusätzliche Software auf den meisten PHP-Installationen.
// Gerne könnt ihr das Script frei anpassen und auch als Basis für andere dynamisch erzeugte PDF-Dokumente nutzen.
// Im Ordner tcpdf/ befindet sich die Version 6.2.3 der Bibliothek. Unter https://tcpdf.org/ könnt ihr erfahren, ob 
// eine aktuellere Variante existiert und diese ggf. einbinden.
//
// Weitere Infos: http://www.php-einfach.de/experte/php-codebeispiele/pdf-per-php-erstellen-pdf-rechnung/ | https://github.com/PHP-Einfach/pdf-rechnung/


$rechnungs_nummer = "743";
$rechnungs_datum = date("d.m.Y");
$lieferdatum = date("d.m.Y");
$pdfAuthor = "Verein";

$rechnungs_header = '
<img src="Logo_TTCL.png" width="100" height="100">
Verein
Name
https://webseite.de';

$rechnungs_empfaenger = 'Max Musterman
Musterstraße 17
12345 Musterstadt';

$rechnungs_footer = "Wir bitten um eine Begleichung der Rechnung innerhalb von 14 Tagen nach Erhalt. Bitte Überweisen Sie den vollständigen Betrag an:

<b>Empfänger:</b> Meine Firma
<b>IBAN</b>: DE85 745165 45214 12364
<b>BIC</b>: C46X453AD";

//Auflistung eurer verschiedenen Posten im Format [Produktbezeichnuns, Menge, Einzelpreis]
$rechnungs_posten = array(
	array("Startgebühr", 1, 11.00),
	array("Produkt 2", 5, 5.20),
	array("Produkt 3", 3, 10.00));

//Höhe eurer Umsatzsteuer. 0.19 für 19% Umsatzsteuer
$umsatzsteuer = 0.0; 

$pdfName = "Rechnung_".$rechnungs_nummer.".pdf";


//////////////////////////// Inhalt des PDFs als HTML-Code \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


// Erstellung des HTML-Codes. Dieser HTML-Code definiert das Aussehen eures PDFs.
// tcpdf unterstützt recht viele HTML-Befehle. Die Nutzung von CSS ist allerdings
// stark eingeschränkt.

$html = '
<table cellpadding="5" cellspacing="0" style="width: 100%; ">
	<tr>
		<td>'.nl2br(trim($rechnungs_header)).'</td>
	   <td style="text-align: right">
Rechnungsdatum: '.$rechnungs_datum.'<br>
Lieferdatum: '.$lieferdatum.'<br>
		</td>
	</tr>

	<tr>
		 <td style="font-size:1.3em; font-weight: bold;">
<br><br>
Quittung für Vorkasse
<br>
		 </td>
	</tr>


	<tr>
		<td colspan="2">'.nl2br(trim($rechnungs_empfaenger)).'</td>
	</tr>
</table>
<br><br><br>

<table cellpadding="5" cellspacing="0" style="width: 100%;" border="0">
	<tr style="background-color: #cccccc; padding:5px;">
		<td style="padding:5px;"><b>Bezeichnung</b></td>
		<td style="text-align: center;"><b>Menge</b></td>
		<td style="text-align: center;"><b>Einzelpreis</b></td>
		<td style="text-align: center;"><b>Preis</b></td>
	</tr>';
			
	
$gesamtpreis = 0;

foreach($rechnungs_posten as $posten) {
	$menge = $posten[1];
	$einzelpreis = $posten[2];
	$preis = $menge*$einzelpreis;
	$gesamtpreis += $preis;
	$html .= '<tr>
                <td>'.$posten[0].'</td>
				<td style="text-align: center;">'.$posten[1].'</td>		
				<td style="text-align: center;">'.number_format($posten[2], 2, ',', '').' Euro</td>	
                <td style="text-align: center;">'.number_format($preis, 2, ',', '').' Euro</td>
              </tr>';
}
$html .="</table>";



$html .= '
<hr>
<table cellpadding="5" cellspacing="0" style="width: 100%;" border="0">';
if($umsatzsteuer > 0) {
	$netto = $gesamtpreis / (1+$umsatzsteuer);
	$umsatzsteuer_betrag = $gesamtpreis - $netto;
	
	$html .= '
			<tr>
				<td colspan="3">Zwischensumme (Netto)</td>
				<td style="text-align: center;">'.number_format($netto , 2, ',', '').' Euro</td>
			</tr>
			<tr>
				<td colspan="3">Mehrwertsteuer ('.intval($umsatzsteuer*100).'%)</td>
				<td style="text-align: center;">'.number_format($umsatzsteuer_betrag, 2, ',', '').' Euro</td>
			</tr>';
}

$html .='
            <tr>
                <td colspan="3"><b>Gesamtsumme: </b></td>
                <td style="text-align: center;"><b>'.number_format($gesamtpreis, 2, ',', '').' Euro</b></td>
            </tr>			
        </table>
<br><br><br>';

if($umsatzsteuer == 0) {
	$html .= 'Nach § 19 Abs. 1 UStG wird keine Umsatzsteuer berechnet.<br><br>';
}

$html .= nl2br($rechnungs_footer);



//////////////////////////// Erzeugung eures PDF Dokuments \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

// TCPDF Library laden
require_once('tcpdf/tcpdf.php');

// Erstellung des PDF Dokuments
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

// Dokumenteninformationen
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor($pdfAuthor);
$pdf->SetTitle('Rechnung '.$rechnungs_nummer);
$pdf->SetSubject('Rechnung '.$rechnungs_nummer);


// Header und Footer Informationen
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

// Auswahl des Font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// Auswahl der MArgins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

// Automatisches Autobreak der Seiten
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

// Image Scale 
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

// Schriftart
$pdf->SetFont('dejavusans', '', 10);

// Neue Seite
$pdf->AddPage();

// Fügt den HTML Code in das PDF Dokument ein
$pdf->writeHTML($html, true, false, true, false, '');

//Ausgabe der PDF

//Variante 1: PDF direkt an den Benutzer senden:
$pdf->Output($pdfName, 'I');

//Variante 2: PDF im Verzeichnis abspeichern:
//$pdf->Output(dirname(__FILE__).'/'.$pdfName, 'F');
//echo 'PDF herunterladen: <a href="'.$pdfName.'">'.$pdfName.'</a>';

?>

Gruß Tobi

27.09.2018 09:07

2 Jörg

Die Variablen, die du in die Rechnung einbauen möchtest, könntest du als Parameter an die URL hängen, z.B.:

<td><a href='/quittung.php?nachname={$val_2["nachname"]}&amp;vorname={$val_2["vorname"]}' target='_blank'>Quittung</a></td>

In quittung.php kannst du dann $_GET["nachname"], $_GET["vorname"] etc. auswerten und in die Rechnung einbauen.

Falls die URL zu lang wird, kannst du stattdessen auch einen Submit-Button in einem Formular mit method="post" verwenden, und die Variablen über hidden inputs übergeben und dann $_POST["nachname"] etc. auswerten

Edit:

am saubersten wäre es aber wohl, wenn nur eine (Quittungs-)ID übergeben wird, und quittung.php selbst nochmal anhand der ID eine Datenbankabfrage stellt. So wird vermieden, dass Quittungen mit beliebigen Daten erstellt werden können. Kommt halt darauf an, wer Zugriff auf diese Quittungserstellung hat

27.09.2018 10:06 | geändert: 27.09.2018 10:15

3 tobi

So, ich habe jetzt in der startgeld.php
jeweils zu

...
<td> <a href=/include-teilnehmer/quittung.php?id=?{$val_1["id"]}&tag=samstag target=_blank> Quittung</a></td>
...
...
<td> <a href=/include-teilnehmer/quittung.php?id=?{$val_2["id"]}&tag=samstag target=_blank> Quittung</a></td>
...
...
<td> <a href=/include-teilnehmer/quittung.php?id=?{$val_3["id"]}&tag=samstag target=_blank> Quittung</a></td>
...
...
<td> <a href=/include-teilnehmer/quittung.php?id=?{$val_4["id"]}&tag=sonntag target=_blank> Quittung</a></td>
...
...
<td> <a href=/include-teilnehmer/quittung.php?id=?{$val_5["id"]}&tag=sonntag target=_blank> Quittung</a></td>
...
...
<td> <a href=/include-teilnehmer/quittung.php?id=?{$val_6["id"]}&tag=sonntag target=_blank> Quittung</a></td>
...
geändert. Was soweit ich dies beurteilen kann, ganz gut ausschaut.

In der quittung.php selbst habe ich eine Datenbankverbindung inkludiert, eine sql Abfrage eingebaut und versucht die Variablen aus zu setzen. Egal was ich mache, es taucht immer 500er Error auf.

<?php
//============================================================+
// License: GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html)
// -------------------------------------------------------------------
// Copyright (C) 2016 Nils Reimers - PHP-Einfach.de
// This is free software: you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// Nachfolgend erhaltet ihr basierend auf der open-source Library TCPDF (https://tcpdf.org/)
// ein einfaches Script zur Erstellung von PDF-Dokumenten, hier am Beispiel einer Rechnung.
// Das Aussehen der Rechnung ist mittels HTML definiert und wird per TCPDF in ein PDF-Dokument übersetzt. 
// Die meisten HTML Befehle funktionieren sowie einige inline-CSS Befehle. Die Unterstützung für CSS ist 
// aber noch stark eingeschränkt. TCPDF läuft ohne zusätzliche Software auf den meisten PHP-Installationen.
// Gerne könnt ihr das Script frei anpassen und auch als Basis für andere dynamisch erzeugte PDF-Dokumente nutzen.
// Im Ordner tcpdf/ befindet sich die Version 6.2.3 der Bibliothek. Unter https://tcpdf.org/ könnt ihr erfahren, ob 
// eine aktuellere Variante existiert und diese ggf. einbinden.
//
// Weitere Infos: http://www.php-einfach.de/experte/php-codebeispiele/pdf-per-php-erstellen-pdf-rechnung/ | https://github.com/PHP-Einfach/pdf-rechnung/

//Fehlermeldungen ausgeben falls vorhanden
ini_set('display_errors', 1);
error_reporting(E_ALL);

//Einbinden von Datenbankzugang
require_once "dbVerbindung.php.inc";

$pdo_1 = new MyPDO();
$sql_1 = "
    SELECT 
    * 
    FROM anmeldungen_2018_".$_GET['tag']."
    WHERE id = ".$_GET['id']."
";

try {
    printResult_1($pdo_1->query($sql_1)->fetchAll()) } catch (Exception $e) {
  die('Something went wrong...<br />' . $e->getMessage());
}
				  
foreach ($res_1 as $val_1) {	
				  
$rechnungs_nummer = "1";
$rechnungs_datum = date("d.m.Y");
$lieferdatum = date("d.m.Y");
$pdfAuthor = "Verein";

$rechnungs_header = '
<img src="Logo_TTCL.png" width="100" height="100">
Verein
Name
https://.de';
				  
$rechnungs_empfaenger = "
{$val_1["nachname"]}.'</ br>'.
{$val_1["vorname"]}.'</ br>'.
{$val_1["verein"]}
";

$rechnungs_footer = "Wir bitten um eine Begleichung der Rechnung innerhalb von 14 Tagen nach Erhalt. Bitte Überweisen Sie den vollständigen Betrag an:

<b>Empfänger:</b> Meine Firma
<b>IBAN</b>: DE85 745165 45214 12364
<b>BIC</b>: C46X453AD";

//Auflistung eurer verschiedenen Posten im Format [Produktbezeichnuns, Menge, Einzelpreis]
$rechnungs_posten = array(
	array("Startgebühr", 1, 11.00),
	array("Produkt 2", 5, 5.20),
	array("Produkt 3", 3, 10.00));

//Höhe eurer Umsatzsteuer. 0.19 für 19% Umsatzsteuer
$umsatzsteuer = 0.0; 

$pdfName = "Rechnung_".$rechnungs_nummer.".pdf";


//////////////////////////// Inhalt des PDFs als HTML-Code \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\


// Erstellung des HTML-Codes. Dieser HTML-Code definiert das Aussehen eures PDFs.
// tcpdf unterstützt recht viele HTML-Befehle. Die Nutzung von CSS ist allerdings
// stark eingeschränkt.

$html = '
<table cellpadding="5" cellspacing="0" style="width: 100%; ">
	<tr>
		<td>'.nl2br(trim($rechnungs_header)).'</td>
	   <td style="text-align: right">
Rechnungsdatum: '.$rechnungs_datum.'<br>
Lieferdatum: '.$lieferdatum.'<br>
		</td>
	</tr>

	<tr>
		 <td style="font-size:1.3em; font-weight: bold;">
<br><br>
Quittung für Vorkasse
<br>
		 </td>
	</tr>


	<tr>
		<td colspan="2">'.nl2br(trim($rechnungs_empfaenger)).'</td>
	</tr>
</table>
<br><br><br>

<table cellpadding="5" cellspacing="0" style="width: 100%;" border="0">
	<tr style="background-color: #cccccc; padding:5px;">
		<td style="padding:5px;"><b>Bezeichnung</b></td>
		<td style="text-align: center;"><b>Menge</b></td>
		<td style="text-align: center;"><b>Einzelpreis</b></td>
		<td style="text-align: center;"><b>Preis</b></td>
	</tr>';
			
	
$gesamtpreis = 0;

foreach($rechnungs_posten as $posten) {
	$menge = $posten[1];
	$einzelpreis = $posten[2];
	$preis = $menge*$einzelpreis;
	$gesamtpreis += $preis;
	$html .= '<tr>
                <td>'.$posten[0].'</td>
				<td style="text-align: center;">'.$posten[1].'</td>		
				<td style="text-align: center;">'.number_format($posten[2], 2, ',', '').' Euro</td>	
                <td style="text-align: center;">'.number_format($preis, 2, ',', '').' Euro</td>
              </tr>';
}
$html .="</table>";



$html .= '
<hr>
<table cellpadding="5" cellspacing="0" style="width: 100%;" border="0">';
if($umsatzsteuer > 0) {
	$netto = $gesamtpreis / (1+$umsatzsteuer);
	$umsatzsteuer_betrag = $gesamtpreis - $netto;
	
	$html .= '
			<tr>
				<td colspan="3">Zwischensumme (Netto)</td>
				<td style="text-align: center;">'.number_format($netto , 2, ',', '').' Euro</td>
			</tr>
			<tr>
				<td colspan="3">Mehrwertsteuer ('.intval($umsatzsteuer*100).'%)</td>
				<td style="text-align: center;">'.number_format($umsatzsteuer_betrag, 2, ',', '').' Euro</td>
			</tr>';
}

$html .='
            <tr>
                <td colspan="3"><b>Gesamtsumme: </b></td>
                <td style="text-align: center;"><b>'.number_format($gesamtpreis, 2, ',', '').' Euro</b></td>
            </tr>			
        </table>
<br><br><br>';

if($umsatzsteuer == 0) {
	$html .= 'Nach § 19 Abs. 1 UStG wird keine Umsatzsteuer berechnet.<br><br>';
}

$html .= nl2br($rechnungs_footer);



//////////////////////////// Erzeugung eures PDF Dokuments \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

// TCPDF Library laden
require_once('../tcpdf/tcpdf.php');

// Erstellung des PDF Dokuments
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

// Dokumenteninformationen
$pdf->SetCreator(PDF_CREATOR);

$pdf->SetAuthor($pdfAuthor);
$pdf->SetTitle('Rechnung '.$rechnungs_nummer);
$pdf->SetSubject('Rechnung '.$rechnungs_nummer);


// Header und Footer Informationen
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

// Auswahl des Font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// Auswahl der MArgins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

// Automatisches Autobreak der Seiten
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

// Image Scale 
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

// Schriftart
$pdf->SetFont('dejavusans', '', 10);

// Neue Seite
$pdf->AddPage();

// Fügt den HTML Code in das PDF Dokument ein
$pdf->writeHTML($html, true, false, true, false, '');

//Ausgabe der PDF

//Variante 1: PDF direkt an den Benutzer senden:
$pdf->Output($pdfName, 'I');

//Variante 2: PDF im Verzeichnis abspeichern:
//$pdf->Output(dirname(__FILE__).'/'.$pdfName, 'F');
//echo 'PDF herunterladen: <a href="'.$pdfName.'">'.$pdfName.'</a>';

}
}
?>

01.10.2018 20:54

4 Jörg

Du hast da eine geschweifte Klammer zu viel drin.

Ich würde den Code einrücken, dann sieht man schneller, wenn bzw. wo eine Klammer mal fehlt oder falsch gesetzt ist.

02.10.2018 09:40 | geändert: 02.10.2018 09:41

5 tobi

gibt´s dazu einen guten online editor mit dem ich dies machen kann?

Habe eine geschweifte Klammer am Ende entfernt. Error 500 bleibt bestehen.

Got error 'PHP message: PHP Parse error: syntax error, unexpected 'printResult_1' (T_STRING)

02.10.2018 10:28

6 Jörg

Nutr kurz getestet, der scheint nicht schlecht zu sein:

http://www.phpformatter.com/

Vor dem Formattieren meckert er vorhandene Syntaxfehler an, die behoben werden müssen.

Hier fehlte ein Semikolon:

try {
    printResult_1($pdo_1->query($sql_1)->fetchAll());
}
catch (Exception $e) {
    die('Something went wrong...<br />' . $e->getMessage());
}

... und innerhalb eines Strings, der mit " gequotet wird, sollten einfache ' zum Quoten verwendet werden:

    $rechnungs_empfaenger = "
{$val_1['nachname']}</ br>
{$val_1['vorname']}</ br>
{$val_1['verein']}
";

02.10.2018 11:50

7 tobi

Da die Funktion noch nicht eingebaut ist, kommt folgende Meldung:
Fatal error: Uncaught Error: Call to undefined function printResult_1() in .../quittung.php:38 Stack trace: #0 {main} thrown in .../quittung.php on line 38

Wenn ich dies richtig deute, dann müßte ja hier irgendwie die Funktion rein, oder?
    $rechnungs_empfaenger = "
{$val_1['nachname']}.'</ br>'.
{$val_1['vorname']}.'</ br>'.
{$val_1['verein']}
";

$rechnungs_empfaenger = "

function printResult_1($res_1) {
    foreach ($res_1 as $val_1) {
        echo "     
            {$val_1["nachname"]}
            {$val_1["vorname"]}
            {$val_1["verein"]}
        ";
}
}
";

08.10.2018 21:25

8 Jörg

Damit baust du den PHP-Code der Funktionsdefinition in einen String ein - was möchtest du damit erreichen?

Funktionsdefinitionen würde ich schon der Übersichtshalber am Anfang einer PHP-Datei einordnen. Wenn du die gleiche(n) Funktion(en) in mehreren Dateien benötigst, kannst du sie stattdessen in einer eigenen Datei (z.B. funktionen.php) definieren und diese am Anfang der betreffenden Dateien (hier Tabelle.php und quittung.php) mit require_once() includieren. Dann stehen die Funktionen überall dort zur Verfügung.

08.10.2018 22:25 | geändert: 08.10.2018 22:27

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]