Jump to content

Javascript causing infinte loop in table output.


hellonoko

Recommended Posts

I am adding a countdown timer to my todo list that grabs the due date of  a todo item from my DB and then creates a timer that counts down based on the current date.

 

The timer code seems to work fine. However when I add it to my output code for my todo list it causes the list to fall into an infinite loop putting out table rows. After outputting the first todo item and timer correctly.

 

Does anyone have any idea why this is happening?

 

The timer is

include		"timer/timer.php";

on line 131 of the todo code and current commented out.

 

Thanks for your time.

 

Timer Code:

<?php

//$date = $HTTP_GET_VARS[date];

//$hours = $HTTP_GET_VARS[hours];
//$minutes = $HTTP_GET_VARS[minutes];

//get date from DB
include "../dbconnect.php";

//SELECT DATE_FORMAT(myDateField, '%d-%m-%Y') FROM myTable
//gets the idea background color from DB
//$query = "SELECT DATE_FORMAT(duedate, '%d-%m-%Y') FROM ideas WHERE id='18'";
$query = "SELECT duedate FROM ideas WHERE id = '18'"; 
//$row['id']";
$result = mysql_query($query);
$rows = mysql_fetch_array($result);

$duedate = $rows[0];
//echo $duedate;
//echo "<br>";
$due_date = date('F j Y H:i:s',strtotime($duedate));
//echo "<br>";
//echo $due_date;


//2007-12-28 14:59:59
//$due_date = $date." ".$hours.":".$minutes.":00";   

//fake $due_date for testing
$due_date = "January 1 2008 00:00:00";

$bg_color = "#FF0000";
?>

<!--<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>-->

<style style="text/css">

.custom
{
color:#FFFFFF;
font: bold 20px Arial, Helvetica, sans-serif;
background-color:<?php echo $bg_color;?>;
}

.lcdstyle{ /*Example CSS to create LCD countdown look*/
background-color:black;
color:yellow;
font: bold 18px MS Sans Serif;
padding: 3px;
}

.lcdstyle sup{ /*Example CSS to create LCD countdown look*/
font-size: 80%
}

</style>

<script type="text/javascript">

/***********************************************
* Dynamic Countdown script- © Dynamic Drive (http://www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit http://www.dynamicdrive.com/ for this script and 100s more.
***********************************************/

function cdtime(container, targetdate){
if (!document.getElementById || !document.getElementById(container)) return
this.container=document.getElementById(container)
this.currentTime=new Date()
this.targetdate=new Date(targetdate)
this.timesup=false
this.updateTime()
}

cdtime.prototype.updateTime=function(){
var thisobj=this
this.currentTime.setSeconds(this.currentTime.getSeconds()+1)
setTimeout(function(){thisobj.updateTime()}, 1000) //update time every second
}

cdtime.prototype.displaycountdown=function(baseunit, functionref){
this.baseunit=baseunit
this.formatresults=functionref
this.showresults()
}

cdtime.prototype.showresults=function(){
var thisobj=this


var timediff=(this.targetdate-this.currentTime)/1000 //difference btw target date and current date, in seconds
if (timediff<0){ //if time is up
this.timesup=true
this.container.innerHTML=this.formatresults()
return
}
var oneMinute=60 //minute unit in seconds
var oneHour=60*60 //hour unit in seconds
var oneDay=60*60*24 //day unit in seconds
var dayfield=Math.floor(timediff/oneDay)
var hourfield=Math.floor((timediff-dayfield*oneDay)/oneHour)
var minutefield=Math.floor((timediff-dayfield*oneDay-hourfield*oneHour)/oneMinute)
var secondfield=Math.floor((timediff-dayfield*oneDay-hourfield*oneHour-minutefield*oneMinute))
if (this.baseunit=="hours"){ //if base unit is hours, set "hourfield" to be topmost level
hourfield=dayfield*24+hourfield
dayfield="n/a"
}
else if (this.baseunit=="minutes"){ //if base unit is minutes, set "minutefield" to be topmost level
minutefield=dayfield*24*60+hourfield*60+minutefield
dayfield=hourfield="n/a"
}
else if (this.baseunit=="seconds"){ //if base unit is seconds, set "secondfield" to be topmost level
var secondfield=timediff
dayfield=hourfield=minutefield="n/a"
}
this.container.innerHTML=this.formatresults(dayfield, hourfield, minutefield, secondfield)
setTimeout(function(){thisobj.showresults()}, 1000) //update results every second
}

