【发布时间】:2014-04-15 18:25:23
【问题描述】:
所以,我有我的项目表单,我可以在其中将用户创建到数据库中。那里 是三种类型的用户类型,管理员、版主和最终用户。
我创建用户表的查询如下:
CREATE TABLE IF NOT EXISTS users (
id SMALLINT(5) UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(70) NOT NULL,
email VARCHAR(70) NOT NULL,
username VARCHAR(9) NOT NULL,
password VARCHAR(60) NOT NULL,
user_type ENUM('admin','moderator','enduser'),
phone_number VARCHAR(10) NOT NULL,
school_id SMALLINT(5) UNSIGNED DEFAULT NULL,
CONSTRAINT fk_school_id
FOREIGN KEY (school_id)
REFERENCES schools(id)
ON UPADTE CASCADE ON DELETE RESTRICT,
subject_id SMALLINT(5) UNSIGNED DEFAULT NULL,
CONSTRAINT fk_subject_id
FOREIGN KEY (subject_id)
REFERENCES subjects(id)
ON UPDATE CASCADE ON DELETE RESTRICT
) ENGINE = INNODB;
所以 school_id 和 subject_id 作为外键工作。
在我的表单中,我有选择菜单,我可以在其中选择创建某种类型的用户。如果我选择创建管理员,表单将不会显示学校和学科的隐藏选择菜单。如果我选择创建版主,表单将显示隐藏的选择菜单。这是通过 JavaScript 完成的。
当我创建管理员时,一切正常。它将所有值存储在数据库中,并将 school_id 和 subject_id 值设置为 NULL。当我决定创建一个版主时,就会出现问题。即使我在选择菜单中设置了这些值,它仍然会将 school_id 和 subject_id 值设置为。
我知道我需要构建一个动态查询。只是不知道如何在 CodeIgniter 中以正确的方式实现它。如果我只是用意大利面条式的 PHP 编码,那将是小菜一碟,但由于我非常想学习使用 MVC 框架,所以这不是一个选择。
这是我的模型:
public function add_user($data) {
$data = array(
'username' => $data['username'],
'name' => $data['name'],
'email' => $data['email'],
'password' => $data['password'],
'user_type' => $data['user_type'],
'phone_number' => $data['phone_number']
);
$this->db->insert('users', $data);
}
我是否应该将这些 school_id 和 subject_id 值包含在数组中?
这是我的控制器(实际上是它的一部分):
$this->load->model('user');
$name = ucfirst($this->input->post('f_name')). " " .ucfirst($this->input->post('l_name'));
$data = array (
'name' => $name,
'email' => $this->input->post('email'),
'username' => $username,
'password' => $this->phpass->hash($password),
'user_type' => $this->input->post('user_type'),
'phone_number' => $this->input->post('phone_number'),
);
// Here's where I'm trying to build the dynamic part
if($this->input->post('school_id') && $this->input->post('subject_id'))
{
$data['school_id'] = $this->input->post('school_id');
$data['subject_id'] = $this->input->post('subject_id');
}
if($this->user->add_user($data))
{
// Inserted successfully
}
显然这不是正确的方法,因为它不起作用。我应该怎么做才能使用最佳做法使其发挥作用?
提前致谢!
【问题讨论】:
标签: php mysql codeigniter