2017-02-27 12 views
0

我想在註冊表單上顯示驗證錯誤信息。數據庫中已存在登錄時應顯示消息。如何發送驗證錯誤按摩? Codeigniter

我的錯誤:無法訪問對應於您的字段名稱Login_r的錯誤消息(規則) 請儘量幫助我,它非常重要。謝謝

配置/ form_validation.php

$config = array(
    'login' => array(
     array(
      'field' => 'login', 
      'label' => 'Login', 
      'rules' => 'required' 
     ), 
     array(
      'field' => 'password', 
      'label' => 'Password', 
      'rules' => 'required' 
     ) 
    ), 
    'register' => array(
     array(
      'field' => 'name_r', 
      'label' => 'Name', 
      'rules' => 'required|alpha' 
     ), 
     array(
      'field' => 'lastname_r', 
      'label' => 'Lastname', 
      'rules' => 'required|alpha' 
     ), 
     array(
      'field' => 'login_r', 
      'label' => 'Login_r', 
      'rules' => 'required|callback_rule' 
     ), 
     array(
      'field' => 'password_r', 
      'label' => 'Password_r', 
      'rules' => 'required|min_length[4]|max_length[12]' 
     ), 
     array(
      'field' => 'confirm_password_r', 
      'label' => 'Confirm_password', 
      'rules' => 'required|matches[password_r]' 
     ), 
     array(
      'field' => 'email_r', 
      'label' => 'Email', 
      'rules' => 'required|valid_email' 
     ), 
     array(
      'field' => 'adres_r', 
      'label' => 'Adres', 
      'rules' => 'required' 
     ) 
    ),       
); 

控制器:

if ($this->form_validation->run('register') == false) 
{ 
    $this->form_validation->set_message('rule', 'Dzialaj !'); 
    $this->load->view('content/register'); 
} 
else 
{ 
    $this->load->view('content/index'); 
    $name_r = $this->input->post('name_r'); 
    $lastname_r = $this->input->post('lastname_r'); 
    $login_r = $this->input->post('login_r'); 
    $password_r = $this->input->post('password_r');    
    $email_r = $this->input->post('email_r'); 
    $adres_r = $this->input->post('adres_r'); 

    $data_db = array(
     'name' => $name_r, 
     'lastname' => $lastname_r, 
     'login' => $login_r, 
     'password' => $password_r, 
     'email' => $email_r, 
     'adres' => $adres_r 
     ); 
    $this->Main_model->register($data_db); 
} 

型號:

public function register($data_db) { 

    $this->db->where('login',$data_db['login']); 
    $query = $this->db->get('users'); 
    $row = $query->row(); 

    if($row->login){ 
     $this->form_validation->set_message('rule', 'Error Message'); 
    } else { 
     $this->db->insert('users', $data_db); 
    } 

視圖(形式)

<?php 
echo validation_errors(); 
echo form_open(); 
echo 'Imie: ' . form_input('name_r'); 
echo br(2); 
echo 'Nazwisko: ' . form_input('lastname_r'); 
echo br(2); 
echo 'Login: ' . form_input('login_r'); 
echo br(2); 
echo 'Haslo: ' . form_password('password_r'); 
echo br(2); 
echo 'Potwierdz Haslo: ' . form_password('confirm_password_r'); 
echo br(2); 
echo 'E-mail: ' . form_input('email_r'); 
echo br(2); 
echo 'Adres: ' . form_input('adres_r'); 
echo br(1); 
echo form_submit('zarejestrowany','Stworz konto'); 

echo form_close(); 
?> 
      </div> 
     </div> 
    </div> 
     <!--Import jQuery before materialize.js--> 
     <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script> 
     <script type="text/javascript" src="js/materialize.min.js"></script> 
</body> 
</html> 
+1

您對Login_r的驗證指定使用稱爲「規則」的回調,但在您的代碼中沒有任何回調。你有沒有在任何地方創建的驗證回調? – Pacio

+0

噢。因爲我試圖在模型,控制器和視圖上運行它,但在每個不起作用的地方。 – Adi212

+0

噢,等等,在控制器的第三行有一個回調。 – Adi212

回答

0

我不確定你的驗證碼在哪裏,也應該在控制器中。我建議重構,所以你沒有做任何驗證模型:

型號:

public function get_user($login) { 
    $this->db->where('login',$login); 
    $query = $this->db->get('users'); 
    $row = $query->row(); 
    return $row; 
} 

public function register($data_db) { 
    $this->db->insert('users', $data_db); 
} 

控制器:

if ($this->form_validation->run('register') == false) 
{ 
    $this->form_validation->set_message('rule', 'Dzialaj !'); 
    $this->load->view('content/register'); 
} 
else 
{ 
$this->load->view('content/index'); 
$name_r = $this->input->post('name_r'); 
$lastname_r = $this->input->post('lastname_r'); 
$login_r = $this->input->post('login_r'); 
$password_r = $this->input->post('password_r');    
$email_r = $this->input->post('email_r'); 
$adres_r = $this->input->post('adres_r'); 

$user = $this->Main_model->get_user(); 
if($user->login) { 
    $this->form_validation->set_message('rule', 'Error Message'); 
    redirect('content/register') 
} 
$data_db = array(
    'name' => $name_r, 
    'lastname' => $lastname_r, 
    'login' => $login_r, 
    'password' => $password_r, 
    'email' => $email_r, 
    'adres' => $adres_r 
      ); 
$this->Main_model->register($data_db); 

這仍然不是很大,因爲我必須使用如果它的$ user-> login是true,那麼重定向會更好,像我在聊天中提到的那樣創建回調會更好,但我不太瞭解代碼的結構。

+0

和以前一樣。我應該如何命名回叫? – Adi212

+0

對不起,在我的例子中,你應該不使用回調,但我正要註銷一天。 發佈您的整個控制器,以便我更好地瞭解您正在做什麼,我會更新我的答案,以便正確使用回調。 – Pacio

0

你的控制器需要一個稱爲「規則」的函數(因爲你的form_validation規則中有一個叫做「callback_rule」的規則)。

function rule($form_value) 
{ 
    if(<condition for form value is good>) 
    { 
    return TRUE; 
    } 
    else 
    { 
    $this->form_validation->set_message('login_r','your error message'); 
    return FALSE; 
    } 
}