Skip to content Skip to sidebar Skip to footer

PHP Session Variable Not Parsing But ISSET Says It Is Running & At 0

Ok, so I have a counter which simply counts up a second at a time.This second counter I want it to be my session variable.Is this a bad idea? Also when I do a isset on my second pa

Solution 1:

Haven't seen your html but you might be missing something to start and run the timer function - this might be missing:

     <body onload="intTimer = setInterval(function(){ countUP() }, 1000);">

Also I am not quite clear how you are submitting the page but I can't see anything that passes the value of the timer to the session variable. If you put a form on your page with a submit button then you could pick up the value of a hidden input with its value being set with javascript. You could submit the page automatically using submit(); in your javascript when the counter reaches a certain number if you want that:

page1.html (could be called page1,php but there is no php in page 1 so that is not actually necessary)

 <!DOCTYPE html>
 <html>
 <head>
  <title>Page 1</title>

   <script language="javascript">
   var intTimer = '';   
   var counter = 0;

   function countUP(){
   counter++; //increment the counter by 1

   //display the new value in the div
   document.getElementById("timer_container").innerHTML = "Session Time Counter: " + counter;
   document.getElementById("tim_val").value = counter;
   }
    </script>   
 </head>
       <body onload="intTimer = setInterval(function(){ countUP() }, 1000);">
              <form name="form" id="form" action="page2.php" method="post">
                  <input type="hidden" id="tim_val" name="tim_val" value="" />
                  <input type="submit" name="submit"/>
              </form>
           <div id="timer_container">Session Time Counter: 0</div>
        </body>
 </html>   

You aren't referencing $_SESSION["counter"] on page 1 and you are initialising to 0 not 100 in your JavaScript.

In your page 2 script page2.php you would have this - you could also submit this page to itself if only a part of the content is to be changed but the timer needs to continue or be logged at the point of submission.

<?php session_start();?>
<!DOCTYPE html>
<html>
<head>
<title>Page 2</title>
<?php
if(!isset($_SESSION["counter"])){
//if not, initiate this variable with 100            
$_SESSION["counter"] = 100; 
}else{
// give it the posted value
$_SESSION["counter"] = (int) $_POST['tim_val']; 
}  
?>
<script language="javascript">
clearInterval(intTimer);
var intTimer = '';  
var counter = <?php echo $_SESSION["counter"]; ?>;
function countUP(){
counter++; //increment the counter by 1
//display the new value in the div
document.getElementById("timer_container").innerHTML = "Session Time Counter: " + counter;
document.getElementById("tim_val").value = counter;
}
</script>   
</head>
    <body onload="intTimer = setInterval(function(){ countUP() }, 1000);">
          <form name="form" id="form" action="page2.php" method="post">
            <input type="hidden" id="tim_val" name="tim_val" value="<?php echo $_SESSION["counter"]; ?>" />
            <input type="submit" name="submit"/>
          </form>
        <div id="timer_container">Session Time Counter: <?php echo $_SESSION["counter"]; ?></div>
    </body>
</html>

And in your page2.php JavaScript you would need to clearInterval() and restart it. http://www.w3schools.com/jsref/met_win_clearinterval.asp

    var counter=<?php echo intval($_SESSION["counter"]);?>; //initiates score to submitted value

You probably won't need to use a session variable as you are using the hidden input, so you could use:

    var counter=<?php echo intval($_POST["counter"]);?>; //initiates score 

You could also add 1 to it to approximately account for the delay submitting it

    var counter = <?php echo $_SESSION["counter"] + 1; ?>;
    var counter=<?php echo intval($_POST["tim_val"] + 1);?>; //initiates score 

You could stick with using GET but I just prefer POST.

This has a bit more about hidden inputs: Get and echo inputs from textarea repeatedly

and a bit more about the timer script: http://www.w3schools.com/js/tryit.asp?filename=tryjs_timing_clock


Post a Comment for "PHP Session Variable Not Parsing But ISSET Says It Is Running & At 0"