5

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

誰かが同じ問題を抱えているか、この問題を解決する方法を知っているなら、私を助けてください。

前もって感謝します。

4

1 に答える 1

3

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

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

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

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

  1. #valueの使用についてもっと読む
  2. #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.'),
);

また、Drupalと対話するための多くの例を提供するモジュールであるこのリンクを確認することを強くお勧めします。

于 2012-12-09T13:05:25.013 に答える