Подтвердить что ты не робот

Codeigniter: Как создать форму редактирования, которая использует проверку формы и переназначение?

У меня есть простая форма в codeigniter, которую я хочу использовать для редактирования или записей. Я нахожусь на этапе отображения моей формы и значений, введенных в соответствующие поля ввода.

Это делается простым установкой значений указанных ящиков в зависимости от того, что им нужно в представлении:

<input type="text" value="<?php echo $article['short_desc'];?>" name="short_desc" />

Но, если я хочу использовать form_validation в codeigniter, тогда я должен добавить этот код в мою разметку:

<input value="<?php echo set_value('short_desc')?>" type="text" name="short_desc" />

Таким образом, значение не может быть задано с помощью функции set_value, если оно должно быть повторно заселено по ошибке из данных сообщения.

Есть ли способ объединить два, чтобы моя форма редактирования отображала значения, которые нужно редактировать, но также повторно заполнять?

Спасибо

4b9b3361

Ответ 1

set_value() может фактически принять второй аргумент для значения по умолчанию, если нечего перезаписывать (по крайней мере, глядя на версии 1.7.1 и 1.7.2 CI). В библиотеке Form_validation.php(строка 710):

/**
 * Get the value from a form
 *
 * Permits you to repopulate a form field with the value it was submitted
 * with, or, if that value doesn't exist, with the default
 *
 * @access  public
 * @param   string  the field name
 * @param   string
 * @return  void
 */ 
function set_value($field = '', $default = '')
{
    if ( ! isset($this->_field_data[$field]))
        {
            return $default;
        }

        return $this->_field_data[$field]['postdata'];
}

Итак, имея в виду, вы должны просто передать свое значение по умолчанию для set_value следующим образом:

<input value="<?php echo set_value('short_desc', $article['short_desc'])?>" type="text" name="short_desc" />

Если для повторного заполнения нет значения, set_value() по умолчанию будет $article['short_desc']

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