IT-Academy Logo
Sign Up Login Help
Home - Programmieren - PHP - PHP: Kalender bauen



PHP: Kalender bauen

Dieser Artikel möchte eine Möglichkeit zeigen, wie man mit PHP einen Kalender auf der Webseite realisiert.


Autor: Patrick Faes (dreamer)
Datum: 22-10-2004, 15:21:13
Referenzen: siehe Text
Schwierigkeit: Fortgeschrittene
Ansichten: 53354x
Rating: 9 (4x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Einführung

Auch im Internet werden Kalender gerne und oft verwendet. Vereine z.B. stellen gerne Aktivitätenkalender ins Web, sodass die Mitglieder auf der Webseite sehen können wann eine Aktivität stattfindet.

Das Konzept

Man könnte dies sehr einfach erreichen mit einer statischen Auflistung aller geplannten Aktivitäten. So etwas ist allerdings recht unübersichtlich. Daher wollen wir hier ein Kalender bauen wie sie hier gezeigt wird:

MoDiMiDoFrSaSo
1234
567891011
12131415161718
19202122232425
262728293031


Es ist eine dynamisch zusammengestellte Tabelle die an hand des Systemdatums jeden Tag im Monat einzeln anzeigt. Tagen an den Aktivitäten geplant sind, werden in eine andere Farbe angezeigt und mit einem Link hinterlegt. Der Link führt dann zu einer Seite wo die Aktivitäten für einem spezifischen Tag aufgelistet werden mit einer kurzen Beschreibung und weiterführenden Links.

Den Kalender bauen

1) Die Aktivitäten in der Datenbank aufnehmen

Werfen wir erst mal einen Blick auf die MySQL-Tabelle1 worin die Daten zu den Aktivitäten stehen. Die Tabelle wird so konstruiert:
<?php
create table 'aktivitaeten'
  (
  'id' int not null auto_increment primary key,
  'titel' varchar(40) not null,
  'datum' date not null,
  'beschreibung' varchar(255) not null
  );
?>
Wir brauchen eine ID die jede Aktivität einzeln identifiziert, ein Titel, das Datum und eine Beschreibung. Ich komme später auf die genaue Konstruktion zurück.
Dies ist nur ein Beispiel. Sie können die Tabelle nach Bedarf ändern. Unten in den Referenzen finden Sie weitere Links dazu.

2) Den Kalender bauen

Das Grundgerüst des Kalenders ist eine Tabelle2, wie Sie oben schon gesehen haben. PHP hat keine eingebaute Funktion um solche Tabellen für jeden Monat dynamisch zu generieren. Es kann nur das Systemdatum mitteilen (oder alternativ die Zeit gemessen nach der Greenwich Mean Time). Daher kommt ein bisschen Mathematik dazu.

Das Script wurde in Teile zerlegt um es besser erklären zu können, unten steht das ganze Script nochmal.
<?php
  if (isset($_POST["jahr"])) {$jahr = $_POST["jahr"];}
   else {$jahr = date("Y");}
  if (isset($_POST["monat"])) {$monat = $_POST["monat"];}
   else {$monat = date("n");}
?>
Zuerst muss der Server wissen welchen Monat und Jahr wir haben. Das Jahr ist Optional, jedoch könnte es sein das Aktivitäten lange im Voraus geplannt werden.

In unserem Beispiel oben kann per Formular den Monat gewählt werden, daher wird erst nachgegangen ob dies geschehen ist. Wenn der User selbst einen Monat gewählt hat, dann wird das aufgegebene Datum benutzt, ansonsten das Systemdatum. Dies geschieht mit der Funktion date()3.

Mit der Anweisung Y in der Funktion wird das Jahr in 4 Ziffern genommen, z.B. 2004. Der Monat wird genommen mit der Anweisung n, was als Resultat eine zweistellige Nummer gibt die das Datum präsentiert (April z.B. ist 04, beachten Sie die Fformatierung die ist später wichtig für die Datenbank).
<?php
$datum = mktime(1,0,0,$monat,1,$jahr);
$t = date("t",$datum);
$w = date("w",$datum);
?>
Um die Tabelle anfangen zu können, müssen wir wissen welcher Wochentag der erste Tag des Monats ist. Wir bauen daher ein fiktives Datum mit der Funktion mktime()4. Das Format der Funktion ist:

Stunden, Minuten, Sekunden, Monat, Tag, Jahr

Wir stellen das fiktive Datum ein auf eine Stunde nach Mitternacht des ersten Tages des gewählten Monats des gewählten Jahres.

Daraus lesen wir wieviele Tage im Monat sind (die Variable $t) und welche Wochentag es ist (die Variable $w). Beachten Sie, dass der Wochentag zurück gegeben wird als nummerischer Wert von 0 bis 6, wobei Sonntag 0 ist und Samstag 6. Für die späteren Berechnungen5 schreiben wir die Daten in eine Array:
<?php
$tag = array(1,7,6,5,4,3,2);
?>
Die Berechnung erfolgt so: die Anzahl der Tage in einer Woche (7) minus die Indexnummer des Wochentags der der erste des Monats ist. Ein Beispiel: Mittwoch hat die Indexnummer 5, also 7 minus 5 ist 2, die Anzahl der Wochentage die im vorherigen Monat fielen.

