我有一个用于注册用户的html表单。我想在codeIgniter中应用一个条件,如果有人写了数据库中已存在的2个输入字段(firstname和lastname),则不允许插入数据。 就像我可以写
$this->form_validation->set_rules('firstname', 'First Name', 'required|is_unique[student.firstname]');
$this->form_validation->set_rules('lastname', 'Last Name', 'required|is_unique[student.lastname]');
如何申请?两者都应该是独一无二的,但已经存在。我想要“组合独特的价值”
示例:
名字:阿里
姓氏:Mohyudin
如果有人在两个字段中再次写入相同内容,那么我不想在数据库中插入数据,但如果有人写了类似的内容:
名字:阿里
姓氏:Imran
然后我应该接受用户。
答案 0 :(得分:8)
您可以使用验证回调
来完成此操作$this->form_validation->set_rules('firstname', 'First Name', 'required|callback_check_user');// call callback function
$this->form_validation->set_rules('lastname', 'Last Name', 'required');
检查名字和最后一个组合的组合
function check_user() {
$first_name = $this->input->post('firstname');// get fiest name
$last_name = $this->input->post('lastname');// get last name
$this->db->select('user_id');
$this->db->from('student');
$this->db->where('firstname', $first_name);
$this->db->where('lastname', $lase_name);
$query = $this->db->get();
$num = $query->num_rows();
if ($num > 0) {
return FALSE;
} else {
return TRUE;
}
}
答案 1 :(得分:0)
一个简单的解决方案是添加自定义验证方法。
如果您还没有已在application/libraries
目录中创建名为MY_Form_validation.php
(区分大小写)的文件,请执行以下操作:
class MY_Form_validation extends CI_Form_validation
{
public function __construct($rules = array())
{
parent::__construct($rules);
}
}
然后在该文件中你可以有类似的东西:
public function unique_user_name()
{
$firstname = $this->CI->input->post('firstname');
$lastname = $this->CI->input->post('lastname');
$check = $this->CI->db->get_where('users', array('firstname' => $firstname, 'lastname' => $lastname), 1);
if ($check->num_rows() > 0) {
$this->set_message('unique_user_name', 'This name already exists in our database');
return FALSE;
}
return TRUE;
}
最后你的规则将是:
$this->form_validation->set_rules('firstname', 'First Name', 'trim|required');
$this->form_validation->set_rules('lastname', 'Last Name', 'trim|required|unique_user_name');
希望这有帮助!
答案 2 :(得分:0)
也许您对我的自定义is_unique函数感兴趣。 在这里。
您可以通过两种方式使用它:
1. is_unique[table_name.field_to_check.id_field_name.id_field_value] //<-- unique 1 field only
2. is_unique[table_name.field_to_check.id_field_name != 'id_field_value' and anotherIdName='theValue'] //<-- custom where
只需将此代码保存在文件中,将其命名为MY_Form_Validation.php,并将其放在libraries目录下。然后你可以把那些is_unique
//is_unique[table_name.field_to_check.id_field_name.id_field_value] <-- unique 1 field only
//is_unique[table_name.field_to_check.id_field_name != 'id_field_value' and anotherIdName='theValue'] <-- custom where
class MY_Form_validation extends CI_Form_validation {
public function is_unique($str, $field)
{
$hasil = true;
try {
//hanya validasi jika ada isinya. jika tidak ada isinya, tidak usah divalidasi.
//karena kalau memang tidak boleh kosong, bisa kasih validasi required
if ($str) {
$x = substr_count($field, '.');
if(strpos($field, "=") > 0) {
list($table, $field, $where) = explode('.', $field);
// list($table, $field, $id_field, $id_val, $where) = explode('.', $field);
$is_unique = 0;
if ($where) {
$logos = "select * from $table where $field =? and $where ";
} else {
$logos = "select * from $table where $field =? ";
}
$data = array($str);
$qq = $this->CI->db->query($logos, $data);
if (is_log_query()) {
$logos = $this->CI->db->last_query();
log_to_file($logos);
}
$row = $qq->row();
if ($row) {
if ($row->id) {
// if ($row->$id_field == $id_val) {
// $is_unique = 1; //berarti jika edit miliknya sendiri
// } else {
// //berarti id milik record lain
// }
} else {
//berarti sudah ada di xuser_confirmed
}
} else {
$is_unique = 1; //belum ada sama sekali
}
$hasil = (bool)$is_unique;
}
else {
if ($x >= 3) {
list($table, $field, $id_field, $id_val) = explode('.', $field);
$is_unique = 0;
if ($id_field && $id_val) {
$logos = "select * from $table where $field =? and $id_field != '$id_val' ";
} else {
$logos = "select * from $table where $field =? ";
}
$data = array($str);
$qq = $this->CI->db->query($logos, $data);
if (is_log_query()) {
$logos = $this->CI->db->last_query();
log_to_file($logos);
}
$row = $qq->row();
if ($row) {
if ($row->id) {
if ($row->$id_field == $id_val) {
$is_unique = 1; //berarti jika edit miliknya sendiri
} else {
//berarti id milik record lain
}
} else {
//berarti sudah ada di xuser_confirmed
}
} else {
$is_unique = 1; //belum ada sama sekali
}
$hasil = (bool)$is_unique;
}
else if ($x == 1) {
list($table, $field) = explode('.', $field);
$query = $this->CI->db->limit(1)->get_where($table, array($field => $str));
$hasil = $query->num_rows() === 0;
}
}
}
}catch (Exception $e) {
die($e->getTraceAsString());
}
return $hasil;
}
}