/////CUSTOM FORMAT OUTPUT FUNCTIONS BELOW//////////////////////////////

//Create your own custom format function to pass into cdtime.displaycountdown()
//Use arguments[0] to access "Days" left
//Use arguments[1] to access "Hours" left
//Use arguments[2] to access "Minutes" left
//Use arguments[3] to access "Seconds" left

//The values of these arguments may change depending on the "baseunit" parameter of cdtime.displaycountdown()
//For example, if "baseunit" is set to "hours", arguments[0] becomes meaningless and contains "n/a"
//For example, if "baseunit" is set to "minutes", arguments[0] and arguments[1] become meaningless etc


function formatresults(){
if (this.timesup==false){//if target date/time not yet met
var displaystring="<span class='custom'>"+arguments[0]+" days "+arguments[1]+" hours "+arguments[2]+" minutes "+arguments[3]+" seconds</span>"
}
else{ //else if target date/time met
var displaystring="Future date is here!"
}
return displaystring
}



</script>

<!--<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Count Down!</title>
</head>

<body>-->

<div id="countdowncontainer"></div>
<!-- <div id="countdowncontainer2"></div> -->


<script type="text/javascript">

var futuredate=new cdtime("countdowncontainer", "<?php echo $due_date;?>")
futuredate.displaycountdown("days", formatresults)

<!--

-->

</script>

<!--</body>
</html>-->

 

 

 

TODO code:

<link rel="shortcut icon" href="images/favicon.ico" >

<?php


error_reporting(E_All);

session_start();

session_register('sort');