Jetzt folgen wieder einige Berechnungen die wir später brauchen:
<?php
$monat_ohne_erste_woche = $t - $tag[$w];
Die Anzahl der Tage im Monat ohne die der ersten Wochen,
ist gleich "die totale Anzahl der Tage im Monat minus die Anzahl der Tage
in der ersten Woche". Diese wurden errechnet mit dem Array $tag. Mittwoch
z.B. ist der vierte Tag in der Woche (nach der amerikanischer Formatierung).
Das vierte Element der Array $tag hat den Wert '5'.
$letzte_woche = $monat_ohne_erste_woche % 7;
Die Anzahl der Tage in der letzten Woche ist gleich
der Rest der Teilung von der Anzahl der Tage im Monat
ohne die der ersten Woche geteilt durch 7 (Tagen in der Woche).
Eine solche Teilung macht man in PHP mit dem Prozentzeichen (der so genannte Modulo-Operator).
$wochen = ($monat_ohne_erste_woche - $letzte_woche) / 7;
Die Anzahl der Tage im Monat minus die Tage
der ersten Woche und die der letzten Wochen, geteilt durch
sieben ist gleich die Anzahl kompletter Wochen im
Monat.
$leere_zellen_erste_woche = 7 - $tag[$w];
Die Tabelle muss korrekt strukturiert werden.
Daher müssen wir wissen wieviele leere Zellen es in der ersten
Woche gibt. Dies errechnen wir wieder mit der Array
$tag. 7 minus die Anzahl der Wochentage in diesem
Monat ergeben die Anzahl der leeren Zellen.
$volle_zellen_erste_woche = 7 - $w + 1;
Die Anzahl voller Zellen in der ersten
Woche ist gleich 7 minus die Indexnummer des Tages
(Sonntag ist 0 bis Samstag ist 6) plus 1
(Korrigierung).
$leere_zellen_letzte_woche = 7 - $letzte_woche;
Die Anzahl von leere Zellen in der letzten
Woche ist gleich 7 minus die Anzahl der Tage
in der letzten Woche.
?>
Das ist die Mathematik für's erste. Als nächstes machen wir eine Verbindung zur Datenbank um zu sehen auf welche Tage im Monat Aktivitäten geplannt sind.
<?php
$db = mysql_connect('host','user','password');
mysql_select_db('datenbank',$db);
$resultat = mysql_query("select DAYOFMONTH(datum) as tag from aktivitaeten
where YEAR(datum)= $jahr and MONTH(datum) = $monat") or die(mysql_error());
mysql_close($db);

while (list($tag)=mysql_fetch_row($resultat))
  {
  $tage_aktivitaeten[] = $tag;
  }
?>
Aus der Datenbank nehmen wir die Tage des Monats wo Aktivitäten geplant sind. Wir verwenden dazu die Mysql-Date-Funktionen6 DAYOFMONTH (Tag des Monats), MONTH (Monat) und YEAR (Jahr). Diese extrahieren die übereinstimmenden Teile aus dem Datum. MySQL kennt nur die internationale Formatierung Jahr-Monat-Tag (z.B. 2004-09-24).
Mit einer While-Schleife7 werden alle Tage wo Aktivitäten geplannt sind an der Variable $tage_aktivitaeten hinzugefügt.

Fangen wir jetzt mal an mit der eigentlichen Tabelle. Diese wird später in 3 verschiedenen Schleifen zusammen gebaut. Die Tabelle wird dann auch mit CSS8 formatiert.
<style type="text/css">
table#kalender {background-color:#ffffff; border:3px solid blue;
	       border-collapse:collapse; empty-cells:show;}
table#kalender td {width:10px; height:10px; text-align:right;}
table#kalender td.tage {width:10px; height:10px; text-align:center;
	       font-color: red;}
table#kalender td.aktivitaet {background-color:blue; width:10px; height:10px;}
</style>
Die Tabelle hat die ID "Kalender". Die Tabelle selbst und die Zellen sollen ein Layout bekommen, die Zellen der obersten Reihe (wo die Namen der Tage stehen) und die Zellen mit Tagen an denen Aktivitäten geplannt sind, werden separat definiert. Für eine Erklärung von CSS ist hier kein Platz, sehen Sie dazu unten in den Referenzen nach.

<table id="kalender">
       <tr>
       <td class="tage">MO</td>
       <td class="tage">DI</td>
       <td class="tage">MI</td>
       <td class="tage">DO</td>
       <td class="tage">FR</td>
       <td class="tage">SA</td>
       <td class="tage">SO</td>
       </tr>

       <!-- Hier kommen die PHP-Scripts rein -->

</table>
Dies ist nur das Grundgerüst der Tabelle, nämlich: der Anfangstag und Endtag, wie auch die erste Zeile wo die Namen der Tagen stehen. Beachten Sie, dass die untenstehende PHP-Scripte zwischen der ersten Zeile und dem Endtag stehen sollten.

Jetz wollen wir mal die erste Woche in der Tabelle schreiben. Dazu verwenden wir eine IF-ELSE-Schleife.
<?php
$schon_gezaehlte_tage = 0;

if ($w == 0)
   {

   }
else ($w != 0)
   {

   }
?>
Wir deklarieren hier erst mal die Variable $schon_gezaehlte_tage. Der Name erklärt den Nutzen dieser Variable: sie speichert wieviele Tage schon gezählt wurden. Später werden wir sie auch verwenden um die numerische Angabe des Tages in die Tabelle zu schreiben. Anfangs hat sie natürlich den Wert null.

In der Schleife wird getestet ob die Variable $w (worin der numerischer Wert des Wochentags gespeichert ist) den Wert null hat. Wenn dies so ist, haben wir Sonntag (oder zumindest der Server). Dann wird der erste Teil der Schleife ausgeführt.
Wenn $w nicht null ist, und auch nicht gleich eins ist, wird der Zweite Teil der Schleife ausgeführt. Wenn $w gleich eins ist, haben wir Montag. Dann verwenden wir einfach den zweiten Codeblock (dazu komme ich gleich).

Lassen wir uns jetzt ansehen was PHP macht mit dem ersten Teil der IF-Schleife.
<?php
print "<tr>";
   for ($i = 0; $i < 6; $i++)
   {
     print '<td></td>';
   }
   $schon_gezaehlte_tage += 1;
   if (in_array($schon_gezaehlte_tage, $tage_aktivitaeten))
     {echo '<td class="aktivitaet"><a href="aktivitaeten.php?
     jahr='.$jahr.'&monat='.$monat.'&tag='
     .schon_gezaehlte_tage.'">1</href></td>';}
   else
     {print '<td>1</td>';}
print "</tr>";
?>
Wenn es schon Sonntag ist, müssen wir erst 6 leere Zellen schreiben (machen wir mit einer For-Schleife9) und danach schreiben wir die Zelle für den Sonntag, dem ersten Tag des Monats.
Bevor wir aber diese letzte Zelle hinzu schreiben, erhöhen wir die Variable $schon_gezaehlte_tage um eins. Dann testen wir mit der Funktion in_array()10 ob an diesem Tag eine Aktivität stattfindet. Die Tage wo Aktivitäten geplannt sind, haben wir weiter oben schon in dem Array $tage_aktivitaeten gespeichert.
Wenn das Datum im Array gefunden wurde, schreibt PHP eine Zelle mit einem Link. Verlinkt wird nach einem anderen Script, nl. aktivitaeten.php. Als Parameter übergibt PHP das Jahr, den Monat und den Tag. Der Linktext ist die Ziffer 1. Um deutlich zu machen dass eine Aktivität an diesem Tag geplannt ist, wird die Zelle eine andere CSS-Klasse hinzugewiesen (z.B. für eine andere Farbe).
Wenn keine Aktivitäten geplannt sind, schreiben wir ein normale Zelle mit der Ziffer 1.
Am Anfang und Ende schreiben wir auch die Anfangs- bzw. Endtags einer Tabellenzeile (<tr>).

