无法使控制器和视图一起工作以进行注册表单

时间:2013-07-26 10:41:46

标签: php codeigniter

我是CodeIgniter的新手。

目前我有一个register.php(VIEW)和一个register.php(CONTROLLER)。 register.php(VIEW)包含一个简单的表单,从这个表单我试图将数据传递给控制器​​,以便将其插入数据库。简单。

每当我加载视图时,我似乎得到的是与变量和函数相关的不同错误消息,以及我尝试加载视图的行上的错误。

我只是问:

  1. 这是一起使用控制器和视图的正确方法吗?
  2. 如何解决当前的问题?
  3. 以下是两个文件:

    register.php(VIEW)

    <htmL>
    
    <body>
    
    <form method="post" action="controllers/register.php">
    
    <input type="text" name="email">
    <input type="text" name="name">
    <input type="password" name="password">
    <select id="userLevel" name="userLevel">        
        <option value="2">Job Seeker</option>
        <option value="3">Employer</option>
    </select>
    <input type="submit" name="submit" value="Submit">
    
    </form>
    
    </body>
    
    </htmL>
    

    register.php(CONTROLLER)

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    class Users extends CI_Controller{  
    
    public function __construct(){
    
        public $email;
        public $name;
        public $password;
        public $userLevel;
    
        $this->email = $_POST['email'];
        $this->name = $_POST['name'];
        $this->password = $_POST['password'];
        $this->userLevel = $_POST['userLevel'];
    
    }
    
    public function createuser() {
    
        if( filter_var($this->email, FILTER_VALIDATE_EMAIL) ) {
    
            $this->db->set('email', $this->email);
            $this->db->set('name', $this->name);
            $this->db->set('password', $this->password);
            $this->db->set('userLevel', $this->userLevel);
            $this->db->insert('users');
    
        }   
    
    }
    
    $this->load->view('register');
    
    }
    
    ?>
    

2 个答案:

答案 0 :(得分:3)

您的控制器应如下所示:

class Users extends CI_Controller{  
public function __construct(){
    parent::__construct();
}

public function createuser() {
    if($this->input->post(null)){
        $data   = array();
        $data['email']      = $this->input->post('email');
        $data['name']       = $this->input->post('name');
        $data['password']   = $this->input->post('password');
        $data['userLevel']  = $this->input->post('userLevel');
        $this->db->insert('users', $data);
    }
    $this->load->view('register');
}   
}

而不是写<form method="post" action="controllers/register.php"><?=form_open('user/createuser')?>

答案 1 :(得分:2)

你需要这样做。这是MVC,更清晰

查看

<htmL>

<body>

<?php echo form_open('controllers/createuser'); ?>
<input type="text" name="email">
<input type="text" name="name">
<input type="password" name="password">
<select id="userLevel" name="userLevel">        
    <option value="2">Job Seeker</option>
    <option value="3">Employer</option>
</select>
<input type="submit" name="submit" value="Submit">

<?php echo form_close(); ?>

</body>

</htmL>

控制器

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

    class Users extends CI_Controller{  

    public function __construct(){
        $this->load->helper('form');

    }

    public function createuser() {

        $data['email'] = $this->input->post['email'];
        $data['name'] = $this->input->post['name'];
        $data['password'] = $this->input->post['password'];
        $data['userLevel'] = $this->input->post['userLevel'];

        if($this->input->post('submit')) {

            // Here you can validate data if you want

            $this->user_model->insert($data);
            redirect('users/success');
        }
        $this->load->view('register');
    }

    function success() {
      echo "You add user";
    }



}

    ?>

模型

class User_model extends CI_model {

    public function __construct() {
        parent:: __construct();
    }

    function add($data) {
        $this->db->insert('users', $data);  // table name users
    }
    }