Ankündigung

Einklappen
Keine Ankündigung bisher.

Darstellung von Daten in Tabellenform

Einklappen

Neue Werbung 2019

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

  • Darstellung von Daten in Tabellenform

    Hallo,

    ich möchte gerne einige Daten, die in einer DB stehen, in einer Tabelle zur Anzeige bringen.

    Dafür rufe ich in einer index.php die Datei getdaten.php auf. Das Jahr wird an die getdaten.php übergeben, das klappt soweit auch.

    Im Ergebnis möchte ich gerne eine Tabelle erhalten, in der für jedes Fahrzeug ein Datensatz existiert.
    In den Spalten Gesamtkilometer, Differenz, Gesamtliter und Gesamtbetrag sollen die Summen der Werte stehen.

    Das Ganze gelingt mir leider nicht. Es wird immer nur ein Datensatz angezeigt, nämlich der letzte der Tabelle "fahrzeuge".
    Die Spalten Gesamtkilometer, Differenz, Gesamtliter und Gesamtbetrag werden nicht mit Daten gefüllt.

    Warum wird nur ein Datensatz ausgegeben?
    Warum werden nicht alle Spalten gefüllt?

    Ich freue mich auf eure Tipps.
    Vielen Dank im Voraus.

    mfg
    Carlos78


    Code:

    PHP-Code:
    <?php
    $jahr 
    $_GET["jahr"];

    $sql0="SELECT * FROM fahrzeuge";
    $abfrage0 mysql_query($sql0);

    $techniker_anzahl mysql_num_rows($abfrage0);

    echo
    "<div id='content_1' class='content'>

    <table border='1' width='80%'>
        <tr>
            <td>Fahrzeugnr.</td>
            <td>Kennzeichen</td>
                    <td>Fahrzeug</td>
            <td>Gesamtkilometer</td>
            <td>Differenz</td>
            <td>Gesamtliter</td>
            <td>Gesamtbetrag</td>
        </tr>"
    ;

    for( 
    $i=1$i <= $fahrzeug_anzahl$i++)
    {
        
    $summekilometer 0;
        
    $differenz 0;
        
    $liter 0;
        
    $betrag 0;
        
        
    $sql1="SELECT * FROM fahrzeuge WHERE kfznr = '".$i."'";
        
    $sql2="SELECT * FROM kilometer WHERE jahr = '".$jahr."' AND kfznr = '".$i."' ";
        
    $sql3="SELECT * FROM tanken WHERE jahr = '".$jahr."' AND kfznr = '".$i."'";
        
    $abfrage1 mysql_query($sql1);
        
    $abfrage2 mysql_query($sql2);
        
    $abfrage3 mysql_query($sql3);
        
        while(
    $row mysql_fetch_object($abfrage1))
        {
            echo 
    "<tr>
            <td align='center' width='150'><font face='verdana' size='2'>"
    .$i."</font></td>
            <td align='center'><font face='verdana' size='2'>"
    .$row->kennzeichen."</font></td>
            <td align='center'><font face='verdana' size='2'>"
    .$row->fahrzeug."</font></td>";
            while(
    $row2 mysql_fetch_object($abfrage2))
            {
                
    $summekilometer $summekilometer $row2->kilometer;
                
    $differenz $differenz $row2->differenz;
            }
            echo 
    "<td align='center'><font face='verdana' size='2'>".$summekilometer."</font></td>
            <td align='center'><font face='verdana' size='2'>"
    .$differenz."</font></td>";
            while(
    $row3 mysql_fetch_object($abfrage3))
            {
                
    $liter $liter $row3->liter;
                
    $betrag $betrag $row3->betrag;
            }        
            echo 
    "<td align='center'><font face='verdana' size='2'>".$liter."</font></td>
            <td align='center'><font face='verdana' size='2'>"
    .$betrag."</font></td>";
            echo 
    "</tr>";
        }
        
    }
    echo 
    "</table>";

    ?>

  • #2
    Hallo,

    GROUP BY kfznr (die steht doch für ein einzelnes Fahrzeug), SUM(Gesamtkilometer), SUM(Differenz), SUM(Gesamtbetrag) damit erhältst du die Summen.

    Woher kommt fahrzeug_anzahl???

    Den for-Schleifen-Schritt kannst dir sparen, da du ja eh alle Fahrzeuge holen willst. Wenn du dadurch eine Reihenfolge nach kfznr festlegen willst schaffst du das auch über ein ORDER BY im Query.

    Die 3 anderen Queries müsstest dir dann auch sparen können.

    PHP-Code:
        $sql1="SELECT * FROM fahrzeuge WHERE kfznr = '".$i."'";
        
    $sql2="SELECT * FROM kilometer WHERE jahr = '".$jahr."' AND kfznr = '".$i."' ";
        
    $sql3="SELECT * FROM tanken WHERE jahr = '".$jahr."' AND kfznr = '".$i."'"
    kannst durch (ungetestet)

    PHP-Code:
    SELECT a.kfznrSUM(a.Gesamtkilometer), SUM(b.Differenz), SUM(c.GesamtbetragFROM fahrzeuge a JOIN kilometer b ON a.kfznr b.kfznr JOIN tanken c ON a.kfznr c.kfznr WHERE b.jahr $jahr and c.jahr $jahr GROUP BY a.kfznr ORDER BY a.kfznr 
    Dann kannst dir auch die 25 verschachtelten while-Schleifen ersparen. Am Ende bekommst das mit einer while-Schleife und dem Query (ggf. musst das noch etwas nachbessern; wie gesagt, ungetestet) hin.

    Viele Grüße,

    Dirk

    Kommentar


    • #3
      Ist kein Wunder.

      PHP-Code:
      $techniker_anzahl mysql_num_rows($abfrage0);
      [...]
      for( 
      $i=1$i <= $fahrzeug_anzahl$i++) 
      Woher soll PHP fahrzeug_anzahl nehmen, wenn du es vorher nicht definierst ?

      Fürs nächste Mal:
      Lasse dir per echo alle Parameter ausgeben welche für Schleifen relevant sind, damit du siehst ob er überhaupt die Anweisungen erhält die du erwartest.
      Somit kannst du solche Fehler auch selbst finden.

      Kommentar


      • #4
        Zitat von dreamcatcher Beitrag anzeigen
        Woher soll PHP fahrzeug_anzahl nehmen, wenn du es vorher nicht definierst ?
        Hallo dreamcatcher,

        da ist mir beim Kopieren ein Fehler unterlaufen. Ich hatte in der Zwischenzeit schon einiges probiert.
        Es sollte natürlich folgendermaßen aussehen:

        PHP-Code:
        <?php
        $jahr 
        $_GET["jahr"];

        $sql0="SELECT * FROM fahrzeuge";
        $abfrage0 mysql_query($sql0);

        $fahrzeug_anzahl mysql_num_rows($abfrage0);

        echo
        "<div id='content_1' class='content'>

        <table border='1' width='80%'>
            <tr>
                <td>Fahrzeugnr.</td>
                <td>Kennzeichen</td>
                        <td>Fahrzeug</td>
                <td>Gesamtkilometer</td>
                <td>Differenz</td>
                <td>Gesamtliter</td>
                <td>Gesamtbetrag</td>
            </tr>"
        ;

        for( 
        $i=1$i <= $fahrzeug_anzahl$i++)
        {
            
        $summekilometer 0;
            
        $differenz 0;
            
        $liter 0;
            
        $betrag 0;
            
            
        $sql1="SELECT * FROM fahrzeuge WHERE kfznr = '".$i."'";
            
        $sql2="SELECT * FROM kilometer WHERE jahr = '".$jahr."' AND kfznr = '".$i."' ";
            
        $sql3="SELECT * FROM tanken WHERE jahr = '".$jahr."' AND kfznr = '".$i."'";
            
        $abfrage1 mysql_query($sql1);
            
        $abfrage2 mysql_query($sql2);
            
        $abfrage3 mysql_query($sql3);
            
            while(
        $row mysql_fetch_object($abfrage1))
            {
                echo 
        "<tr>
                <td align='center' width='150'><font face='verdana' size='2'>"
        .$i."</font></td>
                <td align='center'><font face='verdana' size='2'>"
        .$row->kennzeichen."</font></td>
                <td align='center'><font face='verdana' size='2'>"
        .$row->fahrzeug."</font></td>";
                while(
        $row2 mysql_fetch_object($abfrage2))
                {
                    
        $summekilometer $summekilometer $row2->kilometer;
                    
        $differenz $differenz $row2->differenz;
                }
                echo 
        "<td align='center'><font face='verdana' size='2'>".$summekilometer."</font></td>
                <td align='center'><font face='verdana' size='2'>"
        .$differenz."</font></td>";
                while(
        $row3 mysql_fetch_object($abfrage3))
                {
                    
        $liter $liter $row3->liter;
                    
        $betrag $betrag $row3->betrag;
                }        
                echo 
        "<td align='center'><font face='verdana' size='2'>".$liter."</font></td>
                <td align='center'><font face='verdana' size='2'>"
        .$betrag."</font></td>";
                echo 
        "</tr>";
            }
            
        }
        echo 
        "</table>";

        ?>
        Aber auch dann wird mir nur ein Datensatz ausgegeben und der nur unvollständig.

        mfg
        Carlos

        Kommentar


        • #5
          Lass dir doch mal - wie vorher vorgeschalgen - alle Parameter für die Schleifen ausgeben.

          Die da wären:
          $fahrzeug_anzahl
          $abfrage1
          $abfrage2
          $abfrage3
          Dann schaust du wo er hängen bleibt bzw. wo er nur einen Wert nimmt und keine weiteren.

          Danach schaust du ob die Abfrage per MySQL denn das liefert war du eigentlich erwartest.

          Wenn dies so sein sollte, liegt der Fehler in deiner Bedingung in PHP.

          Wenn dies nicht der Fall ist, ist deine Query falsch und du solltest sie anpassen.

          So kann man debuggen
          _____
          Abgesehen davon finde ich es misslich, dass du eine for i Schleife drinne hast.

          Damit gehst du automatisch davon aus, dass kfznr immer um 1 inkrementiert wird.

          Ich weiß nicht ob das mit einer Datenbank hinkommt, sinniger wäre es auf deine "abfrage0" als Obj/Array weiter zu nutzen und dann auf die entsprechenden Spalten des Obj/Arrays zuzugreifen.

          Kommentar


          • #6
            Die Herangehensweise ist totaler Müll. Zum einen hab ich dir ja schon geschrieben dass das auch mit einer Schleife geht, zum anderen was ist, wenn du 10 Datensätze hast, vorher aber mal irgendwann 2 Datensätze zwischen drin gelöscht hast?

            Dann hast du nämlich keine fortlaufenden IDs mehr und dann kannst du dein Skript in die Tonne treten.

            Viele Grüße,

            Dirk

            Kommentar

            Lädt...
            X