2012-12-09 53 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」。

如果使用#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

我解決了我的問題。非常感謝你。 –