我有一个表question_bank,表的结构是
question_id | question | a | b | c| d | correct_ans
我可以向用户显示随机问题。但有没有办法选择随机列?我也想改变问题的选择。 我在做什么
{
$query = "SELECT * from question_bank where exam_name='$subject' and exam_class_id='$class_id' order by rand() limit 4";
$result = mysqli_query($connection, $query);
$all = array();
while ($row = mysqli_fetch_assoc($result))
{
$all[] = $row;
}
$_SESSION['result'] = $all;
?>
<form action="result.php" name="form1" method="post" id="quiz">
<?php
echo "<input type='text' name='subject_id' value='$class_id'>";
echo "<input type='text' name='subject_name' value='$subject'>";
foreach ($_SESSION['result'] as $read_all_data)
{
$id=$read_all_data['id'];
echo $read_all_data['question']."</br>";
$random_option=array($read_all_data['a'],$read_all_data['b'],$read_all_data['c'],$read_all_data['d']);
$random_keys=array_rand($random_option,4);
echo "A:<input type ='radio' value ='a' name='$id' >".$random_option[$random_keys[0]]."</br>";
echo "B:<input type ='radio' value ='b' name='$id' >".$random_option[$random_keys[1]]."</br>";
echo "C:<input type ='radio' value ='c' name='$id' >".$random_option[$random_keys[2]]."</br>";
echo "D:<input type ='radio' value ='d' name='$id' >".$random_option[$random_keys[3]]."</br>";
}
?>
<input type='submit' value='submit' name='submit1'> </form>
答案 0 :(得分:1)
我认为在开始之前我们需要重新思考。拿一张纸和一支笔。 想想你想做什么,然后用伪代码写下来。 如果我正确地读你,这似乎是一个问题/答案库。
所以我会这样做。
$query = "SELECT * from question_bank where exam_name='$subject' and exam_class_id='$class_id' order by rand() limit 4";
$result = mysqli_query($connection, $query);
$all = array();
while ($row = mysqli_fetch_assoc($result))
{
$questions = array();
$questions[] = array('a',$row['a']);
$questions[] = array('b',$row['b']);
$questions[] = array('c',$row['c']);
$questions[] = array('d',$row['a']),
$questions = shuffle($questions);
echo "A:<input type ='radio' value ='$question[0][0]' name='$row['question_id]' >".$question[0][1]."</br>";
echo "B:<input type ='radio' value ='$question[1][0]' name='$row['question_id]' >".$question[1][1]."</br>";
echo "C:<input type ='radio' value ='$question[2][0]' name='$row['question_id]' >".$question[2][1]."</br>";
echo "D:<input type ='radio' value ='$question[3][0]' name='$row['question_id]' >".$question[3][1]."</br>";
}
答案 1 :(得分:1)
您用来随机化答案的2行PHP是一个非常有效的解决方案。
但是,您的代码无法正常工作,因为您目前无法知道表单中提交的随机答案。 <input>
标记的值必须是答案值。 $random_option[$random_keys[X]]
。
另外考虑检查mysqli_query的结果不是错误(!== false)并使用mysqli_error将错误的详细信息写入某个日志。
如果您真的想在MySQL中随机化数据并使用可扩展的解决方案。将答案选项移动到单独的表中,并使用第二个查询来获取这些结果。这将允许您以随机顺序获得答案,并在将来处理不同数量的可能答案。
question_bank:
question_id | question | correct_ans
answer_bank:
answer_id | question_id | answer
答案 2 :(得分:1)
您可以使用INFORMATION_SCHEMA中的数据:
SELECT COLUMN_NAME AS col_name
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'your_table' AND table_schema = 'your_database'
ORDER BY RAND();
此查询每次都以随机顺序显示所有表列,因此您可以将它们存储在数组中并按照您的需要继续操作。