Я работаю над сайтом в codeigniter. Я не настолько эксперт, использующий framework.Here мне нужно проверить, существует ли электронная почта в базе данных. Я закодировал требуемые функции, но при отправке формы я получаю сообщение об ошибке. В контроллере я сделал следующее правило.
Мой код:
$this->form_validation->set_rules( 'email', 'Email', 'trim|required|valid_email|is_unique|callback_isEmailExist' ); public function isEmailExist($email) { $this->load->library('form_validation'); $this->load->model('user'); $is_exist = $this->user->isEmailExist($email); if ($is_exist) { $this->form_validation->set_message( 'isEmailExist', 'Email address is already exist.' ); return false; } else { return true; } }
в модели пользователя функция:
function isEmailExist($email) { $this->db->select('id'); $this->db->where('email', $email); $query = $this->db->get('users'); if ($query->num_rows() > 0) { return true; } else { return false; } }
Когда я отправляю форму, я получаю следующие ошибки.
Возникла ошибка PHP
Уровень важности: уведомление
Сообщение: Неопределенное смещение: 1
Имя файла: libraries / Form_validation.php
Ошибка базы данных Произошла
Номер ошибки: 1064
У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'WHERE `=' muraddnw@gmail.com 'LIMIT 1' в строке 2
SELECT * WHERE `= 'muraddnw@gmail.com' LIMIT 1
Имя файла: C: \ xampp \ htdocs \ aunction \ system \ database \ DB_driver.php
Номер строки: 330 Кто-нибудь мне помогает. Заранее спасибо.
Ваша проблема в строке set_rules. Здесь вы используете как is_unique
и функцию callback
. Вы должны использовать кого-либо из этого. Если вы используете функцию call_back для проверки повторяющихся данных; не нужно использовать is_unique. For this wrong you get that error
Просто удалите is_unique
оттуда.
$this->form_validation->set_rules('email','Email','trim|required|valid_email|callback_isEmailExist'); // removed is_unique
Попробуйте это и дайте мне знать.
Просто добавьте is_unique[tablename.fieldname]
к проверке формы. например:
array('field' => 'email', 'label' => 'Email', 'rules' => 'trim|required|valid_email|is_unique[users.email]'));
$this->form_validation->set_rules('username', 'userName', 'required|callback_exists_username'); #uniqueness of username function exists_username($str) { $record_id = $this->input->post('record_id'); $condition = array('user_id !='=>$record_id,'username'=>$str); $value =GetAllRecord('user_master',$condition,$is_single=true); if (count($value) == 0) { return TRUE; } else { $this->form_validation->set_message('exists_username', 'username already exists!'); return FALSE; } }
Ваша модель похожа на
$this->db->select('id'); $this->db->where('email', $email);
скажите mysql, из какой таблицы вы хотите получить запись.
$this->db->from('tablename');
это было бы похоже на
$this->db->select('id'); $this->db->from('tablename'); $this->db->where('email', $email);
У вас есть ошибка в запросе mysql: –
SELECT * WHERE ` = 'muraddnw@gmail.com' LIMIT 1
Ваш код не указал, из какой таблицы запрашивать. Поэтому используйте следующее: –
$this->db->select('id'); $this->db->from('tablename'); $this->db->where('email', $email);
Надеюсь это поможет.
нет необходимости делать специальную функцию, этого достаточно
$this->form_validation->set_rules( 'email', 'Email', 'trim|required|valid_email|is_unique' );
Используйте is_unique[table.field]
добавьте имя и поле таблицы.
$this->form_validation->set_rules( 'email', 'Email', 'trim|required|valid_email|is_unique[table.field]|callback_isEmailExist' );
вы можете проверить, является ли поле уникальным или нет, с помощью функции is_unique[table_name.field_name]