Nochmal der Kalender...

Radhad

Erfahrenes Mitglied
Hallo zusammen,

ich habe auch mal das Kalender-Tutorial angeschaut und würde jetzt gerne per Link den nächsten Monat bzw. den vorherigen Monat anzeigen, sowie auch die Tage von Montag-Sonntag, statt Sonntag-Samstag anzeigen lassen. Außerdem zeigt mir das Script nicht den Monatsnamen an über der Tabelle. Hier mal mein veränderter Code:
PHP:
<?php
define("EINTAG", (60*60*24) );
if ( ! checkdate( $monat, 1, $jahr ) )
    {
     $heuteArr = getdate();
    $monat = $heuteArr['mon'];
    $jahr = $heuteArr['year'];
    }
$start = mktime ( 0, 0, 0, $monat, 1, $jahr );
$ersterArr = getdate($start);
?>
<html>
<head>
<title><?php echo "Kalendar: ".$ersterArr['month']." ".$ersterArr['year']."" ?></title>
<head>
<body>
<form action="<? echo $PHP_SELF ?>" method="post">
<select name="monat">
<?php
$monate = Array("January", "February", "March", "April",
		"May", "June", "July", "August", "September",
                "October", "November", "December");
for ( $x=1; $x <= count('$monate'); $x++ )
    {
    echo "\t<option value=\"$x\"";
    echo ($x == $monat)?" SELECTED":"";
    echo ">".$monate['$x-1']."\n";
    }
?>
</select>
<select name="jahr">
<?php
for ( $x=2004; $x<=2010; $x++ )
    {
    echo "\t<option";
    echo ($x == $jahr)?" SELECTED":"";
    echo ">$x\n";
    }
?>
</select>
<input type="submit" value="Los geht's!">
</form>
<p>
<?php
$days = Array("S", "M", "D", "M","D", "F", "S");
echo "".$monate['$monat']."<br><table border = 1 cellpadding=0 cellspacing=0>\n";
foreach ( $days as $day )
    echo "\t<td align=center><b>$day</b></td>\n";
for ( $zaehler=0; $zaehler < (6*7); $zaehler++ )
    {
    $tagArr = getdate( $start );
if ( (($zaehler) % 7) == 0 )
        {
        if ( $tagArr['mon'] != $monat )
            break;
        echo "</tr><tr>\n";
        }
if ( $zaehler < $ersterArr['wday'] || $tagArr['mon'] != $monat )
        {
        echo "\t<td><br></td>\n";
        }
else
        {
        echo "\t<td align=center>".$tagArr['mday']."</td>\n";
        $start += EINTAG;
        }
    }
echo "</tr></table>";
?>
</body>
</html>

Zu sehen auf http://www.radhad.de/kalender.php


Wo habe ich den Denkfehler bei der Anzeige des Monats? Wie könnte ich das mit den Links realisieren?


MfG Radhad
 
PHP:
$monate = Array("January", "February", "March", "April",
        "May", "June", "July", "August", "September",
                "October", "November", "December");
for ( $x=1; $x <= count($monate); $x++ )
    {
    echo "\t<option value=\"$x\"";
    echo ($x == $monat)?" SELECTED":"";
    echo ">".$monate[$x-1]."\n";
    }
 
Hups, vergessen den Teil rauszuschmeissen!
Das Jahr wird angezeigt, der Monat allerdings nicht.

Der Fehler liegt in der Zeile
PHP:
echo $monate['$monat']." $jahr<br>";

Wieso zeigt er dort nicht "September" an?


MfG Radhad
 
Ich dachte die muss ich setzen, weil in nem anderen thread stand, die müsste man setzen, sonst geht es nicht :-)

Aber jetzt geht es, danke! nur steht der jetzt auf Oktober statt September... *verwirrt ist* Ich schau mal nach dem Fehler.

Arghs, Array beginnt bei 0, net bei 1 *gg*
Allerdings ist der 1. jetzt auch ein Sonntag... Irgendwie sehr Kurios ^^

[EDIT]
Bug behoben. Dann bleibt nur noch die Frage mit den Links. Per GET Variablen den Monat erhöhen? Erhöht sich dann auch automatisch das Jahr? Wie bekomme ich den Sonntag als 7. tag der Woche hin und nicht als 1.?


MfG Radhad
 
Zuletzt bearbeitet:
So, ich hab jetzt nochmal ein paar Fragen, doch vorher will ich noch meinen Gedankenansatz niederschreiben.

Den von mir umgemodelten Kalender möchte ich als Terminkalender nutzen. Jeder Tag eines Monats soll mit einem Link versehen werden, wo mir die Termine Angezeigt werden. Mit einem Hinzufügen Button will ich einen Termin eintragen, oder einen, ich sag jetzt mal, Terminblock (von 8 Uhr bis 14 Uhr) und wenn ein Termin eingetragen wurde mittels Bearbeiten natürlich verändern können. Vom aktuellen Monat aus sollen allerdings nur die 2 vorherigen Monate verfügbar sein, um somit die Datenbank nicht zu überfüllen und veraltete Sachen automatisch gelöscht werden. Wie man sich so einen Terminkalender vorstellt.

