Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbankergebnisse in PDF

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datenbankergebnisse in PDF

    Moin Moin,
    ich bräuchte mal Eure Hilfe.
    Ich generiere eine Rechnung in PDF, die ich aus einer Datenbank befülle.
    Die Werte kommen aus 4 Tabellen.
    Ich erstelle für zwei Kontakte eine Rechnung, in der alle Produkt angezeigt werden sollen. (siehe: versich1.jpg)
    Hier fehlt aber der Zweite Kontakt.

    Mein Skript sieht so aus:
    PHP-Code:
             $i 1;
             
    $sql="SELECT a.rech_beginn, a.rech_ende, a.tage, b.kon_id, b.vorname, b.nachname, b.geb_tag, b.geb_mon, b.geb_ja, b.status, c.vsnummer
                   FROM tab_rechnung_pos  AS a,
                        tab_kontakt       AS b,
                        tab_kontakt_firma AS c                    
                  WHERE a.rgnr   = 
    $rgnr
                   AND  a.kon_id = c.kon_id
                   AND  b.kon_id = c.kon_id
                   AND  c.firma  = 
    $firma_id               
                   "
    ;               
             
    $results mysql_query($sql);
             while(
    $row mysql_fetch_assoc($results)) {
             
    $kon_id      $row['kon_id'];
             
    $status      $row['status'];
              
                 if(
    $status == '1'){$status 'Expat';} elseif($status == '2'){$status 'Familie';}
                       
                
    $data_1 = array(
                      array(
    ''=>"\n\n\nVersicherungsnummer  ".$row['vsnummer'].""),
                );
                
                
    $data_2 = array(
                    array(
    ''=>"".$row['vorname']." ".$row['nachname'].", geb. ".$row['geb_tag'].".".$row['geb_mon'].".".$row['geb_ja'].""),
                    array(
    ''=>"Status                  ".$status.""),
                    array(
    ''=>"Reisezeitraum     ".$row['rech_beginn']." - ".$row['rech_ende']." (Anzahl Tage: ".$row['tage'].")\n"),
                );
                
              
    $pdf->ezTable($data_1,'','',array('width' => 500'textCol' => array(1,0.6,0.1), 'cols' => array('name')));
              
    $pdf->ezTable($data_2,'','',array('width' => 500'cols' => array('name'=>array('link'=>'url'))));
               
               
    $data_3 = array(
                    array(
    'num'=>"<b>Produkt</b>"'type'=>"<b>Betrag Euro</b>"),
                );
              
    $pdf->ezTable($data_3,'','',array('showHeadings' => 0'showLines'=> 1'xPos'=>50,'xOrientation'=>'right','width'=>450,'cols'=>array('num'=>array('justification'=>'left'),'type'=>array('width'=>180'justification'=>'right'))));
              
              
    $sql="SELECT a.praemie, b.bezeichnung
                   FROM tab_rechnung_pos  AS a,
                        tab_produkt       AS b                    
                  WHERE a.rgnr   = 
    $rgnr
                   AND  a.kon_id = 
    $kon_id
                   AND  a.produktId = b.id               
                   "
    ;               
             
    $results mysql_query($sql);
             while(
    $row mysql_fetch_object($results)) {
             
    $bezeichnung $row->bezeichnung;
             
    $praemie $row->praemie;
                 
               
    $data_4 = array(
                     array(
    'num'=>''.$bezeichnung.'''type'=>''.$praemie.''),
                 );
                       
              
    $pdf->ezTable($data_4,'','',array('showHeadings' => 0'showLines'=> 1'xPos'=>50,'xOrientation'=>'right','width'=>450,'cols'=>array('num'=>array('justification'=>'left'),'type'=>array('width'=>180'justification'=>'right'))));
                 } 
                 }
                
    $i $i++; 
    Mein Zweiter Ansatzt zeigt zwar beide Kontakte aber mehrfach und darunter werden alle Produkte einzeln aufgeführt. (siehe versich2.jpg)

    Skript:
    PHP-Code:
             $i 1;
             
    $sql="SELECT a.rech_beginn, a.rech_ende, a.tage, b.kon_id, b.vorname, b.nachname, b.geb_tag, b.geb_mon, b.geb_ja, b.status, c.vsnummer, a.praemie, d.bezeichnung
                   FROM tab_rechnung_pos  AS a,
                        tab_kontakt       AS b,
                        tab_kontakt_firma AS c,
                        tab_produkt       AS d                    
                  WHERE a.rgnr   = 
    $rgnr
                   AND  a.kon_id = c.kon_id
                   AND  b.kon_id = c.kon_id
                   AND  c.firma  = 
    $firma_id
                   AND  a.produktId = d.id               
                   "
    ;               
             
    $results mysql_query($sql);
             while(
    $row mysql_fetch_object($results)) {
             
    $kon_id      $row->kon_id;
             
    $status      $row->status;
              
                 if(
    $status == '1'){$status 'Expat';} elseif($row->status == '2'){$status 'Familie';}
                       
                
    $data_1 = array(
                      array(
    ''=>"\n\n\nVersicherungsnummer  ".$row->vsnummer.""),
                );
                
                
    $data_2 = array(
                    array(
    ''=>"".$row->vorname." ".$row->nachname.", geb. ".$row->geb_tag.".".$row->geb_mon.".".$row->geb_ja.""),
                    array(
    ''=>"Status                  ".$status.""),
                    array(
    ''=>"Reisezeitraum     ".$row->rech_beginn." - ".$row->rech_ende." (Anzahl Tage: ".$row->tage.")\n"),
                );
                
              
    $pdf->ezTable($data_1,'','',array('width' => 500'textCol' => array(1,0.6,0.1), 'cols' => array('name')));
              
    $pdf->ezTable($data_2,'','',array('width' => 500'cols' => array('name'=>array('link'=>'url'))));
               
               
    $data_3 = array(
                    array(
    'num'=>"<b>Produkt</b>"'type'=>"<b>Betrag Euro</b>"),
                );
              
    $pdf->ezTable($data_3,'','',array('showHeadings' => 0'showLines'=> 1'xPos'=>50,'xOrientation'=>'right','width'=>450,'cols'=>array('num'=>array('justification'=>'left'),'type'=>array('width'=>180'justification'=>'right'))));
                 
               
    $data_4 = array(
                     array(
    'num'=>''.$row->bezeichnung.'''type'=>''.$row->praemie.''),
                 );
                       
              
    $pdf->ezTable($data_4,'','',array('showHeadings' => 0'showLines'=> 1'xPos'=>50,'xOrientation'=>'right','width'=>450,'cols'=>array('num'=>array('justification'=>'left'),'type'=>array('width'=>180'justification'=>'right'))));
                 } 
               
    $i $i++; 
    Was muss ich machen, das alle Kontakte mit Ihren Produkten wie in Grafik "versich1.jpg" einzeln aufgeführt und gezeigt werden.
    Angehängte Dateien


  • #2
    Eine Variante wäre, dass du schon einmal beginnst, richtige Joins zu verwenden: http://dev.mysql.com/doc/refman/5.1/de/join.html

    Dann musst du mit der richtigen Tabelle beginnen und sauber sortieren und gruppieren.
    GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

    Kommentar


    • #3
      Sorry, aber egal wie ich es auch ändere und umstelle, das Ergebnis bei beiden Skripten bleibt das gleiche. Das hat mir nicht wirklich geholfen aber trotzdem Danke. Hat nicht noch einer eine Idee?

      Kommentar


      • #4
        Moin Moin,
        gibt es keinen hier, der eine Idee hat oder denn richtigen Schubs in die richtige Richtung geben kann? Ich bin Dankbar für jede Hilfe. lg Ralf

        Kommentar


        • #5
          Nunja, einerseits habe ich keine Ahnung, was für eine PDF-Klasse du verwendest. Zudem habe ich keine Lust, mich durch diesen mies formatierten Code zu wühlen (google -> pecl coding standard).

          Vielleicht kannst du ja schon einmal helfen indem du mittels var_dump() das Array ausgeben lässt und einmal zeigst, wie es denn wirklich aussehen soll.
          GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

          Kommentar


          • #6
            Ich benutze ezpdf zum erstellen der pdf's. Entschuldige wenn ich das hier auf die schnelle eingestellt habe, ich hoffe doch, das man trotzdem, anhand der Bilder und meiner Beschreibung, erkenne kann was ich haben möchte. Was dir unklar ist, versuche ich gerne zu erklären.

            Kommentar


            • #7
              Zitat von ralfaushh Beitrag anzeigen
              Moin Moin,
              ich bräuchte mal Eure Hilfe.
              Du hast auch ein anderes Problem: Du hast jede Menge verwurstelten Inline-Code.

              Bitte versuche deinen Code zu modularisieren. Heisst, du zerlegst dein Problem "Ich will Daten aus einer Datenbank" in möglichst atomare (nicht weiter teilbare) Einzelschritte, die für sich selbst eine simple Lösung für ein simples Problem darstellen UND(!) möglichst keine Abhängigkeiten zu anderen Modulen haben. Ein Modul ist im einfachsten Fall eine simple Funktion, oder eine Klasse. Modularisierung führt optimalerweise gleich auch zu DRY und zu KISS.
              Standards - Best Practices - AwesomePHP - Guideline für WebApps

              Kommentar


              • #8
                Java Module? Figuren bewegen? Inline-Code? Ich glaube das hat nichts mit meinem Problem zu tun.

                Kommentar


                • #9
                  Hach Zu viel Copy&Paste
                  Habe den Text angepasst
                  Standards - Best Practices - AwesomePHP - Guideline für WebApps

                  Kommentar


                  • #10
                    Hat dann doch wohl nichts mir mir zu tun? oder doch?

                    Kommentar


                    • #11
                      AHJA, jetzt verstehe ich!! Aber nicht was du damit meinst? Ich sehe nur,das du deinen Text, der eigendlich für jemand anderem bestimmt war, ein wenig angepast hast und hierher koppiert hast. Ich verstehe nur Bahnhof:
                      Du hast jede Menge verwurstelten Inline-Code.
                      Welche Code meinst du damit.
                      Code zu modularisieren
                      ??? Was für Module soll ich machen???
                      "Ich will Daten aus einer Datenbank" in möglichst atomare (nicht weiter teilbare) Einzelschritte, die für sich selbst eine simple Lösung für ein simples Problem darstellen UND(!) möglichst keine Abhängigkeiten zu anderen Modulen haben. Ein Modul ist im einfachsten Fall eine simple Funktion, oder eine Klasse.
                      Boh eh WAS??
                      Sorry, das habe ich nicht verstanden, was du mir damit sagen willst.

                      Kommentar


                      • #12
                        Er meint du hast eine zu lange unformatierte Code-Wurst. Und um dir helfen zu können muss man sich in deinen Code komplett einlesen und das wird so vermtulich keiner gerne mal einfach so machen.

                        Dh formatiere diesen sauber (Einrückungen, Klammernsetzung etc..) und teile die Aufgaben in kleinere eigenständige Einheiten auf (zB Funktionen).

                        Du solltest übrigens durch Debugging den Fehler selbst schon etwas eingrenzen können um eben genau nicht hier eine Codewurst abzulassen und sagen da geht was nicht, schaut mal sondern schon konkret Wissen wo es scheitert.. also ist es zB die query, oder die Verarbeitung der Daten die du von der DB abholst etc.. das sollte schon von dir kommen. Dies nur als Tipp, damit dir hier eher geholfen wird.

                        LG
                        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                        PHP.de Wissenssammlung | Kein Support per PN

                        Kommentar


                        • #13
                          Das verstehe ich, daher hier nochmal meine beiden Scripte.

                          Das erste zeigt die richtige Form, so wie es aussehen soll. Leider wird nur ein Versicherter angezeigt obwohl in meinem Beispiel zwei sein müßten.
                          PHP-Code:
                          $i 1;
                           
                          $sql="SELECT a.rech_beginn, 
                                        a.rech_ende,
                                        a.tage, 
                                        b.kon_id, 
                                        b.vorname, 
                                        b.nachname, 
                                        b.geb_tag, 
                                        b.geb_mon, 
                                        b.geb_ja, 
                                        b.status, 
                                        c.vsnummer
                                   FROM tab_rechnung_pos  AS a,
                                        tab_kontakt       AS b,
                                        tab_kontakt_firma AS c                    
                                  WHERE a.rgnr   = 
                          $rgnr
                                  AND   a.kon_id = c.kon_id
                                  AND   b.kon_id = c.kon_id
                                  AND   c.firma  = 
                          $firma_id";               
                                   
                          $results mysql_query($sql);
                                 while(
                          $row mysql_fetch_object($results)) 
                                 {
                                   
                          $kon_id      $row['kon_id'];
                                   
                          $status      $row['status'];
                                    
                                       if(
                          $status == '1')
                                          {
                                           
                          $status 'Expat';
                                          } 
                                   elseif(
                          $status == '2')
                                          {
                                           
                          $status 'Familie';
                                          }
                                             
                            
                          $data_1 = array(
                                             array(
                          ''=>"\n\n\nVersicherungsnummer  ".$row['vsnummer'].""),
                                           );
                                      
                            
                          $data_2 = array(
                                             array(
                          ''=>"".$row['vorname']." ".$row['nachname'].", geb. ".$row['geb_tag'].".".$row['geb_mon'].".".$row['geb_ja'].""),
                                             array(
                          ''=>"Status                  ".$status.""),
                                             array(
                          ''=>"Reisezeitraum     ".$row['rech_beginn']." - ".$row['rech_ende']." (Anzahl Tage: ".$row['tage'].")\n"),
                                           );
                                      
                          $pdf->ezTable($data_1,'','',array('width' => 500'textCol' => array(1,0.6,0.1), 'cols' => array('name')));
                          $pdf->ezTable($data_2,'','',array('width' => 500'cols' => array('name'=>array('link'=>'url'))));
                                     
                             
                          $data_3 = array(
                                             array(
                          'num'=>"<b>Produkt</b>"'type'=>"<b>Betrag Euro</b>"),
                                            );
                                            
                          $pdf->ezTable($data_3,'','',array('showHeadings' => 0'showLines'=> 1'xPos'=>50,'xOrientation'=>'right','width'=>450,'cols'=>array('num'=>array('justification'=>'left'),'type'=>array('width'=>180'justification'=>'right'))));
                                    
                           
                          $sql="SELECT a.praemie, 
                                        b.bezeichnung
                                   FROM tab_rechnung_pos  AS a,
                                        tab_produkt       AS b                    
                                  WHERE a.rgnr      = 
                          $rgnr
                                  AND   a.kon_id    = 
                          $kon_id
                                  AND   a.produktId = b.id"
                          ;               
                                   
                          $results mysql_query($sql);
                                 while(
                          $row mysql_fetch_object($results)) 
                                 {
                                   
                          $bezeichnung $row->bezeichnung;
                                   
                          $praemie $row->praemie;
                                       
                            
                          $data_4 = array(
                                             array(
                          'num'=>''.$bezeichnung.'''type'=>''.$praemie.''),
                                           );
                                             
                          $pdf->ezTable($data_4,'','',array('showHeadings' => 0'showLines'=> 1'xPos'=>50,'xOrientation'=>'right','width'=>450,'cols'=>array('num'=>array('justification'=>'left'),'type'=>array('width'=>180'justification'=>'right'))));
                                  } 
                                  }
                          $i $i++; 
                          Das zweite Script.
                          Hier werden zwar beide Versicherte aber immer wieder mit allen Produkten.
                          PHP-Code:
                          $i 1;
                           
                          $sql="SELECT a.rech_beginn, 
                                        a.rech_ende, 
                                        a.tage, 
                                        b.kon_id, 
                                        b.vorname, 
                                        b.nachname, 
                                        b.geb_tag, 
                                        b.geb_mon, 
                                        b.geb_ja, 
                                        b.status, 
                                        c.vsnummer, 
                                        a.praemie, 
                                        d.bezeichnung
                                   FROM tab_rechnung_pos  AS a,
                                        tab_kontakt       AS b,
                                        tab_kontakt_firma AS c,
                                        tab_produkt       AS d                    
                                  WHERE a.rgnr   = 
                          $rgnr
                                  AND   a.kon_id = c.kon_id
                                  AND   b.kon_id = c.kon_id
                                  AND   c.firma  = 
                          $firma_id
                                  AND   a.produktId = d.id"
                          ;               
                                   
                          $results mysql_query($sql);
                                   while(
                          $row mysql_fetch_object($results)) 
                                   {
                                    
                          $kon_id      $row->kon_id;
                                    
                          $status      $row->status;
                                    
                                       if(
                          $status == '1')
                                         {
                                          
                          $status 'Expat';
                                         } 
                                  elseif(
                          $row->status == '2')
                                        { 
                                         
                          $status 'Familie'
                                        }
                                             
                                         
                          $data_1 = array(
                                                          array(
                          ''=>"\n\n\nVersicherungsnummer  ".$row->vsnummer.""),
                                                        );
                                      
                                         
                          $data_2 = array(
                                                          array(
                          ''=>"".$row->vorname." ".$row->nachname.", geb. ".$row->geb_tag.".".$row->geb_mon.".".$row->geb_ja.""),
                                                          array(
                          ''=>"Status                  ".$status.""),
                                                          array(
                          ''=>"Reisezeitraum     ".$row->rech_beginn." - ".$row->rech_ende." (Anzahl Tage: ".$row->tage.")\n"),
                                                         );
                                      
                                                          
                          $pdf->ezTable($data_1,'','',array('width' => 500'textCol' => array(1,0.6,0.1), 'cols' => array('name')));
                                                          
                          $pdf->ezTable($data_2,'','',array('width' => 500'cols' => array('name'=>array('link'=>'url'))));
                                     
                                         
                          $data_3 = array(
                                                          array(
                          'num'=>"<b>Produkt</b>"'type'=>"<b>Betrag Euro</b>"),
                                                        );
                                                        
                                                          
                          $pdf->ezTable($data_3,'','',array('showHeadings' => 0'showLines'=> 1'xPos'=>50,'xOrientation'=>'right','width'=>450,'cols'=>array('num'=>array('justification'=>'left'),'type'=>array('width'=>180'justification'=>'right'))));
                                       
                                        
                          $data_4 = array(
                                                         array(
                          'num'=>''.$row->bezeichnung.'''type'=>''.$row->praemie.''),
                                                        );
                                             
                                                          
                          $pdf->ezTable($data_4,'','',array('showHeadings' => 0'showLines'=> 1'xPos'=>50,'xOrientation'=>'right','width'=>450,'cols'=>array('num'=>array('justification'=>'left'),'type'=>array('width'=>180'justification'=>'right'))));
                                    } 
                          $i $i++; 
                          In der Grafik zeige ich, wie es aussehen soll. versich1.jpg

                          Hilfreich wäre, zu sagen welches Script den richtige Ansatzt hat.
                          Fehler bekomme ich nicht angezeigt. Die "array $data_.." sind nötig und bestandteil von ezpdf.
                          Angehängte Dateien

                          Kommentar


                          • #14
                            Ok, ich probiere es mal anders.

                            Das von dir geschilderte Problem kann keiner von uns lösen, da wir deine Daten und deine Tabellenstruktur nicht haben/sehen/sehen wollen.

                            Du machst drei unterschiedliche Dinge in einem Durchgang. Du liesst Daten aus einer Datenbank, du iterierst über diese Daten und versuchst dann eine PDF-Datei daraus zu erstellen. Irgendwo hakt es. Das ist schlecht.

                            Teile diese Schritte auf. Hole dir zunächst mal die Daten aus der Datenbank und bringe sie in eine Einfache Form. Beispielsweise ein Array. Dann kannst du dir beispielsweise mit print_r() ausgeben lassen, was dir die Datenbank zurückgegeben hat. Entsprechen die Ergebnisse deinen Erwartungen, kannst du die an eine Funktion übergeben, die nach und nach die PDF zusammenbaut. Da würde ich dann wieder unterscheiden, welcher Teil der PDF zusammengebaut wird und die Teile auslagern.

                            Hier noch eine kleine Eselsbrücke: Eine Funktion sollte nur genau eine Sache tun. Tut sie mehr als eine Sache, werden ihre Arbeitsschritte an andere Funktionen verteilt und hat somit selbst auch nur noch eine Aufgabe: Verteilen.

                            Dadurch sollte dein Problem leicht lösbar sein. Versuch es mal.
                            Standards - Best Practices - AwesomePHP - Guideline für WebApps

                            Kommentar


                            • #15
                              Mein Zweiter Ansatzt zeigt zwar beide Kontakte aber mehrfach und darunter werden alle Produkte einzeln aufgeführt.
                              Es werden Tabellen gejoined. In der Natur dieses Dinges liegt es, das bestimmte Daten mehrfach vorkommen (in deinem Fall die Adressdaten des Kunden, der mehrere Rechnungen/Produkte hat).

                              Kurzum: Dein Problem lässt sich durch einen Gruppenbruch lösen.
                              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                              Kommentar

                              Lädt...
                              X