2011-05-10 130 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