2009-09-23 58 views
2

我试图在Drupal 6中创建一个自定义窗体,并且下面的代码似乎都可以正常工作,包括在数据库中创建新条目时提交的所有$ form_state值是空的。我错过了什么?Drupal 6:form_state值提交时为空

<?php 
function rate_form($form_state) { 
    $form = array(); 
    $form['rate']['name'] = array(
    '#type' => 'textfield', 
    '#title' => t('Name'), 
    '#size' => 30, 
    '#maxlength' => 100, 
    '#required' => TRUE, 
); 
    $form['rate']['description'] = array(
    '#type' => 'textarea', 
    '#title' => t('blah, blah'), 
    '#maxlength' => 1500, 
); 
    $form['rate']['submit'] = array('#type' => 'submit', '#value' => t('Rate!')); 
    return $form; 
} 

print drupal_get_form($form_id); 

function rate_form_submit($form_id, &$form_state) { 
    db_query("INSERT INTO {rate_comments} (name, description) VALUES ('%s', '%s')", $form_state['values']['rate']['name'], $form_state['values']['rate']['description']); 
    drupal_set_message(t('Thank you! Your rating has been added.')); 
} 
?> 

回答

4

除非你指定,$form_state['values']将是一个平坦的阵列,而不是一个嵌套一个这样的数值将位于:

$form_state['values']['name'] 
$form_state['values']['description'] 

您可能已经调试这个问题自己很容易地使用devel的模块。与活跃的,你可以做

function rate_form_submit($form_id, &$form_state) { 
    dpm($form_state); 
    //db_query("INSERT INTO {rate_comments} (name, description) VALUES ('%s', '%s')", $form_state['values']['rate']['name'], $form_state['values']['rate']['description']); 
    drupal_set_message(t('Thank you! Your rating has been added.')); 
} 

DPM是devel的已定义的函数,它创建的变量,在那里你点击显示/隐藏阵列和类对象中的值的一个很好的可视化表示。使用这些信息,你将能够罚款你需要的值存储在哪里。在这种情况下,这是一个很棒的工具,您可以在运行时检查变量。

+0

是的,伟大的工作!其实我会在'duh'下面提交这个文件,因为我不能相信我没有尝试过。 ;) – EddyR 2009-09-23 09:35:15

+0

作为Drupal开发的新手,非常感谢您向我介绍dpm()函数。 – shanet 2012-05-13 04:45:11

0

这可能有助于

implode(arg(),'/');