Der Code der ausgeführt werden soll wenn $w einen anderen Wert als null oder eins hat, sieht so aus:
<?php
print "<tr>";
  for ($i = 0; $i < $leere_zellen_erste_woche; $i++)
    {
    print '<td></td>';
    }

  for ($i = 0; $i < $volle_zellen_erste_woche; $i++)
    {
  $schon_gezaehlte_tage += 1;
  if (in_array($schon_gezaehlte_tage, $tage_aktivitaeten))
    {
      echo '<td class="aktivitaet"><a href="aktivitaeten.php?
      jahr='.$jahr.'&monat='.$monat.'&tag='.schon_gezaehlte_tage.'">'
      .$schon_gezaehlte_tage.'</href></td>';
    }
    else
      {
      print "<td>$schon_gezaehlte_tage</td>";
      }
    }
print "</tr>";
?>
Am Anfang haben wir schon errechnet wieviele leere bzw. volle Zellen es in der ersten Woche gibt.
Zuerst werden in einer FOR-Schleife soviele leere Zellen geschrieben wie nötig sind. Danach werden in einer zweiten FOR-Schleife die vollen Zellen in der Tabelle geschrieben wie wir es oben auch schon gemacht haben. Hierbei ist der Zelleninhalt aber jedesmal gleich die Variable $schon_gezaehlte_tage. Auch hier werden am Anfang und Ende die Anfangs- bzw. Endtag einer Tabellenreihe (<tr>) geschrieben.

Jetzt haben wir die erste Woche hinter uns. Jetzt verwenden wir eine Schleife die die Anzahl der kompletten Wochen an der Tabelle hinzufügt.
<?php
for ($i = 0; $i < $wochen; $i++)
  {
  print "<tr>";

  for ($d = 0; $d < 7; $d++)
    {
    $schon_gezaehlte_tage += 1;

    if (in_array($schon_gezaehlte_tage, $tage_aktivitaeten))
      {
      echo '<td class="aktivitaet"><a href="aktivitaeten.php?
      jahr='.$jahr.'&monat='.$monat.'&tag='.schon_gezaehlte_tage.'">'
      .$schon_gezaehlte_tage.'</href></td>';
      }
    else
      {
      print "<td>$schon_gezaehlte_tage</td>";
      }
    }
  print "</tr>";
  }
?>
Eine FOR-Schleife wird soviele Male durchlaufen wie es komplette Wochen gibt. In jedem Durchgang wird eine andere Schleife siebenmal durchlaufen.
Bei jedem Durchgang werden die Tabellenreihetags (<TR>) an der Tabelle hinzugefügt und jeder Reihe werden sieben Zellen hinzugefügt. Das Hinzufügen von Links wird genau wie oben gemacht.

Jetzt müssen wir nur noch die letzte Reihe hinzufügen. Dies ist der Code dafür:
<?php
if ($schon_gezaehlte_tage < $t)
     {
     print '≶tr>';
       while ($letzte_woche > 0)
        {
          $letzte_tage = $t - $letzte_woche + 1;
          if (in_array($letzte_tage, $tag))
            {
            echo '<td class="aktivitaet">'.$letzte_tage.'</td>';
            }
          else
            {
            print "<td>$letzte_tage</td>";
            }
          $letzte_woche -= 1;
        }

       for ($i = 0; $i < $leere_zellen_letzte_woche; $i++)
        {
          print '<td></td>';
        }
     print '</tr>';
     }
?>
Anfangs testen wir hier ob die Anzahl der schon gezählten Tage kleiner ist als die Gesamtzahl an Tagen im Monat. Wenn dies nicht so ist, muss ja keine letzte Reihe mehr hinzugeschrieben werden.
Wenn das Resultat der IF-Abfrage TRUE (wahr) ist, dann schreiben wir nochmal den Anfangstag einer Tabellenreihe (<TR>). Die Indexnummer des Monatstages errechnen wir folgender maßen:

Anzahl der Tage im Monat - Anzahl der Tage in der letzten Woche die noch nicht gezählt wurden + 1

Danach checken wir in einer While-Schleife (wie oben auch schon gemacht) mit der Funktion in_array() ob an dem Tag eine Aktivität geplannt ist, und schreiben demnach die Zelle in der Tabellenreihe. Danach vermindern wir die Variable $letzte_woche (Anzahl der Tage in der letzten Woche die noch nicht gezählt wurden) mit eins.

Die While-Schleife läuft solange durch bis die Variable $letzte_woche den Wert null erreicht hat.
Danach werden noch mit einer For-Schleife die restlichen leeren Zellen hinzugeschrieben, der Endtag für die Tabellenreihe kommt später noch hinzu.

Und schon ist der Kalender fertig.


Übrigene Techniken

Ich möchte noch kurz hinweisen auf einige Techniken die Sie verwenden können.

Mittels Javascript können Formulare bei Änderung automatisch abgeschickt11 werden. Das geht so:
<form id="formular" action="kalender.php" method="post">
<select onChange="document.getElementById('formular').submit();">
  <option>Januar</option>
  <option>Februar</option>
  <option>März</option>
</select>
</form>
Mehr dazu lesen Sie in den Referenzen.

Falls der Server Ihres Hosts sich in einem anderen Zeitraum befindet (z.B. die USA statt Deutschland), dann wird (warscheinlich) die amerikanische Uhrzeit auf dem Server eingestellt sein.
Um die deutsche Uhrzeit zu errechnen, können Sie dem Code wie folgt anpassen:
<?php
$zeitunterschied = 7 * 3600;
$monat = date("n", time() - $zeitunterschied);
?>
In der Variable $zeitunterschied wird der Zeitunterschied gespeichert. Die ist die Anzahl der Stunden multipliziert mit 3600 (Sekunden in einer Stunde). Diese werden dann von der Zeit abgezogen. Die Zeit wird mit der Funktion time()12 errechnet und als zweiten Parameter an der Funktion date() übergeben.

Sie können die auch an Hand der Greenwich Mean Time (GMT) berechnen. Das geht mit der Funktion gmdate()13.

