kalender

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

  • kalender

    hallo leute,

    habe ein kalender gebastelt , der aktuelle tag wird farblich hinterlegt und auch die termine. oder besser gesagt der termin.

    hier mal der code(ohne datenbank):

    PHP-Code:
    $termin "1";
    $tage_monat date("t");
    $tage = Array("1"=>"Mo""2"=>"Di""3"=>"Mi""4"=>"Do""5"=>"Fr""6"=>"Sa","0"=>"So");
    $anzahl_zeilenceil($tage_monat/7);
    $heute_tag date("d");
    $dateing =  "01 ".date("F")." ".date("Y");
    $timestamp strtotime($dateing);
    $erster_tag_monat date("w",$timestamp);


    echo 
    "<table border=\"0\" cellspacing=\"1\" bgcolor=\"#000000\">";
    echo 
    "<tr bgcolor=\"#FFFFCC\">";
    foreach (
    $tage as $tag)
    echo 
    "<td width=\"20\">$tag</td>";
    echo 
    "</tr>";

    for(
    $z=0;$z<$anzahl_zeilen;$z++)
    {
    echo 
    "<tr bgcolor=\"#FFFFFF\">";
    for(
    $s=1;$s<8;$s++)
    {
      if(
    $s == $erster_tag_monat &&$z ==0)
        {
         
    $count=1;
         
    $go=true;
        }
           if((isset(
    $go)) && ($go == true) && ($count $tage_monat+1))
        {
           if(
    $count == $heute_tag)                         {
               echo 
    "<td><font color=\"#FFCFCC\">$count</font></td>";
               
    $count $count 1;
             }
           elseif(
    $count == $termin)                         {
               echo 
    "<td><a href=\"test.php\">$termin</a></td>";
               
    $count $count 1;
             }
          else
             {
               echo 
    "<td>$count</td>";
               
    $count $count 1;
             }
        }
                      else
            {
              echo 
    "<td>&nbsp</td>";
                        }        
         }
    echo 
    "</tr>";

    nun wollte ich mein kalender mit einer datenbank verbinden. in der datenbank ist der tag und dazu eine beschreibung gespeichert.

    habe eine datenbank abfrage gemacht und das ergebnis in ein array gespeichert. danach wird das array in diesem code abschnitt ausgegeben:

    PHP-Code:
    if($count == $termin)
    {echo 
    "<td><a href=\"test.php\">$termin</a></td>";
    $count $count 1;

    hat auch funktioniert, allerdings nur wenn es in der datenbank einen eintrag hat.
    habe es danach mit der foreach schleife probiert, allerdings war die ausgabe dann flasch, es wurden immer soviel spalten angefügt wie einträg in der datenbank waren.

    kann mir jemand einen tipp geben ?

    danke

  • #2
    also, ausgabe des kalenders klappt und ausgabe der termine (alleine) klappt auch.

    also modifizier die ausgabe des kalenders so weit, dass du bei jedem tag guckst, ob ein eintrag in dem array drin ist. und wenn ja, schreibst du ihn halt rein, oder machst sonst was.

    Kommentar


    • #3
      Hey, da ich auch nen Kalender hab ich mir deinen mal geschnappt ( ) und arbeite da grad bisschen dran weiter!

      Momentan sieht das so aus:

      PHP-Code:
      <?php
      // testanfang - Array mit Terminen erstellen
      $terminsql mysql_query("SELECT eventday FROM lk_calendar WHERE eventmonth = 11");
      while (
      $terminsqlr mysql_fetch_array ($terminsql))
      {
      $eventday $terminsqlr['eventday'];
      $eventname $terminsqlr['eventname'];
      $tempArray = array("$eventday"); // Variablen in tmp Array schreiben
      $terminArray array_merge($terminArray$tempArray); // das finale Array mit dem temporären Verbinden
      }
      echo 
      '<pre>';
      print_r($terminArray);
      echo 
      '</pre>';

      // testende
      $tage_monat date("t");
      $tage = Array("1"=>"Mo""2"=>"Di""3"=>"Mi""4"=>"Do""5"=>"Fr""6"=>"Sa","0"=>"So");
      $anzahl_zeilenceil($tage_monat/7);
      $heute_tag date("d");
      $dateing =  "01 ".date("F")." ".date("Y");
      $timestamp strtotime($dateing);
      $erster_tag_monat date("w",$timestamp);


      echo 
      '<table border="0" cellspacing="1" bgcolor="#000000">';
      echo 
      '<tr bgcolor="#FFFFCC">';
      foreach (
      $tage as $tag)
      echo 
      '<td width="20">'.$tag.'</td>';
      echo 
      '</tr>';

      for(
      $z=0;$z<$anzahl_zeilen;$z++)
      {
      echo 
      '<tr bgcolor="#FFFFFF">';
      for(
      $s=1;$s<8;$s++)
      {
        if(
      $s == $erster_tag_monat && $z == 0)
          {
           
      $count=1;
           
      $go=true;
          }
             if((isset(
      $go)) && ($go == true) && ($count $tage_monat+1))
          {
             if(
      $count == $heute_tag// Aktuellen Tag farbig hervorheben
               
      {
                echo 
      in_array($count$terminArray) ? '<td style="background-color:#FFCFCC;"><a href="test.php">'.$count.'</a></td>' :  '<td style="background-color:#FFCFCC;">'.$count.'</td>'
                
      $count $count 1;
               }
             elseif(
      in_array($count$terminArray)) // falls Tag in terminArray vorhanden
               
      {
                 echo 
      '<td><a href="test.php">'.$count.'</a></td>';
                 
      $count $count 1;
               }
            else 
      // falls kein Termin 
               
      {
                 echo 
      '<td>'.$count.'</td>';
                 
      $count $count 1;
               }
          }
          else 
      // falls "kein Tag" -> leeres Feld!
              
      {
                echo 
      '<td>&nbsp</td>';
              }        
           }
      echo 
      "</tr>";
      }
      ?>
      geändert:
      - der aktuelle Tag kann nun auch Termine enthalten
      - array wird aus Datenbank ausgelesen (Datenbankstruktur noch net wie sie sein sollte)
      - mehrere kleine Code/Syntaxänderungen!

      Wie gesagt, bin noch am schreiben... Also kann nix viel Mist drin stehen (Variablen die manuell gesetzt sind usw, Kommentare die zu keinem Befehl gehören , .... )

      edit: Zieht zwar bisschen in die Breite, aber Codeumbruch macht die alternativen if strukturen schlecht lesbar!
      Zuletzt geändert von matz0r; 11.11.2004, 15:36.

      Kommentar


      • #4
        habe mein script heute mittag erweitert, bei mir sieht es nun so aus ;

        PHP-Code:
        mysql_connect("localhost", "root@localhost","");
        <?
        mysql_connect("localhost", "root@localhost@localhost","");
        mysql_select_db("daten");
        $abfrage = "SELECT tag, beschreibung FROM test";
        $ergebnis = mysql_query($abfrage);
        while ($row = mysql_fetch_array($ergebnis)) 
        {
        $sqltag[] = $row[tag];
        }
        ksort($sqltag);

        $tage_monat = date("t");
        $tage = Array("1"=>"Mo", "2"=>"Di", "3"=>"Mi", "4"=>"Do", "5"=>"Fr", "6"=>"Sa","0"=>"So");
        $anzahl_zeilen= ceil($tage_monat/7);
        $heute_tag = date("d");
        $dateing =  "01 ".date("F")." ".date("Y");
        $timestamp = strtotime($dateing);
        $erster_tag_monat = date("w",$timestamp);

        echo "<table border=\"0\" cellspacing=\"1\" bgcolor=\"#000000\">";
        echo "<tr bgcolor=\"#FFFFCC\">";
        //Ausgabe der Wochentage (Mo, Di, Mi, Do, Fr, Sa, So)
        foreach ($tage as $tag)
        echo "<td width=\"20\">$tag</td>";
        echo "</tr>";

        for($z=0;$z<$anzahl_zeilen;$z++)
        {
        echo "<tr bgcolor=\"#FFFFFF\">";
        for($s=1;$s<8;$s++)
         {
           if($s == $erster_tag_monat &&$z ==0)
         {
           $count= 1;
           $go=true;
         }
            if((isset($go)) && ($go == true) && ($count < $tage_monat+1))
              { 
                if($count == $heute_tag)

               {
                echo "<td><font color=\"#FFCFCC\">$count</font></td>";
                $count = $count + 1;
               }

             elseif(in_array($count, $sqltag))
              {
                 echo "<td><a href=\"test.php?\">$count</a></td>";$count = $count + 1;
               }

              else
               {
                 echo "<td>$count</td>";
                 $count = $count + 1;
                }
              }
           else
            {
             echo "<td>&nbsp</td>";
           }        
        }
        echo "</tr>";
        }

        kann nun auch die tagestermine abfragen.

        jetzt kommt noch der monat in den titel.

        ausserdem kommt noch der monat in die datenbank,
        das heisst ich gebe im feld tag den wert 10 und im feld monat den wert 11 ein.
        nehme den monat dann noch in die sql abfrage und der termin erscheint nur noch am 10 november. und nicht mehr am jedem 10 tag.

        grüsse
        Zuletzt geändert von maschli; 11.11.2004, 16:05.

        Kommentar


        • #5
          nochmal ne veränderte Version:

          PHP-Code:
          <?php
          $aktueller_monat 
          date("m"); // Monat als zweistellige Zahl -> 01,02,...,12
          $aktuelles_jahr date("Y"); // Vierstellige Jahreszahl    Beispiel: 1999 oder 2003
          $tage_monat date("t"); // Anzahl der Tage des angegebenen Monats
          $tage = Array("1"=>"Mo""2"=>"Di""3"=>"Mi""4"=>"Do""5"=>"Fr""6"=>"Sa""0"=>"So");
          $anzahl_zeilenceil($tage_monat/7);
          $heute_tag date("d");
          $dateing =  "01 ".date("F")." ".date("Y");
          $timestamp strtotime($dateing);
          $erster_tag_monat date("w",$timestamp);

          // SQL - Array mit Terminen erstellen
          $terminsql mysql_query("SELECT eventday FROM lk_calendar WHERE eventmonth = $aktueller_monat");
          while (
          $terminsqlr mysql_fetch_array ($terminsql))
          {
          $eventday $terminsqlr['eventday'];
          $eventname $terminsqlr['eventname'];
          $tempArray = array("$eventday"); // Variablen in tmp Array schreiben
          $terminArray array_merge($terminArray$tempArray); // das finale Array mit dem temporären Verbinden
          }
          // SQL Ende

          // Kalender Darstellung
          echo '<table border="0" cellspacing="1" bgcolor="#000000">';
          echo 
          '<tr bgcolor="#FFFFCC">';
          foreach (
          $tage as $tag)
          echo 
          '<td width="20">'.$tag.'</td>';
          echo 
          '</tr>';

          for(
          $z=0;$z<$anzahl_zeilen;$z++)
          {
          echo 
          '<tr bgcolor="#FFFFFF">';
          for(
          $s=1;$s<8;$s++)
          {
            if(
          $s == $erster_tag_monat && $z == 0)
              {
               
          $count=1;
               
          $go=true;
              }
                 if((isset(
          $go)) && ($go == true) && ($count $tage_monat+1))
              {
                 if(
          $count == $heute_tag// Aktuellen Tag farbig hervorheben
                   
          {
                    
          // Aktuellen Tag farbig hervorheben  - Falls Termin vorhanden -> Link setzen
                    
          echo in_array($count$terminArray) ? '<td style="background-color:#FFCFCC;"><a href="calender,termin,datum,'.$count.$aktueller_monat.$aktuelles_jahr.'.html">'.$count.'</a></td>' :  '<td style="background-color:#FFCFCC;">'.$count.'</td>'
                    
          $count $count 1;
                   }
                 elseif(
          in_array($count$terminArray)) // falls Tag in terminArray vorhanden -> Link setzen
                   
          {
                     echo 
          '<td><a href="calender,termin,datum,'.$count.$aktueller_monat.$aktuelles_jahr.'.html">'.$count.'</a></td>';
                     
          $count $count 1;
                   }
                else 
          // falls kein Termin -> Tag setzen
                   
          {
                     echo 
          '<td>'.$count.'</td>';
                     
          $count $count 1;
                   }
              }
              else 
          // falls "kein Tag" -> leeres Feld!
                  
          {
                    echo 
          '<td>&nbsp</td>';
                  }        
               }
          echo 
          "</tr>";
          }
          ?>
          - unnötiges Zeug entfernt!
          - es werden nun Links gesetzt "..tagmonatjahr.xxx"



          EDIT: Gleichzeitig geposted!

          Hast du überhaupt noch n Problem, oder nun alles hinbekommen...?
          Zuletzt geändert von matz0r; 11.11.2004, 16:32.

          Kommentar


          • #6
            also im moment habe ich keine probleme mehr habe alle hinbekommen
            Zuletzt geändert von maschli; 11.11.2004, 16:56.

            Kommentar


            • #7
              Euer Kalender ist ja ziemlich nett nur leider funktioniert er im Mai nicht.


              Da liegt auch der Fehler begraben.
              Wenn man den Sonntag als Array[0] speichert das gute $s aber erst bei 1
              startet kann auch nix bei Monaten herauskommen bei denen der erste Tag
              auf einen Sonntag fällt.

              Falsch:
              PHP-Code:
              for($s=1;$s<8;$s++) 
              Richtig:
              PHP-Code:
              for($s=0;$s<7;$s++) 
              Zuletzt geändert von American; 01.05.2005, 09:11.

              Kommentar


              • #8
                Hallo,

                ich habe diesen Kalender an meine Bedürfnisse angepasst:

                PHP-Code:
                <?php
                include("../config.php");
                $aktueller_monat date("m"); // Monat als zweistellige Zahl -> 01,02,...,12
                $aktuelles_jahr date("Y"); // Vierstellige Jahreszahl    Beispiel: 1999 oder 2003
                $tage_monat date("t"); // Anzahl der Tage des angegebenen Monats
                $tage = Array("1"=>"Mo""2"=>"Di""3"=>"Mi""4"=>"Do""5"=>"Fr""6"=>"Sa""0"=>"So");
                $anzahl_zeilenceil($tage_monat/7);
                $heute_tag date("d");
                $dateing =  "01 ".date("F")." ".date("Y");
                $timestamp strtotime($dateing);
                $erster_tag_monat date("w",$timestamp);

                // SQL - Array mit Terminen erstellen
                $terminsql mysql_query("SELECT * FROM fortbildung WHERE datum_m = $aktueller_monat and onl='1'");
                while (
                $terminsqlr mysql_fetch_array ($terminsql))
                {
                $eventday $terminsqlr['datum_t'];
                $eventid $terminsqlr['fid'];
                $eventname $terminsqlr['titel'];
                $tempArray = array("$eventday"); // Variablen in tmp Array schreiben
                $terminArray array_merge($terminArray$tempArray); // das finale Array mit dem temporären Verbinden
                }
                // SQL Ende

                // Kalender Darstellung
                echo '<table border="0" cellspacing="1" bgcolor="#000000">';
                echo 
                '<tr bgcolor="#FFFFCC">';
                foreach (
                $tage as $tag)
                echo 
                '<td width="20">'.$tag.'</td>';
                echo 
                '</tr>';

                for(
                $z=0;$z<$anzahl_zeilen;$z++)
                {
                echo 
                '<tr bgcolor="#FFFFFF">';
                for(
                $s=1;$s<8;$s++)
                {
                  if(
                $s == $erster_tag_monat && $z == 0)
                    {
                     
                $count=1;
                     
                $go=true;
                    }
                       if((isset(
                $go)) && ($go == true) && ($count $tage_monat+1))
                    {
                       if(
                $count == $heute_tag// Aktuellen Tag farbig hervorheben
                         
                {
                          
                // Aktuellen Tag farbig hervorheben  - Falls Termin vorhanden -> Link setzen
                          
                echo in_array($count$terminArray) ? '<td style="background-color:#FFCFCC;"><a href="http://www.xyz.at/module/fp_fortbildung_more.php?fid2='.$eventid.'">'.$count.'</a></td>' :  '<td style="background-color:#FFCFCC;">'.$count.'</td>'
                          
                $count $count 1;
                         }
                       elseif(
                in_array($count$terminArray)) // falls Tag in terminArray vorhanden -> Link setzen
                         
                {
                           echo 
                '<td><a href="http://www.xyz.at/module/fp_fortbildung_more.php?fid2='.$eventid.'">'.$count.'</a></td>';
                           
                $count $count 1;
                         }
                      else 
                // falls kein Termin -> Tag setzen
                         
                {
                           echo 
                '<td>'.$count.'</td>';
                           
                $count $count 1;
                         }
                    }
                    else 
                // falls "kein Tag" -> leeres Feld!
                        
                {
                          echo 
                '<td>&nbsp</td>';
                        }        
                     }
                echo 
                "</tr>";
                }
                ?>
                Problem was ich nun habe ist: dass der Wert "Eventid" immer auf 131 gesetzt ist. Die Tage an denen ein Event ist werden markiert, aber der Link ist immer mit der ID 131 versehen?!?

                Warum weiß leider nicht. Ihr vielleicht?

                LG
                Clemens

                Kommentar

                Lädt...
                X