У меня есть выделенный файл, расположенный в applications/config/form_validation.php
для моих валидаций. Два поля для создания нового пользователя должны быть уникальными, их идентификационная карточка и электронная почта.Проблемы с проверкой Codeigniter для уникальных полей при редактировании формы
'user' => array(
array(
'field' => 'email',
'label' => 'E-MAIL',
'rules' => 'required|valid_email|is_unique[usuario.email]'
),
array(
'field' => 'cpf_cnpj',
'label' => 'CPF',
'rules' => 'required|_validate_cpf|is_unique[usuario.cpf_cnpj]'
),
...
)
В начале, я использовал ту же группу валидаций для редактирования формы, но у меня были проблемы с этими двумя полями, потому что они всегда были быть обвиненным не является уникальным.
Итак, я добавил в мою форму поле hidden
, чтобы сохранить текущее значение этих полей и добавить другое, также сохраняя значение, но только тот, который отображается в представлении, будет единственным, который будет редактироваться, и затем, в методе edit
, условие будет происходить, прежде чем продолжить, чтобы проверить, если hidden
поле отличается от регулярного поля:
// HTML
<input type="email" name="novoemail" class="email <?php echo form_error('novoemail') ? 'campo_aviso' : ''; ?>" value="<?php echo $u['email']; ?>"/>
<input type="hidden" name="email" value="<?php echo $u['email']; ?>"/>
// In `edit`
if ($this->input->post('email') !== $this->input->post('novoemail')) {
$this->form_validation->set_rules('email', 'E-MAIL', 'is_unique[usuario.email]');
}
if ($this->form_validation->run('edit_user')) { ... }
Если разница была найдена, добавить правило, чтобы сделать его уникальным. Проблема в том, что любая разница, даже если введенное электронное письмо не существует, оно терпит неудачу и обвиняет в том, что оно не уникально.
Мне нужно найти способ редактировать уникальные поля и по-прежнему гарантировать уникальность.
Это не удается, потому что в 'form_validations.php' издание также проверяет, является ли оно уникальным. Это проблема CI. В любом случае, ваше решение помогло мне. Я немного отредактировал, повторно использовал методы, которые я создал и работал. Очень признателен. – mfgabriel92
Отлично, я рад, что вы смогли сделать что-то полезное. – Joe