【问题标题】:How do I echo out a php variable using javascript? [duplicate]如何使用 javascript 回显 php 变量? [复制]
【发布时间】:2011-12-04 08:49:35
【问题描述】:

可能重复:
Access PHP variable in JavaScript

我目前正在为测验制作倒数计时器。但是,管理员可以在不同的时间间隔设置测验,例如 15、30、45、60 分钟。我将其用作 php 变量,而倒计时我使用的是 JavaScript。我现在面临的问题是我不知道如何在使用 JavaScript 时回显 php 变量。因此,一旦管理员设置 15 分钟并且学生点击测验,15 分钟计时器将开始倒计时,当它达到 0 时,它会显示“时间到了!测验结束。答案已成功提交。”

请帮忙! ):

【问题讨论】:

  • 使用这种方法容易被利用。如果服务器端只设置最大时间,但不执行计数,用户可以使用 javascript 做任何事情:关闭它,或者更改源并创建一个假的测验版本,他可以控制时间(和也许其他变量)随意。
  • 反对票是怎么回事?我认为这是一个绝对有效的问题。
  • @nico:人们看不到初学者发布的诚实问题是一个有效的问题,因此他们投了反对票,因为它在术语上有一些错误或不准确之处。 :(

标签: php javascript


【解决方案1】:

您始终需要记住的是,客户端上发生的任何事情都是可以利用的。如果您依靠 Javascript 来更新计时器,那么您也对用户非常信任,因为他们不会乱用它。

最好的办法是用 JS 处理计时器以实现图形目的,并让服务器检查实际时间。

有几种方法可以做到这一点,我想到的一种方法是:

  1. 学生开始测验,您将使用echo语句动态生成JS代码,或者直接例如:

    echo "<script type='text/javascript'>var maxtime=".$maxtime."; ... </script>";

    或者(更好)正如另一个答案所说,生成一个隐藏字段,然后您可以从 JS 中读取该字段。

  2. PHP 代码还将最大完成时间(即当前时间 + 15 分钟或任何分配的时间)存储在会话变量中。

  3. 你将有一个 JS 计数器下降到 0。当它达到 0 时它会自动提交页面,或者要求用户这样做等等。

  4. 在提交答案时(因为时间用完或者因为用户及时完成并自己提交了答案),PHP 将检查当前时间是否大于会话变量中存储的最大时间.
    这将允许您检查用户是否作弊。

这不是唯一的选择,例如,您可以将开始时间(或最大完成时间)保存在数据库中,这实际上取决于您对页面进行编码的方式。

【讨论】:

  • 定时器:
【解决方案2】:

您只需在隐藏的输入或 div 中回显计时器,例如:

<div id="time">timer : <?php echo $time; ?></div>

然后使用例如 jquery 获取此值:

var time = $.('#time').html(); //extract the timer: string path from this one

你可以随意使用这个变量。

【讨论】:

  • 为什么要搞乱隐藏的 div 而不是直接使用 var time = &lt;?php echo $time; ?&gt;; 将值传递给变量?
  • 提到 jQuery 只会让事情变得更加复杂......
  • @Juhana:因为这允许您将 JS 保存在 .js 文件中,与 PHP 分开。好多了。
  • 在HTML文件中初始化JS变量没有问题。该解决方案的作用是使用隐藏的 HTML 元素初始化变量,这既丑陋又不必要地复杂。
  • @Bryan 欢迎您使用 document.getElementByid ...
猜你喜欢
  • 1970-01-01
  • 2013-02-04
  • 2018-12-04
  • 2011-01-01
  • 1970-01-01
  • 2023-03-30
  • 2011-08-19
  • 1970-01-01
  • 2015-07-28
相关资源
最近更新 更多