2017-02-27 7 views
0

登録フォームに検証エラーメッセージを表示します。ログインが既にデータベースに存在する場合は、メッセージが表示されます。検証エラーメッセージを送信するには? Codeigniter

MYエラー:フィールド名に対応するエラーメッセージにアクセスできません。Login_r。(ルール) 私を助けようとしています。ありがとう

のconfig/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

ああ待って、コントローラの3行目にコールバックがあります – 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が真であればリダイレクトして、チャットで言及したようにコールバックを作成する方が良いでしょうが、あなたのコードがどのように構造化されているのかは分かりません。

+0

前と同じです。コールバックの名前はどのようにすればよいですか? – Adi212

+0

申し訳ありませんが、私の例では、コールバックを使用しないことになっていましたが、私はその日のためにログオフしようとしていました。 コントローラ全体を投稿することで、自分が何をしているのかが分かりやすくなり、コールバックを正しく使用できるように自分の答えを更新します。 – Pacio

0

コントローラーには「ルール」という機能が必要です(form_validationルールに「callback_rule」というルールがあるため)。

関連する問題