【问题标题】:How to send validation error massage? Codeigniter如何发送验证错误消息?代码点火器
【发布时间】:2017-02-27 15:03:35
【问题描述】:

我想在注册表单上显示验证错误消息。当数据库中已经存在登录时,应该显示消息。

我的错误:无法访问与您的字段名称 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>

【问题讨论】:

  • 您对 Login_r 的验证指定使用称为“规则”的回调,但您的代码中根本没有列出任何回调。您是否在任何地方创建了此验证的回调?
  • 哦,是的。因为我试图在模型、控制器和视图上运行它,但是在每个不起作用的地方。
  • 哦等等,Controller 的第三行有回调
  • 不...回调将成为控制器中的一个单独函数。我不明白你的第一条评论,但这里没有发布回调。 CI 手册:codeigniter.com/userguide3/libraries/…
  • 我不明白。我的验证规则在另一个文件 config/form_validation.php 中,并且有一个回调。 'rules' => 'required|callback_rule' 嗯....

标签: php forms codeigniter validation


【解决方案1】:

我不确定您在哪里发布了验证码,它也应该在控制器中。我建议重构,这样您就不用在模型中进行任何验证:

型号:

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 为真,我必须使用重定向,最好像我在聊天中提到的那样创建回调,但我真的不明白如何您的代码是结构化的。

【讨论】:

  • 和以前一样。我应该如何命名回调?
  • 对不起,在我的示例中,您应该不使用回调,但我正要注销这一天。发布您的整个控制器,以便我更好地了解您在做什么,我会更新我的答案,以便您正确使用回调。
【解决方案2】:

您的控制器需要一个名为“rule”的函数(因为您的 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;
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2011-09-27
    相关资源
    最近更新 更多