Drupal hook_submit写入db

时间:2012-02-01 16:39:12

标签: php mysql drupal

我现在正在接受构建自定义模块的挑战。

我已经开始非常小,只是为了尝试和drupal钩子和模块的理解。

我创建了一个带有一个文本条目的简单表单,唯一的验证是该字段不为空。

在表单提交上,我想写一个自定义表。该表存在。
我的领域是:
nid int(11)
eid int(11)主键自动增量
title 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,如何获取该值并在db中更新它以免影响任何其他模块?

非常感谢任何帮助

1 个答案:

答案 0 :(得分: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()创建节点