表格处理
问题描述:
我正在制作考试申请。表格处理
我有3个表(考试/问题/选项)
exams table : id,name
questions table : id,name,exam_id
options tables : id,name,question_id
考试的hasMany问题的hasMany选项。
现在,我设置我的问题与相关选项,然后将其添加到考试。到现在为止还挺好。
但是,当我想要参加考试时,我被困在验证过程中。
e.g我有一个do_exam.ctp
用下面的代码:
<?php echo $form->create(null, array('action' => 'validate_answer')); ?>
<h3>Do Exam</h3>
<?php if(!$questions) {?>
<h4>No Questions Found!</h4>
<?php } ?>
<?php foreach($questions as $question):?>
<h4>Question</h4>
<?php echo $question['Question']['qst']; ?>
<h4>Make an Option</h4>
<?php
$i = 0;
foreach ($question['Option'] as $option):
$class = null;
if ($i++ % 2 == 0) {
$class = ' class="altrow"';
}
?>
<tr<?php echo $class;?>>
<td><?php echo $option['Type'];?></td>
<td><?php echo $option['opt'];?></td>
<br />
<?php endforeach; ?>
<br />
<?php $options = array('A' => 'A', 'B' => 'B','C' => 'C', 'D' => 'D');
echo $form->select('answer', $options);
echo $form->hidden('ca', array('value' => $question['Question']['Correct_Answer']));
?>
<?php endforeach; ?>
<?php echo $form->end('Finish!'); ?> `
,并在考试控制器我想验证它是否是正确的答案。我不想将它存储在任何地方,只需检查答案是否正确。
有帮助吗?
答
如果您不希望用户有选择跟踪他的进度,则无需存储正确答案。
我相信你在你的问题的某个地方或在你的选择一些列如correct_answer
。不要把它作为你表单中的隐藏字段。每个可以使用源代码视图的小孩都可以看到正确的答案。
首先,你必须写输入这样在你的foreach:
foreach ($questions as $i => $question) {
echo $this->Form->input('Exam.'.$i.'.question_id', array('type' => 'hidden', 'value' => $question['Question']['id']));
echo $this->Form->input('Exam.'.$i.'.answer');
}
echo $this->Form->end('Finish!');
这一点很重要,让你有一个阵列中的所有问题。
你现在在你的函数做什么可能是这个样子:
function validate_answer() {
if (isset($this->data)) {
foreach ($this->data['Exam'] as $exam) {
$this->Exam->Question->id = $exam['question_id'];
$correct_answer = $this->Exam->Question->field('correct_answer');
$user_answer = $exam['answer'];
if ($correct_answer == $user_answer) {
//do something with it
}
}
}
}
这只是基础。希望这有助于你朝正确的方向发展。
问题并不清楚 – Steve 2011-05-10 12:57:14
没有足够的信息... – 2011-05-10 13:14:07
当您不在任何表格中存储正确答案时,您打算如何验证答案?问题不是很清楚 – boug 2011-05-10 13:52:48