Drupal 6:只向MySQL插入第一个值字符

时间:2010-01-09 21:50:41

标签: php drupal drupal-6 form-api

我正在使用CCK类型的hook_form_alter(对于你的drupal-ers)。我有一个字段,通常是我的节点表单中的选择列表。但是,在这种情况下,我想隐藏选择列表,并使用SQL查询在表单中填充其值。

一切都很顺利。我可以看到我想要的值出现在HTML源代码中,所以我知道我的查询正在执行。但是,当我提交表单时,它只插入值的第一个字符。我的一些测试值是566,784,1004 - 柱值分别为5,7,1。

起初我认为它必须是数据库列属性,但当我删除了使字段隐藏并手动选择值的form_alter时,会插入正确的值吗?!?

   <?php
function addSR_form_service_request_node_form_alter(&$form, $form_state) {
       if (arg(0) == 'user' && is_numeric(arg(1))) {
        $account = arg(1);
        $club = 2589;
        $form['field_sr_account'] = array( '#type' => 'hidden',
        '#value' => $club
        );

           }
}


?>

任何人都可以看到为什么只插入第一个字符??

注意:我尝试使用#value&amp;删除并重新创建列。 #default_value,它仍然只提交整数的第一个字符。此外,我删除了提交处理程序作为可能的原因,删除它仍然只导致一个字符被提交

更多更新 - 仍在搜索! 好的,一些好问题。请允许我回答:

  1. DB列类型为整数(4)
  2. 钩子产生的HTML是:

    input type =“hidden”name =“field_sr_account”id =“edit-field-sr-account”value =“2589”

  3. 最新更新:我认为问题已缩小到数组的结构。当我在处理表单alter之后对这个字段执行var_dump时,这就是我得到的......

    [43] => Array
            (
                [#type] => hidden
                [#default_value] => 2589
                [#post] => Array
                    (
                    )
    
                [#programmed] =>
                [#tree] =>
                [#parents] => Array
                    (
                        [0] => field_sr_account
                    )
    
                [#array_parents] => Array
                    (
                        [0] => field_sr_account
                    )
    
                [#weight] => 0.016
                [#processed] => 1
                [#description] =>
                [#attributes] => Array
                    (
                    )
    
                [#required] =>
                [#input] => 1
                [#process] => Array
                    (
                        [0] => form_expand_ahah
                    )
    
                [#name] => field_sr_account
                [#id] => edit-field-sr-account
                [#value] => 2589
                [#defaults_loaded] => 1
                [#sorted] => 1
            )
    

    我可以将表单值设置为的字段结构是什么。它必须像abhaga所暗示的那样......

4 个答案:

答案 0 :(得分:2)

由于您尝试更改的字段最初使用的是选择窗口小部件,因此CCK将查找$form_state['values']['field_sr_account'][0]['value']。通过将字段设置为#hidden类型并设置#value,您将在$form_state['values']['field_sr_account']中获得其值。 CCK将尝试访问该元素的第一个元素,并以值的第一个字符结束。

已更新:实现目标所需的最简单方法是:

function addSR_form_service_request_node_form_alter(&$form, $form_state) {
   if (arg(0) == 'user' && is_numeric(arg(1))) {
    $account = arg(1);
    $club = 2589;
    // Use this property to store the value to restore back
    $form['#field_sr_account'] = $club;
    $form['field_sr_account'] = array( '#type' => 'hidden','#value' => $club);
   }
}

/*in your submit handler, restore the value in the proper format*/
$form_state['values']['field_sr_account'] = array('0' => array('value' => $form['#field_sr_account']));

旧答案

  

实现自己的一种方式   试图做的是复制整个   $form['field_sr_account']进入   $form['#field_sr_account']然后   通过SQL提供值   以正确的格式查询   提交处理程序本身。

答案 1 :(得分:0)

好的,请查看http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html#hiddenhttp://api.drupal.org/api/drupal/developer--topics--forms_api_reference.html#value

还建议您使用值而不是隐藏。您可以在http://api.drupal.org/api/drupal/developer--topics--forms_api.html/6

上找到此信息

此外,类型hidden不允许具有您分配给它的属性,因此这可能会导致问题。您可能在表单API中遇到的任何使用问题应该在这些资源中回答,因为我仍然有点不清楚您要完成什么...特别是使用提交按钮。

旧答案:

  

好的,如果我理解正确的话   $ club未正确设置。如果   查询的第一个结果是   你寻找的那个号码   应该工作。

     

尝试拨打

<?php print_r(db_fetch_array($result)) ?>
     

查看返回的所有内容   来自查询。

     

我有点不清楚是什么   设置不正确。如果它是   关联数组中的#value   然后罪魁祸首必须是查询。   如果正确设置#value并且   无论你以后做什么,都可以   是罪魁祸首(这里没有显示)。如果   它是$form_state I中的值   看不到你在这里使用$club   一点都不。

     

此外,在addSR_submit_function中   你似乎没有使用$form   变量,或使用$ club做任何事情   除了设置消息   出现在页面顶部   当它被召唤时。

     

我可能需要进一步澄清   至于到底出了什么问题。

     

另外,当你打电话的时候   drupal_set_message功能,是吗?   这样做是为了调试   目的

答案 2 :(得分:0)

你不应该检查

drupal_set_message($form_state['values']['field_sr_account']);

而不是

drupal_set_message($club);

在addSR_submit_function?

好的,只是一个问题:不确定db_result为您的查询返回什么类型,可能是它与类型转换有关?所以这是为了确保值为int。

'#value' => (int)$club

答案 3 :(得分:0)

cinqoTimo,出于好奇,这是什么样的CCK领域?它是整数,十进制,浮点数吗?你是否在该字段上有任何特殊参数,默认情况下通常不会打开? db中的列类型是什么?

您可以发布表单的html输出吗?这可能会给出可能发生的事情的线索。

您是否使用任何javascript编辑此字段的任何值?

您是否尝试过从addSR_form_service_request_node_submit hook输出值结果?那里有任何不同。

对不起所有问题。只是大声思考,因为你似乎已经覆盖了大部分基地。