我添加了一些自定义字段,以便当有人注册到网站时我可以获得更多信息,但我想更改表单上的一个字段。我创建了一个具有hook_form_alter函数的模块,以便我可以更改注册表单的field_first_name。这是代码
function user_registration_form_alter(&$form, &$form_state, $form_id){
if ($form_id == 'user_register_form'){
$form['field_first_name'] = array(
'#type' => 'textfield',
'#title' => t('First Name'),
'#description' => t('Enter your first name.'),
'#maxlength' => 255,
'#required' => TRUE,
);
}
if (isset($form['actions']['submit'])) {
$form['actions']['submit']['#submit'][] ='user_registration_form_submit';
}
}
我还创建了一个处理表单提交的函数。
function user_registration_form_submit(&$form, &$form_state)
{
$fe_id = db_insert('field_revision_field_first_name')
->fields(array(
'field_first_name_value' => $form_state['value']['field_first_name'],
))->execute();
drupal_set_message(t('your form entry has been added'));
}
我的问题是,当我提交表单并检查用户详细信息时。我发现数据库中不存在名字详细信息,或者当我以管理员身份登录并点击“人员”时链接。我发现所有信息都被提交,除了我想要改变的名字字段。我也尝试在没有表单提交功能的情况下提交表单,但它仍然无效。
如果我添加form_submit函数
,我会收到以下错误消息注意:未定义索引:user_registration_form_submit()中的值(/var/www/html/lite/sites/all/modules/user_regestration/user_registration.module第37行)。
PDOException:SQLSTATE [HY000]:常规错误:1364字段' entity_id' 没有默认值:INSERT INTO {field_revision_field_first_name}(field_first_name_value)VALUES (:db_insert_placeholder_0);数组([:db_insert_placeholder_0] =>)in user_registration_form_submit()(第38行) /var/www/html/lite/sites/all/modules/user_regestration/user_registration.module)。
这是我的代码第37和38行
'field_first_name_value' => $form_state['value']['field_first_name'],
))->execute();
我首先在localhost上创建模块,然后再将其推送到实时网站
答案 0 :(得分:2)
首先,它的值不值。
为什么不使用提供此功能的模块,例如inception_train.py?
用户不是在submithandler中创建的,所以要么保存它:
function foo_user_register_form_submit($form, &$form_state){
$edit = array(
'name' => $form_state['values']['name'],
'pass' => user_password(),
'mail' => $form_state['values']['mail'],
'init' => $form_state['values']['mail'],
'status' => 1,
'access' => REQUEST_TIME,
'field_first_name' => array(LANGUAGE_NONE => array(array('value' => $form_state['values']['field_first_name']))),
);
user_save(drupal_anonymous_user(), $edit);
}
有关详细信息,请参阅profile2。
或者您可以尝试在form_alter中添加自定义提交处理程序,该处理程序将在创建用户后触发:
$form['#submit'][] = 'your_custom_submit_handler_function';
在那里应该已经创建了用户。这样:
function your_custom_submit_handler_function(&$form, &$form_state)
{
$fe_id = db_insert('field_revision_field_first_name')
->fields(array(
'field_first_name_value' => $form_state['values']['field_first_name'],
))->execute();
drupal_set_message(t('your form entry has been added'));
}
但请记住,这个自定义插入可能需要更多 代码,这里只添加修订条目..
答案 1 :(得分:1)
您没有传入entity_id,并且您的数据库架构未定义默认值。数据库需要一个,所以它失败了,并且插入失败 - 这是你的第37和38行。它与你的名字部分完全无关。
基本上,Drupal(技术上是MySQL,或者你的数据库后端是什么)不知道你试图将该字段与之关联的实体。
请查看您实际放入信息的表格,并确保架构具有默认设置
类似的东西:
db_insert('field_revision_field_first_name')
->fields(array(
'field_first_name_value' => $form_state['values']['field_first_name'],
'entity_id' => 1,
))->execute();
对你来说可能会更好。可能还有其他必填字段。我建议您查看数据库架构。
您也不必为此定义自定义表单 - 您可以向用户添加字段,并且还有profile2作为另一张提到的海报。