Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/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 6 Drupal6:为用户帐户注册表单写入2个不同的表_Drupal 6_Drupal Hooks - Fatal编程技术网

Drupal 6 Drupal6:为用户帐户注册表单写入2个不同的表

Drupal 6 Drupal6:为用户帐户注册表单写入2个不同的表,drupal-6,drupal-hooks,Drupal 6,Drupal Hooks,当用户在创建标准Drupal帐户时点击提交按钮时,我如何将自定义字段值$form['site\u select']传递给案例“insert”,以便将其写入“另一个表”。常规用户数据(如用户名和密码)需要继续写入默认的“用户”表 问:为什么不让Drupal像往常一样序列化并将数据保存到“数据”字段中的“用户”表中 答:因为我希望能够在另一种Drupal表单中使用AJAX和autocomplete,以及在MySQL中查询特定的自定义字段。MySQL无法序列化/取消序列化。例如,从另一个\u表中选择不

当用户在创建标准Drupal帐户时点击提交按钮时,我如何将自定义字段值$form['site\u select']传递给案例“insert”,以便将其写入“另一个表”。常规用户数据(如用户名和密码)需要继续写入默认的“用户”表

问:为什么不让Drupal像往常一样序列化并将数据保存到“数据”字段中的“用户”表中


答:因为我希望能够在另一种Drupal表单中使用AJAX和autocomplete,以及在MySQL中查询特定的自定义字段。MySQL无法序列化/取消序列化。例如,从另一个\u表中选择不同的站点\u名称

您可能想要更改用户注册表单,以便将您自己的回调函数添加到该表单的提交属性中,如:

function Mymodule_user($op,&$edit, &$account, $category = NULL) {
  switch ($op) {
    case 'register':
      $result = db_query("SELECT id,name FROM {sites} ORDER BY name");
      while($row=db_fetch_array($result)) {
        $sites[$row['id']] = $row['name'];
      }

      $form['site_select'] = array(
        '#type' => 'select',
        '#title' => t('Select your site'),
        '#options' => $sites,
      )
      return $form;

    case 'insert':
      //How to take the $form values from above and use in my query to
      //write to my own table while writing to the standard 'users' table?
      db_query("INSERT INTO {another_table} (site_name) VALUES ('%s')",
               $form['site_select']);
);

这管用!但是现在有没有办法使这些自定义字段不被写入“数据”字段中的“用户”表中,然后在该表中被序列化?我不想把数据放在两个地方。我将自定义表单字段$form['site\u select']移动到Mymodule\u form\u user\u register\u alter中,但它仍然会被捕获到'data'字段中的'users'表中。在这种情况下,您应该确保提交回调在其他回调之前执行,而不是$form['submit'][='MYMODULEs\u own\u register\u submit\u callback\u func';,您可以执行数组\u unshift$form['submit'],'MYMODULEs\u own\u register\u submit\u callback\u func';以你的钩形改变。然后在回调中,在你做了你的事情之后,你可以简单地取消设置这个值,这样Drupal的正常回调就永远不会得到它,即取消设置$form_state['values']['site_select'];杰出的数据现在被写入一个表中,用户帐户在“users”表中正确创建。非常感谢。
<?php
/**
 * Implementation of hook_form_FORMID_alter().
 * @param $form
 * @param $form_state
 * @return void
 */
function MYMODULE_form_user_register_alter(&$form, &$form_state) {
  $form['#submit'][] = 'MYMODULEs_own_register_submit_callback_func';
}
<?php
function MYMODULEs_own_register_submit_callback_func(&$form, &$form_state) {
  // Do stuff with $form_state['values'], i.e $form_state['values']['site_select'], etc.
}