Итак, у меня есть счетчик, который просто подсчитывает секунду за раз. Этот второй счетчик я хочу, чтобы это была моя переменная сеанса. Это плохая идея? Также, когда я делаю isset на моей второй странице, он говорит на моей второй странице «Ваша сессия работает 0». Я гарантировал, что в начале моей страницы нет лишних белых мест вокруг моей php-сессии, но я не думаю, что проблема. Я также пробовал применять четкий интервал для моей функции countUP, но он не работает? Я очень благодарен за любую помощь.
страница one.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";} ?>
page2 javascript
<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);">
Также я не совсем понимаю, как вы отправляете страницу, но я не вижу ничего, что передает значение таймера переменной сеанса. Если вы разместите форму на своей странице с помощью кнопки отправки, вы можете получить значение скрытого ввода с его значением, заданным с помощью javascript. Вы можете отправить страницу автоматически, используя submit();
в вашем javascript, когда счетчик достигнет определенного номера, если вы хотите:
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>
Вы не ссылаетесь на $_SESSION["counter"]
на странице 1, и вы инициализируете 0 не 100 в своем JavaScript.
На вашем скрипте page2.php
вашей страницы 2 вы можете это сделать – вы также можете отправить эту страницу себе, если только часть содержимого будет изменена, но таймер должен быть продолжен или зарегистрирован в момент отправки.
<?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>
И в вашем JavaScript page2.php вам необходимо 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
.
Это немного больше о скрытых входах: многократно возвращать и эхо-входы из текстового поля
и немного больше о таймерном скрипте: http://www.w3schools.com/js/tryit.asp?filename=tryjs_timing_clock