Javascript + PHP - Countdown

Operator_Jon

Erfahrenes Mitglied
HI!
So, ich möchte javascript mit php zusammen schmeißen um einen countdown zu erzeugen.
Ich habe es fast geschafft, nur fehlt da noch etwas logisches denken...
Nehmen wir mal wieder das beispiel Insel-Monarchie!
Dort baut man ein gebäude, das z.b. 180sekunden dauern soll.
nun folgender code(habe extra nur dateien genommen, daich auf mysql immoment kein bock hatte^^):
PHP:
<html>
<head>
<title>Test1</title>
<script>
function pop() {
  var attribWithoutAll="location=no,menubar=no,toolbar=no,status=no";
  attribWithoutAll+=",resizable=no,scrollbars=no,width=450,height=200";
  subwindow=window.open("popup.php","popup",attribWithoutAll);
  subwindow.moveTo(10,50);
}
</script>
</head>
<body onUnLoad="pop()">
<?php
if ($action == "") {
if (!file_exists("time.db")) {
?>
<form name="form" action="<?php $_PHP_SELF ?>?action=build" method="post">
<input type="submit" value="build thing" />
</form>
<?php
}
else {
$fp = fopen("time.db","r");
$data = fgets($fp,99);
fclose($fp);
$data = time() - $data;
$fp = fopen("build.db","r");
$data2 = fgets($fp,99);
fclose($fp);
$data = $data2-$data;
echo "<form name='form'>";
echo "<input type='hidden' name='field' value='$data'>";
echo "</form>";
?>
<SCRIPT type="text/javascript">
        var field = window.document.form.field.value;
        var TargetTime = new Date();
        var TimeBeginn = TargetTime.getTime();

    function CountDown(myid, seconds) {
	var CurrentDate = new Date();
        var CurrentTime = CurrentDate.getTime();
        var TimeEnd = TimeBeginn + (seconds*1000);
        TargetTime.setTime(TimeEnd);
        var Targetbox=document.getElementById(myid);
        var OpenTime = Math.floor((TargetTime-CurrentTime)/1000);

        var s = OpenTime % 60;
        var m = ((OpenTime-s)/60) % 60;
        var h = ((OpenTime-s-m*60)/(60*60));
        var fh  = ((h < 10) ? "0" : "");
        var fm  = ((m < 10) ? ":0" : ":");
        var fs  = ((s < 10) ? ":0" : ":");

        var Time = fh+h+fm+m+fs+s;
        var OutputString=Time;

        if(OpenTime<=0) { // Event wenn der Countdown abgelaufen ist
            var OutputString="Jetzt!";
          }
          Targetbox.innerHTML=OutputString; // Ausgabe des Strings in der Betreffenden Zelle
	  window.setTimeout("CountDown('" + myid + "', '" + seconds + "')", 1000);
    }
</script>
<span id='id'><script type='text/javascript'>CountDown('id', field);</script></span>
<?php
}
}
if ($action == "build") {
  $fp = fopen("time.db","w");
  fwrite($fp,time());
  fclose($fp);
  ?>
  <meta http-equiv="refresh" content="4; URL=test1.php">Weiterleitung in 4 Sekunden!
  <?php
}
?>
</body>
</html>
jedes gebäude hat nunmal eine bauzeit!
Ich schreibe den aktuellen timestamp in eine datei um ihn dann wieder zu lesen.
die differenz aus dem aktuellen timestamp und dem beim verlassen wird errechnet und von der bauzeit abgezogen.
die bauzeit beträgt in diesem fall 120sekunden.
aber irgendwie klappt es manchmal und irgendwie nicht?

/€dit:
habs selber gelöst:rolleyes:
-close- please!
 
Zuletzt bearbeitet:
Ja, so eine Sache wird relativ oft gefragt.
Ehrlich gesagt könnte ichs auch gebrauchen ;)

Also lasset den Egoismus nicht über die Gemeinschaft siegen ! ;) :rolleyes:
 
