gpt4 book ai didi

javascript - PHP session 变量未解析,但 ISSET 表示它正在运行且位于 0

转载 作者:行者123 更新时间:2023-11-28 06:36:28 25 4
gpt4 key购买 nike

好的,所以我有一个计数器,它一次只计算一秒。我希望这第二个计数器成为我的 session 变量。这是一个坏主意吗?另外,当我在第二页上执行 isset 时,它会在第二页上显示“您的 session 正在运行 0”。我已确保页面开头的 php session 周围没有多余的白色区域,但我不认为这就是问题所在。我也尝试过在 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
}
?>

页面 one_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>

我之前在另一个游戏中使用过这个,效果非常好。谢谢

最佳答案

还没有看到你的 html,但你可能缺少一些启动和运行计时器功能的东西 - 这可能会丢失:

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

此外,我不太清楚您如何提交页面,但我看不到任何将计时器的值传递给 session 变量的内容。如果您在页面上放置一个带有提交按钮的表单,那么您可以获取隐藏输入的值,并使用 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

当您使用隐藏输入时,您可能不需要使用 session 变量,因此您可以使用:

    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

关于javascript - PHP session 变量未解析,但 ISSET 表示它正在运行且位于 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34241575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com