使用CodeIgniter进行用户激活注册 [英] User activation registration with CodeIgniter

查看:47
本文介绍了使用CodeIgniter进行用户激活注册的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用CodeIgniter构建注册系统。我有一个名为User的控制器,其代码如下:

I'm trying to build a registration system with CodeIgniter. I have a controller called User with the following code:

class User extends CI_Controller{
    public function __construct()
    {
        parent::__construct();
        $this->load->model('user_model');
    }
    public function index()
    {
        if(($this->session->userdata('user_name')!=""))
        {
            $this->welcome();
        }
        else{
            $data['title']= 'Home';
            $this->load->view('header_view',$data);
            $this->load->view("registration_view.php", $data);
            $this->load->view('footer_view',$data);
        }
    }
    public function welcome()
    {
        $data['title']= 'Welcome';
        $this->load->view('header_view',$data);
        $this->load->view('welcome_view.php', $data);
        $this->load->view('footer_view',$data);
    }
    public function login()
    {
        $email=$this->input->post('email');
        $password=md5($this->input->post('pass'));

        $result=$this->user_model->login($email,$password);
        if($result) $this->welcome();
        else        $this->index();
    }
    public function thank()
    {
        $data['title']= 'Thank';
        $this->load->view('header_view',$data);
        $this->load->view('thank_view.php', $data);
        $this->load->view('footer_view',$data);
    }
    public function registration()
    {
        $this->load->library('form_validation');
        // field name, error message, validation rules
        $this->form_validation->set_rules('user_name', 'User Name', 'trim|required|min_length[4]|xss_clean');
        $this->form_validation->set_rules('email_address', 'Your Email', 'trim|required|valid_email');
        $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]');
        $this->form_validation->set_rules('con_password', 'Password Confirmation', 'trim|required|matches[password]');

        if($this->form_validation->run() == FALSE)
        {
            $this->index();
        }
        else
        {
            $this->user_model->add_user();
            $this->thank();
        }
    }
    public function logout()
    {
        $newdata = array(
        'user_id'   =>'',
        'user_name'  =>'',
        'user_email'     => '',
        'logged_in' => FALSE,
        );
        $this->session->unset_userdata($newdata );
        $this->session->sess_destroy();
        $this->index();
    }
}

到目前为止很好。如果我转到注册页面,则会显示注册表格。如果我发送表单并通过表单验证检查,则会显示成功页面,如果表单有错误,则会返回带有一些错误消息的表单。

So far so good. If I go to the register page I get the registration form displayed. If I send the form and it passes the form validation checks, I get the success page, if the form has errors, I get the form back with some error messages.

现在,我要做的是数据库内容。我对如何从注册表中获取POST值有一些了解,但是不知道如何检查用户名或电子邮件是否已经存在,如果存在,请在注册表中显示该错误。当我进行表单注册时,如何将用户电子邮件的激活发送到我站点中的活动帐户。

Now what I want to do is the database stuff. I have some idea of how I can get the POST values from the registration form into my database, but no clue how I can check if a username or email already exists, and if so, display that error on the registration form. and when i register in form, how can i send activation to user email to active account in my site.

这是我的注册表单视图:

Here's my registration form view:

<div id="content">
<div class="signup_wrap">
<div class="signin_form">
    <?php echo form_open("user/login"); ?>
        <label for="email">Email:</label>
        <input type="text" id="email" name="email" value="" />
        <label for="pass">Password:</label>
        <input type="password" id="pass" name="pass" value="" />
        <input type="submit" class="" value="Sign in" />
    <?php echo form_close(); ?>
</div><!--<div class="signin_form">-->
</div><!--<div class="signup_wrap">-->
<div class="reg_form">
<div class="form_title">Sign Up</div>
<div class="form_sub_title">It's free and anyone can join</div>
<?php echo validation_errors('<p class="error">'); ?>
    <?php echo form_open("user/registration"); ?>
        <p>
            <label for="user_name">User Name:</label>
            <input type="text" id="user_name" name="user_name" value="<?php echo set_value('user_name'); ?>" />
        </p>        
        <p>
            <label for="email_address">Your Email:</label>
            <input type="text" id="email_address" name="email_address" value="<?php echo set_value('email_address'); ?>" />
        </p>
        <p>
            <label for="password">Password:</label>
            <input type="password" id="password" name="password" value="<?php echo set_value('password'); ?>" />
        </p>
        <p>
            <label for="con_password">Confirm Password:</label>
            <input type="password" id="con_password" name="con_password" value="<?php echo set_value('con_password'); ?>" />
        </p>        
        <p>
            <input type="submit" class="greenButton" value="Submit" />
        </p>
    <?php echo form_close(); ?>
</div><!--<div class="reg_form">-->    
</div><!--<div id="content">-->

,模块为:-

class User_model extends CI_Model {

    public function __construct()
    {
        parent::__construct();
    }
    function login($email,$password)
    {
        $this->db->where("email",$email);
        $this->db->where("password",$password);

        $query=$this->db->get("user");
        if($query->num_rows()>0)
        {
            foreach($query->result() as $rows)
            {
                //add all data to session
                $newdata = array(
                        'user_id'       => $rows->id,
                        'user_name'     => $rows->username,
                        'user_email'    => $rows->email,
                        'logged_in'     => TRUE,
                   );
            }
                $this->session->set_userdata($newdata);
                return true;            
        }
        return false;
    }
    public function add_user()
    {
        $data=array(
            'username'=>$this->input->post('user_name'),
            'email'=>$this->input->post('email_address'),
            'password'=>md5($this->input->post('password'))
            );
        $this->db->insert('user',$data);
    }
}


推荐答案

更改:

$this->form_validation->set_rules('user_name', 'User Name', 'trim|required|min_length[4]|xss_clean');
$this->form_validation->set_rules('email_address', 'Your Email', 'trim|required|valid_email');

$this->form_validation->set_rules('user_name', 'User Name', 'trim|required|min_length[4]|is_unique[users.user_name]');

$this->form_validation->set_rules('email_address', 'Your Email', 'trim|required|min_length[4]|valid_email|is_unique[users.email_address]');

如果您的 Form_validation.php 没有 is_unique()函数,然后添加:

If your Form_validation.php does not have is_unique() function, then add:

public function is_unique($str, $field)
{
    list($table, $field) = explode('.', $field);

    if (isset($this->CI->db))
    {
        $query = $this->CI->db->limit(1)->get_where($table, array($field => $str));
        return $query->num_rows() === 0;
    }

    return FALSE;
}

这篇关于使用CodeIgniter进行用户激活注册的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