2017-03-15 39 views
0

我的問題是,在question.php我希望從我的數據庫中選擇5個隨機行(問題),然後根據需要回答這些問題與相關答案。然後,我希望在result.php中使用相同的5個隨機選擇,以便給出正確/不正確的答案反饋。我的問題是,如果我使用同一個rand查詢查詢數據庫,我會得到5個不同的隨機問題。查詢我在question.php是:從SQL數據庫中選擇隨機行並存儲在另一頁上重用

<?php 
    $query="SELECT * FROM (SELECT * FROM dspstuff ORDER BY rand() LIMIT 5) T1 ORDER BY id"; 
?> 

我再回應與數據庫中的問題相關聯的相對4個選項:

<?php  


    while($row = mysql_fetch_assoc($result)) {                 
    $options = array($row['option1'], $row['option2'], $row['option3'], $row['answer']);        
    shuffle($options); 


    echo '<p>';                       
    echo $row['id'] . '. '; 
    echo $row['question']; 
    echo '</p>'; 

    foreach($options as $option){?> 
    <p><input type="radio" name="ID<?php echo $row['id']; ?>" value="<?php echo $option; ?>"><?php echo $option; ?></p> 
    <?php } 
     echo '<br>';        
     }       
    ?>          

這一切都與其他地方保存數據庫連接信息工作正常。我需要知道要使用什麼查詢或可能利用會話變量來保存所選的隨機ID。說我說從數據庫中選擇行1,2,3,4,5我需要在results.php中使用這些行,我將如何去實現這一目標?

編輯: 如果$ _SESSION ['ID']是一個具有5個值的數組(ids),那麼用於檢索每個數組條目的select查詢會是什麼? 即。

$query="SELECT * FROM table WHERE id ='{$_SESSION['ID']}"; 
+0

您應該在表單中創建一個或多個隱藏字段,將它們的值作爲隨機選定行的ID。然後檢索他們在result.php – gmc

+1

@gmc這將允許用戶操縱答案。他可以將ID換成別的東西,並回答他已經知道答案的那些問題:https://en.wikipedia.org/wiki/Cross-site_request_forgery – Psi

+0

這是對的。這些應該以某種方式存儲在數據庫 – gmc

回答

0

爲了防止Cross-site-request-forgery(即:依靠用戶發送回他提出正確的問題ID),我建議(你正確的問題說明)跟蹤的呈現給用戶的問題,無論是在$_SESSION或數據庫中(如果您確定了用戶,即他已登錄)。

要做到這一點,首先選擇隨機抽題並保存它們的ID在$_SESSION

$_SESSION["questionID_$rowIndex"] = $row["id"]; 

當用戶回答問題,你可以通過閱讀$_SESSION["questionID_0"]$_SESSION["questionID_4"]找回原來的ID。

爲此,在這兩個腳本中,您需要在最初調用session_start()

據我所知,會話串器還能夠序列化陣列,所以你也應該能夠做這樣的事情:

$_SESSION["questionIDs"] = array(); 
foreach($row in $resultset) //pseudo-foreach here 
    $_SESSION["questionIDs"][] = $row["id"]; 

和訪問它通過

$_SESSION["questionIDs"][0] - $_SESSION["questionIDs"][4] 

這會給你以前提交給用戶的ID。

雖然我寧願數據庫存儲的事:與任何會話ID可以通過調用php_session_id()與初始化會話之後取回session_start()或用戶ID,如果你知道它在數據庫中保存的數據,一起。

0

使用$ _SESSION存儲您的ID。

Session變量在請求期間保留。

Call session_start();在你的腳本的開始,然後你可以保存ID $ _SESSION ['ID'] = ...

$query = sprintf("SELECT * FROM dspstuff WHERE id in (%s)", implode(',', $_SESSION['ID'])); 
+0

請參閱編輯,我已將每個行ID保存到會話變量,但需要知道如何使用查詢檢索它們 – Kieran

+0

以看看我編輯的答案。例如,您可以使用以下SQL語法:...其中id(1,2,3,4,5) – edi

相關問題