2012-12-09 5 views
5

У меня проблема с созданием модуля Drupal. Я создал форму для добавления в базу данных, но мне не повезло с созданием формы для редактирования некоторых записей, вот моя проблема. Проблема заключается в том, когда я загружаю значения в загрузку формы из базы данных и меняю их, а затем повторно обновляю форму кнопки отправки, прежде чем отправлять новые значения. Поэтому он обновляет базу данных так же, как и она. Вот код:Изменить форму в модуле drupal?

function edit_form($form, &$form_state) { 

$query = db_select('activity', 'f') 
    ->fields('f') 
    ->condition('IDA', $_GET['edit']); 
$thefile = $query->execute(); 
$title = ""; 
$desc = ""; 
$file = ""; 
$privacy = ""; 
    while($record = $thefile->fetchAssoc()) 
    { 
     $title = $record['title']; 
     $desc = $record['description'];ick submit button form refresh before it submit new values. So it updates into database same thing as it was. Here is a good : 

function edit_form($form, &$form_state) { 

$query = db_select('activity', 'f') ->fields('f') ->co 
     $file = $record['trainingresource']; 
     $privacy = $record['privacy']; 

    } 
    $form['activity'] = array(
    '#type' => 'fieldset', 
    '#title' => t('Create a new activity'), 
    '#tree' => TRUE, 


); 
    $form['activity']['title'] = array(
     '#type' => 'textfield', 
    '#title' => t('Title'), 
    '#description' => t('Please enter the title here.'), 
    '#value' => t($title), 
); 
$form['activity']['description'] = array(
    '#type' => 'textarea', 
    '#title' => t('Enter Description'), 
    '#value' => t($desc), 
    '#description' => t('Please put description here.'), 

); 
/* $form['activity']['date'] = array(
    '#type' => 'date', 
    '#title' => t('Enter activity date'), 

    '#description' => t('Please put activity date in here.'), 
); */ 
    $form['activity']['file'] = array(
    '#type' => 'file', 
    '#title' => t('Submit activity file'), 
'#value' => t($file), 
    '#description' => t('Please files in here.'), 
); 
    $form['activity']['security'] = array(
'#type' => 'radios', 
'#title' => t('Privacy'), 
'#value' => t($privacy), 
'#options' => array('True'=>t('True'),'False'=>t('False')), 
); 
    // Description 

    $form['hidden'] = array('#type' => 'value', '#value' => 'is_it_here'); 
    $form['submit'] = array('#type' => 'submit', '#value' => t('Save')); 
    return $form; 
} 

А вот представить код формы:

function edit_form_submit($form, $form_state) { 
$idt = $_GET['edit']; 
$title = trim($form_state['values']['activity']['title']); 
$desc = trim($form_state['values']['activity']['description']); 
//$date = trim($form_state['values']['activity']['date']['year']."-".$form_state['values']['activity']['date']['month']."-".$form_state['values']['activity']['date']['day']); 
$file = "file"; 
$privacy = trim($form_state['values']['activity']['security']['#value']); 


$nid = db_update('activity') // Table name no longer needs {} 
->fields(array(
    'title' => $title, 
    'description' => $desc, 
    //'date' => $date, 
    'trainingresource' => $file, 
    'privacy' => $privacy, 

)) 
->condition('IDA', $idt,'=') 
->execute(); 
drupal_set_message($idt); 
drupal_set_message("Added into database"); 
drupal_goto('activity', array('query'=>array(
'activ'=>$_GET['activ'], 
))); 
} 

Если кто-то есть такая же проблема или знают, как решить эту проблему, пожалуйста, помогите мне.

Заранее спасибо.

+0

Можете ли вы изменить код и удалить часть, которая является дополнительной? Как указал D34dman, код определяет одну и ту же функцию дважды. – kiamlaluno

ответ

3

Прежде всего, я хотел бы указать, что ваш пример кода был вставлен неправильно. Я вижу два объявления одной и той же функции edit_form.

Я предполагаю, что первая декларация была неправильной пастой и продолжала отвечать на это.

Основная проблема, с которой я столкнулся в вашей декларации формы, заключается в том, что вы используете «#value» для хранения значения по умолчанию. Используйте «#default_value».

Если вы используете # значение, оно игнорирует представленные пользователем значения.

  1. Read more about use of #value.
  2. Read more about use of #default_value

Например, изменения,

$form['activity']['description'] = array(
    '#type' => 'textarea', 
    '#title' => t('Enter Description'), 
    '#value' => t($desc), 
    '#description' => t('Please put description here.'), 
); 

в

$form['activity']['description'] = array(
    '#type' => 'textarea', 
    '#title' => t('Enter Description'), 
    '#default_value' => t($desc), 
    '#description' => t('Please put description here.'), 
); 

Также я настоятельно рекомендую вам проверить this link который является модулем, который предоставляет множество примеров взаимодействия с Drupal ,

+0

Большое спасибо D34dman. Но теперь у меня проблема с default_value, это дает мне сообщение: был обнаружен незаконный выбор. Пожалуйста свяжитесь с администратором сайта. –

+0

Вы используете ajax? – D34dman

+0

Я решил свою проблему. Большое спасибо. –

Смежные вопросы