无法访问错误消息 - CodeIgniter中的回调验证

时间:2015-12-10 13:53:56

标签: php codeigniter validation

我有简单的代码无效。我对复选框进行了验证,然后收到错误:

  

无法访问与您的字段名称accept_terms_checkbox对应的错误消息。(accept_terms)

这是我的代码:

控制器:

public function formularz2()
{



    $this->load->helper(array('form', 'url'));
    $this->load->library('form_validation');

    $data['szkolenia'] = $this->Szkolenie_m->pobierz();


    //VALIDATION!!
    $this->form_validation->set_rules('imie', 'Imię', 'required');
    $this->form_validation->set_message('required', 'Błąd: wypełnij powyższe pole');
    $this->form_validation->set_rules('accept_terms_checkbox', 'checkbox', 'callback_accept_terms');

    //CALLBACK FUNCTION!!
    function accept_terms()
    {
  if ($this->input->post('accept_terms_checkbox'))
    {
        return TRUE;
    }
    else
    {
        $error = 'Please read and accept our terms and conditions.';
        $this->form_validation->set_message('accept_terms', $error);
        return FALSE;
    }
    }


    //Po przesłaniu danych

    if (!empty($_POST))
    {
    $konsultant = $this->uri->segment(3);

    $dane = array(
        'email1' => $this->input->post('email'),
        'imie' => $this->input->post('imie'),
        'nazwisko' => $this->input->post('nazwisko'),
        'nazwa_firmy' => $this->input->post('firma'),
        'konsultant_id' => $konsultant,
    );

    //Trzeba jeszcze tutaj ogarnąć wrzucanie pivotów zaznaczonych checkboxów    
    $boxes = $_POST['formChecks'];
    $N = count($boxes);
    $ostatni_id = $this->Osoby_m->ostatni_id();


    for($i=0; $i < $N; $i++)
    {
            $this->Osoby_m->nowy_wpis_formularz($boxes[$i]);    
    }       

    //Pobrać id dodanej osoby = policzyć ile osób w bazie +1
    $this->Osoby_m->nowa_osoba($dane);  

    }   


    if ($this->form_validation->run() == FALSE)
    {
        $this->load->view('formularz', $data);
    }
    else
    {
        $this->load->view('wyslano_formularz');
    }
}

我的观点:

<?php echo form_open(); ?>
  <div class="form-group">
    <label for="email" class="col-sm-2 control-label">Email:</label>
    <div class="col-sm-10">
      <input type="email" class="form-control" id="email" name="email" placeholder="Email" value="<?php echo set_value('email'); ?>">
  <p class="help-block"><?php echo form_error('email'); ?></p>
    </div>
  </div>

  <div class="form-group">
    <label for="imie" class="col-sm-2 control-label">Imię:</label>
    <div class="col-sm-10">
      <input type="text" class="form-control" id="imie" name="imie" placeholder="Imię" value="<?php echo set_value('imie'); ?>">
      <p class="help-block"><?php echo form_error('imie'); ?></p>
    </div>
  </div>

  <div class="form-group">
    <label for="nazwisko" class="col-sm-2 control-label">Nazwisko:        </label>
    <div class="col-sm-10">
      <input type="text" class="form-control" id="nazwisko" name="nazwisko" placeholder="Nazwisko" value="<?php echo set_value('nazwisko'); ?>">
      <p class="help-block"><?php echo form_error('nazwisko'); ?></p>
    </div>
  </div>

  <div class="form-group">
    <label for="firma" class="col-sm-2 control-label">Firma:</label>
    <div class="col-sm-10">
      <input type="text" class="form-control" id="firma" name="firma" placeholder="Firma" value="<?php echo set_value('firma'); ?>">
      <p class="help-block"><?php echo form_error('firma'); ?></p>
    </div>
  </div>


<div class="col-sm-12" style="margin-bottom: 30px; margin-top: 30px;">    <h3>Wybierz interesujące Cię szkolenia</h3></div>
  <div class="form-group">
    <label class="col-sm-2 control-label">Szkolenia:</label>
    <div class="col-sm-10">

      <?php foreach ($szkolenia as $szkolenie): ?>
      <div class="checkbox">
            <label><input id="szkolenie<?php echo $szkolenie->id; ?>" type="checkbox" name="formChecks[]" value="<?php echo $szkolenie->id; ?>">     <?php echo $szkolenie->nazwa_szkolenia; ?></label>         
            <br>
        </div>
        <?php endforeach; ?>

    </div>
  </div>

//CALLBACK CHECKBOX
  <div class="form-group">
    <div class="col-sm-12" style="margin-top: 50px;">
 <input type="checkbox" name="accept_terms_checkbox" value="1"/> Zgadzam się na otrzymywanie maili od firmy Gamma<br>
  <p><?php echo form_error('accept_terms_checkbox') ?></p>
    </div>
  </div>


  <button type="submit" class="btn btn-lg btn-success" style="margin-top: 50px;">Odbierz Voucher</button>
<?php echo form_close(); ?>

2 个答案:

答案 0 :(得分:0)

为了在codeigniter的验证类中使用您自己的回调方法,您必须声明该方法。在您的情况下(将此添加到您的控制器或帮助程序等...):

public function accept_terms($user_input){
       if($user_input != ""){
            return True;
       }else{
           $this->form_validation->set_message('accept_terms_checkbo', 'The %s field can not be empty"');
            return False;
}

答案 1 :(得分:0)

我通过没有回调函数的简单验证修复了这个错误。我发现我不需要服务条款的回调函数复选框。

        $this->form_validation->set_rules('accept_terms_checkbox', 'Checkbox', 'required');
        $this->form_validation->set_message('required', 'You need to accept Terms of Services');