nein, kein problem, mache ich gerne!
ist aber ein test script, d.h. nicht grade sehr freundlich geschrieben:-(
es basiert auch noch nicht auf mysql oso, läuft mit einfachen dateien!
(cool, das die ganzen cracks es noch nicht geschafft habe und ich schon:-) )
von egoismus war keine rede, ich wusste ja nicht, das so viele es haben wollen;)
aber was laber ich:
PHP:
<html>
<head>
<title>Test1</title>
</head>
<body>
<?php
if ($action == "") {
if (!file_exists("time.db")) {
?>
<form name="form" action="<?php $_PHP_SELF ?>?action=build" method="post">
<input type="submit" value="build thing" />
</form>
<?php
}
else {
$fp = fopen("time.db","r");
$data = fgets($fp,99);
fclose($fp);
$data = time() - $data;
$fp = fopen("build.db","r");
$data2 = fgets($fp,99);
fclose($fp);
$data = $data2-$data;
echo "<form name='form'>";
echo "<input type='hidden' name='field' value='$data'>";
echo "</form>";
if ($data >> $data2) {
  echo "";
}
else {
?>
<SCRIPT type="text/javascript">
        var field = window.document.form.field.value;
        var TargetTime = new Date();
        var TimeBeginn = TargetTime.getTime();

    function CountDown(myid, seconds) {
	var CurrentDate = new Date();
        var CurrentTime = CurrentDate.getTime();
        var TimeEnd = TimeBeginn + (seconds*1000);
        TargetTime.setTime(TimeEnd);
        var Targetbox=document.getElementById(myid);
        var OpenTime = Math.floor((TargetTime-CurrentTime)/1000);

        var s = OpenTime % 60;
        var m = ((OpenTime-s)/60) % 60;
        var h = ((OpenTime-s-m*60)/(60*60));
        var fh  = ((h < 10) ? "0" : "");
        var fm  = ((m < 10) ? ":0" : ":");
        var fs  = ((s < 10) ? ":0" : ":");

        var Time = fh+h+fm+m+fs+s;
        var OutputString=Time;

        if(OpenTime<=0) { // Event wenn der Countdown abgelaufen ist
            var OutputString="Jetzt!";
          }
          Targetbox.innerHTML=OutputString; // Ausgabe des Strings in der Betreffenden Zelle
	  window.setTimeout("CountDown('" + myid + "', '" + seconds + "')", 1000);
    }
</script>
<span id='id'><script type='text/javascript'>CountDown('id', field);</script></span>
<?php
}
}
}
if ($action == "build") {
  $fp = fopen("time.db","w");
  fwrite($fp,time());
  fclose($fp);
  ?>
  <meta http-equiv="refresh" content="4; URL=test1.php">Weiterleitung in 4 Sekunden!
  <?php
}
?>
</body>
</html>
 
Hallo
Habe mal eine Frage:
Könnte mir vielleicht jemand von ihnen das Obige script so umschreiben das er die mysql befehle noch in dem script ausführt und nicht in einer extra datei z.B. build.db öffnet?

Aber die funktion sollte gleich bleiben sprich countdown und gebäude bau usw..

Danke im vorraus.

MFG

Radeon
 
Zuletzt bearbeitet:
klar geht das, ich sagte ja, es ist nur eine testdatei für mich!
es lässt sich natürlich auf mysql umschreiben!

mal sehen ob ich das gleich noch schaffe, oder nicht, ich denke schon^^

€dit:
ich mache das mal eben erstmal für ein gebäude, den rest schaun wir mal!
 
Zuletzt bearbeitet:
ok:
sql1:
Code:
CREATE TABLE `bauten` (
`ID` INT(8) UNSIGNED DEFAULT '0' NOT NULL AUTO_INCREMENT PRIMARY KEY, 
`name` VARCHAR(50) NOT NULL, 
`bauzeit` INT(8) NOT NULL
);
sql2:
Code:
CREATE TABLE `in_bau` (
`ID` INT(8) UNSIGNED DEFAULT '0' NOT NULL AUTO_INCREMENT PRIMARY KEY, 
`b_id` INT(8) NOT NULL, 
`time` VARCHAR(50) NOT NULL
);

also das ist jetzt so geschrieben, das du die abfrage noch mit ner user abfrage machen musst!
das kannst aber dann selber ändern also "SELECT... WHERE user='".$_SESSION["user"]."'"
oso

Bin ein wenig verkalkt heute, hat ziemlich lange gedauert!
aber ich habs doch noch hingekriegt!
es ließe sich noch was in performance richtung verändern, aber da hatte ich keine zeit mehr zu!

/€dit:
Kleiner Schönheitsfehler!
unten wo er den datensatz dann automatisch löschen soll, steht
if ($data2 >> $data) {
muss geändert werden in:
if ($data >> $data2) {
 

Anhänge

Zuletzt bearbeitet:
noch mal ne änderung zur if abfrage:
Code:
 if ($data2 <= $data) {
    $query = "DELETE FROM in_bau WHERE ID='$id'";
    mysql_query($query,$conn) or die(mysql_error());
  }
 
ok danke aber ich habe jetzt mit dem script schon wieder ein problem....

Ich habe versucht es so zu machen das jeder user in der "in_bau" tabelle seine spallte hat so das dass script erkennt wer gerade was baut und das jeder user in der "bauen" tabelle seinen eigenen namen hat. Weil ja jeder user seine Gebäude auf einem anderen level hat... ich bekomme das aber leider nie hin, keine ahnung warum :(

Frage könnten sie das für mich machen? (Das was ich ihnen per PN geschickt habe brauch ich dann auch nimmer :rolleyes: )

Danke im vorraus :)
 
Zurück