我正在做一个在线考试工具。我想最小化数据库请求的数量。所以我一口气要求测试中的所有问题。在此之后,我必须记住用户尝试的所有问题及其答案。我的计划是将答案保存在像这样的
这样的php会话变量中$('input[type=radio]').click(function()
{
var id = ($(this).parent().attr('id'));
id = id.slice(4);
$('#nav'+id).css('color','red');
<?php $_SESSION['ques['id']']= ?> $(this).val() <?php ;?>
});
在上面的代码中,以下几行是为了改变未解决问题的颜色。
var id = ($(this).parent().attr('id'));
id = id.slice(4);
$('#nav'+id).css('color','red');
此处id是问题的ID。问题是我收到以下错误
Parse error: syntax error, unexpected ';' in /var/www/sites/onlinetest/test.php on line #x
此外,我非常确定以下内容是错误的
$_SESSION['ques['id']']
因为id是这里的javascript变量。请帮我。此外,我感谢任何其他更好的解决方案,而不是存储在会话变量&#39;已发布
答案 0 :(得分:1)
1)你的问题出在click
块的最后一行。我不完全确定你要做什么,但你有<?php ; ?>
并且分号导致你的脚本无法解析。第一部分
<?php $_SESSION['ques['id']']= ?>
也没有做任何事情。看起来您正在尝试将Javascript值$(this).val()
分配给PHP SESSION
全局,这是您无法做到的。您需要向服务器发出AJAX回调以更新会话变量。
2)在嵌套数组时使用双引号:
$_SESSION["$ques[id]"]
希望这有帮助。
答案 1 :(得分:1)
只需将答案存储在JS中,并在最后一个问题得到解答时将其发送到服务器。
这是存储到数组的一个非常基本的例子:
var answers=[];
$('input[type=radio]').click(function()
{
var id = ($(this).parent().attr('id'));
id = id.slice(4);
$('#nav'+id).css('color','red');
answers.push($(this).val());
});
发送服务器端:
$.ajax({
type: 'POST',
data: {answers : answers},
url: '/path/myfile.php',
success: function(data) {},
error: function() {}
});
在PHP中捕获:
if (isset($_POST['answers'])) {
$answers = $_POST['answers'];
}else{
die('error');
}
这是我的方式,只需用javascript显示/隐藏问题。
如果你正在刷新每个问题的页面,你可以在每个新的页面加载中用PHP存储答案,只要你不试图在你的JS文件中使用PHP代码就应该非常直接。
答案 2 :(得分:0)
我认为我们永远不会将任何客户端脚本变量提供给服务器端脚本语言
解决方案存储在一些隐藏的表单变量中,然后在表单提交时可以获得GET或POST变量
由于
答案 3 :(得分:0)
即使你清除错误,代码似乎也无法按预期工作。所以在jquery中使用ajax
答案 4 :(得分:0)
PHP的问题是它在javascript之前执行,所以你不能只是添加php并尝试将一个javascript变量分配到php varivable。
您必须使用ajax来解决您的问题。 执行ajax请求并通过GET发送所有值。在此之后,您可以使用您执行ajax请求的php文件中的所有变量。 迭代所有变量并将它们插入Session