Eine Funktion die beim Klick auf einem markierten Tag (an dem also eine Aktivität stattfindet) die Aktivitäten auflistet, könnte so aussehen:
<?php
mysql_query("select * from aktivitaeten where YEAR(datum) = $_GET['jahr']
and MONTH(datum) = $_GET['monat']
and DAYOFMONTH(datum) = $_GET['tag'] order by datum asc";

while ( $aktivitaet = mysql_fetch_assoc() )
 {
 echo ;
 }
?>
In der While-Schleife kann dann die Zusammenfassung geschrieben werden. Die ID könnte dann in einem Link aufgenommen werden um in noch ein anderes Script die komplette Info zu zeigen.
<?php
mysql_query("select * from aktivitaeten where ID = $_GET['id'] order by datum asc";

while ( $aktivitaet = mysql_fetch_assoc() )
 {
 echo ;
 }
?>

Script einbauen

Legen Sie zuerst eine Tabelle an wie am Anfang gezeigt wurde. Danach nehmen Sie unten stehendes Script und stellen es auf Ihre Seite. Dazu müssen Sie eventuell selbst noch das CSS ändern. Im vorherigen Bereich finden Sie dann noch einige Sachen die Ihnen eventuell helfen könnten.


Script


<html>
<head>
<style type="text/css">
table#kalender {background-color:#ffffff; border:3px solid blue;
	       border-collapse:collapse; empty-cells:show;}
table#kalender td {width:10px; height:10px; text-align:right;
	       border: 1px dotted green;}
table#kalender td.tage {width:10px; height:10px; text-align:center;
	       color: red; border:1px solid red;}
table#kalender td.aktivitaet {background-color:blue; width:10px; height:10px;}
</style>
</head>
<body>
<table id="kalender">
       <tr>
       <td class="tage">MO</td>
       <td class="tage">DI</td>
       <td class="tage">MI</td>
       <td class="tage">DO</td>
       <td class="tage">FR</td>
       <td class="tage">SA</td>
       <td class="tage">SO</td>
       </tr>

<?php
if (isset($_POST["jahr"])) {$jahr = $_POST["jahr"];}
   else {$jahr = date("Y");}
  if (isset($_POST["monat"])) {$monat = $_POST["monat"];}
   else {$monat = date("n");}

$datum = mktime(1,0,0,$monat,1,$jahr);
$t = date("t",$datum);
$w = date("w",$datum);

$tag = array(1,7,6,5,4,3,2);

$monat_ohne_erste_woche = $t - $tag[$w];
$letzte_woche = $monat_ohne_erste_woche % 7;
$wochen = ($monat_ohne_erste_woche - $letzte_woche) / 7;
$leere_zellen_erste_woche = 7 - $tag[$w];
$volle_zellen_erste_woche = 7 - $w + 1;
$leere_zellen_letzte_woche = 7 - $letzte_woche;

$db = mysql_connect('host','user','passwort');
mysql_select_db('datenbank',$db);
$resultat = mysql_query("select DAYOFMONTH(datum)
as tag from aktivitaete where YEAR(datum)= $jahr
and MONTH(datum) = $monat") or die(mysql_error());
mysql_close($db);

$tage_aktivitaeten = array();
$zaehler = 0;

while (list($tag)=mysql_fetch_row($resultat))
  {
  $tage_aktivitaeten[$zaehler] = $tag;
  $zaehler++;
  }

$schon_gezaehlte_tage = 0;

if ($w == 0)
   {
   print "<tr>";
     for ($i = 0; $i < 6; $i++)
     {
       print '<td></td>';
     }
     $schon_gezaehlte_tage += 1;
     if (in_array($schon_gezaehlte_tage, $tage_aktivitaeten))
       {echo '<td class="aktivitaet"><a href="aktivitaeten.php?
       jahr='.$jahr.'&monat='.$monat.'&tag='.schon_gezaehlte_tage.'">
       1</href></td>';}
     else
       {print '<td>1</td>';}
   print "</tr>";
   }
elseif ($w != 0)
   {
   print "<tr>";
     for ($i = 0; $i < $leere_zellen_erste_woche; $i++)
       {
       print '<td></td>';
       }

     for ($i = 0; $i < $volle_zellen_erste_woche; $i++)
       {
       $schon_gezaehlte_tage += 1;
       if (in_array($schon_gezaehlte_tage, $tage_aktivitaeten))
         {
           echo '<td class="aktivitaet"><a href="aktivitaeten.php?
           jahr='.$jahr.'&monat='.$monat.'&tag='.schon_gezaehlte_tage.'">
           '.$schon_gezaehlte_tage.'</href></td>';
         }
       else
         {
         print "<td>$schon_gezaehlte_tage</td>";
         }
      }
   print "</tr>";
   }

for ($i = 0; $i < $wochen; $i++)
  {
  print "<tr>";

  for ($d = 0; $d < 7; $d++)
    {
    $schon_gezaehlte_tage += 1;

    if (in_array($schon_gezaehlte_tage, $tage_aktivitaeten))
      {
      echo '<td class="aktivitaet"><a href="aktivitaeten.php?
      jahr='.$jahr.'&monat='.$monat.'&tag='.schon_gezaehlte_tage.'">
      '.$schon_gezaehlte_tage.'</href></td>';
      }
    else
      {
      print "<td>$schon_gezaehlte_tage</td>";
      }
    }
  print "</tr>";
  }

if ($schon_gezaehlte_tage < $t)
     {
     print '<tr>';
       while ($letzte_woche > 0)
        {
          $letzte_tage = $t - $letzte_woche + 1;
          if (in_array($letzte_tage, $tag))
            {
            echo '<td class="aktivitaet">'.$letzte_tage.'</td>';
            }
          else
            {
            print "<td>$letzte_tage</td>";
            }
          $letzte_woche -= 1;
        }

       for ($i = 0; $i < $leere_zellen_letzte_woche; $i++)
        {
          print '<td></td>';
        }
     print '</tr>';
     }

?>

</table>
</body>
</html>

Referenzen
  1. MySQL-Datenbanken: mehr dazu
  2. Tabellen können in HTML verwendet werden um Daten strukturiert an zu zeigen: mehr dazu
  3. Die PHP-Funktion date() liefert die Uhrzeit und das Datum des Servers: mehr dazu
  4. Mit der PHP-Funktion mktime() (make time) kann ein fiktives Datum und Uhrzeit erstellt werden: mehr dazu
  5. PHP bietet viele mathematische Funktionen: mehr dazu
  6. MySQL-Datenbanken können auch Datumtypen verwenden: mehr dazu
  7. Mit Hilfe von while-Schleifen können Sie Programmanweisungen solange wiederholen, wie die Bedingung, die in der Schleife formuliert wird, erfüllt ist: mehr dazu
  8. Cascading Style Sheets (CSS) gibt dem Webdesigner viele Möglichkeiten um Seiten einfach zu layouten: mehr dazu
  9. Die Schleifenbedingung einer for-Schleife sieht von vorneherein einen Zähler und eine Abbruchbedingung vor: mehr dazu
  10. Die PHP-Funktion in_array() testet ob ein Wert in einem Array vorkommt: mehr dazu
  11. Per Javascript können Formulare automatisch abgeschickt werden: mehr dazu
  12. Die Funktion time() errechnet wieviel Zeit vergangen ist seit 01/01/1970: mehr dazu
  13. Die Funktion gmdate() ist gleich wie date(), jedoch wird das Datum nach Greenwich Mean Time genommen: mehr dazu


LaBeenies
Rookie
Beitrag vom:
01-03-2007, 10:15:09

Keine Aktivitäten

Ich weiß dass der Artikel schon etwas älter ist, hoffe aber trotzdem dass mir noch jemand helfen kann. Ich kenne mich nicht so super mit PHP aus, bin eher Anfänger. Ich habe jetzt das Script in meine Seite eingebunden und der Kalender wird auch richtig angezeigt. Jetzt hab ich nur das Problem dass ich keine Aktivitäten eintragen kann. Bin mir auch nicht sicher wie das funktionieren soll. Kann jeder Besucher meiner Seite da etwas eintragen indem man auf einen Tag klickt oder kann nur ich irgendwelche Termine eintragen? Wie gesagt bei mir sieht man im Moment nur den Kalender. Hier ist mein Quellcode:


<html>
<head>
<style type="text/css">
table#kalender {background="Bilder/bg.jpg"; border:3px solid black;
border-collapse:collapse; empty-cells:show;}
table#kalender td {width:10px; height:10px; text-align:right;
border: 1px dotted black;}
table#kalender td.tage {width:10px; height:10px; text-align:center;
color: red; border:1px solid black;}
table#kalender td.aktivitaet {background-color:blue; width:10px; height:10px;}
</style>
</head>
<body Background="Bilder/bg.jpg">
<table id="kalender">
<tr>
<td class="tage">MO</td>
<td class="tage">DI</td>
<td class="tage">MI</td>
<td class="tage">DO</td>
<td class="tage">FR</td>
<td class="tage">SA</td>
<td class="tage">SO</td>
</tr>