if ($_session['sort'] == NULL)
{
	$_session['sort'] = $HTTP_GET_VARS[sort];
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Idea Box</title>

<style type="text/css">
<!--
td,th {
font-size: 10px;
font-family: Arial, Helvetica, sans-serif;
color: #FFFFFF;
}
body {
font-size: 10px;
font-family: Arial, Helvetica, sans-serif;
}

a:link {
color: #FFFFFF;
}
a:visited {
color: #FFFFFF;
}
a:hover {
color: #666666;
}
a:active {
color: #FFFFFF;
}

.menu_text {color: #000000}
-->
</style>

</head>

<?php

include 'dbconnect.php';
include 'menu.php';

if ( $_session['sort'] == NULL)
{
	$_session['sort'] = "title_ascending";
}

if ( $_session['sort'] == "title_ascending" )
{
	$query = "SELECT * FROM ideas ORDER BY rank ASC";
}
else if ( $_session['sort'] = "title_descending")
{
	$query = "SELECT * FROM ideas ORDER BY rank DESC";
}

//echo $_session['sort'];

$result = mysql_query($query);
$rows = mysql_num_rows($result);

echo	"<table width='100%' border='0' cellspacing='1'>";

for ($i=0; $i <$rows; $i++)
{
	$row = mysql_fetch_array($result);

	$num_rows = mysql_num_rows($result);

	echo	"<tr>";

	/// changes the state of viewing childen IF the idea has children

	if ( $row[haschildren] == TRUE)
	{
		if ( $row[state] == FALSE)
		{
			echo		"<form action='state.php' method='get'>";
			echo			"<input name='id' type='hidden' value=".$row[id]." />";
			echo			"<input name='state' type='hidden' value='open' />";
			echo			"<td width='16' align='center' valign='middle' bgcolor='#ffffff'><input type='image' src='images/right.png' alt='Open'></td>";
			echo		"</form";
		}
		if ( $row[state] == TRUE)
		{
			echo		"<form action='state.php' method='get'>";
			echo			"<input name='id' type='hidden' value=".$row[id]." />";
			echo			"<input name='state' type='hidden' value='close' />";
			echo			"<td width='16' align='middle' valign='middle' bgcolor='#ffffff'><input type='image' src='images/down.png' alt='Close'></td>";
			echo		"</form";
		}

	}

	if ( $row[haschildren] == FALSE)
	{
		echo		"<td width='16' valign='top' bgcolor='#ffffff'></td>";
	}

	// add sub idea button

	echo		"<form action='add_child.php' method='get'>";
	echo			"<input name='id' type='hidden' value=".$row[id]." />";
	echo			"<td width='16' align='center' valign='middle' bgcolor='#ffffff'><input type='image' src='images/add.png' alt='Add Child'></td>";
	echo		"</form";

	//echos the title and content of the idea

	echo		"<td width='180' valign='top' bgcolor='#666666'>".$row['title']."</td>";
    	echo		"<td valign='top' bgcolor='#666666'>";
	echo		$row['content'];
	if	( $row[hasduedate] == "true")
	{
	//	include		"timer/timer.php";
		echo		"</td>";
	}
	else
	{
		echo		"</td>";
	}

	//echo "</td>";

	// echos the UP and DOWN rank buttons and form
	if ( $row[rank] > 1)
	{
		echo		"<form action='idea_rank.php' method='get'>";
		echo			"<input name='id' type='hidden' value=".$row[id]." />";
		echo			"<input name='direction' type='hidden' value='up' />";
		echo			"<td width='16' valign='middle' bgcolor='#666666'><input type='image' src='images/up.png' alt='Up'></td>";
		echo		"</form";

	}

	if ( $row[rank] < $num_rows)
	{
		echo		"<form action='idea_rank.php' method='get'>";
		echo			"<input name='id' type='hidden' value=".$row[id]." />";				
		echo			"<input name='direction' type='hidden' value='down' />";
		echo			"<td width='16' valign='middle' bgcolor='#666666'><input type='image' src='images/down.png' alt='Down'></td>";
		echo		"</form";

	}

	echo		"<form action='edit_idea.php' method='get'>";
	echo			"<input name='id' type='hidden' value=".$row[id]." />";
	echo			"<td width='16' valign='middle' bgcolor='#ffffff'><input type='image' src='images/edit.png' alt='Edit'></td>";
	echo		"</form";

  		echo		"<form action='delete_idea.php' method='get'>";
	echo			"<input name='delete_idea' type='hidden' value=".$row[id]." />";
	echo			"<td width='16' valign='middle' bgcolor='#ffffff'><input type='image' src='images/delete.png' alt='Delete'></td>";
	echo		"</form";


	echo	"</tr>";
	// child query

	$query_children = "SELECT * FROM children";

	$children_result = mysql_query($query_children);
	$children_rows = mysql_num_rows($children_result);

	//this part displays the children of the item IF it is set to OPEN and IF it has any children.

	if ( $row[state] == TRUE )
	{
		for ($c=0; $c < $children_rows; $c++)
			{
				$children_row = mysql_fetch_array($children_result);

				if ( $children_row['childof'] ==  $row['id'] )
				{
					echo "<tr>";
					echo	"<td width='16' valign='top' bgcolor='#ffffff'></td>";
					echo	"<td width='16' valign='top' bgcolor='#ffffff'></td>";
					echo 	"<td width='150' valign='top' bgcolor='#999999'>";
					echo 		$children_row['title'];
					echo 	"</td>";
					echo	"<td bgcolor='#999999'>".$children_row['content']."</td>";

					// links for editing and deleting each child.

					echo		"<form action='edit_child.php' method='get'>";
					echo			"<input name='id' type='hidden' value=".$children_row[id]." />";
					echo			"<td width='16' valign='middle' bgcolor='#ffffff'><input type='image' src='images/edit.png' alt='Edit Child'></td>";
					echo		"</form";

  						echo		"<form action='delete_child.php' method='get'>";
					echo			"<input name='parent_id' type='hidden' value=".$row[id]." />";
					echo			"<input name='delete_child' type='hidden' value=".$children_row[id]." />";
					echo			"<td width='16' valign='middle' bgcolor='#ffffff'><input type='image' src='images/delete.png' alt='Delete Child'</td>";
					echo		"</form";
					echo "</tr>";
				}

			}
	}
//

}

echo	"</table>";
?>

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.