2010-04-27 76 views
0

我一直在研究这个drupal表单API脚本过去的一周和一半。了解我的问题。下面的表格仅列出了包含5个单独评分等级的大量数据库记录。 (头脑,行动,关系,语言和IT)。提交到数据库时,表单值显示为空白 - Drupal FormAPI

此代码是我自己的自定义模块的一部分,其中所有值都从数据库中列出。这个模块背后的想法是能够大规模地编辑这些值。

我无法将表单中输入的值传递给marli_admin_submit函数中的变量。第二个问题是将这些值分配给它们的特定ID。为了这个目的,编号喜欢加入即时通讯只是试图只获得一个得分更新而不是所有的人。

下面是我的代码。

任何意见赞赏。

function marli_scores(){ 
    $result = pager_query(db_rewrite_sql('SELECT * FROM marli WHERE value != " "')); 

    while ($node = db_fetch_object($result)) { 
    $attribute = $node->attribute; 
    $field = $node->field_name; 
    $item = $node->value; 
    $mind = $node->mind; 
    $action = $node->action; 
    $relationship = $node->relationship; 
    $language = $node->language; 
    $it = $node->it; 
    $form['field'][$node->marli_id] = array('#type' => 'markup', '#value' => $field, '#prefix' => '<b>', '#suffix' => '</b>'); 
    $form['title'][$node->marli_id] = array('#type' => 'markup', '#value' => $item, '#prefix' => '<b>', '#suffix' => '</b>'); 
    $form['mind'][$node->marli_id] = array('#type' => 'textfield', '#maxlength' => '1', '#size' => '1', '#value' => $mind); 
    $form['action'][$node->marli_id] = array('#type' => 'textfield', '#maxlength' => '1', '#size' => '1', '#value' => $action); 
    $form['relationship'][$node->marli_id] = array('#type' => 'textfield', '#maxlength' => '1', '#size' => '1', '#value' => $relationship); 
    $form['language'][$node->marli_id] = array('#type' => 'textfield', '#maxlength' => '1', '#size' => '1', '#value' => $language); 
    $form['it'][$node->marli_id] = array('#type' => 'textfield', '#maxlength' => '1', '#size' => '1', '#value' => $it); 

    } 
    $form['pager'] = array('#value' => theme('pager', NULL, 50, 0)); 
    $form['save'] = array('#type' => 'submit', '#value' => t('Save')); 
    $form['#theme'] = 'marli_scores'; 
    return $form; 
} 

function marli_admin_submit($form, &$form_state) { 

    $marli_id = 4; 
    $submit_mind = $form_state['values']['mind'][$marli_id]; 
    $submit_action = $form_state['values']['action'][$marli_id]; 
    $submit_relationship = $form_state['values']['relationship'][$marli_id]; 
    $submit_language = $form_state['values']['language'][$marli_id]; 
    $submit_it = $form_state['values']['it'][$marli_id]; 

    $sql_query = "UPDATE {marli} SET mind = %d, action = %d, relationship = %d, language = %d, it = %d WHERE marli_id = %d"; 


    if ($success = db_query($sql_query, $submit_mind, $submit_action, $submit_relationship, $submit_language, $submit_it)) { 

    drupal_set_message(t(' Values have been saved.')); 
    } 
    else { 
    drupal_set_message(t('There was an error saving your data. Please try again.')); 
    } 

} 
+0

为什么不从你的提交处理程序中打印$ form_state ['values'],看看有什么值?你确定$ marli_id = 4是否有效? – Kniganapolke 2010-04-27 14:23:32

+0

我以marli_id 4为例。 – GaxZE 2010-04-27 14:56:30

回答

0

的问题是在哪里声明

$form['mind'][$node->marli_id] = array('#type' => 'textfield', '#maxlength' => '1', '#size' => '1', '#value' => $mind); 

的#VALUE必须#default_value ..否则,它保持压倒一切。