Zeitmessung (Timer) und Zeitausgabe

Don Stefano

Erfahrenes Mitglied
Hallo zusammen,

Ich programmiere eine Art Quizsystem mit verschiedenen Aufgaben- und Fragenblöcken.

Ein Teil dieser Aufgaben soll unter Zeitbegrenzung funktionieren. Das heißt man darf für z.B. eine Reihe von 20 oder 30 Aufgaben max. nur 20 Minuten Zeit haben. Danach muss das Ganze abbrechen.

Ich weiß schon, dass dies mit php nicht automatisch geht, aber zumindest kann man ja die Zeit messen, und wenn die 20 Minuten vergangen sind, beim nächsten Klick dann abbrechen.

Vor einiger Zeit hat mir dazu schon mal ein "Bob" einen Ratschlag erteilt.

PHP:
<? 
  session_start(); 
  if (!isset($_SESSION['start_time'])) { 
  	$_SESSION['start_time'] = time(); 
  } elseif ($_SESSION['start_time']+1200 <= time()) { 
  	die('zeit abgelaufen'); 
  }

Wenn also die Vorgabeseite immer wieder aufgerufen wird, müßte ja somit nach 20 Minuten Ende sein und das Skript abbrechen.

Es soll nun aber bei jeder Aufgabe auch die verbleibende Zeit angezeigt werden in der Form: "Sie haben noch 13:21 Min. Zeit". Und dann bei der nächsten Aufgabe z.B. "Sie haben noch 11:45 Min. Zeit". usw.

Weiß vielleicht jemand, wie ich dies bewerkstelligen kann zusammen mit der oben skizzierten Vorgehensweise der Zeitmessung (Timer) ?

Herzlichen Dank
Don Stefano
 
Das hilft mir leider nicht weiter.

Könnte es so ähnlich wie folgt gehen ?

PHP:
 $zeit = (($_SESSION['start_time']+1200 - $_SESSION['start_time'])/60);

Und käme dann eine Sekundenangabe dabei raus wie z.B: $zeit = 990/60 = 16,5 Min. ?

Ich kann mir das nicht vorstellen, weil z.B: 12:00 Uhr doch keine Angabe in Sekunden ist oder doch ? Oder entspricht 12:00 dann einfach 43200 ? (also 12 Stunden x 60 Minuten x 60 Sekunden ?

Wer hat Rat ?

Gruß
Don
 
PHP:
$verbleibende_zeit = $_SESSION['start_time']+1200-time(); //Zeit in sekunden
$_SESSION['start_time'] ist ein UNIX-Timestamp, genauso wie die von time() zurückgegebene Zahl.
 
Zuletzt bearbeitet:
Ohje ich habe dabei zuerst gar nicht verstanden, dass $_SESSION['start_time'] auch ein Zeitstempel ist. Wohl derjenige zu der Zeit wenn die Session gestartet wird.

Nun habe ich aber das Problem, dass die Session nicht unbedingt zu der gleichen Zeit gestartet wird, wie das Quiz. Mit Start der Session betritt man die Seite und kann sich auch erst einige Minuten dort alles ansehen, Anleitungen lesen usw.

Erst wenn man das eigentliche Quiz startet, muss die Startzeit festgelegt werden. Aber in diesem Moment wird eben keine Session gestartet.

Jetzt ist es wohl logisch dass ich statt dem Zeitstempel $_SESSION['start_time'] einfach time () verwenden muss um die Startzeit zu ermitteln.

Damit ich dann damit rechnen kann müßte es z.B. folgendermaßen aussehen:

PHP-Code:
PHP:
	     $startzeit = time(); 
   if $startzeit+1200 <= time()) { 
       die('zeit abgelaufen');
Das Problem ist aber nun, dass dieses Skript mit jeder Aufgabe immer wieder aufgerufen wird (erst das Vorgabeskript - dann mittels post ein Saveskript - dann wieder das Vorgabeskript usw.) Das bedeutet aber auch, dass $startzeit mit jedem Aufruf der Seite wieder neu deklariert wird - und dann macht es natürlich keinen Sinn mehr.

Wie kann ich es einrichten, dass $startzeit mittels time() nur ein einziges Mal definiert wird, und bei den folgenden Aufrufen der Seite nicht mehr ?

Ich könnte natürlich an den Link, der die Seite zum ersten Mal aufruft eine Variable anhängen, z.B.
PHP-Code:
PHP:
			   vorgabeskript.php?beginn=1

und diese dann mit get und "if isset $beginn" abfragen.

Aber gibts nicht noch eine elegantere und sicherere Lösung ?

Danke für eure Hilfe (wie immer)
Don
http://selfphp.de/forum/images/selfphp_v3_style/buttons/edit.gif
 
Zurück