2012-02-24 154 views
1

我在做一个在线考试工具。我想尽量减少数据库请求的数量。所以我一次性请求测试中的所有问题。在此之后,我必须记住用户尝试的所有问题及其答案。我的计划是在回答类似这样的将javascript变量分配给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 ;?> 
}); 

保存在一个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变量在这里。请帮帮我。我也明白,如果不是'保存在session变量的任何其他更好的解决方案张贴

+1

可能重复[在PHP中使用JavaScript设置会话变量](http://stackoverflow.com/questions/3590293/set-session-variable-using-javascript-in -php) – 2012-02-24 14:05:30

+0

这根本不起作用。您需要[AJAX请求]。(http://stackoverflow.com/search?q=%5Bjavascript%5D+php+session+variable+ajax&submit=search) – 2012-02-24 14:06:19

+0

作为说明,PHP在服务器端执行。如果你将它包含在你的JavaScript中,它将在JavaScript加载/运行之前执行,并且不起作用。 – 2012-02-24 14:07:29

回答

1

1 )你的问题在于click块的最后一行。我不完全确定你要做什么,但是你有<?php ; ?>,分号导致你的脚本无法解析。第一部分

<?php $_SESSION['ques['id']']= ?>

不会做任何事情无论是。它看起来像你试图分配一个Javascript值$(this).val()全球PHP SESSION,你不能这样做。您需要将AJAX调用回您的服务器以更新您的会话变量。 $_SESSION["$ques[id]"]

希望这有助于:

2)嵌套数组时,像这样使用双引号。

0

我想我们从来没有得到任何客户端脚本变量服务器端脚本语言在一些隐藏的表单变量

方案存储,然后在提交表单时,你可以在GET GET或POST变量

感谢

+0

我不能这样做,就好像用户刷新页面所有数据都丢失一样。 – 2012-02-24 14:15:54

+0

我们可以做一个ajax调用,将javascript值传递给某个php页面,当时您可以将该数据存储在会话 – 2012-02-24 14:21:04

0

代码似乎不会如你预期,即使你清除errors.So使用AJAX jQuery中工作

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显示/隐藏问题。

如果您正在为每个问题刷新页面,那么只要您不尝试在JS文件中使用PHP代码,就可以在每次新页面加载时将答案存储在PHP中。

+0

中,我的观点并不是在页面刷新时丢失数据,这可能发生在各种用户。 – 2012-02-24 15:28:37

0

PHP的问题是它在JavaScript之前被执行,所以你不能只是添加PHP,并尝试将一个JavaScript变量分配到PHP变量。

您将不得不使用ajax来解决您的问题。 做一个ajax请求并通过GET发送所有的值。在此之后,您可以在您执行ajax请求的php文件中使用所有变量。 迭代槽所有变量,并将它们插入会话