[JS/PHP] In while-Schleife Dynamische PHP Variable in JS

djjlx

---???---
ID: 62937
L
9 Mai 2006
599
21
Hallo!

Ich hab folgendes Problem!

Ich hab eine while Schleife, in dieser while Schleife werden userdaten aus der DB gelesen. Funktioniert!
In der whileschleife ist ebenfalls ein JS Countdownscript in das die vorher ausgelesenen $ übergeben werden. Funktioniert.

Funktioniert alles wenn nur eine Abfrage gemacht wird.
Läuft die schleife aber ein 2 mal durch funktioniert das JS nicht mehr richtig.
bzw. die Ausgabe!

Ich denke das es daran liegt das die JS var ja schon im ersten durchgang erstell worden ist und dadurch bei der 2 ausgabe die var des ersten durchlaufs ausgeben wird.

Hier mal das JS:
PHP:
<script language="JavaScript">
<!--//Zeit Bis zum Start

var SEC = <? echo"$sec"; ?>;
var MIN = <? echo"$min"; ?>;
var STD = <? echo"$std"; ?>;

setInterval("startCountdown()",1000)

function startCountdown(){
var numberCountdown=document.getElementById("numberCountdown");
if (SEC>-1){
    SEC=SEC-1;
}
if (SEC==-1 && MIN>=0){
    MIN=MIN-1;
    SEC=59;
}
if (MIN==-1 && STD>0){
    STD=STD-1;
    MIN=59;
}
formatSEC = (SEC<10) ? "0"+SEC : SEC;
formatMIN = (MIN<10) ? "0"+MIN : MIN;
if((SEC<=0 && MIN==0 && STD==0) || MIN<0) {
  numberCountdown.innerHTML = "fertig";
  clearInterval("startCountdown()");
} else {
  numberCountdown.innerHTML = STD + ":" + formatMIN + ":" + formatSEC;
}
}
//-->
</script>

Jeder Schleifendurchlauf hat eine ander Startzeit des Countdowns.

Die Ausgabe des JS:
PHP:
<div id='numberCountdown'></div>

Ich hätte gerne das dann neben einander die verschieden Countdowns laufen.
Zb: 01:50:20 00:35:14 03:05:56 usw.
Raus kommt aber
03:05:56 03:05:56 und die Sekunden werden in 2er schritten heruntergezählt also 56,54,52...

Hier komm ich einfach nicht weiter hab jetzt schon 3 Std. herumgebastelt :(
Hat jemand einen Tipp für mich?

LG
 
für das problem dass 2 sekunden gzählt werden versuch doch mal anstatt MIN=MIN-1; einfach dec(MIN); zu machen. (für std und sek klar auch)

das die selben count gezeigt werden ist wahrscheinlich daher weil du sie gleich aufrufst. oder wie rufst du das komplett auf? poste doch mal die schleife bitte.
 
Hallo!

das 2 Sekenden heruntergezählt werden ist nur wenn die Schleife 2 durchläufe hat.
Ist nur ein durchlauf dann funktioniert alles wunder bar.

Hier die schleife:
PHP:
 <?
while ($erg1 = mysql_fetch_array($kel))
    {
$zeit = $erg1["reload"];
$time = $zeit - time();

$std = $time/3600;
$std = floor($std);
$min = $time/60;
$min = $min - (60*$std);
$min = floor($min);
$sec = 0;

?>

<script language="JavaScript">
..... siehe oben ....
</script>

<?
        echo"
<div align='left'><div id='numberCountdown'></div></div>";
}
 
Bin mir zwar nicht ganz sicher, ob ich Dein Eingangsposting richtig verstanden habe aber wenn Du das gleiche Javascript mehrfach ausgibst, nur mit verschieden gesetzten Variablen, wird das nicht funktionieren, da dann die Funktion startCountdown() doppelt definiert ist. Du musst dann diese Funktion in jeder "Kopie" des JS schon anders nennen.

Wenn ich das richtig verstanden habe, sollen mehrere Countdowns gleichzeitig laufen, dann brauchst Du natürlich für jeden auch ein separates "numberCountdown"-div.
 
Ich würde empfehlen, jQuery in Verbindung mit dem Countdown-Plugin zu nutzen.
Dann hinterlegst du die Zielzeit jeweils in einem <input type="hidden">. Das würde in etwa so aussehen:

PHP:
<?php while($data = mysql_fetch_assoc($kel)) : ?>
<div class="countdown>
  <p class="counting"></p>
  <input type="hidden" value="<?php echo ($data['reload'] * 1000); ?>" />
</div>
<?php endwhile; ?>
<script type="text/javascript">
  $(document).ready(function() {
    var countdowns = $('.countdown');
    countdowns.each(function() {
      var $this = $(this);
      var expiry = $this.children('input:hidden');
      $(this).children('.counting').countdown({until: expiry.val()});
    })
  });
</script>

untested, sollte aber in etwa so aussehen.

Greetz

paddya
 
ich bin zwar auch ein großer freund von frameworks, aber für nen countdown jquery UND nen plugin ist doch "etwas" oversized
 
Das stimmt natürlich. Aber a) ist ja nicht gesagt, dass jQuery nur an dieser Stelle eingesetzt werden muss (okay, doch :ugly:) und b) ist es ja die (Haupt-)Aufgabe eines Frameworks, dem Programmierer Zeit und Code zu sparen. Und dieses Ziel ist in diesem Fall ja wohl erreicht worden.

Greetz

paddya
 
Morgen!

Also meine JS Kenntnisse sind schon sehr sehr wenig und jetzt Jquery noch nie gehöhrt.

Egal muss mich mal durchkämpfen :)

Ich hatte auch schon versucht jeden durchlauf eine ID zu geben also bei startCountdown<?echo "$id";?>() usw. allein wie das dann aussieht denk ich mir das das nicht richtig sein kann.

Gibts keine andere Möglichkeit wie man jedem durchlauf eine id geben kann? Die Id kann ich mit aus der DB lesen somit wäre immer eine neue da!

LG