2012-12-09 4 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が指摘するように、コードは同じ関数を2回定義します。 – kiamlaluno

答えて

3

まず、あなたのサンプルコードが間違って貼り付けられていることを指摘したいと思います。同じ関数edit_formの2つの宣言があります。

最初の宣言が間違った貼り付けであったと仮定し、これに回答し続けます。

フォーム宣言で私が知っている大きな問題は、デフォルト値を格納するために "#value"を使用していることです。 "#default_value"を使用してください。

#valueを使用すると、ユーザーから送信された値は無視されます。

  1. Read more about use of #value

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

    から

  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.'), 
); 

また、私は強くDrupalのと対話するために多くの例を提供するモジュールであるthis linkをチェックすることをお勧めいたします。

+0

ありがとうD34dman。しかし、今私は問題を私にメッセージを与えるdefault_value:違法な選択が検出されました。サイト管理者に連絡してください。 –

+0

あなたはajaxを使用していますか? – D34dman

+0

私は私の問題を解決しました。どうもありがとうございました。 –

関連する問題