real-countdown in php-schleife

dennisnowack

Mitglied
Hallo Leute, ich habe folgendes Problem:

Ich habe eine while-schleife in php, in der ich einen datenbank-wert und die aktuelle Zeit auslese und die Differenz als Restzeit speichere (nebenbei lese ich natürlich zu jeder der Restzeiten andere Informationen wie username, preis,... ebenfalls aus). Nun soll aber die dort angezeigte Restzeit dynamisch heruntergezählt werden. Das javascript hierfür habe ich auch schon, nur habe ich keine Ahnung, wie ich das einbinden soll, da ich ja immer eine unbestimmte Anzahl an zu übergebenden Variablen habe, die als Countdown ablaufen sollen. Das ganze soll dann so aussehen:


1.
xxxxxxxx // x,y,z: passende Werte aus Datenbank
yyyyyyyy
Restzeit: 20 Std 10 Min 05 Sek // soll runterzählen
zzzzzzzz

2.
aaaaaaa
bbbbbbb
Restzeit: 33 Std 21 Min 17 Sek
ccccccc

3.
dddddd
eeeeee
Restzeit: 80 Std 44 Min 32 Sek
ffffffffff


Wobei die Anzahl der auszuzgebenden Datensätze von count($result) mit $result=my_sql_query(...) abhängt, also dynamisch ist.

Wie gehe ich das an?
 
Du musst die php-Variable als eine GET-Variable abspeichern! Dann kannst du via JavaScript darauf zugreifen und deinen Countdown starten lassen.
 
ich verstehe noch nicht ganz, was genau die vorhast =)

- Du hast eine schleife, die Einträge aus einer Datenbank holt.
- Zu jedem Datensatz hast du eine Zeit
- nun soll die Differenz zwischen dem gepseicherten Wert und jetzt an ein js übergeben werden

so weit richtig?

Sprich es soll am ende aussehen wie bei ebay, nur dass die Zeit runterzählt :)

Lösungs-Vorschlag:
Du speicherst die Zeit (bis es abläuft) als Unix-Time-stamp (aber als typ init angeben) und dann einfach:
$remaing = $result['time'] - time();

$result['time'] -> gehe ich von aus ist die Zeit aus der DB
$remaining -> übergibst du dann dem js (oder wie will dieser die daten haben?!)

mfg dino
 
<script LANGUAGE="JavaScript"><!--
function validateForm()
{
var okSoFar=true
with (document.UE)
{
if (okSoFar==true) submit();
}
}
// --></script>


<script language="JavaScript">
var jahr=2222, monat=2, tag=22, stunde=22, minute=22, sekunde=22; // Hier erfolgt die variablen-Übergabe
var zielDatum=new Date(jahr,monat-1,tag,stunde,minute,sekunde);
function countdown() {
startDatum=new Date(); // Aktuelles Datum

// Countdown berechnen und anzeigen, bis Ziel-Datum erreicht ist
if(startDatum<=zielDatum) {

var jahre=0, monate=0, tage=0, stunden=0, minuten=0, sekunden=0;

// Jahre
if(startDatum<zielDatum) {
while(startDatum<zielDatum) {
if(startDatum.setFullYear(startDatum.getFullYear()+1)<=zielDatum) jahre++;
}
startDatum.setFullYear(startDatum.getFullYear()-1);
}

// Restliche Tage zum Monatsende ermitteln
var restTage=0;
var m=startDatum.getMonth();
if(m==1-1||m==3-1||m==5-1||m==7-1||m==8-1||m==10-1||m==12-1) restTage=31-startDatum.getDate();
else if(m==4-1||m==6-1||m==9-1||m==11-1) restTage=30-startDatum.getDate();
else if(m==2-1) {
if(startDatum.getFullYear()%4==0 && (startDatum.getFullYear()%100!=0 || startDatum.getFullYear()%400==0)) restTage=29-startDatum.getDate(); // Schaltjahr
else restTage=28-startDatum.getDate();
}

// Start- und Ziel-Tag merken und auf 1 setzen
var startTag=startDatum.getDate();
var zielTag=zielDatum.getDate();
startDatum.setDate(1);
zielDatum.setDate(1);

// Monate
if(startDatum<zielDatum) {
while(startDatum<zielDatum) {
if(startDatum.setMonth(startDatum.getMonth()+1)<=zielDatum) monate++;
}
startDatum.setMonth(startDatum.getMonth()-1);
}

// Tatsächlichen Start- und Ziel-Tag berücksichtigen
if(startDatum.getMonth()==zielDatum.getMonth()) {
if(startTag<=zielTag) startDatum.setDate(startTag);
else {
monate--;
tage=restTage+1;
}
}
else {
startDatum.setMonth(startDatum.getMonth()+1);
if(startTag>=zielTag) tage=restTage+1;
else {
monate++;
startDatum.setDate(startTag);
}
}
zielDatum.setDate(zielTag);

// Tage
restTage=Math.floor((zielDatum-startDatum)/(24*60*60*1000));
startDatum.setTime(startDatum.getTime()+restTage*24*60*60*1000);
tage+=restTage;

// Stunden
stunden=Math.floor((zielDatum-startDatum)/(60*60*1000));
startDatum.setTime(startDatum.getTime()+stunden*60*60*1000);

// Minuten
minuten=Math.floor((zielDatum-startDatum)/(60*1000));
startDatum.setTime(startDatum.getTime()+minuten*60*1000);

// Sekunden
sekunden=Math.floor((zielDatum-startDatum)/1000);

// Anzeige formatieren
(jahre!=1)?jahre=jahre+" Jahre, ":jahre=jahre+" Jahr, ";
(monate!=1)?monate=monate+" Monate, ":monate=monate+" Monat, ";
(tage!=1)?tage=tage+" Tage, ":tage=tage+" Tag, ";
(stunden!=1)?stunden=stunden+" Stunden, ":stunden=stunden+" Stunde, ";
(minuten!=1)?minuten=minuten+" Minuten und ":minuten=minuten+" Minute und ";
if(sekunden<10) sekunden="0"+sekunden;
(sekunden!=1)?sekunden=sekunden+" Sekunden":sekunden=sekunden+" Sekunde";

document.countdownform.countdowninput.value=jahre+monate+tage+stunden+minuten+sekunden;

setTimeout('countdown()',200);
}
// Anderenfalls alles auf Null setzen
else document.countdownform.countdowninput.value="0 Jahre, 0 Monate, 0 Tage, 0 Stunden, 0 Minuten und 00 Sekunden";
}
</script>

