我的问题是,在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']}";
答案 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']) );