在 CodeIgniter 中正确使用 form_validation

Use form_validation correctly in CodeIgniter

我有一个使用 CodeIgniter 的注册系统,但目前我无法控制电子邮件和密码。用户无需输入电子邮件或密码即可注册。 我的注册控制器中有一个 index() 和一个 register_user function() 但重定向没有成功 目前我有以下代码:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Signup extends CI_Controller {

    public function index()
    {

        if(!isset($this->session->userdata['sessiondata']['user_id']))
        {
             $this->load->helper(array('form', 'url'));

             $this->load->library('form_validation');
             $this->form_validation->set_rules('email', 'Email', 'required');
             $this->form_validation->set_rules('password', 'Password', 'required',
                    array('required' => 'You must provide a %s.')
             );
               if ($this->form_validation->run() == FALSE)
               {
                    $this->load->view('signup-view');
               }
               else
               {
                    $this->load->view('home-view');

               }

        }else{
            if (intval($this->session->userdata['sessiondata']['user_type']) == 1) {
                redirect(base_url().'admin');
            } else {
                redirect(base_url().'home');
            }
        }
    }

    function register_user(){

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

        $data = array('user_id' => $this->custom_u_id->construct_id('USR'),
                      'name' => $_POST['name'],
                      'email' => $_POST['email'],
                      'password' => $_POST['password'],
                     );

        $this->load->model('signup_model');
        $user_details = $this->signup_model->register_user($data);

        if (!empty($user_details)){

            $user_data =  array
            (
                'user_id' => $user_details['user_id'],
                'email' => $user_details['email'],
                'name' => $user_details['name'],
                'user_type' => $user_details['user_type'],

            );

            $this->session->set_userdata('sessiondata',$user_data);

            if (intval($user_details['user_type']) == 1) {
                redirect(base_url().'admin');
            } else {
                redirect(base_url().'home');
            }
        } else{
            redirect('login');
        }

    }// end of function login
}

我是否需要将 form_validation 放入我的 register_user 函数中?我试过了,但支票不再有效了...

我也有 <?php validation_errors();?> 函数和 <?php form_open(base_url().'signup');?>

根据您的代码,我认为您想将 register_user() 放入验证 TRUE 中,因为查询是在该方法中进行的。

所以尝试将您的代码更改为:

public function index()
    {

        if(!isset($this->session->userdata['sessiondata']['user_id']))
        {
             $this->load->helper(array('form', 'url'));

             $this->load->library('form_validation');
             $this->form_validation->set_rules('email', 'Email', 'required');
             $this->form_validation->set_rules('password', 'Password', 'required',
                    array('required' => 'You must provide a %s.')
             );
               if ($this->form_validation->run() == FALSE)
               {
                    $this->load->view('signup-view');
               }
               else
               {
                    $this->register_user();

               }

        }else{
            if (intval($this->session->userdata['sessiondata']['user_type']) == 1) {
                redirect(base_url().'admin');
            } else {
                redirect(base_url().'home');
            }
        }
    }

并确保您的表单操作像这样:

<form action="<?=site_url('/signup/index');?>">