Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] FPDF: Erzeugt keine Seite trotz korrektem SQL-Statement

Einklappen

Neue Werbung 2019

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

  • [Erledigt] FPDF: Erzeugt keine Seite trotz korrektem SQL-Statement

    Hallo zusammen,

    ich stehe auf dem Schlauch und sehe den Wald vor lauter Bäumen nicht mehr. Muss weiter dazu sagen, dass ich ein Neuling bin im Lande des FPDF.

    Ich versuche mit einer SQL-Abfrage eine Tabelle zu erzeugen und diese mit Hilfe von FPDF als PDF anzuzeigen. Die Abfragen funktionieren, die Verbindung zur Datenbank steht, es werden keine Fehler angezeigt, nur eine leere Seite erscheint, wenn ich die Datei im Chrome aufrufe.

    Es ist mir bewusst, dass die Formatierung noch zu wünschen übrig lässt, aber wenn nichts angezeigt wird, brauche ich ja auch nichts zu formatieren. Und ich verwende noch kein mysqli.

    PHP-Code:
    <?php

    require('fpdf.php');
    require(
    '../php/0011_functions.php');
    datum();

    # PDF erzeugen
    $pdf=new PDF('L','mm','A4');
    $pdf->SetFont('Arial','B',10);
    $pdf->SetTextColor(0);
    $pdf->SetMargins(3,3);
    $pdf->AddPage();

    #Datenbankverbindung erstellen
    connect();

    ######################################
    # Speaker
    ######################################

    #Einzel: Disziplinenrangliste im Einzel, Herren und Damen
    $i=1;
    while (
    $i<=2)
    {
        
    $a=1;
        while ( 
    $a<=)
        {
        
    $sql_rang "SELECT e.fld_schule as schule, a.fld_nname as nachname, a.fld_vname as vorname, b.fld_disziplin as disziplinenname, c.fld_durchgang as durchgang, 
                        g.fld_geschlecht as geschlecht, d.fld_startnummer as startnummer, f.fld_jahr as jahreszahl
                        FROM tbl_athleten as a, tbl_disziplinen as b, tbl_wahl as d, tbl_schulen as e, tbl_jahr as f, tbl_geschlecht as g, tbl_leistungen as h, tbl_durchgang as c
                        WHERE a.fld_id = d.tbl_athleten_fld_id
                        AND a.tbl_schulen_fld_id = e.fld_id
                        AND a.tbl_geschlecht_fld_id = g.fld_id
                        AND d.tbl_disziplinen_fld_id = b.fld_id
                        AND d.tbl_jahr_fld_id = f.fld_id
                        AND c.fld_id = h.tbl_durchgang_fld_id
                        AND d.fld_id = h.tbl_wahl_fld_id
                        AND a.tbl_geschlecht_fld_id = g.fld_id
                        AND d.tbl_jahr_fld_id = '.
    $jahr.'
                        AND a.tbl_geschlecht_fld_id = '.
    $i.'
                        AND d.tbl_disziplinen_fld_id = '.
    $a.'
                        ORDER BY durchgang, schule, nachname"
    ;

        
    $result_rang mysql_query$sql_rang ) or die(mysql_error());
        
    $row_rang mysql_fetch_array$result_rang );
        
    $anzahl mysql_num_rows$result_rang );

            if (
    $anzahl != '0')
            {
                
    $pdf->Cell(120,0,$row_rang['geschlecht'].':'.$row_rang['disziplinenname'].' ('.$row_rang['jahreszahl'].')' ,0,0,'L',0);
                
    $pdf->Ln();
                
    $pdf->Cell(30,0,'Schule',0,0,'L',0);
                
    $pdf->Cell(60,0,'Vorname, Nachname',0,0,'L',0);
                
    $pdf->Cell(30,0,'Startnummer',0,0,'L',0);
                
    $pdf->Cell(0,0,'Durchgang',0,0,'L',0);
                
    $pdf->Ln();

                
    mysql_data_seek($result_rang,0);
                while ( 
    $row_rang mysql_fetch_array$result_rang ))
                {
                        
    $vorname utf8_decode($row_print['vorname']);
                        
    $nachname utf8_decode($row_print['nachname']);
                        
    $schule utf8_decode ($row_print['schule']);
                        
    $pdf->Cell(30,0,''.$schule,0,0,'L',1);
                        
    $pdf->Cell(60,0,$vorname.', '.$nachname,0,0,'L',1);
                        
    $pdf->Cell(30,0,''.$row_rang['startnummer'],0,0,'L',1);
                        
    $pdf->Cell(0,0,''.$row_rang['durchgang'],0,0,'L',1);
                        
    $pdf->Ln();
                }
                
    $pdf->AddPage;
            }
            
    $a++;
        }
        
    $i++;
    }

    $i=1;
    while (
    $i<=2)
    {
        
    $a=8;
        while (
    $a<=9)
        {
            
    #Mannschaft: Disziplinenrangliste bei Mannschaften
            
    $sql_rang "SELECT e.fld_schule as schule, h.fld_leistung as leistung, h.fld_rangpunkte as rangpunkte, b.fld_disziplin as disziplinenname, 
                            c.fld_durchgang as durchgang, f.fld_jahr as jahreszahl, g.fld_geschlecht as geschlecht
                            FROM tbl_athleten as a, tbl_disziplinen as b, tbl_wahl as d, tbl_schulen as e, tbl_jahr as f, tbl_geschlecht as g, tbl_leistungen as h, tbl_durchgang as c
                            WHERE a.fld_id = d.tbl_athleten_fld_id
                            AND a.tbl_schulen_fld_id = e.fld_id
                            AND a.tbl_geschlecht_fld_id = g.fld_id
                            AND d.tbl_disziplinen_fld_id = b.fld_id
                            AND d.tbl_jahr_fld_id = f.fld_id
                            AND c.fld_id = h.tbl_durchgang_fld_id
                            AND d.fld_id = h.tbl_wahl_fld_id
                            AND d.tbl_jahr_fld_id = '.
    $jahr.'
                            AND a.tbl_geschlecht_fld_id = '.
    $i.'
                            AND d.tbl_disziplinen_fld_id = '.
    $a.'
                            GROUP BY schule
                            ORDER BY durchgang, schule"
    ;
                            
            
    $result_rang mysql_query$sql_rang ) or die(mysql_error());
            
    $row_rang mysql_fetch_array$result_rang );
            
    $anzahl mysql_num_rows$result_rang );

            if (
    $anzahl != '0')
            {
                
    $pdf->Cell(120,0,$row_rang['geschlecht'].':'.$row_rang['disziplinenname'].' ('.$row_rang['jahreszahl'].')' ,0,0,'L',0);
                
    $pdf->Ln();
                
    $pdf->Cell(30,0,'Schule',0,0,'L',0);
                
    $pdf->Cell(30,0,'Durchgang',0,0,'L',0);
                
    $pdf->Ln();

                
    $help 1;
                
    mysql_data_seek($result_rang,0);
                while ( 
    $row_rang mysql_fetch_array$result_rang ))
                {
                    
    $schule utf8_decode ($row_print['schule']);
                    
    $pdf->Cell(30,0,''.$schule,0,0,'L',0);
                    
    $pdf->Cell(30,0,''.$row_print['schule'],0,0,'L',0);
                    
    $pdf->Ln();
                }
                
    $pdf->AddPage;
            }
            
    $a++;
        }
        
    $i++;
    }


    #PDF erstellen
    $pdf->Output();

    close();

    ?>
    Könnte mir jemand freundlicherweise einen Hinweis geben? Vielen Dank im Voraus.

    Martin


  • #2
    Aus der Doku:

    int mysql_num_rows ( resource $result )
    Und womit vergleichst du:

    PHP-Code:
    $anzahl != '0' 
    Ansonsten gilt:

    Richtig debuggen

    1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
    2. Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
    3. Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    4. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    5. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...): mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    6. Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    7. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    8. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    9. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

    Die MySQL-Erweiterung ist seit PHP 5.5.0 als veraltet markiert und wird in der Zukunft entfernt werden. Verwende stattdessen die Erweiterungen MySQLi oder PDO_MySQL.
    Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

    Kommentar


    • #3
      Zitat von uha Beitrag anzeigen
      Aus der Doku:

      int mysql_num_rows ( resource $result )

      Und womit vergleichst du:

      PHP-Code:
      $anzahl != '0' 
      Die '' sind hier überflüssig, aber kein Fehler ( != ist ein typeschwacher Vergleich ).
      PHP-Klassen auf github

      Kommentar


      • #4
        Zitat von uha Beitrag anzeigen
        Aus der Doku:

        Und womit vergleichst du:

        PHP-Code:
        $anzahl != '0' 
        Wenn ich es richtig verstehe, sagst Du dass num_rows einen Integer liefert, oder nicht? 0 ist auch ein integer. Die Menge der ganzen Zahlen Z wird als Integer bezeichnet und 0 ist Element von Z.

        Vielen Dank für die Anregungen zum Debuggen, werde sie nachher gleich umsetzen. Ich dachte halt, dass ich nur eine Kleinigkeit falsch hätte und ein Profi die sogleich sieht. Dem scheint nicht der Fall zu sein. Danke trotzdem.

        Bezüglich MySQL habe ich es ja bereits geschrieben.

        Liebe Grüsse

        Kommentar


        • #5
          Nein, das was du geschrieben hast ist kein Integer, sondern ein String. Das erkennt man an den ' zu Beginn und Ende.

          Wobei PHP hier typlasch ist und das dann wohl als Integer weiterverwendet.
          GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

          Kommentar


          • #6
            So, nun ist es geschafft. Hier die korrekte Lösung für mein Problem. Es funktioniert nun bestens, sogar mit mysqli.
            Wo der Fehler nun genau lag, weiss ich nicht mehr, sorry. War jetzt lange mit dem Rest des Projektes beschäftigt und habe mich erst heute wieder an dieses Problem hier gesetzt. Nach der Umstellung auf mysqli und mit Hilfe von Brackets (Fehleranzeige bezüglich Leerschläge und so weiter) funktioniert es nun nach Wunsch.

            PHP-Code:
            <?php
            error_reporting
            (-1);
            ini_set('display_errors'true);
            require(
            'fpdf.php');
            require(
            '../php/0011_functions.php');
            datum();

            class 
            PDF extends FPDF
            {
                
            //Kopfzeile
                
            function Header()
                {
                    global 
            $datumjahr;
                    
            //SetFont
                    
            $this->SetFont('Arial''B''15');
                    
            //Titel
                    #$this->SetFillColor(1150,205,205);
                    #$this->SetDrawColor(180,205,205);
                    
            $this->Cell(10015'Speakerliste'00'L'0);
                    
            $this->Cell(10015'Gymnasiade '.$datumjahr0'C'0);
                    
            $this->Cell(015'Herren und Damen'00'R'0);
                    
            //Line break
                    
            $this->Ln();
                }
            }

            # PDF erzeugen
            $pdf=new PDF('L''mm''A4');
            $pdf->SetFont('Arial''B'10);
            $pdf->SetTextColor(0);
            $pdf->SetMargins(33);
            $pdf->AddPage();

            // Verbindung herstellen
            include_once '../php/config.inc.php';
            $db = new mysqli(HOSTUSERPASSWORDDATABASE);
            $db->set_charset('utf8');

            ######################################
            # Speakerliste
            ######################################

            #Einzel: Disziplinenrangliste im Einzel, Herren und Damen
            $i=1;
            while (
            $i<=2) {
                
            $a=1;
                while (
            $a<=7) {
                    
            $sql_print "SELECT e.fld_schule as schule, a.fld_nname as nachname, a.fld_vname as vorname, b.fld_disziplin as disziplinenname, c.fld_durchgang as durchgang, 
                    g.fld_geschlecht as geschlecht, d.fld_startnummer as startnummer, f.fld_jahr as jahreszahl
                    FROM tbl_athleten as a, tbl_disziplinen as b, tbl_wahl as d, tbl_schulen as e, tbl_jahr as f, tbl_geschlecht as g, tbl_leistungen as h, tbl_durchgang as c
                    WHERE a.fld_id = d.tbl_athleten_fld_id
                    AND a.tbl_schulen_fld_id = e.fld_id
                    AND a.tbl_geschlecht_fld_id = g.fld_id
                    AND d.tbl_disziplinen_fld_id = b.fld_id
                    AND d.tbl_jahr_fld_id = f.fld_id
                    AND c.fld_id = h.tbl_durchgang_fld_id
                    AND d.fld_id = h.tbl_wahl_fld_id
                    AND a.tbl_geschlecht_fld_id = g.fld_id
                    AND d.tbl_jahr_fld_id = 
            $jahr
                    AND a.tbl_geschlecht_fld_id = 
            $i
                    AND d.tbl_disziplinen_fld_id = 
            $a
                    ORDER BY durchgang, schule, nachname"
            ;

                    
            $result_print mysqli_query($db$sql_print ) or die(mysqli_error());
                    
            $row_print mysqli_fetch_array($result_print);
                    
            $anzahl mysqli_num_rows($result_print);
                    
                    
            $pdf->SetFillColor(211211211);
                    
            $pdf->SetFont('Arial''B'12);

                    if (
            $anzahl != 0) {
                        
            $pdf->Cell(12010'Titel'00'L'0);
                        
            $pdf->Cell(12010$row_print['geschlecht'].':'.$row_print['disziplinenname'].' ('.$row_print['jahreszahl'].')'00'L'0);
                        
            $pdf->Ln();
                        
            $pdf->SetFont('Arial''B'10);
                        
            $pdf->Cell(508'Schule'00'L'0);
                        
            $pdf->Cell(608'Vorname, Nachname'00'L'0);
                        
            $pdf->Cell(308'Startnummer'00'L'0);
                        
            $pdf->Cell(08'Durchgang'00'L'0);
                        
            $pdf->Ln();

                        
            mysqli_data_seek($result_print0);
                        
            $pdf->SetFont('Arial''B'10);
                        while (
            $row_print mysqli_fetch_array($result_print)) {
                            
            $vorname utf8_decode($row_print['vorname']);
                            
            $nachname utf8_decode($row_print['nachname']);
                            
            $schule utf8_decode($row_print['schule']);
                            
            $pdf->Cell(507''.$schule00'L'0);
                            
            $pdf->Cell(607$vorname.', '.$nachname00'L'0);
                            
            $pdf->Cell(307''.$row_print['startnummer'], 00'L'0);
                            
            $pdf->Cell(07''.$row_print['durchgang'], 00'L'0);
                            
            $pdf->Ln();
                        }
                        
            $pdf->AddPage();
                    }
                    
            $a++;
                }
                
            $i++;
            }

            $i=1;
            while (
            $i<=2) {
                
            $a=8;
                while (
            $a<=9) {
                    
            #Mannschaft: Disziplinenrangliste bei Mannschaften
                    
            $sql_print"SELECT e.fld_schule as schule, h.fld_leistung as leistung, h.fld_rangpunkte as rangpunkte, b.fld_disziplin as disziplinenname, 
                    c.fld_durchgang as durchgang, f.fld_jahr as jahreszahl, g.fld_geschlecht as geschlecht
                    FROM tbl_athleten as a, tbl_disziplinen as b, tbl_wahl as d, tbl_schulen as e, tbl_jahr as f, tbl_geschlecht as g, tbl_leistungen as h, tbl_durchgang as c
                    WHERE a.fld_id = d.tbl_athleten_fld_id
                    AND a.tbl_schulen_fld_id = e.fld_id
                    AND a.tbl_geschlecht_fld_id = g.fld_id
                    AND d.tbl_disziplinen_fld_id = b.fld_id
                    AND d.tbl_jahr_fld_id = f.fld_id
                    AND c.fld_id = h.tbl_durchgang_fld_id
                    AND d.fld_id = h.tbl_wahl_fld_id
                    AND d.tbl_jahr_fld_id = 
            $jahr
                    AND a.tbl_geschlecht_fld_id = 
            $i
                    AND d.tbl_disziplinen_fld_id = 
            $a
                    GROUP BY schule
                    ORDER BY durchgang, schule"
            ;

                    
            $result_print mysqli_query($db$sql_print) or die(mysqli_error());
                    
            $row_print mysqli_fetch_array($result_print);
                    
            $anzahl mysqli_num_rows($result_print);
                    
                    
            $pdf->SetFillColor(211211211);
                    
            $pdf->SetFont('Arial''B'12);

                    if (
            $anzahl != 0) {
                        
            $pdf->Cell(12010'Titel'00'L'0);
                        
            $pdf->Cell(12010$row_print['geschlecht'].':'.$row_print['disziplinenname'].' ('.$row_print['jahreszahl'].')'00'L'0);
                        
            $pdf->Ln();
                        
            $pdf->SetFont('Arial''B'10);
                        
            $pdf->Cell(608'Schule'00'L'0);
                        
            $pdf->Cell(508'Durchgang'00'L'0);
                        
            $pdf->Ln();

                        
            $help 1;
                        
            mysqli_data_seek($result_print0);
                        
            $pdf->SetFont('Arial''B'10);
                        while (
            $row_print mysqli_fetch_array($result_print)) {
                            
            $schule utf8_decode($row_print['schule']);
                            
            $pdf->Cell(608''.$schule00'L'0);
                            
            $pdf->Cell(508''.$row_print['durchgang'], 00'L'0);
                            
            $pdf->Ln();
                        }
                        
            $pdf->AddPage();
                    }
                    
            $a++;
                }
                
            $i++;
            }


            #PDF erstellen
            $pdf->Output();

            mysqli_close($db);
            ?>
            Vielen Dank für eure Anregungen.

            Gruss

            Kommentar

            Lädt...
            X