<?php
if (isset($_POST["jahr"])) {$jahr = $_POST["jahr"];}
else {$jahr = date("Y");}
if (isset($_POST["monat"])) {$monat = $_POST["monat"];}
else {$monat = date("n");}

$datum = mktime(1,0,0,$monat,1,$jahr);
$t = date("t",$datum);
$w = date("w",$datum);

$tag = array(1,7,6,5,4,3,2);

$monat_ohne_erste_woche = $t - $tag[$w];
$letzte_woche = $monat_ohne_erste_woche % 7;
$wochen = ($monat_ohne_erste_woche - $letzte_woche) / 7;
$leere_zellen_erste_woche = 7 - $tag[$w];
$volle_zellen_erste_woche = 7 - $w + 1;
$leere_zellen_letzte_woche = 7 - $letzte_woche;

$db = mysql_connect(localhost,web643,Ix3wyyUJ);
mysql_select_db("usr_web643_1",$db);
$resultat = mysql_query("select DAYOFMONTH(datum)
as tag from aktivitaete where YEAR(datum)= $jahr
and MONTH(datum) = $monat") or die(mysql_error());
mysql_close($db);

$tage_aktivitaeten = array();
$zaehler = 0;

while (list($tag)=mysql_fetch_row($resultat))
{
$tage_aktivitaeten[$zaehler] = $tag;
$zaehler++;
}

$schon_gezaehlte_tage = 0;

if ($w == 0)
{
print "<tr>";
for ($i = 0; $i < 6; $i++)
{
print '<td></td>';
}
$schon_gezaehlte_tage += 1;
if (in_array($schon_gezaehlte_tage, $tage_aktivitaeten))
{echo '<td class="aktivitaet"><a href="aktivitaeten.php?
jahr='.$jahr.'&monat='.$monat.'&tag='.schon_gezaehlte_tage.'">
1</href></td>';}
else
{print '<td>1</td>';}
print "</tr>";
}
elseif ($w != 0)
{
print "<tr>";
for ($i = 0; $i < $leere_zellen_erste_woche; $i++)
{
print '<td></td>';
}

for ($i = 0; $i < $volle_zellen_erste_woche; $i++)
{
$schon_gezaehlte_tage += 1;
if (in_array($schon_gezaehlte_tage, $tage_aktivitaeten))
{
echo '<td class="aktivitaet"><a href="aktivitaeten.php?
jahr='.$jahr.'&monat='.$monat.'&tag='.schon_gezaehlte_tage.'">
'.$schon_gezaehlte_tage.'</href></td>';
}
else
{
print "<td>$schon_gezaehlte_tage</td>";
}
}
print "</tr>";
}

for ($i = 0; $i < $wochen; $i++)
{
print "<tr>";

for ($d = 0; $d < 7; $d++)
{
$schon_gezaehlte_tage += 1;

if (in_array($schon_gezaehlte_tage, $tage_aktivitaeten))
{
echo '<td class="aktivitaet"><a href="aktivitaeten.php?
jahr='.$jahr.'&monat='.$monat.'&tag='.schon_gezaehlte_tage.'">
'.$schon_gezaehlte_tage.'</href></td>';
}
else
{
print "<td>$schon_gezaehlte_tage</td>";
}
}
print "</tr>";
}

if ($schon_gezaehlte_tage < $t)
{
print '<tr>';
while ($letzte_woche > 0)
{
$letzte_tage = $t - $letzte_woche + 1;
if (in_array($letzte_tage, $tag))
{
echo '<td class="aktivitaet">'.$letzte_tage.'</td>';
}
else
{
print "<td>$letzte_tage</td>";
}
$letzte_woche -= 1;
}

for ($i = 0; $i < $leere_zellen_letzte_woche; $i++)
{
print '<td></td>';
}
print '</tr>';
}

?>


</table>

</body>
</html>


Ihr könnt euch auch mal meinen Kalender ansehen auf : www.labeenies.beeven.de/aktivitaeten.php

Hoffe es kann mir jemand weiterhelfen
Danke

greetz Labeenies

-----------------------------------------------------
www.labeenies.beeven.de


dreamer
Expert
Beitrag vom:
07-01-2007, 21:21:52

Frage bitte im Forum stellen.

http://www.it-academy.cc/forum.php

-----------------------------------------------------


oliwol
Rookie
Beitrag vom:
07-01-2007, 12:58:26

Amerikanische Schreibweise

Hallo,

also folgendes Problem ich möchte die Woche mit Sonntag anfangen.
$tag=array(7,6,5,4,3,2,1);
Funktioniert auch, nur im April und Juli wo der 1. ein Sonntag ist, rutscht der erste auf einem Samstag.

Bitte um Hilfe

-----------------------------------------------------


howie
Rookie
Beitrag vom:
22-11-2006, 08:41:34

heutiger tag wird unterlegt

hallo,

erstmal danke für die anregungen in diesem script. echt super, danke!

allerdings ist mir noch aufgefallen, das im letzten teil, bei der erzeugung der letzten woche nicht der link für die aktivitäten erzeugt wird. ich hab ausserdem wird jetzt der heutige tag markiert. ich übertrage mal den gesamten code, da sind die kommentare enthalten.

code:

<body>
<!--
folgende variablen werden verwendet:

$heute //enthält zahl des heutigen tages, wenn gewähltes datum mit aktuellem monat übereinstimmt
$jahr //gewähltes jahr
$monat //gewählter monat

$datum //datum des gewählten monats
$t //anzahl der tage des monats
$w //wochentag des fiktiven datums als zahl (0 = sonntag)

$tag //tagnummern als array

$monat_ohne_erste_woche //selbstredend
$letzte_woche //selbstredend
$wochen //vollständige wochen im monat
$leere_zellen_erste_woche //selbstredend
$volle_zellen_erste_woche //selbstredend
$leere_zellen_letzte_woche //selbstredend

$sql //string für mysql-abfrage
$resultat //tage wo aktivitäten gepalnt sind
$tage_aktivitaeten[] //feld mit den tagen wo aktivitäten geplant sind

$schon_gezaehlte_tage //selbstredend - anfangswert = 0

-->
<h2>Kalender</h2>

<!-- formular für die auswahl des monats und jahres -->
<form action="<? echo $_SERVER['PHP_SELF'] ?>" method="post">

<select name="monat" size="1" title="Monat">
<option value="01">Januar</option>
<option value="02">Februar</option>
<option value="03">März</option>
<option value="04">April</option>
<option value="05">Mai</option>
<option value="06">Juni</option>
<option value="07">Juli</option>
<option value="08">August</option>
<option value="09">September</option>
<option value="10">Oktober</option>
<option value="11">November</option>
<option value="12">Dezember</option>
</select>
<input type="text" name="jahr" value="<? echo $_POST['name'] ?>" size="1" maxlength="4"/>
<input type="submit" name="sm1" value="Suche" />
</form>


<?php

//falls im Formular der Monat und das Jahr gewählt wurde, diesen nehmen, sonst den aktuellen
if (isset($_POST["jahr"])) {
$jahr = $_POST["jahr"]; //übergabe an $jahr - 4-stellig
}
else {
$jahr = date("Y");
}
if (isset($_POST["monat"])) {
$monat = $_POST["monat"]; //übergabe an $jahr - 2-stellig
}
else {
$monat = date("n");
}

$heute = date ("Yn"); //überprüfe, ob das gewählte jahr und monat...
if ($heute == $jahr.$monat){ //...mit dem aktuellen überein stimmt und wenn wahr...
$heute = date ("j"); //...schreibe heutigen tag in variable...
} else {unset ($heute);} //...sonst lösche sie

//echo $heute; //check - kann gelöscht werden
$datum = mktime(1,0,0,$monat,1,$jahr); //ermittle aus einem fiktiven datum des gewählten monat die anzahl dessen tage
$t = date("t",$datum);
$w = date("w",$datum); //gibt den aktuellen wochentag als zahl zurück - 0 = sonntag
$tag = array(1,7,6,5,4,3,2); //halte die wzahlen für spätere berechnung der tage die in den vorigen monat fallen, in einenm array fest

$monat_ohne_erste_woche = $t - $tag[$w];
$letzte_woche = $monat_ohne_erste_woche % 7; //anzahl der tage in der letzten woche ist gleich der rest der teilung von der anzahl der tage im monat ohne die der ersten woche durch 7 (tage in der woche) - solche teilung erfolgt mit dem prozentzeichen (der so genannte modulo-operator).
$wochen = ($monat_ohne_erste_woche - $letzte_woche) / 7; //anzahl der tage im monat minus die tage der ersten woche und die der letzten wochen, geteilt durch 7 ist die anzahl kompletter wochen im monat
$leere_zellen_erste_woche = 7 - $tag[$w]; //wieviele leere zellen es in der ersten woche gibt es => array$tag - 7 minus die anzahl der wochentage in diesem monat ergeben die anzahl der leeren zellen
$volle_zellen_erste_woche = 7 - $w + 1; //anzahl voller zellen in der ersten woche ist gleich 7 minus die indexnummer des tages (sonntag ist 0 bis samstag ist 6) plus 1
$leere_zellen_letzte_woche = 7 - $letzte_woche; //anzahl leerer zellen der letzten woche ist gleich 7 minus die anzahl der tage der letzten woche.

include ("../../../includes01/db_login.inc.php"); //login in datenbank

$sql = "select DAYOFMONTH(datum) as tag from aktivitaeten where YEAR(datum)= $jahr and MONTH(datum) = $monat";

$resultat = mysql_query($sql) or die("Zugriff auf Tabelle gescheitert");
mysql_close();

while (list($tag)=mysql_fetch_row($resultat))
{
$tage_aktivitaeten[] = $tag;
}


?>

<!-- erzeuge css-style für kalender -->
<style type="text/css">
table#kalender {background-color: #EFEFEF; border:3px solid #666666;
border-collapse:collapse; empty-cells:show;}
table#kalender td {width:10px; height:10px; text-align:right;}
table#kalender td.tage { border-bottom: solid 1px #666666; background-color: #cccccc; width:10px; height:10px; text-align:center;}
table#kalender td.aktivitaet {background-color: #FFFF80; width:10px; height:10px;}
table#kalender td.heute {background-color: #FFCC66 ; color: red; font-weight: bolder ; width:10px; height:10px; }
</style>

<!-- erzeuge tabellen -->
<table id="kalender">
<tr>
<td class="tage">MO</td>
<td class="tage">DI</td>
<td class="tage">MI</td>
<td class="tage">DO</td>
<td class="tage">FR</td>
<td class="tage">SA</td>
<td class="tage">SO</td>
</tr>

<?php
//erzeuge die erste woche
$schon_gezaehlte_tage = 0;

if ($w == 0){ //wenn wochentag = 0
print "<tr>"; //erste zeile - start1
for ($i = 0; $i < 6; $i++){
print '<td></td>'; //drucke 7 leerzellen nebeneinander
}
$schon_gezaehlte_tage += 1; //erhöhe tag um 1
if (@in_array ($schon_gezaehlte_tage, $tage_aktivitaeten)){ //prüfe, ob der tag in der liste der aktivitäten und erzeuge link
echo '<td class="aktivitaet"><a href="aktivitaeten.php?jahr='.$jahr.'&monat='.$monat.'&tag='.schon_gezaehlte_tage.'">1</href></td>';
}
else {
print '<td>1</td>'; //sonst einfach "1" ausgeben
}
print "</tr>"; //erste zeile - stop1
}
elseif ($w != 0){ //oder wenn der wochentag <> 0 (sonntag)
print "<tr>"; //erste zeile - start2
for ($i = 0; $i < $leere_zellen_erste_woche; $i++){ //werden soviel wie nötig...
print '<td></td>'; //...leere zellen nebeneinander ausgegeben
}
for ($i = 0; $i < $volle_zellen_erste_woche; $i++){ //der rest wird mit zahlen aufgefüllt, die...
$schon_gezaehlte_tage += 1; //ACHTUNG - wenn keine daten in db kommt fehler mit ungültigem datentyp => db füttern, oder mit @ unterdrücken


if ($heute == $schon_gezaehlte_tage && @in_array($schon_gezaehlte_tage, $tage_aktivitaeten)){ //wenn der gewählte jahr und monat der aktuelle ist und dem wert des gezählten tages entspricht und der gezählte tag eine aktivität hat,...
echo '<td class="heute"><a href="aktivitaeten.php?jahr='.$jahr.'&monat='.$monat.'&tag='.schon_gezaehlte_tage.'">'.$schon_gezaehlte_tage.'</href></td>'; //...wird styleclass von "heute" gewählt und ein link erzeugt
}

elseif ($heute !== $schon_gezaehlte_tage && @in_array($schon_gezaehlte_tage, $tage_aktivitaeten)){ //oder wenn der gewählte jahr und monat der aktuelle ist und nich dem wert des gezählten tages entspricht und der gezählte tag eine aktivität hat,...
echo '<td class="aktivitaet"><a href="aktivitaeten.php?jahr='.$jahr.'&monat='.$monat.'&tag='.schon_gezaehlte_tage.'">'.$schon_gezaehlte_tage.'</href></td>'; //...wird styleclass von "aktivitaet" gewählt und ein link erzeugt
}


elseif ($heute == $schon_gezaehlte_tage && @!in_array($schon_gezaehlte_tage, $tage_aktivitaeten)){ //oder wenn der gewählte jahr und monat der aktuelle ist und dem wert des gezählten tages entspricht und der gezählte tag keine aktivität hat,...
echo '<td class="heute">'.$schon_gezaehlte_tage.'</td>'; //...wird styleclass von "heute" gewählt und eifach der gewählte tag ausggeben
}

else{ //wenn nicht in der aktivitätenliste
print "<td>$schon_gezaehlte_tage</td>"; //einfach die zahl des tages augeben
}

}
print "</tr>";
}


//erzeuge vollständige wochen
for ($i = 0; $i < $wochen; $i++){ //erzeuge soviel zeilen, wie es vollständige wochen gibt
print "<tr>"; //zeile - öffnen
for ($d = 0; $d < 7; $d++){ //erzeuge in jeder woche 7 tage
$schon_gezaehlte_tage += 1; //erhöhe bereits gezählte tage weiter um 1


if ($heute == $schon_gezaehlte_tage && @in_array($schon_gezaehlte_tage, $tage_aktivitaeten)){ //wenn der gewählte jahr und monat der aktuelle ist und dem wert des gezählten tages entspricht und der gezählte tag eine aktivität hat,...
echo '<td class="heute"><a href="aktivitaeten.php?jahr='.$jahr.'&monat='.$monat.'&tag='.schon_gezaehlte_tage.'">'.$schon_gezaehlte_tage.'</href></td>'; //...wird styleclass von "heute" gewählt und ein link erzeugt
}

elseif ($heute !== $schon_gezaehlte_tage && @in_array($schon_gezaehlte_tage, $tage_aktivitaeten)){ //oder wenn der gewählte jahr und monat der aktuelle ist und nich dem wert des gezählten tages entspricht und der gezählte tag eine aktivität hat,...
echo '<td class="aktivitaet"><a href="aktivitaeten.php?jahr='.$jahr.'&monat='.$monat.'&tag='.schon_gezaehlte_tage.'">'.$schon_gezaehlte_tage.'</href></td>'; //...wird styleclass von "aktivitaet" gewählt und ein link erzeugt
}


elseif ($heute == $schon_gezaehlte_tage && @!in_array($schon_gezaehlte_tage, $tage_aktivitaeten)){ //oder wenn der gewählte jahr und monat der aktuelle ist und dem wert des gezählten tages entspricht und der gezählte tag keine aktivität hat,...
echo '<td class="heute">'.$schon_gezaehlte_tage.'</td>'; //...wird styleclass von "heute" gewählt und eifach der gewählte tag ausggeben
}


else {
print "<td>$schon_gezaehlte_tage</td>";
}

}
print "</tr>"; //zeile schliessen
}

//erzeuge letzte zeile
if ($schon_gezaehlte_tage < $t){ //überprüfen, ob noch zage übrig sind, sonst muss keine weitere zeile geschrieben werden
print "<tr>"; //erzeuge letzte reihe
while ($letzte_woche > 0){ //solage noch was von der letzten woche übrig ist
$letzte_tage = $t - $letzte_woche + 1;
$schon_gezaehlte_tage += 1; //erhöhe bereits gezählte tage weiter um 1


if ($heute == $schon_gezaehlte_tage && @in_array($schon_gezaehlte_tage, $tage_aktivitaeten)){ //wenn der gewählte jahr und monat der aktuelle ist und dem wert des gezählten tages entspricht und der gezählte tag eine aktivität hat,...
echo '<td class="heute"><a href="aktivitaeten.php?jahr='.$jahr.'&monat='.$monat.'&tag='.schon_gezaehlte_tage.'">'.$schon_gezaehlte_tage.'</href></td>'; //...wird styleclass von "heute" gewählt und ein link erzeugt
}

elseif ($heute !== $schon_gezaehlte_tage && @in_array($schon_gezaehlte_tage, $tage_aktivitaeten)){ //oder wenn der gewählte jahr und monat der aktuelle ist und nich dem wert des gezählten tages entspricht und der gezählte tag eine aktivität hat,...
echo '<td class="aktivitaet"><a href="aktivitaeten.php?jahr='.$jahr.'&monat='.$monat.'&tag='.schon_gezaehlte_tage.'">'.$schon_gezaehlte_tage.'</href></td>'; //...wird styleclass von "aktivitaet" gewählt und ein link erzeugt
}


elseif ($heute == $schon_gezaehlte_tage && @!in_array($schon_gezaehlte_tage, $tage_aktivitaeten)){ //oder wenn der gewählte jahr und monat der aktuelle ist und dem wert des gezählten tages entspricht und der gezählte tag keine aktivität hat,...
echo '<td class="heute">'.$schon_gezaehlte_tage.'</td>'; //...wird styleclass von "heute" gewählt und eifach der gewählte tag ausggeben
}


$letzte_woche -= 1;
}
for ($i = 0; $i < $leere_zellen_letzte_woche; $i++){ //erzeuge letzte leere zellem
print '<td></td>';
}
print '</tr>'; //letzte reihe - ende
}

?>

</table>

</body>

-------------------------------------------------
danke
gruss howie

-----------------------------------------------------


DemoUser
Rookie
Beitrag vom:
05-11-2006, 12:20:02

Mai 2006

**********************************
Leider habe ich damit das Problem, dass die Ausgabe nicht korrekt ist, sobald der 1. in einem Monat auf den Montag fällt. Und zwar speichert er in den Variablen $leere_zellen_erste_woche und $volle_zellen_erste_woche jeweils eine 7. Daraufhin schreibt er natürlich neben die eigentliche Tabelle. Zusätzlich zählt er dann den Monat bin zum 35. hoch, was sicherlich auch nicht möglich sein sollte.

Kann mir jemand helfen?
**********************************

änder doch einfach:
// $tag = array(1, 0, 6, 5, 4, 3, 2);
$tag = array(1, 7, 6, 5, 4, 3, 2);

dann klappts auch mit dem Mai 2006.

-----------------------------------------------------


Deso85
Rookie
Beitrag vom:
26-10-2006, 11:03:22

Abänderung

Hi!

Finde die Erklärung und das Script echt top. Ich habe es leicht abgeändert, da ich zum jetzigen Zeitpunkt keine SQL Abfragen einbauen möchte und den Kalender quasie für ein komplettes Jahr anzeigen möchte. Leider habe ich damit das Problem, dass die Ausgabe nicht korrekt ist, sobald der 1. in einem Monat auf den Montag fällt. Und zwar speichert er in den Variablen $leere_zellen_erste_woche und $volle_zellen_erste_woche jeweils eine 7. Daraufhin schreibt er natürlich neben die eigentliche Tabelle. Zusätzlich zählt er dann den Monat bin zum 35. hoch, was sicherlich auch nicht möglich sein sollte.

Kann mir jemand helfen?

Code:
$datum = mktime(1,0,0,1,1,$jahr); //Ändert sich natürlich je nach Monat
$t = date("t",$datum);
$w = date("w",$datum);
$schon_gezaehlte_tage = 0;

$monat_ohne_erste_woche = $t - $tag[$w];
$letzte_woche = $monat_ohne_erste_woche % 7;
$wochen = ($monat_ohne_erste_woche - $letzte_woche) / 7;
$leere_zellen_erste_woche = 7 - $tag[$w];
$volle_zellen_erste_woche = 7 - $w + 1;
$leere_zellen_letzte_woche = 7 - $letzte_woche;


if ($w == 0)
{
print "<tr>";
for ($i = 0; $i < 6; $i++)
{
print '<td></td>';
}
$schon_gezaehlte_tage += 1;
print '<td>1</td>';
print "</tr>";
}
elseif ($w != 0)
{
print "<tr>";
for ($i = 0; $i < $leere_zellen_erste_woche; $i++)
{
print '<td></td>';
}

for ($i = 0; $i < $volle_zellen_erste_woche; $i++)
{
$schon_gezaehlte_tage += 1;
print "<td>$schon_gezaehlte_tage</td>";
}
print "</tr>";
}

for ($i = 0; $i < $wochen; $i++)
{
print "<tr>";

for ($d = 0; $d < 7; $d++)
{
$schon_gezaehlte_tage += 1;

print "<td>$schon_gezaehlte_tage</td>";

}
print "</tr>";
}

if ($schon_gezaehlte_tage < $t)
{
print '<tr>';
while ($letzte_woche > 0)
{
$letzte_tage = $t - $letzte_woche + 1;
print "<td>$letzte_tage</td>";
$letzte_woche -= 1;
}

for ($i = 0; $i < $leere_zellen_letzte_woche; $i++)
{
print '<td></td>';
}
print '</tr>';
}

-----------------------------------------------------


mauspfeil
Rookie
Beitrag vom:
29-08-2006, 00:33:57

Noch ein Mini-Bug

Hallo,

ich finde sowohl Erklärung als auch Script toll!
Allerdings sind noch drei kleine Bugs enthalten:

1. In der letzten while-Schleife fehlt:
$schon_gezaehlte_tage += 1;
2. Die darauf folgende in_array-Funktion muß wie folgt aussehen:
if (in_array($letzte_tage, $tage_aktivitaeten))
3. Falls eine Aktivität in der DB gespeichert wurde, die von diesem Abschnitt erfaßt wird, muß diese dann natürlich noch verlinkt werden. Dies fehlt im Code.

Vielen Dank für den tollen Beitrag!
mauspfeil


-----------------------------------------------------


dreamer
Expert
Beitrag vom:
24-08-2006, 21:35:08

Bug wurde behoben



-----------------------------------------------------


headroom
Rookie
Beitrag vom:
23-03-2006, 08:35:06

Funktioniert so nicht

eigentlich ein schönes script und toll erlärt.

Nur es geht so nicht ganz.
Denke die Variable für $tage_erste_woche ist nicht definiert. Dadurch ergibt eine Rechnung kein ergebnis und der Kalender füllt die Tage bis 33 auf.
So lange Monate kenne ich garnicht.


-----------------------------------------------------


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04511
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06248
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1158
Comments: 0