 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
08.07.2006, 14:48
|
#1
|
|
TP-Senior
Registriert seit: Oct 2005
|
zeitbegrenzung in online quiz
hi leude,
ich habe mit php und mysql ein sehr umfangreiches online-quiz samt admin-bereich zur eingabe von fragen/antworten/bilder-hochladen usw. erstellt. nun soll es einer der letzten schritte sein, dem user die möglichkeit zu geben, die dauer der zeit, die er für die beantwortung der fragen hat selbst zu bestimmen. 20, 30, 40 min usw...
habe schon fleissig gegoogelt, bin aber noch auf keine lösung gestoßen. immer nur so ansätze drum herum aber nicht genau in meine richtung.
habe auch bereits ein countdown-script, welches funktioniert, nur leider mit body onload (allet javascript). das geht wiederum nicht mit meinem bisherigen konzept konform, da ich nicht mit frames arbeite, sondern alles mit css gestaltet habe. also wird jedesmal (wenn der user auf "nächste frage" klickt) die zeit von vorne geladen. nicht sinn der sache ;-)
ich bin dankbar für alle tipps!
wenn jemand das script mal sehen möchte, da es da evtl. auch andre möglichkeiten ausser frames einzubauen gäbe...kann ich auch mal posten.
|
|
|
08.07.2006, 18:11
|
#2
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Wenn du es mit JS machen willst, könnte man über cookies arbeiten.
Also kein cookie da, einen schreiben und startzeit rein.
Bei Seitenaufruf schauen ob cookie da, wenn ja startzeit aufnehmen und aktuelle Zeit abziehen. Zeit auf Null > cookie löschen.
Wenn es dir reicht, das die Restzeit immer nur beim Seitenaufruf angezeigt wird, dann geht das auch via PHP.
Ist dann aber halt lein Live Countdown.
PHP-Code:
<? session_start();
function timer(){ global $dauer; if(!isset($_SESSION['timerstart'])) $_SESSION['timerstart'] = mktime(date('H'),date('i')+$dauer+1,date('s'), date('m'), date('d'), date('Y')); return $foo = date("i",$_SESSION['timerstart'] - time()); }
if(isset($_GET['dauer'])&&$_GET['dauer']!="")$dauer = $_GET['dauer']; $rest = timer();
if(isset($_SESSION['timerstart'])){ if($rest > 0){ echo isset($_GET['dauer']) ? "Ihre Restzeit: ".($rest-1)." Minuten<br>" : "Ihre Restzeit: ".intval($rest)." Minuten<br>"; echo "hier kommt dann die Frage<br> mit Fomular, oder wie auch immer.<br> <a href=\"$_SERVER[PHP_SELF]\">weiter</a>"; } else{ echo "Ihre Zeit ist leider abgelaufen<br> <a href=\"$_SERVER[PHP_SELF]?dauer=3\">timer neustarten</a>"; unset($_SESSION['timerstart']); } } else echo"<a href=\"$_SERVER[PHP_SELF]?dauer=3\">timer starten</a>"; ?>
|
|
|
08.07.2006, 18:59
|
#3
|
|
TP-Senior
Registriert seit: Oct 2005
|
erstmal danke.
ich denke ich werde es mit cookies machen, da das ganze "live" schon schöner aussieht und auch für den getesteten eine bessere übersicht gibt, wieviel zeit er jetzt im moment noch hat.
wie man cookies erstellt und ausliest weiss ich (self html). aber wo ich das im script einbauen soll erschließt sich mir noch nicht ganz. habe es auch nur kopiert und minimal angepasst...
hier das bisherige script (an dem es noch einiges zu basteln gibt, für den fall, dass die zeit abläuft, aber das ist ein andres problem):
HTML-Code:
<script type="text/javascript">
var running = false
var endTime = null
var timerID = null
var totalMinutes = "<?php echo $_SESSION["dauer"]; ?>";
function startTimer() {
running = true
now = new Date()
now = now.getTime()
endTime = now + (1000 * 60 * totalMinutes);
showCountDown()
}
function showCountDown() {
var now = new Date()
now = now.getTime()
if (endTime - now <= 0) {
clearTimeout(timerID)
running = false
// alert("Ihre Zeit ist abgelaufen")
// window.location.replace ( "/auswertung.php" ) ;
} else {
var delta = new Date(endTime - now)
var theMin = delta.getMinutes()
var theSec = delta.getSeconds()
var theTime = theMin
theTime += ((theSec < 10) ? ":0" : ":") + theSec
document.getElementById('SessionTimeCount').innerHTML = "Verbleibende Zeit " + theTime
if (running) {
timerID = setTimeout("showCountDown()",900)
}
}
}
</script>
|
|
|
08.07.2006, 19:17
|
#4
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Na einfach in den head Bereich.
Bei onload einfach showCountDown() aufrufen und via PHP prüfen ob schon Cookie gesetzt ist,wenn nicht, startTimer() aufrufen.
|
|
|
08.07.2006, 20:00
|
#5
|
|
TP-Senior
Registriert seit: Oct 2005
|
okay ich hab mal n bisschen was gemacht und denke das passt soweit erstmal. hier also die if-clause:
HTML-Code:
<script type="text/javascript">
var running = false
var endTime = null
var timerID = null
var totalMinutes = "<?php echo $_SESSION["dauer"]; ?>";
<?php if(isset($_COOKIE['endTime']))
{
echo ('showCountDown()');
}
else
{
echo ('function startTimer()');
echo ('{ ');
echo (' running = true ');
echo (' now = new Date() ');
echo (' now = now.getTime() ');
echo (' endTime = now + (1000 * 60 * totalMinutes); ');
echo (' showCountDown() ');
echo (' } ');
}
?>
function showCountDown() {
...
nun meine frage: wenn also das cookie endTime noch nicht gesetzt wurde, muss das ja noch erfolgen und darin soll ja die jeweilige "neue" zeit gespeichert werden, um die beim laden der nächsten frage wieder aufzunehmen. wie mache ich das? wo also setze ich das cookie endTime? der rest des scripts ist unverändert geblieben und liegt oben vor.
|
|
|
08.07.2006, 20:06
|
#6
|
|
TP-Senior
Registriert seit: Oct 2005
|
oups. denkfehler.
nach dem head bereich sollte das ganze wohl so aussehn:
HTML-Code:
<?php if(isset($_COOKIE['endTime']))
{
echo ('<body onLoad="showCountDown();">');
}
else
{
echo ('<body onLoad="startTimer();">');
}
?>
und die if-clause im script ist überflüssig. (also das was ich eben gepostet habe.
meine frage bleibt dennoch
|
|
|
08.07.2006, 20:13
|
#7
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Warum überhaupt mit der endTime arbeiten?
EndTime einfach als value setzen und dieses immer mit der akt. Zeit vergleichen, also die Dif. bilden, dann hast doch die Restzeit ...
|
|
|
08.07.2006, 20:18
|
#8
|
|
TP-Senior
Registriert seit: Oct 2005
|
als value eines hidden-form-felds? und dort dann time() verwenden? müsste ich das formatieren?
|
|
|
08.07.2006, 20:21
|
#9
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|

textfeld? hidden?
Als value von dem Cookie!!!
|
|
|
08.07.2006, 20:27
|
#10
|
|
TP-Senior
Registriert seit: Oct 2005
|
okay irgendwie reden wir aneinander vorbei.
um ein cookie mit php zu setzen würde ich wie folgt vorgehen:
setcookie("Name", $Wert, $Gueltigkeit);
mein problem ist aber nicht WO speicher ich ab, sondern WAS?
ich komme also mit dem script, das ich kopiert habe nicht so wirklich klar.
mein gedanke ist, dass ich endTime speichern müsste um in showCountDown richtig weiterzumachen (endTime - now würde ja sonst falsch berechnet).
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 20:11 Uhr.
|
 |