我想创建一些测验。但问题会有所不同,具体取决于下拉菜单中选择的选项。
主要问题是我需要存储带有问题的html块吗? 所有问题都将是这种模式:
<tr>
<td>Question</td>
<td>Answer 1, Answer 2, ...</td>
</tr>
问题总数 - 50,完整的“问题表”有10个问题并提交按钮。 不同组合的总量 - 超过100个“问题表”。 大多数情况下的问题将重复进行。
首先,我尝试将我的问题存储在变量中:
$question01 = '<tr>
<td>Question 01</td>
<td><input type="radio" name="v2" checked="" >Answer 1 <input type="radio" name="v2">Answer 2</td>
</tr>';
然后我将它们写在表格中,如:
$fullTable = $question01 . $question02 . $question03;
但我对此感觉不对。也许你至少可以指出我应该看哪个框架/模式? 例子受到高度赞赏。
答案 0 :(得分:1)
如果你愿意,我可以把它翻译成PHP,但你应该有:
question = {id:"123", question:"", answers:[{text:"",id:"2"}], correct:"2"}
然后你可以迭代所有问题并从数组填充可能的答案......当他们提交答案时,你可以在id上查找正确的答案
$ans = $_POST['ans'];
$id = $_POST['id'];
if ($ans == $question[$id]['correct'] )
{
echo "correct!";
}
虽然存储在客户端上,但您很可能不希望它显示为无。我同意如果你有一个脚本提出问题答案对,那么你只需要根据需要调用php脚本。类似的东西:
for (var i = 10;i;i--){
//calls 10 times
$.ajax("mygenscript.php", function(){
//replace previous question block with this new question.
});
}
然后你不会在客户端存储东西。
然后可以有类似的东西:
并在成功通话中说:
var newQ = "result from ajax call";
$("div#question").empty().append(newQ);
答案 1 :(得分:1)
您可以将html块存储在脚本内的变量中,但这不一定是最易维护的路径。我喜欢使用模板引擎,其中HTML存储在一个单独的文件中,该文件包含PHP脚本将填充的特殊占位符。就个人而言,我是MiniTemplator的粉丝。它支持定义HTML块,每次都可以重复使用不同的替换。
例如,使用MiniTemplator语法,您的HTML将如下所示:
<!-- $beginBlock Question --> <tr> <td>{$question_text}</td> <td>{$answer_options}</td> </tr> <!-- $endBlock Question -->
然后,在您的代码中,您将像这样调用MiniTemplator类上的例程(可能在所有问题/答案集的循环中)。其中$ t是MiniTemplator类的一个实例并加载了模板:
$t->setVariable("question_text", "What is your name?");
$t->setVariable("answer_options", "A: Pudnintame, B: Murgatroyd, C: Ethyl");
$t->addBlock("Question");
每次执行这三行(填写不同的问题和答案选项),模板引擎将添加另一个HTML块。