【问题标题】:How to compare form input data to database data in a custom codeigniter form validator?如何在自定义 codeigniter 表单验证器中将表单输入数据与数据库数据进行比较?
【发布时间】:2017-12-13 05:55:43
【问题描述】:

编辑:在我尝试自己解决它的过程中,一些命名被混淆了。我已经修复了回调等命名,但同样的错误仍然存​​在。

我正在尝试为我的 codeigniter 网站创建一个登录页面。我已经有一个注册页面,可以将用户名和密码正确输入到“用户”表中。我在理解创建自定义表单验证器所需函数的语法时遇到问题。

对于密码和用户名自定义验证器,我的错误是“无法访问与您的字段名称对应的错误消息”。

这里是控制器“login_ctrl”的相关部分

    class login_ctrl extends CI_Controller {

function __construct() {
parent::__construct();
$this->load->model('login_mdl');
}
function index() {

$this->load->library('form_validation');

$this->form_validation->set_error_delimiters('<div class="error">', '</div>');

//Validating Name Field
$this->form_validation->set_rules('username', 'Username', 'trim|required|callback_userCorrect');

//Validating Password Field 
$this->form_validation->set_rules('password', 'Password', 'trim|required|callback_passwordCorrect');

//variables to pass form input
$username = $this->input->post('username');
$password = $this->input->post('password'); 

//reload login page if validation fails
if ($this->form_validation->run() == FALSE) {
$this->load->view('login');
} else {
//functions for custom validation
function userCorrect($username) {
    $this->load->library('form_validation');
    //the loads the model that contains the function to compare input to database data
    $userExists = $this->login_mdl->userExists($username);

    if ($userExists) {
        $this->form_validation->set_message(
           'userCorrect', 'correct user.'
    );
        return true;
    } else {
        $this->form_validation->set_message(
            'userCorrect', 'not a valid user name.'
        ); 
        return false;
    }
}
function passwordCorrect($password) {
    $this->load->library('form_validation');
    $passwordExists = $this->login_mdl->passwordCorrect($password);

    if ($passwordExists) {
        $this->form_validation->set_message('passwordCorrect', 'correct password.');
        return true;
    } else {
        $this->form_validation->set_message('passwordCorrect', 'invalid password.'); 
        return false;
    }
}

这是对应的视图“登录”

<?php echo form_open('login_ctrl'); ?>
<h1>Login</h1><hr/>
<?php if (isset($message)) { ?>
<?php } ?>
<?php echo form_label('User Name :'); ?> <?php echo form_error('username'); ?><br />
<?php echo form_input(array('id' => 'username', 'name' => 'username')); ?><br />

<?php echo form_label('Password :'); ?> <?php echo form_error('password'); ?><br />
<?php echo form_input(array('id' => 'password', 'name' => 'password')); ?><br />

<?php echo form_submit(array('id' => 'submit', 'value' => 'Submit')); ?>

<?php echo form_close(); ?><br/>

最后,这是对应的模型“login_mdl”(我认为问题可能出在这个家伙身上)。

<?php
class login_mdl extends CI_Model{
function __construct() {
parent::__construct();
}
function userExists($username) {
    $this->db->select('id');
    $this->db->where('username', $username);
    $query = $this->db->get('users');

    if ($query->num_rows() > 0) {
        return true;
    } else {
        return false;
    }
}

function passwordCorrect($password) {
    $this->db->select('password');
    $this->db->where('username', $username);
    $query = $this->db->get('users');
    $result = $query->row();
    return $result->password;

    if ('password' == $password) {
        return true;
    } else {
        return false;
    }
}
}
?>

我认为我的问题与 db 调用和 if 语句有关,但我一直在阅读文档并在几个小时内未能解决此问题,因此我们将不胜感激。

【问题讨论】:

    标签: php database forms codeigniter validation


    【解决方案1】:

    您需要使您的服装规则功能上的字段名称与您的功能回调相同。所以,应该是这样的:

      $this->form_validation->set_message(
               'userCorrect', 'correct user.'
    

    在你的其他函数上做同样的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-09
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 2018-03-26
      • 2021-01-22
      • 2021-12-27
      • 2016-05-17
      相关资源
      最近更新 更多