0

这是以下内容的克隆:https ://drupal.stackexchange.com/questions/47865/how-to-make-a-form-that-c​​aptures-a-value-from-request (目前没有答案)

我一直在尝试制作一个表单来捕获从$_REQUEST.

  1. 仅当 $_REQUEST 变量存在时才显示字段(完成)
  2. 用户可以修改字段
  3. 以任何方式验证该字段
  4. (修改后的)值被使用

在这种特定情况下,我使用的是一个hook_user函数,但我希望该解决方案适用于任何 Drupal 表单。

这是我的代码的简化版本,如果用户使用以下 URL 注册,则用户将有一个额外的字段来指定他们有最喜欢的水果:

http://example.com/user/register?fruit=pineapple

function fruity_user($op, &$edit, &$user, $category = NULL){
    switch($op) {
        // Add extra fields if $_REQUEST contains values for them
        case 'register':
            if($_REQUEST['fruit'] == 'pineapple'){
                $fields['user_reg_info']['profile_fruit'] = array(
                     '#type' => 'textfield'
                    ,'#description' => 'Your favorite fruit (if applicable)'
                    ,'#locked' => 0
                    ,'#value' => $_REQUEST['fruit']
                );
            }
            return $fields;
            break;

        // check registration for mistakes
        case 'validate':
            if ($edit['form_id'] == 'user_register') {
                if ($edit['profile_fruit']){
                    verify_fruit($edit['profile_fruit']);
                }
            }
            break;

        // runs after the new user is inserted
        case 'insert':
            if($_REQUEST['fruit']){
                db_query('INSERT INTO user_fruits SET `uid`=%d `fruit`="%s"',array($user->uid, $edit['profile_fruit']));
            }

            // record information
            watchdog('user', t('user %user picked out a fruit',array('%user' => $user->name)));
            break;
    }
}

使用上面的代码,该字段仅在存在时才可见$_REQUEST['fruit'] ,但如果您在表单上将水果更改为“西瓜”,insert仍然使用“菠萝”。

4

2 回答 2

0

我认为您在插入和注册时使用了两个不同的键。您在注册中使用 $fields['user_reg_info']['profile_fruit'] 并在插入中使用 $edit['fruit'] 。尝试在这两个地方使用 ['fruit'] 键。在编辑中也使用相同的。

于 2012-11-02T10:38:13.730 回答
0

答案是使用#default_value而不是#value.

http://api.drupal.org/api/drupal/developer%21topics%21forms_api_reference.html/6#default_value

于 2012-11-07T14:51:33.083 回答