Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drupal FAPI表单调用回调两次_Drupal_Drupal Modules_Drupal 7_Drupal Fapi - Fatal编程技术网

Drupal FAPI表单调用回调两次

Drupal FAPI表单调用回调两次,drupal,drupal-modules,drupal-7,drupal-fapi,Drupal,Drupal Modules,Drupal 7,Drupal Fapi,堆栈溢出的第一篇文章。。。所以对我放松点 对于简单表单提交的Drupal FAPI多重回调问题,似乎没有合适的解决方案 问题是:我的表单在提交时会向相应的数据库表中添加两个条目。考虑到只有一个将其添加到数据库的调用,我认为可以安全地假设查询运行了两次(因此使用了双条目) 以下代码可能有助于为解决方案提供基础。哦,它也是Drupal7,所以文档仍然非常以D6为中心 function mymodule_sidebar_form_add_submit(&$form, &$form_st

堆栈溢出的第一篇文章。。。所以对我放松点

对于简单表单提交的Drupal FAPI多重回调问题,似乎没有合适的解决方案

问题是:我的表单在提交时会向相应的数据库表中添加两个条目。考虑到只有一个将其添加到数据库的调用,我认为可以安全地假设查询运行了两次(因此使用了双条目)

以下代码可能有助于为解决方案提供基础。哦,它也是Drupal7,所以文档仍然非常以D6为中心

function mymodule_sidebar_form_add_submit(&$form, &$form_state) {

  $form_values = $form_state['values'];

  $se_title = check_plain(trim($form_values['title']));
  $se_link = url(trim($form_values['link']));
  $se_content = check_plain(trim($form_values['content']));
  $se_image = isset($form_values['image']) ? $form_values['image'] : '';

  // The multi-line part below is actually a single line the real code
  $query = sprintf("INSERT INTO sidebar_element(title, image_url, content) 
      VALUES ('%s', '%s', '%s');", $se_title, $se_image, $se_content);

  db_query($query);
  drupal_set_message(t('Sidebar Element has been added successfully.'));
}
。。。“我的表单”功能包含一个提交按钮:

  $form['submit'] = array(
      '#value' => t('Add Sidebar'),
      '#type' => 'submit',
      '#title' => t('Add Sidebar'),
      '#submit' => array('mymodule_sidebar_form_add_submit'),
      );
我想我需要回答的问题是:

  • 首先为什么会有双重回调
  • 有没有办法识别第一次回调
  • 提前感谢大家

      $form['submit'] = array(
          '#type' => 'submit',
          '#value' => t('Save')
      );
      $form['#submit'] = array('my_form_submit');
    
    替换

    // The multi-line part below is actually a single line the real code
      $query = sprintf("INSERT INTO sidebar_element(title, image_url, content) 
          VALUES ('%s', '%s', '%s');", $se_title, $se_image, $se_content);
    
      db_query($query);
    

    对于Drupal 7

    // Add the buttons.
      $form['actions'] = array('#type' => 'actions');
    
      $form['actions']['submit'] = array(
        '#type' => 'submit', 
        '#access' => my_func(), 
        '#value' => t('Save'), 
        '#weight' => 100, 
        '#submit' => array('my_form_submit'),
      );
    

    例如,阅读代码以找出第二个调用来自何处,最简单的方法是安装devel.module并在提交回调中使用ddebug_backtrace()。您可能还需要禁用HTTP重定向才能看到它(exit())

    但更重要的是,使用API,Luke

    <?php
    db_insert('sidebar_element')
      ->fields(array(
        'title' => $se_title,
        'image_url' => $se_image,
        'content' => $se_content,
      ))
      ->execute():
    ?>
    
    
    
    这就是插入查询的样子,您所做的是不安全的

    对于SELECT,使用db_query()和命名占位符:

    <?php
    $result = db_query('SELECT * FROM {sidebar_element} WHERE title = :title', array(':title' => $something));
    ?>
    
    
    
    <?php
    $result = db_query('SELECT * FROM {sidebar_element} WHERE title = :title', array(':title' => $something));
    ?>