Ankündigung

Einklappen
Keine Ankündigung bisher.

Ausgabe nach Tagen Gruppieren

Einklappen

Neue Werbung 2019

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

  • Ausgabe nach Tagen Gruppieren

    Einen schönen guten Abend,

    ich habe ein kleines Script welches Diverse Logins Login-Zeiten zusammenzählt und mir ausgibt, funktioniert wunderbar.

    PHP-Code:
    <?php 

    $datumStart 
    "2018-04-01";
    $datumEnde  "2018-04-30";

    $userMonat userMonatLogin($mysqli$object->user$datumStart$datumEnde);

    if(
    $userMonat 0) {

        foreach(
    $userMonat as $array){

        
    $anzStunden =     str_replace(",""."$array['anzStunden']);
        
    $gesamtZeit     += $anzStunden;

        
    $Datum             explode("-"$array['datum']); 
        
    $DatumAusgabe     $Datum[2].".".$Datum[1]."."
    ?>

    <strong><?php echo htmlspecialchars($DatumAusgabe?><?php echo htmlspecialchars($array['anzStunden']) ?> Std.</strong><br>
    <?php echo nl2br($array['grund']); ?><br><br>
    <?php 

    }?>
    <div class="gesamt">
        <p>Gesamt: <?php echo htmlspecialchars($gesamtZeit); ?></p>
    </div>
    <?php 
    }
    else { echo 
    "Keine Daten vorhanden"; }
    ?>
    Jetzt möchte ich gerne erreichen dass ich die Tage Gruppiere und die Zeit jeweils darunter ausgebe. Dann bisschen Platz und wieder von vorne mit dem nächsten Tag, der in der Datenbank gefunden wird. Kann ich dieses irgendwie erreichen?

  • #2
    group by?

    Kommentar


    • #3
      GROUP BY als Aggregatfunktion von SQL ist hier nicht angebracht, denn an den ausgegebenen Daten soll ja nichts geändert werden, lediglich das Format der Ausgabe sollte anders ausschauen.
      Siehe dir mal in der Wissensdatenbank Gruppenwechsel an.

      Kommentar


      • #4
        Guten Morgen,

        so wie ich den Gruppenwechsel verstehe benötige ich den Abschnitt "Beispiel 1a - Gruppenbruch mit Vorgängervergleich", liege ich da richtig? Nur ich weiß nicht, wie ich diesen in meinen Code einbauen müsste.

        Kommentar


        • #5
          Die Daten müssen dafür sortiert vorliegen. Ist das der Fall ?
          Um dir besser helfen zu können zeige mal mit dieser Funktion
          PHP-Code:
          function dump_arrobj($arrobj) {
              echo 
          '<pre>'.str_ireplace'stdClass::__set_state''(object)'var_export($arrobj,true) ).'</pre>';

          ein Beispiel was in $userMonat drin steckt.

          Kommentar


          • #6
            Wenn ich

            PHP-Code:
            $datumStart   "2018-04-01";
            $datumEnde  "2018-04-30";

            $userMonat userMonatLogin($mysqli$object->user$datumStart$datumEnde);

            function 
            dump_arrobj($userMonat) {
                echo 
            '<pre>'.str_ireplace'stdClass::__set_state''(object)'var_export($userMonat,true) ).'</pre>';

            ausgaben lassen möchte erhalte ich nur eine weiße Seite.

            Kommentar


            • #7
              Logo, du musst die Funktion auch wenigstens ein mal mit Parameter aufrufen.
              Also danach noch
              PHP-Code:
               dump_arrobj($userMonat); 
              einfügen.

              Kommentar


              • #8
                Danke dir, ist ja eine Funktion. Ich hab mich mit dem echo direkt blenden lassen. Jetzt habe ich auch eine Ausgabe

                HTML-Code:
                array (
                  0 => 
                  array (
                    'id' => 2902,
                    'code' => '4ae0036b0c946e43ee0ad47ee7b6e4d0',
                    'name' => '590081724debdbc0a9b147d867aa7427',
                    'datum' => '2018-04-01',
                    'usz_anzStunden' => '2',
                  ),
                  1 => 
                  array (
                    'id' => 2903,
                    'code' => 'c7c1a1d6dbb179efaf7afde9783240f2',
                    'name' => '590081724debdbc0a9b147d867aa7427',
                    'datum' => '2018-04-01',
                    'anzStunden' => '8',
                  ),
                  2 => 
                  array (
                    'id' => 2904,
                    'code' => 'c7c1a1d6dbb189efaf7afde9783245f2',
                    'name' => '590081724debdbc0a9b147d867aa7427',
                    'datum' => '2018-04-02',
                    'anzStunden' => '1',
                  ),
                )

                Kommentar


                • #9
                  Zur Orientierung gedacht

                  PHP-Code:
                  <?php
                  $userMonat 
                  = array (
                    
                  =>
                    array (
                      
                  'id' => 2902,
                      
                  'code' => '4ae0036b0c946e43ee0ad47ee7b6e4d0',
                      
                  'name' => '590081724debdbc0a9b147d867aa7427',
                      
                  'datum' => '2018-04-01',
                      
                  'usz_anzStunden' => '2',
                    ),
                    
                  =>
                    array (
                      
                  'id' => 2903,
                      
                  'code' => 'c7c1a1d6dbb179efaf7afde9783240f2',
                      
                  'name' => '590081724debdbc0a9b147d867aa7427',
                      
                  'datum' => '2018-04-01',
                      
                  'anzStunden' => '8',
                    ),
                    
                  =>
                    array (
                      
                  'id' => 2904,
                      
                  'code' => 'c7c1a1d6dbb189efaf7afde9783245f2',
                      
                  'name' => '590081724debdbc0a9b147d867aa7427',
                      
                  'datum' => '2018-04-02',
                      
                  'anzStunden' => '1',
                    ),
                  );

                  $last_entry null;

                  // Elemente durchlaufen
                  foreach ($userMonat as $current_entry) {

                      
                  $first $current_entry['datum']; // erstes Datum des aktuellen Wertes

                      // Gruppenbruch, neues Datum
                      
                  if ($first != $last_entry) {
                          
                  $Datum             explode("-"$first);
                          
                  $DatumAusgabe     = (int)$Datum[2].".".(int)$Datum[1].".";
                          echo 
                  "<br>\n";
                          echo 
                  'Datum: ' $DatumAusgabe '<br>';
                      }
                      echo 
                  'id: ' $current_entry['id'] . '<br>';
                      if ( isset(
                  $current_entry['usz_anzStunden']) ) {
                          echo 
                  'USZ Stunden: ' $current_entry['usz_anzStunden'] . '<br>';
                      }
                      if ( isset(
                  $current_entry['anzStunden']) ) {
                          echo 
                  'Stunden: ' $current_entry['anzStunden'] . '<br>';
                      }
                      echo 
                  "<br>\n";

                          
                  // neuen Vergleichswert setzen
                      
                  $last_entry $first;
                  }
                  ?>

                  Kommentar


                  • #10
                    Vielen Dank für deine Hilfe. Ich habe deinen Code etwas angepasst

                    PHP-Code:
                        foreach ($userMonat as $current_entry) {

                        
                    $first $current_entry['datum']; // erstes Datum des aktuellen Wertes

                        // Gruppenbruch, neues Datum
                        
                    if ($first != $last_entry) {

                            
                    $Datum             explode("-"$first);
                            
                    $DatumAusgabe     $Datum[2].".".$Datum[1].".";

                            
                    $anzStundenTag     =     str_replace(",""."$current_entry['usz_anzStunden']);
                            
                    $gesamtZeitTag     += $anzStundenTag;

                            echo 
                    "<br>\n";
                            echo 
                    '<div style="font-weight: bold; margin-bottom: 10px;">' $DatumAusgabe '</div>';
                        }

                        echo 
                    $current_entry['usz_anzStunden']. "Std. - " $current_entry['name'] . "<br>";
                        echo 
                    '<div style="margin-top: 6px; font-size: 15px; margin-bottom: 6px;">'.nl2br($current_entry['grund']). "</div>";
                        echo 
                    $gesamtZeitTag;
                        echo 
                    "<br>\n";

                        
                    // neuen Vergleichswert setzen
                        
                    $last_entry $first;

                    Jetzt habe ich noch ein kleines Problem. Ich möchte gerne die Stunden von jedem Tag zusammenzählen und am Ende des jeweiligen Tages ausgeben. Meine Idee war

                    PHP-Code:
                    $anzStundenTag     =     str_replace(",""."$current_entry['usz_anzStunden']);
                    $gesamtZeitTag     += $anzStundenTag
                    Und die Ausgabe

                    PHP-Code:
                    echo $gesamtZeitTag;
                    echo 
                    "<br>\n"
                    Leider klappte dieses nicht so recht, a) wird nicht richtig zusammen gezählt und b) wird es irgendwie unter jeden Eintrag irgendeine Zahl gesetzt, siehe Bild

                    kkkkkkk.JPG

                    Kommentar


                    • #11
                      So, ich habe nochmals bisschen etwas umgestaltet

                      PHP-Code:
                      foreach ($userMonat  as $current_entry) {

                          
                      $first $current_entry[datum']; // erstes Datum des aktuellen Wertes 

                              $anzStundenTag     =     str_replace(",", ".", $current_entry['
                      usz_anzStunden']);
                              $gesamtZeitTag     += $anzStundenTag;

                          // Gruppenbruch, neues Datum
                          if ($first != $last_entry) {

                              $Datum                   = explode("-", $first);
                              $DatumAusgabe     = $Datum[2].".".$Datum[1].".";


                              echo "<br>\n";
                              echo '
                      <div style="font-weight: bold; margin-bottom: 10px;">' . $DatumAusgabe . '</div>';
                              echo '
                      <div style="margin-top: 6px; font-size: 15px; margin-bottom: 6px; width: 100%; margin-bottom: 21px; border-bottom: 1px solid #efefef; display: inline-block; padding-bottom: 6px;"Stunden gesamt'. $gesamtZeitTag. "</div>";

                          }

                          echo $current_entry['
                      usz_anzStunden']. "Std. - " . $current_entry['name'] . "<br>";
                          echo '
                      <div style="margin-top: 6px; font-size: 15px; margin-bottom: 6px;">'.nl2br($current_entry['grund']). "</div>";

                          echo "<br>\n";

                          // neuen Vergleichswert setzen

                          $last_entry = $first; 
                      Unbenannt.JPG

                      Ich habe irgendwie das Gefühl ich kann mein Vorhaben knicken. Alles umsonst. Keine Ahnung woher die Zahlen kommen die ich gelb markiert habe.

                      Kommentar


                      • #12
                        Du bastelst ja auch an mehreren Stellen gleichzeitig rum. Konzentriere dich doch erst mal auf dein Problem.
                        Was hat CSS da in diesem Moment drin verloren, das macht die Sache doch nur noch unübersichtlicher. Zudem gehört CSS in eine Datei und nicht als Inline-CSS mitten in den HTML Code, damit machst du das Prinzip von CSS, nämlich nur eine CSS-Datei zu haben, die der Browser im Speicher halten kann zur wiederkehrenden Verwendung, zu Nichte.

                        Ausserdem denke ich, hast du den Code bisher nicht selbst geschrieben, dann solltest du uns zumindest richtige Infomaitoren liefern.
                        Warum steht oben der 1.4. vor dem 2.4. und bei dir jetzt anders herum, woran hast du gedreht, das dort so eine umgekehrte Ausgabe erfolgt.

                        Das - AAA/AAB kann ich auch nirgends entdecken.

                        Dann solltest du das Error-Reporting in deiner Entwicklungsumgebung einschalten, wie man das macht steht hier.
                        Danach rasselt es nur so von Warnungen, die du erst mal beseitigen solltest. Das meiste davon hast du selbst verursacht und sind wohl kleine Fehler.

                        Dann zur Berechnung.
                        Du hast 2 Array-Elemente die unterschiedlich heissen, die du aber addiert haben willst, wenn ich dich richtig verstehe, dazu muss dann nachgesehen werden welche davon vorhanden sind, sonst greifst du auf ein Arrayelement zu, welches nicht vorhanden ist und das mag PHP nicht so, als wieder eine Warnung.
                        Wei man das macht habe ich Beitrag #9 auch gezeigt
                        PHP-Code:
                         if ( isset($current_entry['usz_anzStunden']) ) 
                        Damit prüfst du ob eine Array-Element überhaupt da ist.

                        Zum addieren musst du eine Hilfsvariable erstellen ausserhalb von de Schleife. Diese befüllst du dann mit den addierten Zeiten.

                        Verwende auch var_dump wenn und nicht weiter weisst und lass dir Inhalte anzeigen.
                        Lies dir am besten mal den ganzen Beitrag zu Debugging durch.

                        Ich habe irgendwie das Gefühl ich kann mein Vorhaben knicken
                        Dann sag Bescheid, nicht das sich hier noch mehr Leute den Kopf zerbrechen.


                        Kommentar


                        • #13
                          Das - AAA/AAB kann ich auch nirgends entdecken.
                          Wie willst du dieses erkennen? Dieser Wert steht jetzt in $current_entry['name'] diese Daten komme aus der Datenbank.

                          Warum steht oben der 1.4. vor dem 2.4.
                          Weil ich an der Funktion etwas gedreht habe, es macht Sinn, dass der neueste Beitrag immer oben steht!

                          Dann solltest du das Error-Reporting in deiner Entwicklungsumgebung einschalten
                          Habe ich

                          PHP-Code:
                          error_reporting(E_ALL);
                          ini_set('display_errors'1); 
                          Danach rasselt es nur so von Warnungen, die du erst mal beseitigen solltest.
                          Also sorry, man kann es auch übertreiben? Ich bekomme GENAU drei Nachrichten angezeigt

                          Code:
                          Notice: Undefined variable: gesamtZeit in
                          Notice: Undefined variable: last_entry in
                          Notice: Undefined variable: gesamtZeitTag
                          Zum addieren musst du eine Hilfsvariable erstellen ausserhalb von de Schleife. Diese befüllst du dann mit den addierten Zeiten.
                          Bringt nichts, an der Zahl ändert sich nichts.

                          Du hast 2 Array-Elemente die unterschiedlich heissen,
                          Wo habe ich zwei Elemente, ich möchte nichts anderes erreichen als die Stunden für einen Tag zusammen zu zählen.

                          Kommentar


                          • #14
                            Zitat von Nadine Beitrag anzeigen
                            Wo habe ich zwei Elemente, ich möchte nichts anderes erreichen als die Stunden für einen Tag zusammen zu zählen.
                            Dann mach das.

                            Ignoriere alle Warnungen, schalte am besten Error-Repoting aus, denn du weisst es besser als der Interpreter und zeige bloss nicht den aktuellen Stand, denn damit verunsicherst du uns nur, denn schliesslich sind wir ja Hellseher.


                            Kommentar


                            • #15
                              Sorry, was habe ich gemacht dass du plötzlich so reagierst? Hier sind wohl nur Profis unter sich und Neulinge können sich wohin auch immer schären. Nur keine Fragen stellen! Finde ich echt traurig. Als Neuling darf man nichts fragen soll die fresse halten und schauen wo man Hilfe bekommt nur nicht bei uns im Forum.

                              Was willst du denn sehen? Es steht doch alles im Code um was es geht, es geht um diese Zeile

                              PHP-Code:
                              $anzStundenTag     =     str_replace(",""."$current_entry['usz_anzStunden']); 
                              Damit möchte ich alle Stunden von _einem_ Tag zusammen zählen, nicht mehr und nicht weniger. Aber dieses gelingt mir nicht.

                              Und dieses dachte ich dass ich dieses so machen kann

                              PHP-Code:
                               $anzStundenTag     =     str_replace(",""."$current_entry['usz_anzStunden']);
                               
                              $anzStundenTag     += $anzStundenTag

                              Kommentar

                              Lädt...
                              X