您在這裡

[已解決]custom form 自動紀錄新增者

Webster H.'s 的頭像
Webster H. 在 2015-08-07 (週五) 18:06 發表

大家好,

我使用Data這個模組於資料庫中新增了一張資料表(profile)

我也上網查了一些資料,目前已經可以自己新增內容至資料庫

[已解決。Code如下]想請問,該如何在新增紀錄時,可以取得當下的使用者是誰(current user)並將使用者的名稱一同紀錄下來(用使用者名稱紀錄到profile資料表中user的欄位,就是可以紀錄這筆資料是誰新增的)

我的code目前如下:

<?php

/**
 * @file
 * Demonstrates how to add move labels to side
 */

/**
 * Implements hook_menu().
 */
function addfood_menu() {
  $items['food/add'] = array(
    'title' => '新增紀錄',
    'page callback' => 'addfood_page',
    'access callback' => TRUE,
  );
  return $items;
}

/**
 * Implements hook_permission.
 */
function addfood_permission() {
  return array(
    'addfood module' => array(
      'title' => t('Addfood module permission'),
  ));
}

/**
 * Returns form render array.
 */
function addfood_form($form, &$form_state) {
  if (user_access('addfood module')) {
  //Allowed
  
  $form['name'] = array(
    '#title' => t('名稱'),
    '#type' => 'textfield',
    '#required' => TRUE,
  );
  $form['calorie'] = array(
    '#title' => t('卡路里'),
    '#type' => 'textfield',
    '#required' => TRUE,
    '#description' => t('填寫卡路里(單位:千卡)'),
  );
  $form['notes'] = array(
    '#title' => t('備註'),
    '#type' => 'textarea',
    '#resizable' => TRUE,
    '#description' => t('相關備註'),
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Submit',
  );
  return $form;
  } else {
  //Access denied,這邊寫得不太好,可以再修改一下
  header('Location: ../user/login?destination=food/add');
  }
}

/**
 * Menu callback.
 */
function addfood_page() {
  return drupal_get_form('addfood_form');
}

/**
 * Submission handler for form_example -> Insert into database
 */
function addfood_form_submit($form, &$form_state) {
  global $user;
  $fe_id = db_insert('profile')
    ->fields(array(
      'name' => $form_state['values']['name'],
      'calorie' => $form_state['values']['calorie'],
      'notes' => $form_state['values']['notes'],
      'user' => $user->name,
    ))
    ->execute();
   
  drupal_set_message(t('內容已新增!!!!'));  
  
  return $form;
}
?>

 

不太明白你的意思。你能否說明一下:

  1. 到底想要達到什麼功能?(描述實際的使用情境)
  2. 為什麼不設計一個內容類型來滿足這樣的功能,而一定要用 data 模組來處理?

這樣其他人才能提出比較具體的建議。

tky

hello你好,

因為我想要讓所有的欄位是在同一個資料表中

使用內容類型的話,每個欄位會分散到不同的資料表

因為到時候有其他用途,要在一個一個去做對應 有點麻煩

 

現在想要問的,就是該如何取得當下使用者是誰,在新增的紀錄的時候,可以一起被寫入資料庫中@@

不曉得你的目標是什麼,

tky所建議的內容類型作法,好處是,

  1. 你要未來要增加或減少欄位都還滿簡單的,也不需要自己寫code去處理,
  2. 要撈資料的話,用views就滿方便的,且有眾多的module支援,應該可以解決大部份的問題
  3. 新增紀錄的時候,每個node本來就會新增作者

 

BTW, 因為看起來你會寫程式,其實看一下drupal 的api,應該會挺快的

因為我到時候會需要使用ID撈出資料

用內容類型建立的話 所有欄位的資料會散布在各個不同的table裡面

還要另外再去做配對 覺得有點複雜

所以才想說如果有簡單的一個form可以直接寫入到單一資料表中

views也有支援data,所以我還是可以用views來呈現資料內容

主要就是有一些其他非在網站上需要操作的用途啦

 

謝謝大家的回覆^^

username 是可以任何改變的 :) user ID 就不會....你上面寫死了,所以...某程度是可以不認帳的.... 某程度,後來者使用了相同名字,是極不幸的...

讀取出資料時,如果不是使用 Views 時需要注意安全問題,因為 Content Type Nodes 都會經過 XSS FILTER。

Hello Kay,

的確應該用UID來紀錄比較妥當一些

另外,讀取資料是使用views沒錯!

謝謝你的提醒yes