0

コードを大幅に変更しました。

これは私のコントローラのコードです:

public function actionRequestTV() {

$this->layout = '//layouts/column1';
$this->bodyclass = 'bodygrey_without_leftbg';
$model = new Reqtv();

if (isset($_POST['Reqtv'])) {
    if ($model->validate()) {
        $model->attributes = $_POST['Reqtv'];
        if ($model->save()) 
            $this->redirect(array('step2', 'id' => $model->REQTVID));
    }
}elseif (isset($_POST['BP'])) {
    if ($model->validate()) {
        $model->attributes = $_POST['BP'];
        if (!$model->save()) {
            print_r($model->getErrors());
        }else
            $this->redirect(array('step2B', 'id' => $model->REQTVID));
    }
}else
    $this->render('reqtvform_step1', array(
        'model' => $model,
    ));

}

ルールは次のとおりです。

    public function rules() {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return array(
            array('BPID, SK', 'numerical', 'integerOnly' => true),
            array('BPMOBILE', 'numerical'),
            array('TVID, TVPASS', 'length', 'max' => 50),
            array('PROBLEM', 'length', 'max' => 250),
            array('BPCP, BPMOBILE, BPEMAIL', 'length', 'max' => 255),
            array('SK', 'ceksk'),
            array('BPEMAIL', 'email'),
            array('PSNO', 'cekPSNO'),
//            array('SK, PROBLEM, TVID, TVPASS', 'required', 'on' => 'step2'),
            // The following rule is used by search().
            // Please remove those attributes that should not be searched.
            array('REQTVID, BPID, TVID, TVPASS, PROBLEM, SK, BPCP, BPMOBILE, BPEMAIL, PSNO', 'safe', 'on' => 'search'),
        );
    }

私のコードをこのコードから上記のコードのようなより単純なものに変更した後、値を保存することができました。ただし、ceksk ルールなど、一部のルールは機能しません。これは ceksk のコードです:

    public function ceksk() {
    if($this->SK){
    if (!$this->SK == 1) {
        $this->addError('SK', 'Maaf, anda harus mencentang persetujuan syarat & ketentuan sebelum melanjutkan');

        return false;
    }
    }
}

アップデート

私のcekskルールはすでに機能しています。しかし、代わりに JQuery を使用することにしました。

<?php
Yii::app()->clientScript->registerScript('JQuery', "

  $('#kirim').click(function() {
if ($('#SK').attr('checked')) {
      return true;
      }else{
      alert('Anda belum mencentang Syarat & Ketentuan'); 
      return false;
    }
  });
");
?>

しかし、私の他のルールはまだ機能しません。私の cekPSNO ルールは実際に機能しています。しかし、エラーをキャッチすると、フォームページにとどまってエラーを表示するのではなく、空白の白いページに移動します。これはコードです:

public function cekPSNO() {
        if ($this->PSNO) {
            $psno = Ps::model()->findByAttributes(array('PSNO' => $this->PSNO));

            //check cdsn ada atau tidak
            if ($psno === null) {
                $this->addError('PSNO', 'Nomor PS tidak ditemukan, silahkan periksa Nomor PS anda !');

                return false;
            } else {
                if (date('Y-m-d') > $psno->TGLBERAKHIR) {
                    $this->addError('PSNO', 'Premium Support sudah expired !');
                    return false;
                }
            }
        }
    }

よろしくお願いします。ありがとうございました :))

4

2 に答える 2

0

if(!$this->SK == 1)あなたが望む結果を生み出すつもりはありません。

で試してくださいif($this->SK != 1)

http://php.net/manual/en/language.operators.precedence.phpを参照してください。

からの否定は!、比較演算子の前に発生します。これは、効果的に を実行していることを意味します((!$this->SK) == 1)

これにより、コードブロックが実行されなくなります。$this->SKが存在し、タイプジャグリングを true にできる場合、その否定は値になり、 (true 値)falseと比較したときにtrue になることはありません。1if$this->SKが空であるか、タイプが false にジャグリングされている場合、後で間違った比較が実行されることはないため、検証で失敗が報告されることはありません。

于 2012-12-15T07:23:56.873 に答える