Meine Fragen:

1. Wie kann ich abfragen, ob eine Tabelle in der MySQL DB schon existiert oder nicht?
2. Wäre es sinnvoll bei der Tabelle für einen Monat als Primärschlüssel die Uhrzeit zu verwenden?
3. Um einen Terminblock abzuspeichern, mss ich das per for-Schleife lösen oder gibt es dafür eine MySQL-Funktion, die mir bis dato noch nicht bekannt ist?
4. Wie kann mittles PHP feststellen, wo ein Termin schon eingetragen wurde, wenn ich mit die Tabelle des Monats ausgeben lasse?


Mein Versuch mit Links ging leider nicht:
PHP:
<?php
if(!isset($_GET['monat']))
{
    define("EINTAG", (60*60*24) );
    if ( ! checkdate( $monat, 1, $jahr ) )
    {
        $heuteArr = getdate();
        $monat = $heuteArr['mon'];
        $jahr = $heuteArr['year'];
    }
}
else
{
    $monat = $_GET['monat'];
    $jahr = $_GET['jahr'];
}
$start = mktime ( 0, 0, 0, $monat, 1, $jahr );
$ersterArr = getdate($start);
?>
<html>
<head>
<title><?php echo "Kalendar: ".$ersterArr['month']." ".$ersterArr['year']."" ?></title>
<head>
<body>
<p>
<?php
$monate = Array("Januar", "Februar", "März", "April",
		"Mai", "Juni", "Juli", "August", "September",
                "Oktober", "November", "Dezember");
$days = Array("S", "M", "D", "M","D", "F", "S");
echo "<table border = 1 cellpadding=0 cellspacing=0>\n";
echo "<tr><td colspan=7><a href=\"$PHP_SELF?monat=$monat-1&jahr=$jahr\"><</a> ".$monate[$monat-1]." $jahr <a href=\"$PHP_SELF?monat=$monat+1&jahr=$jahr\">></a><br></td></tr>";
foreach ( $days as $day )
    echo "\t<td align=center><b>$day</b></td>\n";
for ( $zaehler=0; $zaehler < (6*7); $zaehler++ )
{
    $tagArr = getdate( $start );
    if ( (($zaehler) % 7) == 0 )
    {
        if ( $tagArr['mon'] != $monat )
            break;
        echo "</tr><tr>\n";
    }
    if ( $zaehler < $ersterArr['wday'] || $tagArr['mon'] != $monat )
    {
        echo "\t<td><br></td>\n";
    }
    else
    {
        echo "\t<td align=center>".$tagArr['mday']."</td>\n";
        $start += EINTAG;
    }
}
echo "</tr></table>";
?>
</body>
</html>


MfG Radhad
 
Zuletzt bearbeitet:
Dein Link kann auch nicht funktionieren. Überleg mal, du hast im Grunde in deinem Code nichts weiter als einen html-code der einen monat+1 anzeigen soll. Das kann nicht gehen.

Änder das ab auf:

<a href=\"$PHP_SELF?monat="; echo $monat-1; echo "&jahr=$jahr\"><</a> ".$monate[$monat]." $jahr <a href=\"$PHP_SELF?monat="; echo $monat+1; echo "&jahr=$jahr\">></a>

und du bekommst zumindest das korrekt angezeigt.

Aber danach entsteht für dich direkt das nächste Problem, weil die Monatsanzeige immer noch nicht läuft, wenn du einen Monat hoch oder runter klickst.

Warum das so sein wird liegt daran, das du noch keine Variable $monat deffiniert hast. Und somit wird deine Anzeige einfach mit 1en angezeigt, was die Tage betrifft. Der Monat selbst dürfte auch nicht angezeigt werden, weil für die Variable "monat" auch kein Index im array besteht oder auch sonst keine Zuordnung erfolgt.

Erstell in deinem Array $monate einfach mal einen Index.
Sieht wie folgt aus:
$monate = Array(1=>"Januar", 2=>"Februar", 3=>"März", 4=>"April", 5=>"Mai", 6=>"Juni", 7=>"Juli", 8=>"August", 9=>"September", 10=>"Oktober", 11=>"November", 12=>"Dezember");

Das wird dir bei deinen weiteren Überlegungen einiges helfen, wenn du es einfach mal noch etwas mehr oder tiefer durchdenkst.

Ich progge gerade an einem Terminplaner den es in der Form - zumindest mir nicht bekannt - nicht gibt. Wenn ich deine Ansprüche an den Terminplaner sehe, verstehe ich nicht, warum du nicht ein fertiges Script nimmst. Das gibt es schon in der Form.
 
Zurück