2012-02-01 35 views
0

我現在正在構建自定義模塊的挑戰。Drupal hook_submit寫入db

我已經開始非常小,只是爲了嘗試和理解drupal鉤子和模塊。

我創建了一個帶有一個文本條目的簡單表單,唯一的驗證是該字段不是空的。

在表單提交我想寫入自定義表。該表存在。
我的領域是:
NID INT(11)
EID INT(11)主鍵自動遞增
標題爲varchar(50)

這裏是我的形式:

function my_module_my_form($form_state) { 
$form['esp'] = array(
    '#type' => 'fieldset', 
    '#title' => t('Add a ESP'), 
    '#collapsible' => TRUE, 
    '#collapsed' => FALSE, 

); 
$form['esp']['title'] = array(
    '#type' => 'textfield', 
    '#title' => t('ESP Name'), 
    '#required' => TRUE, 
    '#default_value' => '', 
    '#description' => "Enter the ESP Name", 
    '#size' => 20, 
    '#maxlength' => 20, 
); 

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

,這裏是我已經設置的hook_submit()

function my_module_my_form_submit($form, $form_state) { 
db_query("INSERT INTO my_module_esp (title) VALUES (".$form_state['values']['title'].")"); 
drupal_set_message(t('The form has been submitted.')); 
} 

但是這不起作用...任何建議蒸發散? 另外我想添加最新的NID到這個表中,我將如何獲取該值並在數據庫中更新它,因此它不會影響任何其他模塊?

任何幫助,將不勝感激

回答

1

你需要採取何種形式的層次考慮。嘗試使用:

function my_module_my_form_submit($form, $form_state) { 
    db_query('INSERT INTO {my_module_esp} (title) VALUES ("%s")', $form_state['values']['esp']['title']); 
    drupal_set_message(t('The form has been submitted.')); 
} 

如果你需要這個分配NID,那麼你應該在實際代碼創建一個節點,以便301 真的的東西有關。節點表中的主鍵是auto_increment,所以如果您不在此代碼中創建節點,則其他人可以創建博客帖子並將分配301.使用node_save()創建節點

+0

可以說,輸入的最後一個節點是300,那麼我想將它分配給節點301,並讓drupal知道它現在處於301計數狀態,並且不會將301分配給任何其他的作爲nid。 – Beyerz 2012-02-01 20:54:16

+0

@Beyerz看到我的編輯以上 – Laxman13 2012-02-01 21:02:15

+0

我做了我的$ form_state一的print_r下 '$ form_state我輸入時,出現[「值」] [「標題」];' 所以我用的數據庫查詢,如下所示: 'db_query ('INSERT INTO {my_module_api_esp}(title)VALUES(「%s」)',$ form_state ['values'] ['title']);' 但我仍然沒有看到這個被插入到我的db :(我從來沒有想過這可能是如此令人沮喪,謝謝你的建議,還有什麼我可以嘗試或應該知道爲了使這項工作? – Beyerz 2012-02-03 07:35:10