Datum aus Datenbank holen und in einem Kalender markieren

Collapse
This topic is closed.
X
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Datum aus Datenbank holen und in einem Kalender markieren

    Moin,

    ich habe in einer Datenbanktabelle einen Datumszeitraum abgespeichert.
    Z.b. 18.10.2011 bis 23.10.2011.

    Die werden alle einzelnd gespeichert also:
    18.10.2011
    19.10.2011
    20.10.2011
    21.10.2011
    22.10.2011
    23.10.2011

    Nun möchte ich diese Daten in einem Kalender unterbringen und markieren damit zu sehen ist, dass der bestimmte Tag ausgebucht ist.

    Mein Kalenderscript sieht folgendermaßen aus:

    PHP Code:
    <?PHP $month = isset($_GET['month']) ? intval($_GET['month']) : date('n');
        
    $year = isset($_GET['year']) ? intval($_GET['year']) : date('Y');
        
        
    $options['today_class'] = "background-color:#008bb8; font-weight:bold; color:#fff;";
        
    $weekdays = array('So''Mo''Di''Mi''Do''Fr''Sa');
        
        
    $weekdays = array('So''Mo''Di''Mi''Do''Fr''Sa');
        
    $months = array(
            
    '01' => 'Januar',
            
    '02' => 'Februar',
            
    '03' => 'M&aumlrz',
            
    '04' => 'April',
            
    '05' => 'Mai',
            
    '06' => 'Juni',
            
    '07' => 'Juli',
            
    '08' => 'August',
            
    '09' => 'September',
            
    '10' => 'Oktober',
            
    '11' => 'November',
            
    '12' => 'Dezember'
        
    );
        
        
    $prev_symbol "&laquo;";
        
    $next_symbol "&raquo;";
        
    $summary "Belegungsplan";
        
    $caption "Belegungsplan";
        
    $options['month_link']     = '<a href="'.$_SERVER['PHP_SELF'].'?month=%d&amp;year=%d&Titel='.$Titel.'">%s</a>';
        
        
    $total_days date('t'mktime(000$month1$year));
        
    $day_offset date('w'mktime(000$month1$year));
        
        list(
    $n_month$n_year$n_day) = split(', 'strftime('%m, %Y, %d'));
        
    $day_highlight = (($n_month == $month)."&amp;&amp;".($n_year == $year));
        
        list(
    $n_prev_month$n_prev_year) = split(', 'strftime('%m, %Y'mktime(000$month-11$year)));
        
    $prev_month_link sprintf($options['month_link'], $n_prev_month$n_prev_year$prev_symbol);
     
        list(
    $n_next_month$n_next_year) = split(', 'strftime('%m, %Y'mktime(000$month+11$year)));
        
    $next_month_link sprintf($options['month_link'], $n_next_month$n_next_year$next_symbol);
        
        echo 
    '
        <table border="0" summary="'
    .$summary.'" style="width: 400px;">
        <caption>'
    .$caption.'</caption>
        <thead>
        <tr>
        <th style="background-color:#647b8d;">'
    ?> 
        
        <?PHP
         
    if (date('m') >= $month AND date('Y') == $year): 
         else:
         
         echo 
    $prev_month_link;     
         
         endif; 
        
    ?>
        
        <?PHP echo '</th>
        <th colspan="5">'
    .$months[strftime('%m'mktime(000$month1$year))].' '.$year.'</th>
        <th style="background-color:#647b8d;">'
    .$next_month_link.'</th>
        </tr>'
    ;
        echo 
    "<tr>\n";
        
        foreach (
    $weekdays as $weekday)
            {
              echo 
    "\t";
              echo 
    "<th>".$weekday."</th>\n";
              echo 
    "\n";
            }
            
        echo 
    "\n";
        echo 
    "\n";
        echo 
    "</tr>
        </thead>
        <tbody>\n"
    ;
        echo 
    "<tr>\n";
        
        if (
    $day_offset 0) {
          for (
    $i=0$i<$day_offset$i++)
            {
                echo 
    "\t";
                echo 
    '<td class="empty_cell">';
                echo 
    "\n";
            } 
         }
         for (
    $day=1$day<=$total_days$day++)
            {
              if (
    $day_highlight && ($day == $n_day) && ($month == $n_month))
              {
          echo 
    "\t";
          echo 
    '</td>
           <td id="day_'
    .$day.'" style="'.$options['today_class'].'">'.$day.'';
           echo 
    "\n";           
                }                          
                    
        else   {
         echo 
    "\t";
         echo 
    '</td>
        <td id="day_'
    .$day.'">'.$day.'</td>';
             echo 
    "\n";
           }
           
    $day_offset++;
            if (
    $day_offset == 7)   {
             
    $day_offset 0;
             if (
    $day $total_days)
             {
               echo 
    "</tr>\n<tr>";
             }
           }   
           
         }
         if (
    $day_offset 0)
            {
              
    $day_offset 7-$day_offset;
            }
        if (
    $day_offset 0)
    {
      for (
    $i=0$i$day_offset$i++)
      {
        echo 
    '<td class="empty_cell">';
         echo 
    "\n";
      }
    }
      
    ?>
    Der Kalender funktioniert soweit aber die Markierung der eingegebenen Daten aus der Datenbank bekomme ich einfach nicht hin. :/

    Den aktuellen Tag kann ich auslesen und markieren aber nicht die, die aus der Datenbank übergeben werden.

    Leider konnte mir bisher noch niemand wirklich helfen.
    Hat jemand für mich einen Tipp/Denkanstoß wo ich ansetzen kann?

    Viele Grüße
    Paul
    Last edited by AmicaNoctis; 09-11-2011, 11:26. Reason: überlangen Code umgebrochen

  • #2
    Hallo,

    ich sehe im Code keinerlei Datenbankabfragen. Woher soll der Kalender die Daten aus der DB bekommen?

    Übrigens erzeugst du invaliden HTML-Code. Jag die Seite mal durch den Validator und korrigiere die Fehler im Code.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Comment


    • #3
      Moin Amica,

      vielen Dank für Deine Antwort.

      Eine Datenbankabfrage habe ich noch nicht eingebunden.
      Hier ist die Datenbankabfrage die ich über dem Kalender habe.

      Ausgabe ist:
      "ausgebucht vom:
      XX.XX.XXXX bis XX.XX.XXXX"

      Den Zeitraum zwischen den Daten möchte ich auf den Kalender übertragen sodass diese dort als gebucht markiert werden.

      PHP Code:
      <?PHP     
          $Tabellenname
      ="belegungsplan";
          
      $query mysql_query("SELECT * FROM $Tabellenname WHERE Titel='$Titel'order by Datum1",$db);
          
      $num=mysql_NumRows($query);
          include(
      "../../intern/inc/funk.makedate.php");
          
      $i=0; while ($i<$num):
          
      $row mysql_fetch_array($query);
          
      $Datum1=makedate($row[Datum1]);
              
      $Datum2=makedate($row[Datum2]);
      ?>
      <?PHP 
      echo $Datum1[9];?>    bis <?PHP echo $Datum2[9];?><br>
          
      <?PHP $i++; endwhile;
          
      // Datenausgabe Schleifenende    ?>
          <br>
      Ich möchte Datenbankabfrage und Kalender miteinander verbinden.

      Viele Grüße
      Paul

      Comment


      • #4
        Okay, jetzt weiß ich, was du vor hast, aber noch nicht, woran es nun genau scheitert.

        Du kannst einen Kalender anzeigen, prima! Du kannst die Datenbank abfragen, prima! Beides sieht zwar noch nicht professionell aus, aber darum kann man sich später kümmern.

        Worin besteht jetzt das konkrete Problem, diese beiden Puzzleteile zusammenzusetzen?
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Comment


        • #5
          ja genau!
          Ich weiß nicht wie ich diese beiden kombinieren soll damit die Daten aus der Datenbank im Kalender als "ausgebucht" markiert werden.

          Tut mir leid, bin leider noch Anfänger. :/

          Comment


          • #6
            Speichere die Daten aus der DB in einem Array. Beim Zusammenbasteln der Kalenderansicht prüfst du für jeden Tag den du ausgibst, ob er in einen Zeitraum aus dem Array fällt und markierst ihn entsprechend.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Comment


            • #7
              ok, vielen Dank und wie mache ich das genau?
              Überprüfe ich das mit einer Schleife?

              Comment


              • #8
                Moin,

                so ich habe es jetzt soweit hinbekommen, dass er die tage die aus der db kommen markiert.

                Danke für Deine Hilfe!

                Jetzt ist es nur noch so, dass er die Tage doppelt nimmt.

                Also z.B. 15 (markiert) | 15 (unmarkiert) | 16 (markiert) | 16 (unmarkiert)
                sozusagen 1515 1616 aber er soll ja dann nur die marktierten anzeigen und nicht nochmal die normalen Tage.

                PHP Code:
                if ($day_offset 0) { 
                      for (
                $i=0$i<$day_offset$i++) 
                        { 
                            echo 
                "\t"
                            echo 
                '<td class="empty_cell">'
                            echo 
                "\n"
                        }  
                     } 
                     for (
                $day=1$day<=$total_days$day++) 
                        { 
                          if (
                $day_highlight && ($day == $n_day) && ($month == $n_month) && ($year == $n_year)) 
                          { 
                      echo 
                "\t"
                      echo 
                '</td> 
                       <td id="day_'
                .$day.'" style="'.$options['today_class'].'">'.$day.''
                       echo 
                "\n";        
                             
                            }  
                                 
                    else   { 
                         
                        
                $query mysql_query("SELECT * FROM belegungsplangebucht WHERE Titel='$Titel'order by Datum2",$db); 
                        
                $num=mysql_NumRows($query); 
                        
                $i=0; while ($i<$num): 
                        
                $row mysql_fetch_array($query); 
                        
                $Datum1=makedate($row[Datum1]); 
                        
                $Datum2=makedate($row[Datum2]); 
                                 
                        if ((
                $day == $Datum2 [1]) && ($month == $Datum2 [2])&& ($year == $Datum2 [3])) { 
                          echo 
                "\t"
                          echo 
                '</td> 
                           <td id="day_'
                .$day.'" style="'.$options['today_class'].'">'.$day.''
                           echo 
                "\n";            
                        }  
                        
                $i++; endwhile;  
                         
                     echo 
                "\t"
                     echo 
                '</td> 
                    <td id="day_'
                .$day.'">'.$day.'</td>'
                         echo 
                "\n"
                       } 
                       
                $day_offset++; 
                        if (
                $day_offset == 7)   { 
                         
                $day_offset 0
                         if (
                $day $total_days
                         { 
                           echo 
                "</tr>\n<tr>"
                         } 
                       }    
                        
                     } 
                Habe schon versucht die Abfrage dementsprechend zu ändern aber leider ohne Erfolg. Entweder er zeigt mir nur die markierten oder nur die unmarkierten Tage.

                Hat jemand eine Idee?

                Vielen Dank und viele Grüße
                Paul

                Comment


                • #9
                  Die Ausgabe der unmarkierten Daten solltest du in den else-Teil der if-Anweisung setzen und nicht außerhalb der if-Anweisung, wo sie immer ausgeführt wird.
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Comment


                  • #10
                    Bitte beachten: PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr - Ankündigungen im Forum : PHP Developer Forum

                    Datum aus Datenbank holen und in einem Kalender markieren - php.de

                    *close*
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Comment

                    Working...
                    X