Php + Js

Das nützt aber wenig... man muss schon wissen, was PHP als Javascript-Code an den Browser sendet, um den Fehler zu finden...daher wird der geparste Code benötigt:(
 
Das ist der Quelltext wenn es im Browser ausgeführt wird...

Code:
<link rel=stylesheet href='style.css' type=text/css><body  bgcolor='black'><table align="center"><tr><td>Guthaben: 106397989 €</td><td>Punkte: 8276</td></tr></table>
<br>
<table bgcolor='333333' width='413' align='center' border='0' width='100%' height='19'><tr><td><b><p align='center'>Momentane Bauaufträge:</p></b></tr></td></table><table bgcolor='515151' width='413' align='center' border='0'><tr><td><form name=form_272082><input type=hidden name=field value=2799></form><SCRIPT type="text/javascript">
        var field = window.document.form_272082.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 = location.href="fertig.php?action=fertig&b_id=272082";
                                }
          Targetbox.innerHTML=OutputString; // Ausgabe des Strings in der Betreffenden Zelle
      window.setTimeout("CountDown('" + myid + "', '" + seconds + "')", 1000);
    }
</script>

<p align="center" >Es werden 1 <b>MLRS</b> gebaut.<br>
Dies dauert vorrausichtlich noch <span id='id_272082'><script type="text/javascript">CountDown("id_272082", field);</script></span></p>
272082<form name=form_236764><input type=hidden name=field value=3491></form><SCRIPT type="text/javascript">
        var field = window.document.form_236764.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 = location.href="fertig.php?action=fertig&b_id=236764";
                                }
          Targetbox.innerHTML=OutputString; // Ausgabe des Strings in der Betreffenden Zelle
      window.setTimeout("CountDown('" + myid + "', '" + seconds + "')", 1000);
    }
</script>

<p align="center" >Es werden 1 <b>MLRS</b> gebaut.<br>
Dies dauert vorrausichtlich noch <span id='id_236764'>
<script type="text/javascript">CountDown("id_236764", field);</script></span></p>

<form name=form_494461><input type=hidden name=field value=3667></form><SCRIPT type="text/javascript">
        var field = window.document.form_494461.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 = location.href="fertig.php?action=fertig&bau_m=494461";
                                }
          Targetbox.innerHTML=OutputString; // Ausgabe des Strings in der Betreffenden Zelle
      window.setTimeout("CountDown('" + myid + "', '" + seconds + "')", 1000);
    }
</script>

<p align="center" >Es werden 2 <b>Banken</b> gebaut.<br>
Dies dauert vorrausichtlich noch <span id='id_494461'><script type="text/javascript">CountDown("id_494461", field);</script></span></p>


</table></tr></td>
 
Jo...alles klar... das kann so nicht gehen.
bei jedem Durchlauf schreibst du eine neue, identische Funktion "CountDown()" in die Seite.
Beim Aufruf der Funktion wird dann irgendeine genommen...das geht solange gut, bis die Zeit abgelaufen ist,
beim Ablauf wird dich nur einer der Aufrufe mit der richtigen b_id weiterleiten.... ums kurz zu machen, du kannst die
Funktion auch 100 mal in die Seite schreiben, benutzt wird nur eine davon... egal woher du sie aufrufst.

Probiers mal so:
(habs etwas umgebaut, die Zeiten,welche vorher in den hidden-Fields gespeichert waren,
sind nun im JS-Array 'Times[]' gespeichert, und das Tabellenmassaker ist auch behoben :) )
PHP:
<html>
<head>
<title>Bauvorhaben</title>
<SCRIPT type="text/javascript">
<!--
var TargetTime = new Date();
var TimeBeginn = TargetTime.getTime();
var Times=new Array();
function CountDown(myid)
{
  var CurrentDate = new Date();
  var CurrentTime = CurrentDate.getTime();
  var TimeEnd = TimeBeginn + (Times[myid]*1000);
  TargetTime.setTime(TimeEnd);
  var Targetbox=document.getElementById('id_'+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
              location.href='fertig.php?action=fertig&b_id='+myid;
              }
   else
   	{
   	Targetbox.innerHTML=OutputString; // Ausgabe des Strings in der Betreffenden Zelle
	window.setTimeout("CountDown('" + myid + "')", 1000);
	}
}
//-->
</script>
</title>
</head>
<body  bgcolor='black'>
<table bgcolor='333333' width='413' align='center' border='0' >
  <tr>
    <td>
      <p align='center'>
         Momentane Bauaufträge:
      </p>
    </td>
  </tr>
</table>
<table bgcolor='515151' width='413' align='center' border='0'>
<?php
################ Bauzeitausgabe Gebäude ############################
$query = mysql_query("SELECT * FROM in_bau WHERE user='".$_SESSION["user"]."'");
if(mysql_num_rows($query)>0)
{
while($row = mysql_fetch_array($query))
  {
  $data 	= $row["zeit"];
  $menge	= $row["menge"];
  $name 	= $row["name"];
  $b_id 	= $row["bau_id"];
  $data 	= time() - $data;
  $data2 	= $row["bauzeit"];
  $data 	= $data2-$data;
  echo'
    <tr>
      <td>
       <p align="center">
         Es werden '.$menge.' <b>'.$name.'</b> gebaut.<br>
         Dies dauert vorrausichtlich noch
         <span id="id_'.$b_id.'">&nbsp;</span>
         <script type="text/javascript">Times["'.$b_id.'"]='.$data.';CountDown("'.$b_id.'")</script>
       </p>
     </td>
   </tr>';
  }
}
else
{
  echo'
    <tr>
      <td>
       <p align="center">
         <b>keine Bauauftr&auml;ge vorhanden</b>
       </p>
     </td>
   </tr>';
}
?>
</table>
</body>
</html>
Ich hoff, es haut hin... ich war mir nicht ganz schlüssig, was in 'zeit' und 'bauzeit' gespeichert ist.

P.S.: Nen Haufen Code hier :-)
 
Zuletzt bearbeitet:
Zurück