我是CodeIgniter的新手,我开始探索CI功能,特别是在这种情况下,表格构造。我已经阅读了有关此内容的文档,并且我已经在网上搜索过,但没有找到解决方案。
主要的问题是,当我指定一个字段时,它的值必须是唯一的,如果我输入一个特定的值,那么一切都没问题,但如果我没有抓住一个&#34 ;发生数据库错误" 1062错误(重复输入"文本"密钥"密钥")。我以错误的方式做某事。
在这里,我将解释我的代码。在此之前,我已经读过,为了使用id_unique[tablename.tablefield]
,您必须先为该特定字段设置一个唯一的ID,这就是我所做的。
你能更好地向我解释一下发生了什么吗?
以下是模型中的功能:
function save_users() {
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
$sql = $this->db->query("INSERT INTO users (username, password, email) VALUES ('".$username."', '".$password."', '".$email."') ");
}
这是控制器:
public function index() {
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->form_validation->set_rules("username","username","trim|required|xss_clean|callback_username_check");
$this->form_validation->set_rules("password","password","trim|required|md5");
$this->form_validation->set_rules("email","email","trim|required|valid_email|is_unique[users.email]");
if ($this->form_validation->run() == FALSE)
{
$this->load->view('myform');
}
else
{
$this->load->view('formsuccess');
}
}
public function username_check($str) {
if ($str != "admin") {
$this->load->model("new_model");
$this->form_validation->set_message("username_check", "The %s field cannot have username Test ");
$this->form_validation->set_message("is_unique[users.email]","Errore!");
$this->new_model->save_users();
return FALSE;
} else {
return TRUE;
}
}
答案 0 :(得分:0)
我不是100%确定您需要什么,但我会对您的代码进行一些更改。 例如,回调。我不认为您应该从回调函数将用户添加到数据库中。
这应该在表单验证通过后完成。
我会改变你的控制器,对此;
public function index()
{
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->load->model('new_model');
$this->form_validation->set_rules('username' 'Username', 'trim|required|xss_clean|callback_username_check');
$this->form_validation->set_rules('password' 'Password', 'trim|required|md5');
$this->form_validation->set_rules('email' 'Email Address', 'trim|required|xss_clean|valid_email|is_unique[users.email]');
if (!$this->form_validation->run())
{
$this->load->view('myform');
}
else
{
// Now we add the entry to the database
if ($this->new_model->save_user())
{
echo 'user added!';
}
else
{
echo 'error within model';
}
}
}
public function username_check($username)
{
if ($username == 'admin')
{
$this->form_validation->set_message('username_check', 'The %s cannot be "admin"');
return false;
}
else
{
return true;
}
}
我所做的是从回调函数中删除数据库条目,并将其移入索引函数,并在表单验证通过后运行。
这会解决您的问题吗?
现在运行该功能,会在模型"中说"错误,这是因为你的模型没有将任何东西返回给控制器。将save_user函数修改为此;
function save_users()
{
$username = $_POST['username'];
$password = $_POST['password'];
$email = $_POST['email'];
$sql = $this->db->query("INSERT INTO users (username, password, email) VALUES ('".$username."', '".$password."', '".$email."') ");
return ($this->db->affected_rows() > 0) ? true : false;
}