PHP会话变量没有解析,但ISSET表示它正在运行&在0

时间:2015-12-12 15:30:27

标签: javascript php

好的,所以我有一个计数器,它一次只能计数一秒。这个第二个计数器我希望它是我的会话变量。这个坏主意吗?此外,当我在第二页上执行isset时,它在我的第二页上显示"您的会话正在运行0"。我确保在我的页面开始时我的php会话周围没有额外的白色位置,但我不认为这是问题所在。我也试过在我的countUP函数上应用清除间隔,但它不起作用?我非常感谢任何帮助。

第一页.php

<?php session_start();
if(!isset($_SESSION["counter"])){   //checkingto see if a variable called my score exist 
$_SESSION["counter"]=0;     //if not, initates this variable with 100
  }
   ?>

第一页_javascript

<script type="text/javascript">   
var counter=0; //initiates score to 100
var timer_container = document.getElementById("timer_container");  //get div that wil display the score
timer_container.innerHTML="Time =  " + counter; //popo

var timer;
 function countUP() {
 counter = counter +1;//increment the counter by 1
 //display the new value in the div
 document.getElementById("timer_container").innerHTML = counter;
 }   </script>   

使page2.php

 <?php session_start();
  if(isset($_SESSION['counter'])){
  echo "Your session is running ".$_SESSION['counter'];
   }
   else { echo "Session not running";}
   ?>

javascript第2页

<script type="text/javascript">  
var counter=<?php echo $_GET['counter'];?>; //initiates score to 100
var timer_container =document.getElementById("timer_container"); //get div that will display the score
timer_container.innerHTML="Time="+counter;

//var timer;
function countUP() {
 counter = counter+1;   //increment the counter by 1
                    //display the new value in the div
 document.getElementById("timer_container").innerHTML = counter;
 }      </script>

我之前在另一场比赛中使用了它,它完美无缺。感谢

1 个答案:

答案 0 :(得分:0)

没有看到你的html,但你可能会遗漏一些东西要启动并运行计时器功能 - 这可能会丢失:

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

此外,我不太清楚你是如何提交页面的,但我看不到任何将计时器的值传递给会话变量的内容。如果您使用提交按钮在页面上放置一个表单,那么您可以获取隐藏输入的值,其值使用javascript设置。如果您需要,当计数器达到某个数字时,您可以在javascript中使用submit();自动提交页面:

page1.html(可以称为page1,php,但第1页中没有php,因此实际上没有必要)

 <!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>   

您没有在第1页上引用$_SESSION["counter"],而您在JavaScript中初始化为0而不是100。

在您的第2页脚本page2.php中,您可以使用此功能 - 如果只需要更改部分内容但是计时器需要继续或在提交。

<?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>

在您的page2.php JavaScript中,您需要clearInterval()并重新启动它。 http://www.w3schools.com/jsref/met_win_clearinterval.asp

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

您可能不需要使用会话变量,因为您正在使用隐藏输入,因此您可以使用:

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

您还可以向其添加1,以便大致考虑提交延迟的时间

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

您可以坚持使用GET,但我更喜欢POST

这有关隐藏输入的更多信息: Get and echo inputs from textarea repeatedly

以及有关计时器脚本的更多信息:  http://www.w3schools.com/js/tryit.asp?filename=tryjs_timing_clock