Timer

Hey,

Ich brauche nen Timer, wo da steht

… Tage … Stunden … Minuten … Sekunden

Und wenn alles abgelaufen ist, man auf eine Seite verlinkt wird bzw. ein Link erscheint.

Bitte helft mir, habe auch keine Ahnung wie man sowas nennt.

Countdown???

solltest du mit AjAX und JS umsetzen können: ajax.frozenfox.at/ (z.B. dass du mit JS runterzählst, und alle 60 Sekunden über einen Request auf ein PHP-Script die aktuelle Zeit überprüfst :wink: )

Cool danke… Wenn ich nur wüsste wie man das dann einbindet usw. ist das sehr schwer ?!

Nein, überhaupt nicht…
Grundkenntnisse in PHP und JS vorrausgesetzt :wink:

Ich würde es so machen, dass ich die aktuelle Zeit per Request auslese (die kann dann ein PHP-Script berechnen), und immer, wenn der Timer 0 Sekundne erreicht, wieder einen Request absende. Somit ersparst du dir die Rechnerei mit JS :wink:

Den Zeitfehler wegen Request-Dauer und der auf-geschaukelte Fehler wegen Recall der Funktion kannst du vernachlässigen, dann geht der Countdown einfach mal 2 Sekunden nach :wink:

Ich verstehe nur Bahnhof… kannst du mir evtl. dabei helfen ?!

ich schreib dir morgen einen Code, heute schaff ich das nicht mehr :wink:

Das kann man auch mit einer deklarativen Animation recht
einfach lösen.

Beispiel von mir:
hoffmann.bplaced.net/hilfe.php?m … ion#inhalt

Da muß man dann eben nur den Datumsteil hinzufügen und
das Teil rückwärts laufenlassen ;o)

Man braucht da auch kein js oder ajax, prinzipiell nicht mal
PHP (aufgrund gewisser Lücken in der Interpretation von SMIL
Animationen ist das aber dennoch hilfreich zur Initialisierung der
Uhr).

Längere ‘countdowns’ zu einem Datum in der Zukunft kann man
generell nur mit Korrekturen unterwegs machen, weil ein Datum,
welches länger als sagen wir mal ein halbes Jahr in der Zukunft
liegt, nicht präsise festliegt. Das Zeitverständnis von PHP
berücksichtigt solche Unwägbarkeiten bei einem Datum
allerdings nie. Wenn der server immerhin das NTP benutzt, werden
bei dem Fehler automatisch korrigiert.

So, die PHP-Datei (request.php)

<?php

$end_time = strtotime("2008-12-25 00:00");

$time = $end_time - time();

$seconds = $time % 60;
$time /= 60;
$minutes = $time % 60;
$time /= 60;
$hours = $time % 24;
$time /= 24;
$days = (int) $time; //Wenn nötig hier fortfahren ;)

header("content-type: text/xml");

echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
echo "<times>\n";
echo "  <seconds>$seconds</seconds>\n";
echo "  <minutes>$minutes</minutes>\n";
echo "  <hours>$hours</hours>\n";
echo "  <days>$days</days>\n";
echo "</times>";

Und der dazugehörige HTML-Datei (index.html)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
	<title>unbenannt</title>
	<meta http-equiv="content-type" content="text/html;charset=utf-8" />
	<meta name="generator" content="Geany 0.14" />
	<script type="text/javascript"><!--
		var request = false;
		
		var seconds;
		var minutes;
		var hours;
		var days;
		
		function set_request()
		{
			if (window.XMLHttpRequest)
				request = new XMLHttpRequest(); // Mozilla, Safari, Opera
			else if (window.ActiveXObject)
			{
				try {
					request = new ActiveXObject('Msxml2.XMLHTTP') //IE5
				} catch(e) {
					request = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
				}
			}
			
			if(!request)
				document.getElementById("countdown").innerHTML="<span class='count_failure'>No AJAX avialable!</span>";
			else
			{
				request.open('post', "request.php", true);
				request.send('');
				request.onreadystatechange = get_request;
			}
		}
		
		function get_request()
		{
			if(request.readyState == 4)
			{
				if(request.status != 200)
					document.getElementById("countdown").innerHTML="<span style='class='count_failure'>Bad Request Status: "+ request.status +"</span>";
				else
				{
					seconds = request.responseXML.getElementsByTagName('seconds')[0].firstChild.nodeValue;
					minutes = request.responseXML.getElementsByTagName('minutes')[0].firstChild.nodeValue;
					hours = request.responseXML.getElementsByTagName('hours')[0].firstChild.nodeValue;
					days = request.responseXML.getElementsByTagName('days')[0].firstChild.nodeValue;
					
					count_down();
				}
			}
		}
		
		function count_down()
		{
			if(seconds < 2)
				set_request();
			else
			{
				seconds--;
				document.getElementById("countdown").innerHTML="<span class='count_success'>"+days+" Tage, "+hours+" Stunden, "+minutes+" Minuten und "+seconds+"Sekunden</span>";
				setTimeout("count_down()", 1000);
			}
		}

	--></script>
	
	<style>
		.count_success {
			color: black;
		}
		
		.count_failure {
			color: red;
		}
	</style>
</head>

<body onload="set_request()">
	<div>
		<p id="countdown">Zähler lädt...</p>
	</div>
</body>
</html>

Ist natürlich alles andere als genau…sollte aber für ein einfaches Countdownskript reichen :wink:
So getestet und funktioniert: demo.michi7x7.de/countdown/

Der Counter sollte am 31. Dezember um 23:59 aufhören und man soll dann automatisch auf st-sebastianus.org/Website/ weitergeleitet werden danke schonmal :slight_smile:

Hey! nicht so faul…Alles was du wissen musst steht da oben :smiley:
Nur noch ein wenig umprogrammieren :wink:

die Weiterleitung müsste man entweder durch einen PHP-Header gemacht werden (header(‚Location: xx.example.com/somefile‘):wink: oder durch eine meta-refresh.
also müsste man das script so umschreiben, dass das PHP JS anweist, das meta-tag zu setzen, wenn der countdown runtergelaufen ist.

idealerweise könnte man sogar das verzeichness mit htaccess zuvor schützen, und dann mit php die htaccess ändern :ps:

Das Ist für mich Chinesisch… Ich werde es dennoch mal probieren vllt. funzt es ja :smiley:

war auch ehr an die profs hier gerichtet :ps: