从SQL数据库中选择随机行并存储以便在另一个页面上重复使用

时间:2017-03-15 22:46:37

标签: php mysql random

我的问题是,在question.php中我希望从我的数据库中选择5个随机行(问题),然后根据需要用相关答案回答这些问题。然后,我希望在result.php上使用相同的5个随机选择,以便给出正确/不正确的答案反馈。我的问题是,如果我使用相同的rand查询查询数据库,我将得到5个不同的随机问题。我在question.php中的查询是:

<?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']}"; 

2 个答案:

答案 0 :(得分:0)

要防止Cross-site-request-forgery(即:依赖用户发回他提供的正确问题ID),我建议(正如您在问题中正确说明的那样)跟踪向用户提出的问题在$_SESSION或数据库中(如果您已识别用户,即他已登录)。

为此,您首先选择随机问题并将其ID保存在$_SESSION

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

当用户回答问题时,您可以通过阅读$_SESSION["questionID_0"]$_SESSION["questionID_4"]来检索原始ID。

为此,在两个脚本中,您需要在最开始时调用session_start()

AFAIK,session-serializer也能够序列化数组,所以你也应该能够做到这样的事情:

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

并通过

访问它
$_SESSION["questionIDs"][0] - $_SESSION["questionIDs"][4]

这将为您提供之前向用户提供的ID。

虽然我更喜欢数据库存储事物:保存数据库中的数据,以及在使用php_session_id()初始化会话后调用session_start()可以检索的会话ID用户ID,如果你知道的话。

答案 1 :(得分:0)

使用$ _SESSION存储您的ID。

Session请求期间会保留变量。

调用session_start();在您的脚本开头,然后您可以保存ID,如$ _SESSION [&#39; ID&#39;] = ...

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