2011-05-10 65 views
0

我正在制作考试申请。表格处理

我有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!'); ?> ` 

,并在考试控制器我想验证它是否是正确的答案。我不想将它存储在任何地方,只需检查答案是否正确。

有帮助吗?

+0

问题并不清楚 – Steve 2011-05-10 12:57:14

+0

没有足够的信息... – 2011-05-10 13:14:07

+0

当您不在任何表格中存储正确答案时,您打算如何验证答案?问题不是很清楚 – boug 2011-05-10 13:52:48

回答

0

如果您不希望用户有选择跟踪他的进度,则无需存储正确答案。

我相信你在你的问题的某个地方或在你的选择一些列如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 
      } 
     } 
    } 
} 

这只是基础。希望这有助于你朝正确的方向发展。

+0

谢谢蒂姆!我会尝试你的代码,我会告诉你有关结果..很明显,我明白你的观点。 – can3los 2011-05-12 09:03:17

+0

你的代码工作得很完美。我在我的控制器代码和查看代码中更改了一些代码行。现在一切正常..我可以继续我的应用程序的其余部分。非常感谢您的帮助Tim。 – can3los 2011-05-12 11:22:00