Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Problem mit Kalender

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Problem mit Kalender

    Hallo liebe PHPler ,

    folgendes Problem:
    Wenn ich $month auf intval(date('n')); lasse wird der Kalender richtig angezeigt. Wenn ich jedoch $month auf z.B. 10 setze (um zu testen) bekomme ich dort, wo die "Tages-Zahlen" sein sollten nur leere Tabellen-Zellen (und in einer Wurst, d.h. ohne Zeilenumbruch). Monatsname und Jahr werden aber wiederum korrekt angezeigt.

    und nun der Code:
    PHP-Code:
    $weekdays = array('Mo''Di''Mi''Do''Fr''Sa''So');
    $months = array(1=>'Jän.'2=>'Feb.'3=>'Mär.'4=>'Apr.'5=>'Mai'6=>'Jun.',
                    
    7=>'Jul.'8=>'Aug.'9=>'Sept.'10=>'Okt.'11=>'Nov.'12=>'Dez.');

    function 
    showCalender() {
        global 
    $weekdays;
        global 
    $months;
        
        
    $day intval(date('j'));
        
    $month intval(date('n'));
        
    $year intval(date('Y'));
        
        
    $dayNow date('j'mktime(000$month$day$year));
        
    $monthNow date('n'mktime(000$month1$year));
        
    $yearNow date('Y'mktime(000$month1$year));
        
        
        
    $total_days intval (date ('t'mktime000$month1$year)));
        
    $weekday_offset intval (date ('N'mktime000$month1$year)));
        
    $raiseTillSun 0;
        
        
    var_dump($weekday_offset);
        
        echo 
        
    '<table>
            <tr>
            <th><input type="submit" name="prevMonth" value="<<" /></th>
            <th colspan="5">'
    .$months[$monthNow].' '.$yearNow.'</th>
            <th><input type="submit" name="nextMonth" value=">>" /></th>
            </tr>
            <tr>
        '
    ;
        
        foreach (
    $weekdays as $weekday) {
            echo 
    '<th>'.$weekday.'</th>';
        }
        
        
    $calenderOutput '</tr><tr>';
        
        for (
    $i=1$i<=$total_days$i++)
        {
            
    $raiseTillSun++;
            
            if (
    $weekday_offset 1)
            {
                
    $calenderOutput .= '<td>&nbsp;</td>';
            }
            elseif (
    $i == intval(date('j')))
            {
                
    $calenderOutput .= '<td class="today">'.$i.'</td>';
            }
            elseif (
    $raiseTillSun == 7)
            {
                
    $calenderOutput .= '<td>'.$i.'</td></tr>'."\n".'<tr>';
                
    $raiseTillSun 0;
            }
            else
            {
                
    $calenderOutput .= '<td>'.$i.'</td>';
            }
            
        }
        
    $calenderOutput .= '</tr></table>';
        
        echo 
    $calenderOutput;

    Kann mir bitte jemand helfen? Ich weiß hier nicht mehr weiter.

    danke im Voraus und
    mfG APH

    komisch: Kaum macht man`s richtig funktioniert`s a scho.


  • #2
    Was hast du selbst bereits schon versucht, den Grund herauszufinden? http://php-de.github.io/jumpto/leitfaden/

    Und ich würde an Stelle der "alten" date() Funkionen zur DateTime Klasse raten.

    Und global macht man nicht ...
    PHP-Code:
     global $weekdays
     global 
    $months
    ... übergibt die als Parameter rein:

    PHP-Code:
    function showCalender($weekdays$months) {
       
    // ..

    LG
    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Ich weiß zwar jetzt, dass es an folgender If-Abfrage liegt, aber wie ich den Fehler beheben kann weiß ich immer noch nicht.
      PHP-Code:
      if ($weekday_offset 1)
      {
          
      $calenderOutput .= '<td>&nbsp;</td>';

      Hat jemand zumindest einen Denkanstoß für mich?

      mfG APH

      komisch: Kaum macht man`s richtig funktioniert`s a scho.

      Kommentar


      • #4
        - was ist $weekday_offset?

        - du definierst die Variable einmal ausserhalb der Schleife und in der Schleife prüfst du diese bei jedem Durchlauf erneut, das scheint seltsam, denn die ändert sich ja innerhalb der Schleife nicht.

        => ev. $weekday_offset IN die Schleife geben oder IN der Schleife vor der if(..) Prüfung aktualisieren?
        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Zurück- &amp; Vor-Button

          Guten Abend,

          Habe das vorige Problem gelöst, jedoch tut sich ein neues auf:
          Ich habe 2 Buttons:
          -) Name: prevMonth
          -) Name: nextMonth

          Ich möchte jetzt gerne per Post-Methode, immer wenn ich auf einen der Button klicke, es jeweils ein Monat vor bzw. zurück geht. Ich habe jetzt schon ein paar Möglichkeiten mit Sessions ausprobiert, jedoch ohne Erfolg.

          Kann mir bitte einer von euch weiterhelfen?

          Danke im Voraus und
          mfG APH

          komisch: Kaum macht man`s richtig funktioniert`s a scho.

          Kommentar


          • #6
            Da gibt es meiner Meinung nach zwei Möglichkeiten:

            1. Dem POST-Formular den aktuellen Monat und die Richtung sowie das Intervall mitzugeben (sehr dynamisch und flexibel).

            2. Dem POST-Formular den Zielmonat übergeben.

            Am Besten berechnest du die neuen Monate mit DateInterval und DateTime, das ist am einfachsten.

            Sessions benötigst du dazu eigentlich nicht.
            GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

            Kommentar


            • #7
              Zitat von ChristianK Beitrag anzeigen
              [...]
              2. Dem POST-Formular den Zielmonat übergeben.
              [...]
              Wie ist das gemeint?

              mfG APH

              komisch: Kaum macht man`s richtig funktioniert`s a scho.

              Kommentar


              • #8
                Wenn gerade Monat 9 ist, dann hast du 8 und 10 als values für dein Form. Dh das Zielscript bekommt direkt den Monat übergeben der es sein soll.
                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #9
                  Genau, ich persönlich würde jedoch die Variante 1 bevorzugen:

                  Code:
                  php > $Date = new DateTime();
                  php > $Interval = new DateInterval('P1M');
                  php > var_dump($Date);
                  object(DateTime)#1 (3) {
                    ["date"]=>
                    string(19) "2014-09-08 21:20:26"
                    ["timezone_type"]=>
                    int(3)
                    ["timezone"]=>
                    string(13) "Europe/Zurich"
                  }
                  php > $Date->add($Interval);
                  php > var_dump($Date);
                  object(DateTime)#1 (3) {
                    ["date"]=>
                    string(19) "2014-10-08 21:20:26"
                    ["timezone_type"]=>
                    int(3)
                    ["timezone"]=>
                    string(13) "Europe/Zurich"
                  }
                  php > $Interval = new DateInterval('P4M25D');
                  php > $Date->add($Interval);
                  php > var_dump($Date);
                  object(DateTime)#1 (3) {
                    ["date"]=>
                    string(19) "2015-03-05 21:20:26"
                    ["timezone_type"]=>
                    int(3)
                    ["timezone"]=>
                    string(13) "Europe/Zurich"
                  }
                  php >
                  Damit hast du alles mögliche respektiert: Schaltjahre, Jahreswechsel, Monatswechsel, Zeitumstellungen, ...

                  Ein Link könnte so aussehen
                  Code:
                  ?month=10&year=2014&add=2
                  Um zum Beispiel 2 Monate hinzuzufügen.
                  GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

                  Kommentar


                  • #10
                    Zitat von ChristianK Beitrag anzeigen
                    [...]
                    2. Dem POST-Formular den Zielmonat übergeben.
                    [...]
                    Sorry, ich meinte wie mach ich das am besten?

                    mfG APH

                    komisch: Kaum macht man`s richtig funktioniert`s a scho.

                    Kommentar


                    • #11
                      Gleich/Ähnlich wie ich dir das bereits gepostet habe. Nur berechnest du den Zielmonat vor dem Anzeigen des Linkes.
                      GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

                      Kommentar


                      • #12
                        Tut mir Leid, das verstehe ich nicht.
                        Vielleicht kann jemand etwas deutlicher werden?

                        Wenn ich einen Link habe, dann ist das doch die GET-Methode - oder?

                        komisch: Kaum macht man`s richtig funktioniert`s a scho.

                        Kommentar


                        • #13
                          Noch deutlicher geht nicht..

                          Variante 1:

                          - Link mit aktuellem Monat und Rechenrichtung als Paramter angeben
                          - Auf Zielseite die Parameter abholen und entsprechend deren Angabe rechnen


                          Variante 2:

                          - zuerst rechnen
                          - und den errechneten Monat im Link als Parameter übergeben

                          Anmerkung:
                          Mit Link, oder als Form, also ob POST oder GET ist hier mal irrelevant, denn ob du ein Form mit einen button baust oder einen Link ist vom grundsätzlichen Prozedere mal egal. Wobei man im normalfall für solche "Navigationsparameter" GET verwendet, und das kann man ja als Link oder auch als Form (method="get") darstellen (zB Button).

                          LG
                          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                          PHP.de Wissenssammlung | Kein Support per PN

                          Kommentar


                          • #14
                            Ich kapiers leider immer noch nicht.
                            Wie muss ich vorgehen, wenn:
                            PHP-Code:
                            if (isset($_POST['prevMonth']))
                            {
                                  
                            //...

                            Hinweis: bei mir steht:
                            Code:
                            <form action="" method="post">
                            Ich hoffe meine Frage ist jetzt nicht zu unverschämt.


                            mfG APH

                            komisch: Kaum macht man`s richtig funktioniert`s a scho.

                            Kommentar


                            • #15
                              Meine Güte, du stehst echt mit beiden Beinen auf der Leitung.

                              Gegeben:
                              Jetzt: September (9)

                              Berechne:
                              Nächster Monat: Oktober (10) = "Jetzt + 1"
                              Vorheriger Monat: August (8 ) = "Jetzt - 1"

                              Randbereiche beachten:
                              Januar => prev Dezember
                              Dezember => next Januar
                              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                              Kommentar

                              Lädt...
                              X