如何使用drupal_write_record。表单提交时我的数据库不会更新

时间:2011-11-03 18:39:09

标签: php mysql drupal

我正在使用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');
}

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

2 个答案:

答案 0 :(得分:2)

有些事情不太正确:

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

    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');
    } 
    

    希望有所帮助。

答案 1 :(得分:1)

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