我目前正在使用Codeigniter。我正在尝试创建一个注册页面。 注册位于视图文件中。在填写注册表后,我想将用户的信息发送给控制器。之后我想检查信息是否有效(用户名尚未使用..有效的电子邮件地址等)。如果是,则将相同的信息发送到添加到数据库的Model。如果它是假的,那么加载视图注册页面。我发现很多主题都在谈论如何从控制器发送变量到视图(将动态数据添加到CodeIgniter网站上的View)或控制器模型,但没有找到任何有关view->控制器的信息。这就是我想要做的事情:
VIEW CONTROLER
_______________ ______________________
|REGISTRATION:| -----------> |Check valid argument|
--------------- ----------------------
/|\ | |
|___________________| If it's valid information
(if no valid) |
|
\ /
MODEL
____________________________
|Add information to database|
-----------------------------
这是我的表格:
<h1>create a new account</h1>
<?php echo validation_errors();?>
<?php echo form_open('index.php/add_db');?>
<label for='name'>Name</label>
<input type='text' size='20' id='name' name='name'/>
<br />
<label for='last_name'>Last_Name</label>
<input type='text' size='20' id='last_name' name='last_name'/>
<br />
<label for='username'>Username</label>
<input type='text' size='20' id='username' name='username'/>
<br />
<label for='password'>Password</label>
<input type='password' size='20' id='username' name='password'/>
<br />
<label for='confirmation_password'>Password confirmation</label>
<input type='password' size='20' id='password' name='password'/>
<br />
<input type="submit"/>
</form>
这是我的控制器文件
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Add_db extends CI_Controller
{
function __construct()
{
parent:: __construct();
$this->load->database();
}
function index()
{
//check if the password does match
//check before if the username is not already user
//open the model function which add to the database :)
}
}
我不知道在模型中检查用户信息是否更好。因为我知道模型处理数据库和查询。 否则控制器处理计算部分,因此控制器可能更适合此任务。 但没关系。是否可以发送视图----&gt;控制器等信息? 或者我有没有找到另一种检查信息的方式? 像控制器一样 - &gt;查看 - &gt;模特?
谢谢
答案 0 :(得分:1)
尝试此选项,
首先从视图发送数据到控制器和控制器检查数据是否有效(服务器端验证)如果有效则发送到模块说功能名称check_user_data
如果该功能检查密码是否匹配,用户名是如果您发现确定,则不是用户,然后调用新函数说save_user_data
并插入用户数据,如果不正常则从该函数返回false返回控制器。
您的流程:
在您的选项中将用户数据发送到控制器,然后调用模块功能以检查用户信息是否正确,如果是,则将数据发送到模块以便插入。
在这里,您要对模块进行两次调用。
通过这种方式你可以减少不。控制器和模块之间的呼叫。
答案 1 :(得分:1)
你可以这样做
DAO
在你的模型中,应该有插入功能
function __construct()
{
parent:: __construct();
$this->load->database();
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
}
function index(){
//first set the validation rules
$this->form_validation->set_rules('name', 'Name', 'required');
$this->form_validation->set_rules('last_name', 'Last Name', 'required');
$this->form_validation->set_rules('username', 'User Name', 'required');
//re_password is the input field name of confirm password
$this->form_validation->set_rules('password', 'Confirm password', 'trim|required|matches[re_password]');
if ($this->form_validation->run() == FALSE) {
//return to data form again
$this->load->view('myform');
}
else{
//if validation is ok, then save data in db
//this is the way that catch, data coming from view in the controller
$name = $this->input->post('name');
$last_name = $this->input->post('last_name');
$username = $this->input->post('username');
$password = $this->input->post('password');
// then you can send these date to database
//to send to db using array, array keys should match with the db table column names
$data_to_db['name'] = $name;
$data_to_db['last_name'] = $last_name;
$data_to_db['username'] = $username;
$data_to_db['password'] = $password;
//this model should be loaded in this controller
//send data from controller to model
$this->model_name->insert($data_to_db);
}
}