Формы в Drupal: default_value и value.

До сих пор применял атрибуты '#default_value' и '#value' не особо задумываясь об их отличиях. Делал по образцу и как-то само собой получалось правильно. Но удача отвернулась от меня, я ошибся и на меня снизошло просветление.

Вчера сел делать форму. Все очень просто - данные загружаются в форму из mysql пользователь их редактирует нажимает кнопку "Изменить" и новые данные отправляются в БД.

<?php
function module_edit(&$form_state){
// Получение данных из БД
// ...
   
if($cat=db_fetch_object($result)){
       
$form=array();
       
$form['f']=array(
                    
'#type'=>'textfield',
                    
'#value'=>$f,
                     );
       
$form['submit']=array(
                   
'#type'=>'submit',
                   
'#value'=>'Изменить',
                    );
        return
$form;

?>

В приведенном коде я использовал '#value'. В результате в массиве $form_state['values'] хранились не введенные пользователем данные, а те, что первоначально были в форме.
<?php
function module_edit_submit($form,&$form_state){
   
$f=$form_state['values']['f'];
// Обработка данных
// ...
}
?>

Переменная $f содержала устаревшие данные. А введенные пользователем данные нужно искать в массиве $form_state['clicked_button']['#post'].
После замены '#value' на '#default_value' все встало на свои места.

Ссылки с других сайтов

Пока ничего нет
Tags:

Комментарии:

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><h2><h3><img><p><b><img>
  • Строки и параграфы переносятся автоматически.
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.
  • Each email address will be obfuscated in a human readable fashion or (if JavaScript is enabled) replaced with a spamproof clickable link.

Подробнее о форматировании

КАПЧА
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
Синдикация материалов