2015-07-18 4 views
3

У меня есть html-форма, которая используется для регистрации пользователей. Я хочу применить условие в CodeIgniter, если кто-то пишет 2 поля ввода (имя и фамилия), которые уже существуют в базе данных, а затем не позволяют вставлять данные. Как я могу написатьКак проверить несколько уникальных значений в CodeIgniter

$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]'); 

Как подать заявление на обоих? Как и то, и другое должно быть уникальным, но можно уже существовать. Я хочу что-то вроде "Combined уникального значения"

Пример:

Имени: Ali

Фамилия: Mohyudin

Если кто-то снова пишет то же самое в обоих полях то я не хочу вставлять данные в базу данных, но если кто-то пишет что-то вроде:

Имя: Ali

Фамилия: Имран

, то я должен принять пользователь.

+0

проверить это: http://stackoverflow.com/a/14577385/1682881 – SearchAndResQ

ответ

3

Вы можете сделать это с помощью обратного вызова в проверке

$this->form_validation->set_rules('firstname', 'First Name', 'required|callback_check_user');// call callback function 

$this->form_validation->set_rules('lastname', 'Last Name', 'required'); 

Проверьте комбинацию для имени и последнего anme

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; 
    } 
} 
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'); 

Надеюсь, это поможет!

0

Возможно, вас интересует моя пользовательская функция is_unique. это.

вы можете использовать его в 2-мя способами:

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, и поместить его в директории библиотек. Затем вы можете положить их 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; 
    } 
}