这是对此问题的后续问题:How to access a variable from one PHP page to another, without a form, link, or button?
之情况: -
如第一个问题所述,在名为form
的文件中定义了question_edit_form.php
。此表单的action
设置为名为question.php
的文件。 因此,表单中的所有数据显然都会传递给question.php。
但我在表单中添加了select
元素,我希望将此元素的数据传递到另一个名为renderer.php
的文件。 这文件负责在测验中向学生显示问题,以便他们可以写出答案。
第一个提议的解决方案 - 会话变量: -
所以第一个解决方案是使用会话变量。它在一个场景中起作用,但在另一个场景中失败,“实用”。
事情是教师使用question_edit_form
编辑一个问题 - 即一个会话。学生在另一个课程中回答这个问题。 很明显,当向用户显示问题时,会话变量不可用于renderer.php (因为它是另一个会话)。
第二个提议的解决方案 - COOKIES: -
另一种解决方案是使用cookies。但是reading up on cookies here tells me
Cookie是服务器嵌入用户计算机的小文件。每次同一台计算机通过浏览器请求页面时,它也会发送cookie。
因此服务器会将变量放在用户的计算机上。但是学生将在同一个会话中尝试许多问题,并且每个问题的变量值都不同。
问题: -
在此场景中可以使用cookies
吗?或者是否有另一种解决方案将变量传递给文件renderer.php?
答案 0 :(得分:0)
您可以使用Cookie来满足此要求 - 可以为每个问题设置不同的Cookie,也可以将所有问题/答案存储为单个Cookie的值。 不知道完整请求只是一个例子:如果测验是一个多项选择,其中作为答案存储的值只是一个数字或字母,cookie值可以 从1 = a开始(对于问题1,回答a),1 = a& 2 = c,依此类推。此外,它可以解析cookie值以检查是否已经给出了答案,以防它已被提供。 允许更改第一个答案,并相应地调整cookie值。 为简单起见,仅举例说明每个问题只允许回答一次。
首先,检查cookie是否已存在。例如。使用名为_quizCookie的cookie:
function checkQuizCookie() {
var i,x,y,ARRcookies = document.cookie.split(";");
for (i = 0; i < ARRcookies.length; i++) {
x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
x = x.replace(/^\s+|\s+$/g, "");
if (x.indexOf("_quizCookie") != -1) {
return false;
}
}
}
加载页面时调用prepareQuizCookie()
:
function prepareQuizCookie() {
if (false != checkQuizCookie()) {
setQuizCookie();
}
}
因此,如果_quizCookie已经存在,它将不会被覆盖;如果它不存在,它将被创建:
function setQuizCookie() {
var now = new Date(),
expireDate = new Date();
expireDate.setTime(now.getTime() + (10 * 365 * 24 * 60 * 60 * 1000));
document.cookie = "_quizCookie=start" + "; expires=" + expireDate.toUTCString() + "; path=/";
}
当答案a回答问题1时,可以调用函数来调整cookie的值 检索实际的cookie值并为当前答案附加一个键/值对,用&#34;&amp;&#34;:
分隔function changeQuizCookie(answer) {
var now = new Date(),
expireDate = new Date(),
quizCookieVal = getQuizCookieValue(),
newQuizCookieVal = quizCookieVal + "&" + answer;
expireDate.setTime(now.getTime() + (10 * 365 * 24 * 60 * 60 * 1000));
document.cookie = "_quizCookie=" + newQuizCookieVal + "; expires=" + expireDate.toUTCString() + "; path=/";
}
因此,对于问题1将以a回答的示例,请致电changeQuizCookie("1=a")
。那么cookie值就可以了
是start&1=a
。我只是设置&#34;开始&#34;作为初始cookie值,不应该是必要的。我还没有检查建议的方法是否有效(但是
认为它应该),但是当它初始设置时,它可能只设置没有任何价值的cookie,当它的价值时
已更改,以检查quizCookieVal
是否为空;如果它是空的,newQuizCookieVal = answer
;如果不,
newQuizCookieVal = quizCookieVal + "&" + answer
。
获取当前的cookie值:
function getQuizCookieValue() {
var name = "_quizCookie=",
ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) != -1) {
return c.substring(name.length, c.length);
}
}
return "";
}
这就是如何使用cookie处理所需功能的例子,因为您询问是否可以使用cookie来提及变量 每个问题都会改变。因此,只需检索当前cookie值并通过保留前一个值来覆盖它,这不应该是一个问题 cookie值,只是附加当前的问题/答案键/值。其他方法是为每个问题/答案设置一个cookie,但只是 想给出一个单cookie方法的例子。