2012-02-24 158 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文件中使用所有變量。 迭代槽所有變量,並將它們插入會話