<html>
<head><title>Übersicht</title></head>
<body>
<b> Hier sehen sie Ihre laufenden Auftraege: </b><br><br>
<?php
$db_server='localhost';
$db_user='root';
$db_passwort='';
$db_name='translations';

$verbindung=mysql_connect($db_server,$db_user,$db_passwort);

if(!$verbindung)
die("Der Server kann nicht erreicht werden. Bite versuchen sie es später wieder.");

if(!mysql_select_db($db_name,$verbindung))
die("Die Datenbank kann nicht angesprochen werden.");



if(!session_id()) session_start();
if (isset($_SESSION['md5_pass'])) pama_authenticate($_SESSION['username'],$_SESSION['md5_pass'],"members",0);
else
{
js_msg("Error, please re-login.");
include ("../get_details.php");
js_goto(INITIAL_PAGE);
exit;
}


$query="SELECT aid, auftraege.text_alt, sekunden, sprache FROM texts, auftraege WHERE auftraege.id=(SELECT id FROM pama_members WHERE their_username='".$_SESSION['username']."') AND texts.text_alt=auftraege.text_alt AND auftraege.alt='0' ";
$result=mysql_query($query);




if(!$result)
echo mysql_error();

$number=mysql_numrows($result);
$i=1;

function smarty_modifier_count_words($string)
{
$split_array = preg_split('/\s+/',$string);
$word_count = preg_grep('/[a-zA-Z0-9\\x80-\\xff]/', $split_array);

return count($word_count);
}

while($i < ($number + 1))
{
$row = mysql_fetch_array($result);
$aid = $row["aid"];
$txt = $row["text_alt"];
$zeit = $row["sekunden"];
$sprache = $row["sprache"];

$tmp="SELECT preis FROM preis WHERE sprache='".$sprache."' AND id=(SELECT id FROM pama_members WHERE their_username='".$_SESSION['username']."')";
$preis1=mysql_query($tmp);
$ppreis=mysql_fetch_array($preis1);
$preis=$ppreis["preis"];

$anz=smarty_modifier_count_words($txt);
$gpreis1=(bcmul($anz,$preis))/100;
$ant=0.1;
$eg=bcmul($gpreis1,$ant,2);
$gpreis=bcsub($gpreis1,$eg,2);

$jzeit=time();
$restzeit=bcsub($zeit,$jzeit);
$stdfak=3600;
$minfak=60;
$rstd=floor(bcdiv($restzeit,$stdfak,2);
$zerg=bcmul($rstd,$stdfak);
$zerg2=bcsub($restzeit,$zerg);
$rmin=floor(bcdiv($zerg2,$minfak);
$zerg3=bcmul($rmin,$minfak);
$rsek=bcsub($rmin,$zerg3);

if($restzeit > 0)
print "<br><b>$i:<br>$sprache </b><br>$txt<br> $gpreis Euro <br> $rstd Stunden $rmin Minuten $rsek Sekunden <br><br>"; //an dieser Stelle jscript einbinden
//hier muss wohl das script eingebunden werden...
else
{
$anteil=3;
$strafe=bcdiv($gpreis,$anteil,2);
if ($strafe > 20)
$strafe=20;
print "<br><b>$i:<br>$sprache </b><br>$txt<br><br><b>Ihre Zeit ist bereits abgelaufen. Ihnen wird ein Betrag in Höhe von ".$strafe." Euro von ihrem Konto abgezogen.</b><br><br>";
$query2="SELECT stand FROM konto WHERE id=(SELECT id FROM pama_members WHERE their_username='".$_SESSION['username']."')";
$result2=mysql_query($query2);
$sstand=mysql_fetch_array($result2);
$stand=$sstand["stand"];
$stand_neu1=bcsub($stand,$strafe,2);
$array=array("," => ".");
$stand_neu=strtr($stand_neu1,$array);
$query3="UPDATE konto SET stand='".$stand_neu."' WHERE id=(SELECT id FROM pama_members WHERE their_username='".$_SESSION['username']."')";
$result3=mysql_query($query3);
$query4="UPDATE auftraege SET alt='2' WHERE aid='".$aid."' ";
$result4=mysql_query($query4);
}
$i++;
}
mysql_free_result($result);
?>
<b><br>Fügen sie hier eine fertige Übersetzung ein: <br></b>
<form action="./content/phps/meineauftraege1.php" method="post" name="UE">
<input type="hidden" name="save" value="">
<textarea name="text" cols="100" rows="10" wrap="soft">
</textarea><br>
<br><b>Geben sie hier die Nummer des fertigzustellenden Auftrages an:</b><br><br>
<input type="text" name="aufid"><br>
<br><input type="button" value="Auftrag beenden" name="b1"
class="button" onclick="javascript:validateForm();">
</form>
</body>
</html>



Soweit der Quelltext, ja, so ähnlich wie bei ebay...

Danke für jede Hilfestellung,

bis denn,

Dennis
 
Zurück