2012-07-03 2 views
0

Привет, ребята, мне нужна помощь с моим кодом. Я не знаю, как это сделать. У меня есть форма, в которой студент выбирает тело экзамена, если выбранный орган экзамена - это знаки zimsec, должен быть пустым, а если тело экзамена - это отметки в Кембридже, не должно быть пустым и должно занимать диапазон в зависимости от степени. validMarks - это функция, которую я использую для проверки меток, и она перестала работать, когда я допустил, чтобы метки были пустыми, чтобы разместить Zimsec.Cakephp: проверка поля ввода в зависимости от опции, выбранной из выпадающего списка

Мой add.ctp

echo "<td>"; 
echo $this->Form->label('Mark(%): '); 
echo "</td><td>"; 
echo $this->Form->input("ApplicantOlevelQualification.mark.$s",array('label'=>'')); 
echo "</td></tr>"; 
echo $this->Form->label('Exam Body<font color=red>*</font>'); 
$exambody=array(
    'ZIMSEC'=>'ZIMSEC', 
    'CAMBRIDGE'=>'CAMBRIDGE' 
); 
echo $this->Form->select('exam_body_code',$exambody,array('empty'=>'Please Select','selected'=>false,'label'=>'Exam Body<font color="red">*</font>')); 

Мой контроллер

$exam_body_code = $this->data['ApplicantOlevelQualification']['exam_body_code']; 
'mark' => $this->data['ApplicantOlevelQualification']['mark'][$i], 

Моя модель

'exam_body_code' => array(
    'notempty' => array(
     'rule' => array('notempty'), 
    ), 
), 
'mark' => array(
    //'numeric' => array(
    //'rule' => array('numeric'), 
    'rule' => array('validMarks'), 
     'message' => 'Wrong mark for this grade, please try again.', 
     'allowEmpty' => true, 
    // ), 
), 

public function validMarks($check) { 
    $grade=($this->data['ApplicantOlevelQualification']['grade']); 
    $mark=($this->data['ApplicantOlevelQualification']['mark']); 
    //var_dump($mark); 
    if($grade== 'A' && $mark>74) { 
     // $this->validationError('grade', 'Grade A must be greater than or equal to 75%'); 
     //Access $this->data and $check to compare your marks and grade; 
     return true; 
    } elseif(($grade)== 'B' && ($mark>64)) { 
     return true; 
    } elseif(($grade)== 'C' && ($mark)>50) { 
     return true; 
    } elseif(($grade)== 'D' && ($mark)>40) { 
     return true; 
    } elseif(($grade)== 'E' && ($mark)>30) { 
     return true; 
    } elseif(($grade)== 'U' && ($mark)>0) { 
     return true; 
    } else { 
     return false; 
    } 

    //Access $this->data and $check to compare your marks and grade.. 
} 

ответ

1

если тело экзамен выбран zimsec метки должны быть пустыми, и если экзамен тело - это метки в Кембридже, которые не должны быть пустыми и должны иметь диапазон ...

В этом случае вы должны разделить проверку на 2 функции:

function emptyIfZimsec($data) { 
    return $this->data['ApplicantOlevelQualification']['exam_body_code'] != 'ZIMSEC' 
     || empty($this->data['ApplicantOlevelQualification']['mark']); 
} 

function validMarks($data) { 
    if ($this->data['ApplicantOlevelQualification']['exam_body_code'] != 'CAMBRIDGE') 
     return true; 

    ... 

emptyIfZimsec приведет к ошибке проверки, если код ZIMSEC и знак не является пустым. и validMarks проверит отметки CAMBRIDGE (и пропустит, если ZIMSEC)

Таким образом вы также можете выводить отдельные сообщения об ошибках проверки для каждого случая.

Надеюсь, это поможет.

+0

ori Большое вам спасибо, что у меня есть небольшая проблема, хотя мой код работает очень хорошо, но только для проверки первого элемента в массиве. Не знаю, можете ли вы попытаться выполнить цикл, но он не работает. – alicemap