Ankündigung

Einklappen
Keine Ankündigung bisher.

Totale Blockade im Kopf :-) Einfache Augabevariante

Einklappen

Neue Werbung 2019

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

  • Totale Blockade im Kopf :-) Einfache Augabevariante

    Hallo Leute,
    habe eine Tabelle mit Daten:
    Start, End, Title, Text

    nun möchte ich bei der Ausgabe folgendes machen:

    Januar:
    Start - End
    Title
    Text


    Februar:
    Start - End
    Title
    Text


    März:
    Start - End
    Title
    Text

    usw....

    Die Struktur soll sich aber dynamisch aufbauen anhand der vorhandenen Datensätze (Start).

    Bsp (wenn nur 3 Datensätze vorhanden sind mit start Feb, März 06 und einer mit Aug. 07):

    Februar 2006
    Start - End
    Title
    Text

    März 2006
    Start - End
    Title
    Text

    August 2007:
    Start - End
    Title
    Text


    Mir fehlt dazu ein Lösungsansatz bei der Ausgabe (Monat und Jahr bestimme ich im Select mit date_format() )

    Hat mir dazu einer eine kleine Hilfestellung?
    Wäre dankbar, gruss, Micha

  • #2
    Lösungsansatz?

    Daten sortiert aus der Datenbank holen & mit PHP in das gewünscht Format printen?

    Kommentar


    • #3
      du holst alle db-einträge aus der tabelle in einen array.
      gibt dafür verschiedene möglichkeiten, wie zb: mysql_fetch_array().

      dann lässt du den array mit foreach() durchlaufen. je nach anweisung in "foreach" baut php dir die struktur auf.


      http://www.php.net/manual/de/control...es.foreach.php
      http://www.php.net/manual/de/functio...etch-array.php

      Kommentar


      • #4
        @Zergling

        Ja, soweit war ich schon

        Mein Problem worüber ich mir den kopf zerbreche ist die dynamische Monatsaufteilung:

        V = Veranstaltung

        Januar 2005:
        V - 1
        V - 2
        V - 3


        März 2005:
        V - 4
        V - 5

        Februar 2006:
        V - 6
        V - 8


        Ich bekomms nicht gebacken die beschreibenden Monate über die Veranstaltungen zu setzen.

        Kommentar


        • #5
          @embee
          oder mit while

          Kommentar


          • #6
            Erläuter mal nochmal dein Problem, ich glaube ich verstehe es nicht so ganz. Warum schaffst du es nicht, es darüber zu setzen??

            Kommentar


            • #7
              kannste nicht mal einen auszug aus deinem script zeigen, dann ist das wesentlich einfacher...

              du kannst dir allerdings auch ne klasse bauen, und diese dann immer aufrufen.
              weisst du wie ich meine?

              kannste dann schön einfach aufrufen, beispielsweise:
              $objekt->date;
              $objekt->jear;
              $objekt->event;
              $objekt->end;...

              Kommentar


              • #8
                Also Script technisch gibt es noch nicht so viel, da ich erst noch bei der Logik bin

                Aber ein Beispiel - nicht repräsentativ:

                PHP-Code:
                <?php
                while ($row = @ mysql_fetch_array($result)) {
                        if (
                $row['start_month'] == 05) {
                        echo 
                "veranstaltungen im Mai 2005
                "
                ;
                        echo 
                $row['start_date']."
                "
                .
                                        
                $row['title']."
                "
                .
                                        
                $row['text'];
                    }
                }

                ?>
                Ergibt:
                veranstaltungen im Mai 2005
                29.05.2005
                blablabl
                blablabla

                veranstaltungen im Mai 2005
                30.05.2005
                blablabl
                blablabla

                veranstaltungen im Mai 2005
                31.05.2005
                blablabl
                blablabla
                ich möchte aber gerne:
                Veranstaltungen im mai 2005
                29.05.2005
                blablabl
                blablabla

                30.05.2005
                blablabl
                blablabla

                31.05.2005
                blablabl
                blablabla
                haben

                Kommentar


                • #9
                  Achso, dann wäre mein Vorschlag:
                  PHP-Code:
                  <?php
                  while ($row mysql_fetch_assoc($result)) { // am besten ohne @ und mit _assoc
                    
                  $rows[$row['start_month']][] = $row;
                  }
                  for (
                  $m 1$m <= 12$m++) { // Monate
                    
                  if (isset($rows[$m])) {
                      print 
                  'Monat ' $m '
                  '
                  ;
                      for (
                  $i 0$i count($rows[$m]); $i++) {
                        
                  // Ausgabe des Events
                      
                  }
                    }
                  }
                  ?>
                  Edit, achso du hast Events nach Tagen (logisch). Dann mußt du einfach dein Array erweitern.
                  1. Dimension = Monat
                  2. Dimension = Tag
                  3. Dimension = Event
                  und eben dementsprechend die Schleifen schachteln und die Arrays schreiben&lesen.

                  Kommentar


                  • #10
                    Wie wäre es, einfach bei jedem Schleifendurchlauf zu prüfen, ob der Monat ein Neuer ist?

                    PHP-Code:
                    <?php
                    $oldmonth
                    =0;
                    while (
                    $row = @ mysql_fetch_array($result)) { 
                          if (
                    $row['start_month'] != $oldmonth) { 
                              echo 
                    "veranstaltungen im ".$row['start_month']."2005
                    "

                              
                    $oldmonth=$row['start_month'] ;
                          }
                          echo 
                    $row['start_date']."
                    "

                                            
                    $row['title']."
                    "

                                            
                    $row['text']; 
                       } 

                    ?>

                    Kommentar


                    • #11
                      *rumprobier*

                      ......

                      Kommentar


                      • #12
                        Dann muss das SQL Statement aber sortiert sein.

                        Kommentar


                        • #13
                          ORDER BY start_date

                          das problem bisher (3 Dates; zwei davon 11. und eines 05.)
                          es wird nur Monat 11 angezeigt

                          Kommentar


                          • #14
                            Wie sieht dein Skript dann momentan aus? Gehts mit meiner Lösung nicht? Welchen Typ hat start_date? Date oder Varchar?

                            Kommentar


                            • #15
                              Typ = Date

                              So sieht das Script bisher aus:

                              PHP-Code:
                              <?php
                              <?
                              mysql_connect($hostname$username$password);
                              mysql_select_db("veranstaltung");
                              $result mysql_query("SELECT
                                                     id, 
                                                     date_format(start_date, '%d.%m.%Y') as start_date_g,
                                                     date_format(start_date, '%m') as start_month,
                                                     date_format(start_date, '%y') as start_year,
                                                     date_format(end_date, '%d.%m.%Y')end_date_g,
                                                     start_date,
                                                     end_date,
                                                     title, 
                                                     text
                                                     FROM veranstaltung
                                                     ORDER BY start_date"
                              )
                                        or die (
                              mysql_error());
                                  
                              //Das aktuelle datum, dient zur ueberpruefung beim loeschen
                              $actual_date date("Y-m-d");

                              //Wenn es keine aktuellen Veranstaltungen gibt, dann auch nichts ausgeben
                              $num mysql_num_rows($result);
                              if (
                              $num==0) {
                                  echo 
                              "Derzeit gibt es leider keine aktuellen Veranstaltungen";
                              }

                              //andernfalls beginne mit der Ausgabe
                              else{

                              while (
                              $row mysql_fetch_assoc($result)) {
                              //Loeschvorgang wird eingeleitet
                                  
                              if ($row['end_date'] > $actual_date) {
                                      
                              mysql_query("DELETE FROM veranstaltung WHERE end_date < '$actual_date'");
                                  }
                                  
                                  
                              //Array
                                  
                              $rows[$row['start_month']][] = $row;
                              }
                                  
                              for (
                              $m 1$m <= 12$m++) { // Monate
                                  
                              if (isset($rows[$m])) {
                                      print 
                              'Monat ' $m '
                              '
                              ;
                                      for (
                              $i 0$i count($rows[$m]); $i++) {
                                    
                              //Ausgabe
                                    
                              }
                              }
                              }
                              }





                                        
                              mysql_close ();
                              ?>

                              Kommentar

                              Lädt...
                              X