У меня проблема с моей функцией обратного вызова. Я создаю обратный вызов, который может подтвердить, что введенное имя пользователя совпадает с именем пользователя. Если это не то же самое, то подтвердите, если они уже существуют. Если не существует, то проверка должна пройти.Всегда возвращайте TRUE в Codeigniter form_validation callback
Вот что я сделал в процессе:
- Стараюсь обычно проверяются поля (требуется, max_length, min_length) == OK
- Input уже существует имя пользователя = OK
- ввода нового username = NOT OK
Когда я пытаюсь ввести новое имя пользователя. Он сказал, что он уже существует. И когда я проверил базу данных, он уже обновил мое имя пользователя.
Вот что у меня есть в моем коде:
CONTROLLER
$this->form_validation->set_rules('username', 'Username', 'required|trim|min_length[8]|max_length[30]|username_check');
$this->form_validation->set_rules('lastname', 'Last Name', 'required');
$this->form_validation->set_rules('firstname', 'First Name', 'required');
$this->form_validation->set_rules('email', 'Email Address', 'required|valid_email');
$this->form_validation->set_rules('phone1', 'Primary Contact', 'required');
$this->form_validation->set_rules('address1', 'Primary Address', 'required');
$this->form_validation->set_rules('birthday', 'Birthday', 'required');
$this->form_validation->set_rules('gender', 'Gender', 'required');
if($this->input->post('password1')) {
$this->form_validation->set_rules('password1', 'Password', 'required|trim|min_length[8]|max_length[16]');
$this->form_validation->set_rules('password2', 'Confirm Password', 'required|trim|matches[password1]');
}
if($data['role_id'] == 1 || $data['role_id'] == 2) {
$this->form_validation->set_rules('role', 'User Role', 'required');
$this->form_validation->set_rules('status', 'Status', 'required');
}
if($this->form_validation->run() == TRUE) {
$username = strtolower($this->input->post('username'));
$password = $this->input->post('password1');
/** some code here **/
МОЙ ХЕЛПЕР CALLBACK
if(!function_exists('is_username_exists')) {
function is_username_exists($username) {
$ci =& get_instance();
$ci->db->select('user_id');
$ci->db->where('username', $username);
$checkValid = $ci->db->get('user');
$num = $checkValid->num_rows();
if($num > 0) {
return FALSE;
} else {
return TRUE;
}
}
}
if(!function_exists('username_check')) {
function username_check($username) {
$ci =& get_instance();
$current_value = $ci->flx_user->getUsername();
//check if the input value is same as the saved value
if($current_value != $username) { //if not same check if already existed
$is_available = is_username_exists($username);
if(!$is_available) {
$ci->form_validation->set_message('username_check', 'Username already taken. Please try again.');
return FALSE;
} else {
return TRUE;
}
} else {
// if the same just bypass it
return TRUE;
}
}
}
Можете ли вы помочь мне с этим?
Если это не будет: 'WHERE имя пользователя =«». $ ci-> db-> escape ($ username). "'? (с окружающими одинарными кавычками?) –