【问题标题】:how to use drupal_write_record. my db doesnt update when form submits如何使用 drupal 写入记录。提交表单时我的数据库没有更新
【发布时间】:2011-11-03 18:39:09
【问题描述】:

我正在使用 drupal,并试图在一个块中创建自己的表单。

我写了一个模块,它创建一个带有提交按钮的块。

当提交表单时,我试图将值写入我的数据库。

我正在使用此代码

function my_module_my_form_submit($form, &$form_state) {
    block_example_insert_credits($credits_record);
}

function block_example_insert_credits() { 
  global $user;
  $credits_record = array(
    'nid' => $node->nid,
    'uid' => $user->uid,
    'credits' => $form_state['values']['bids'],
  );
  drupal_write_record('example_table', $credits_record, 'nid');
}

表单提交并验证,表和列存在于我的数据库中。当我提交表单时,没有任何东西发送到数据库,为什么我的代码不正确?

【问题讨论】:

    标签: php mysql drupal


    【解决方案1】:

    有些地方不太对劲:

    1. 您没有向block_example_insert_credits() 传递任何参数
    2. 您在my_module_my_form_submit() 中没有引用$credits_record,因此无论如何都不会将任何内容传递给插入函数。
    3. 您正试图从不存在的函数中访问 $form_state
    4. 您在任何地方都没有对节点对象的引用,因此您无法使用它。 $node 不是全局可用变量,如果您想要一个节点对象,它必须来自保存在表单中的值或来自 menu_get_object() 函数(如果块显示在节点页面上)。

    试试这个代码,看看你有没有运气:

    function my_module_my_form_submit($form, &$form_state) {
      block_example_insert_credits($form_state);
    }
    
    function block_example_insert_credits($form_state) {
      global $user;
      $node = menu_get_object();
      $credits_record = array(
        'nid' => $node->nid,
        'uid' => $user->uid,
        'credits' => $form_state['values']['bids'],
      );
      drupal_write_record('example_table', $credits_record, 'nid');
    } 
    

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      我是一个drupal新手,如果我错了,请道歉......不是应该从form_submit传递给插入方法的$node或&$form_state吗?......也许你可以通过使用看门狗检查信用记录数组来检查值是否正确传递...干杯

      【讨论】:

        猜你喜欢
        • 2021-09-20
        • 1970-01-01
        • 2012-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多