Ajax Request

Hi,

ich habe mich mal an Sven Mintels Anleitung für einen einfachen Countdown-Timer versucht.
Siehe folgender Link:
http://www.tutorials.de/forum/1026043-post7.html

Das würde bei mir auch passen, nur bei jedem aktualisieren wird der Wert aus der Datenbank erneut geladen und somit fängt der Timer erneut an von anfang an runter zu zählen.
Bei mir soll es aber so sein, solange kein weiterer User angemeldet ist kann ruhig der Wert wieder übernommen werden, aber wenn ein weiterer User versucht sich anzumelden soll sich die Zeit nicht mehr auf den Ausgangswert aktualisieren sondern selbst wenn man manuell aktualisiert bis auf 0 runterzählen und dann auf eine andere Seite weiterleiten.

Wäre super wenn mir jemand dabei helfen könnte, weil ich einfach nicht drauf komme.
 
Meine Überlegung : Wenn man die Seite lädt, wird auch der Timer in der DB aktualisiert. Ab da hat man zB 10 Minuten Sessionzeit bis zur automat. Abmeldung. (Sessions aktualisieren sich ja bei Reload oder sessionwertigen Seiten selber)

Ergo ist der Ansatz bei Reload den Timer wieder bei 10Min. starten zu lassen gar nicht so falsch, oder?

mfg chmee
 
Ja, der Ansatz ist schon richtig,

So lange kein weiterer Benutzer sich anmeldet ist es ok.

Nur wenn ein weiterer Benutzer versucht sich anzumelden, wird in der Datenbank die Zeit nicht mehr aktualisiert und soll dann auch einfach runterzählen bis der angemeldete Benutzer automatisch abgemeldet wird.
Dann soll sich der Benutzer anmelden können der sich versucht hatte anzumelden.

Aber im Moment wird die Zeit immer aktualisiert auch wenn sich ein weiterer User versucht hat anzumelden, sodass er theoretisch niemals reinkommt, was ja nicht der Zweck der Sache ist.

Bis jetzt habe ich auch schon einen Timer, der runterzählt aber der leitet nicht weiter wenn die Zeit erreicht ist sondern bleibt einfach bei 00:00:00 stehen.
 
Jeder Nutzer hat doch eine eigene Session.. Ergo läuft bei jedem Nutzer eine eigene Instanz des Zählers (auch in der DB)..

Und zum Thema Timer auf 0 - 2 Möglichkeiten :
1. Es passiert wirklich nichts, außer dieser Timer wird rot, signalisiert damit, dass man abgemeldet ist (das wird er merken, wenn er Daten eingibt oder einen Reload macht (session Timeout)
2. Einfach einen Reload machen, wo dann die Sessionabfrage von sich aus die Abmeldung definiert. (Wenn nicht angemeldet, dann ist was Anderes zu sehen)

mfg chmee
 
Hi chmee,

ja genau so ist es.
Der Timer läuft runter bis auf 0.
Wenn man jetzt was macht, wird angezeigt das man abgemeldet wird und nichts mehr machen kann.
Dann kann sich der nächste User anmelden.
Aber das Problem liegt darin, wenn jetzt der angemeldet User bei dem die Zeit auf 0 runtergelaufen ist einfach nichts mehr macht, dann wird er auch nicht mehr abgemeldet und der nächste kann sozusagen sich nicht anmelden.

Wie kann ich denn einen automatischen Reload machen lassen wenn die Zeit auf 00:00:00 runtergelaufen ist?
 
Hi,

wie muss ich bei dem folgenden Code die if-Anweisung machen,
sodass beim Beenden des Countdown Timers auf eine andere Seite umgeleitet wird.

Code:
<html>
  <head>
    <title>Datum-Countdown mit JavaScript</title>

    <script language="JavaScript">
      // Ziel-Datum in MEZ
      var jahr=2222, monat=2, tag=22, stunde=22, minute=22, sekunde=22;
      var zielDatum=new Date(jahr,monat-1,tag,stunde,minute,sekunde);

      function countdown() {
        startDatum=new Date(); // Aktuelles Datum

        // Countdown berechnen und anzeigen, bis Ziel-Datum erreicht ist
        if(startDatum<zielDatum)  {

          var jahre=0, monate=0, tage=0, stunden=0, minuten=0, sekunden=0;

          // Jahre
          while(startDatum<zielDatum) {
            jahre++;
            startDatum.setFullYear(startDatum.getFullYear()+1);
          }
          startDatum.setFullYear(startDatum.getFullYear()-1);
          jahre--;

          // Monate
          while(startDatum<zielDatum) {
            monate++;
            startDatum.setMonth(startDatum.getMonth()+1);
          }
          startDatum.setMonth(startDatum.getMonth()-1);
          monate--;

          // Tage
          while(startDatum.getTime()+(24*60*60*1000)<zielDatum) {
            tage++;
            startDatum.setTime(startDatum.getTime()+(24*60*60*1000));
          }

          // Stunden
          stunden=Math.floor((zielDatum-startDatum)/(60*60*1000));
          startDatum.setTime(startDatum.getTime()+stunden*60*60*1000);

          // Minuten
          minuten=Math.floor((zielDatum-startDatum)/(60*1000));
          startDatum.setTime(startDatum.getTime()+minuten*60*1000);

          // Sekunden
          sekunden=Math.floor((zielDatum-startDatum)/1000);

          // Anzeige formatieren
          (jahre!=1)?jahre=jahre+" Jahre,  ":jahre=jahre+" Jahr,  ";
          (monate!=1)?monate=monate+" Monate,  ":monate=monate+" Monat,  ";
          (tage!=1)?tage=tage+" Tage,  ":tage=tage+" Tag,  ";
          (stunden!=1)?stunden=stunden+" Stunden,  ":stunden=stunden+" Stunde,  ";
          (minuten!=1)?minuten=minuten+" Minuten  und  ":minuten=minuten+" Minute  und  ";
          if(sekunden<10) sekunden="0"+sekunden;
          (sekunden!=1)?sekunden=sekunden+" Sekunden":sekunden=sekunden+" Sekunde";

          document.countdownform.countdowninput.value=
              jahre+monate+tage+stunden+minuten+sekunden;

          setTimeout('countdown()',200);
        }

        // Anderenfalls alles auf Null setzen
        else document.countdownform.countdowninput.value=
            "0 Jahre,  0 Monate,  0 Tage,  0 Stunden,  0 Minuten  und  00 Sekunden";
      }
    </script>
  </head>

  <body onload="countdown()">
    <form name="countdownform">
      <p>
        <input size="75" name="countdowninput">
      </p>
    </form>
  </body>

</html>
 
Du hast die if-Abfrage ja schon drin. Wenn (startDatum<zielDatum) {} ansonsten {}.

Ersetze:
Code:
else document.countdownform.countdowninput.value=
            "0 Jahre,  0 Monate,  0 Tage,  0 Stunden,  0 Minuten  und  00 Sekunden";
durch
Code:
else { document.countdownform.countdowninput.value=
            "0 Jahre,  0 Monate,  0 Tage,  0 Stunden,  0 Minuten  und  00 Sekunden";
         Location.reload();
}
mfg chmee
 
Ja genau an der Stelle hatte ich es auch schon mit Location.reload(); probiert.
Aber es passiert einfach nichts wenn die Zeit abgelaufen ist.
 

Neue Beiträge

Zurück