『壹』 php 考試系統怎麼生成隨機試題,求代碼寫法.以選擇題為例說明一下就行,假如從10個里抽3個,怎麼在提交之
很簡單,給你一個思路
你在資料庫裡面放10個題,
id questions options right_answer
1 china 是指哪個國家? A:中國;B:日本;C:美國 A
... ................ ............. ...
這樣你從資料庫中讀取全部數據出來;
為了實現隨機性,你可以用一個數組
<?php
$query=$mysql_query("select * from '表名'");
$results=$mysql_fetch_row($query);
$rand=array_rand($results,3);//取出隨機的三個問題,注意這里取得是三個鍵值
$question=array($result[$rand[0]],$result[$rand[1]],$result[$rand[2]]);//將取出的三個問題放進一個數組中
?>
<form action="目標地址(此處用本頁面地址)" method="post">
<?php
foreach($question as $values)
{
$options=explode(";",$values['options']);//用「;」將選項分割存進數組
echo $values['questions'];//顯示題目
for($i=0;$i<count($options);$i++){
echo "<input type='radio' name=".$choice[$valest['id']]." value='A' >".$options[i]." /><br>";//輸出選項
}
echo "----------------------------------------";//題目之間分隔符
}
//下面的代碼是你接受form表單的頁面,如果是本頁面就直接接著上面的代碼寫
if(!empty($_POST[$choice]))
{
foreach($_POST[$choice] as $key=> $data)
{
$question_id=$key;
$user_choice=$data;
if(mysql_query("select * from '表名' where id=".$key."and right_answer='".$data."'"))
{
//答案對如何處理。。。。
}
else
{
//答案不對處理辦法。。。。
}
}
}
?>
</form>
隨手現寫的代碼,可能你裡面有錯誤,但是思路你可以借鑒下~
『貳』 用php+mysql做一個題庫系統,上萬題內隨機抽取五百題左右生成考試卷,求最有效率的做法!
php裡面有array_rand函數,你要是一道題一道題的讀出來,或許也可以嘗試一下。但是要是一下子都讀出來,即便這個函數效率可以的話,隨機取出id數組,查詢 「where id in 數組」 就不如直接在資料庫里隨機抽取記錄。
如何從數據表裡隨機抽取記錄呢,想想辦法還是有一些,就是不知道效率如何。有的是說用max_id*rand(),那一條一條抽取還是可以的。怎麼批量隨機抽取呢,可以試著排序,然後選取前500題,排序可以想辦法用一些函數(選取一些執行效率高的),如何md5,sha1,這種。如果為了使結果更具有隨機性,可以把欄位值再與一個隨機數運算一下。僅供參考。
========================
我想你還是用array_rand隨機抽500個id存到數組,然後遍歷數組吧。這樣也避免了題目重復。在資料庫里如果一次一條記錄隨機抽取,要考慮碰巧重復的問題。批量選取你就按上面我說的試試。