Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP插入的JavaScript值返回错误_Javascript_Php - Fatal编程技术网

使用PHP插入的JavaScript值返回错误

使用PHP插入的JavaScript值返回错误,javascript,php,Javascript,Php,我创建了一个测验计时器,它使用javascript和PHP的组合。PHP通过名为takingTest的URL参数获取测验的结束时间,并将其插入javaScript代码中。然而,这并不适用于所有人。如果我手动插入值,它对每个人都有效。你知道问题出在哪里吗 URL参数 我使用回显URL参数,它显示了正确的结束时间 用PHP回显值 当它中断时,它返回一个负值并提交测验 负值示例 -10h-27m-225 我的代码如下所示: <?php if(($_GET["started"]) ===

我创建了一个测验计时器,它使用javascript和PHP的组合。PHP通过名为
takingTest
的URL参数获取测验的结束时间,并将其插入javaScript代码中。然而,这并不适用于所有人。如果我手动插入值,它对每个人都有效。你知道问题出在哪里吗

URL参数

我使用
回显URL参数,它显示了正确的结束时间

用PHP回显值

当它中断时,它返回一个负值并提交测验

负值示例

-10h-27m-225

我的代码如下所示:

<?php 

if(($_GET["started"]) === "true") {


?>  
<!--/*<!-- Quiz countdown block -->

    <script type="text/javascript" defer>

        $(function () {

// Set the date we're counting down to
var countDownDate = new Date("<?php echo $_GET['takingTest']; ?>").getTime();

// Update the count down every 1 second
var x = setInterval(function() {

  // Get todays date and time
  var now = new Date().getTime();

  // Find the distance between now and the count down date
  var distance = countDownDate - now;

  // Time calculations for days, hours, minutes and seconds
  var days = Math.floor(distance / (1000 * 60 * 60 * 24));
  var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
  var seconds = Math.floor((distance % (1000 * 60)) / 1000);

  // Output the result in an element with id="demo"
  document.getElementById("timer").innerHTML = hours + "h "
  + minutes + "m " + seconds + "s ";

  // If the count down is over, write some text 
  if (distance < 0) {
    clearInterval(x);
     $("#grader").trigger("click");
  }
}, 1000);

 });            


</script>

<?php } ?>

使用标准日期格式<代码>Y-m-d H:i:s

否则,您将依赖浏览器来解析它,它的行为可能与您预期的不一样。例如,月份名称在不同语言中可能不同

此外,您可能希望关闭您在那里的XSS漏洞。
http://example.com/whatever.php?takingTest=“;+警报('xss');+/

格式问题: <> P.>两件事,首先是你的日期格式。很多时候,如果你使用了一种无效的格式,它对大多数人都是有效的。这就意味着绝大多数人的JavaScript都是<代码> D MD YH:I:SO O/COD>。在JavaScript和PHP中要考虑的另一件事情是JS使用0到11个月,而PHP使用1-12。 更好的PHP和时间戳: 第二件事是php生成的日期函数。它比需要的复杂得多。从php生成javascript日期的最佳方法是strotime,不过需要将它乘以1000以将其转换为毫秒。它还非常容易存储在数据库中或任何需要的地方,并且它与时区无关,因为它是ba协调世界时前后

换言之,我要说:

var countDownDate  = new Date(<?= echo strtotime($start_date)*1000; ?>);
var countDownDate=新日期();
在这两个选项之间,你应该能够修复它。我强烈建议你选择后者,因为它永远不会像第一个那样失败


还有一个提示,如果你使用
而不是
,你就不必写echo了。

这可能只是一个时区问题吗?比如用户提供了开始值,但它来自不同的时区?或者可能有人发现你在按url发送测试时间,并且在跟踪你:Dif你提供了前端代码也可以让用户给您时间戳,或者至少在将其推送到服务器之前将其转换为iso日期url@jonathanHeindl我不认为这是一个巨魔的情况,因为我也在本地测试。@Emma,因为它目前是本地时间,可能不会有帮助,因为时区的信息没有在参数中传递(如果它的可变Id为jsut,则将其转换为我发现更容易处理的timestmap)我有这样的日期格式,但仍然有相同的问题。我在寻找解决方案时对其进行了更改。不过,我会将其更改回来,看看会发生什么。更重要的是,我将学习如何关闭XSS漏洞。我会尝试一下。感谢您的PHP提示。
var countDownDate  = new Date(<?= echo strtotime($start_date)*1000; ?>);