【问题标题】:Drupal hook_submit write to dbDrupal hook_submit 写入数据库
【发布时间】:2012-02-01 16:39:12
【问题描述】:

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

我从很小的地方开始尝试和理解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 添加到该表中,如何获取该值并在 db 中更新它,以免影响任何其他模块?

任何帮助将不胜感激

【问题讨论】:

    标签: php mysql drupal


    【解决方案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()创建一个节点

    【讨论】:

    • 让我们说最后输入的节点是 300,然后我想将其分配为节点 301,并让 drupal 知道它现在处于计数 301 并且不会将 301 分配给其他任何东西作为 nid。
    • 我在我的 $form_state 上做了一个 print_r 并且我的输入出现在 $form_state['values']['title']; 下所以我使用了如下的数据库查询:db_query('INSERT INTO {my_module_api_esp} (title) VALUES ("%s")', $form_state['values']['title']); 但我仍然没有看到它被插入到我的数据库中:(我从没想过这会如此令人沮丧。感谢您的建议,为了完成这项工作,我还有什么可以尝试或应该知道的吗?
    • 是否至少设置了 Drupal 消息,告诉您表单已提交?
    • 嗨 Laxman,这有点奇怪。我现在可以写入数据库,但是没有显示 drupal 消息。不过,我目前并不太担心这一点。我已经在drupal 周围寻找有关构建.module 的指南,以及如何将其构建为节点类型。我想知道您是否可以帮助指导我或将我引向我没见过的东西
    • 这确实是一个单独问题的理由,尽管我知道至少有几个关于在模块中创建节点类型的问题。我建议在这里和 Google 搜索以在模块中创建内容类型
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    相关资源
    最近更新 更多