Php Drupal 6多步骤表单:表单状态值在提交时为空

Php Drupal 6多步骤表单:表单状态值在提交时为空,php,forms,drupal,Php,Forms,Drupal,我无法从多步骤表单中获取要插入数据库的值。我得到的只是每个字段的空值 代码如下: function multistep_profile_menu() { $items['multistep_profile'] = array( 'title' => t('Multistep Profile'), 'page callback' => 'drupal_get_form', 'page arguments' => array('multistep_profile'),

我无法从多步骤表单中获取要插入数据库的值。我得到的只是每个字段的空值

代码如下:

  function multistep_profile_menu() {
  $items['multistep_profile'] = array(
 'title' => t('Multistep Profile'),
 'page callback' => 'drupal_get_form',
 'page arguments' => array('multistep_profile'),
 'type' => MENU_NORMAL_ITEM,
 'access arguments' => array('access content'),
 );
 return $items;
 }



 function multistep_profile(&$form_state) {
 // $form_state['storage']['step'] keeps track of what page we're on.
 if (!isset($form_state['storage']['step'])) {
 $form_state['storage']['step'] = 1;
 }

 //stores form data and carries it between steps
 $default_value = '';
 if (isset($form_state['storage']['values'][$form_state['storage']['step']])) {
  $default_value = $form_state['storage']['values'][$form_state['storage']['step']];
 }

 switch ($form_state['storage']['step']) {
 // Step 1 of Form
 case 1:
  $form['step_one'] = array(
    '#title' => t('Step 1'),
    '#type' => 'fieldset',
    '#description' => t('Just getting started.'),

  );
  // Full Name
  $form['step_one']['full_name'] = array(
    '#title' => t('Full Name'),
    '#type' => 'textfield',
    '#description' => t('Please enter your name.'),
    '#required' => TRUE,
    '#default_value' => isset($default_value['full_name']) ? $default_value['full_name'] :       '',

  );

  // College/University/Organization
  $form['step_one']['college'] = array(
    '#type' => 'textfield',
    '#title' => t('College/University/Organization'),
    '#default_value' => isset($default_value['college']) ? $default_value['college'] : '',
  );

  // Academic Disciplines
  $form['step_one']['academic'] = array(
    '#type' => 'textfield',
    '#title' => t('Academic Disciplines'),
    '#default_value' => isset($default_value['academic']) ? $default_value['academic'] : '',
    );
  break;

// Step 2 of Form
case 2:
  $form['step_two'] = array(
    '#title' => t('Step 2'),
    '#type' => 'fieldset',
    '#description' => t('Almost done.'),
  );

  // Job Title
  $form['step_two']['job_title'] = array(
    '#title' => t('Job Title'),
    '#type' => 'textfield',
    '#description' => t('Please enter your job title.'),
    '#default_value' => isset($default_value['job_title']) ? $default_value['job_title'] : '',
  );

  // Department
  $form['step_two']['department'] = array(
    '#type' => 'textfield',
    '#title' => t('Department'),
    '#default_value' => isset($default_value['department']) ? $default_value['department'] : '',
  );
  break;
// Step 3 of Form  
case 3:
  $form['step_three'] = array(
    '#title' => t('Step 3'),
    '#type' => 'fieldset',
    '#description' => t('Almost done, part 3.')
  );
  // Q1
  $form['step_three']['q1'] = array(
    '#title' => t('Why do you want to develop a globally networked course?'),
    '#type' => 'textarea',
    '#description' => t(''),

  );
  break;
//Confirmation  
case 4:
  $form['thanks'] = array(
    '#value' => '<p>'. t('Your Profile is complete.') .'</p>',
  );
  break;
  }

  //programmatically display buttons
 if ($form_state['storage']['step'] > 1) {
  $form['previous'] = array(
  '#type' => 'submit',
  '#value' => t('<< Previous'),
  );
 }
 if ($form_state['storage']['step'] != 4) {
 $form['next'] = array(
  '#type' => 'submit',
  '#value' => t('Continue >>'),
 );
 }
 else {
 $form['finish'] = array(
  '#type' => 'submit',
  '#value' => t('Finish'),
 );
 }
  return $form;
  }


 function multistep_profile_submit($form, &$form_state) {
 //Save the values for the current step into the storage array.
 $form_state['storage']['values'][$form_state['storage']['step']] = $form_state['values'];

 //Check the button that was clicked and change the step.
 if ($form_state['clicked_button']['#id'] == 'edit-previous') {
 $form_state['storage']['step']--;
  }
 elseif ($form_state['clicked_button']['#id'] == 'edit-next') {
 $form_state['storage']['step']++;
  }
 elseif ($form_state['clicked_button']['#id'] == 'edit-finish') {
//You should store the values from the form in the database here.


 dpm($form_state);
 // INSERT into DB

 $full_name = $form_state['values']['full_name'];
 $college = $form_state['values']['college']; 
 $academic = $form_state['values']['academic']; 
 $job_title = $form_state['values']['job_title'];
 $department = $form_state['values']['department'];
 $q1 = $form_state['values']['q1'];

 db_query("INSERT INTO {multistep_profile} (full_name, college, academic, job_title,    department, q1, created) VALUES
    ('%s', '%s', '%s', '%s', '%s', '%s', %d)", $full_name, $college, $academic, $job_title, $department, $q1, time());
  drupal_set_message(t('Your profile has been saved.'));


unset($form_state['storage']);

//Go to this page after completing the form.
//$form_state['redirect'] = 'node';
 }
 }
功能多步骤配置文件菜单(){
$items['multistep_profile']=数组(
'title'=>t('Multistep Profile'),
“页面回调”=>“drupal获取表单”,
“页面参数”=>array('multistep_profile'),
“键入”=>菜单项\u正常\u项,
“访问参数”=>数组(“访问内容”),
);
退回$items;
}
函数多步骤配置文件(&$form_state){
//$form_state['storage']['step']跟踪我们所处的页面。
如果(!isset($form_state['storage']['step'])){
$form_state['storage']['step']=1;
}
//存储表单数据并在各个步骤之间传送
$default_值=“”;
如果(isset($form_state['storage']['values'][$form_state['storage']['step']])){
$default_value=$form_state['storage']['values'][$form_state['storage']['step']];
}
开关($form_state['storage']['step'])){
//表格的第一步
案例1:
$form['step_one']=数组(
“#title”=>t(第1步),
“#类型”=>“字段集”,
“#description”=>t('刚刚开始'),
);
//全名
$form['step\u one']['full\u name']=array(
“#title”=>t(全名),
“#键入”=>“文本字段”,
“#description”=>t('请输入您的姓名'),
“#必需”=>正确,
“#default_value'=>isset($default_value['full_name'])?$default_value['full_name']:”,
);
//学院/大学/组织
$form['step_one']['college']=数组(
“#键入”=>“文本字段”,
“#title”=>t(“学院/大学/组织”),
“#default_value'=>isset($default_value['college'])?$default_value['college']:”,
);
//学科
$form['step_one']['academic']=数组(
“#键入”=>“文本字段”,
#title=>t(“学科”),
“#default_value'=>isset($default_value['academical'])?$default_value['academical']:”,
);
打破
//表格的第2步
案例2:
$form['step_two']=数组(
“#title”=>t(第2步),
“#类型”=>“字段集”,
“#description”=>t(‘差不多完成了’),
);
//职称
$form['step_two']['job_title']=array(
“#职务”=>t(“职务”),
“#键入”=>“文本字段”,
“#description”=>t('请输入您的职务'),
“#default_value'=>isset($default_value['job_title'])?$default_value['job_title']:”,
);
//系
$form['step_two']['department']=array(
“#键入”=>“文本字段”,
#title=>t(“部门”),
“#default_value'=>isset($default_value['department'])?$default_value['department']:”,
);
打破
//表格的第三步
案例3:
$form['step_three']=数组(
“#title”=>t(第3步),
“#类型”=>“字段集”,
“#description”=>t(‘差不多完成了,第三部分’)
);
//Q1
$form['step_three']['q1']=数组(
“#title”=>t(‘你为什么要开发一个全球网络课程?’),
“#键入”=>“文本区域”,
“#说明”=>t(“”),
);
打破
//确认书
案例4:
$form['Thank']=数组(
“#value'=>””.t(“您的配置文件已完成”)。

”, ); 打破 } //以编程方式显示按钮 如果($form_state['storage']['step']>1){ $form['previous']=数组( “#键入”=>“提交”, “#值”=>t(“>”), ); } 否则{ $form['finish']=数组( “#键入”=>“提交”, “#值”=>t('Finish'), ); } 返回$表格; } 函数多步骤配置文件提交($form,&$form\u state){ //将当前步骤的值保存到存储阵列中。 $form_state['storage']['values'][$form_state['storage']['step']]=$form_state['values']; //检查单击的按钮并更改步骤。 if($form_state['clicked_button']['#id']=='edit previous'){ $form_state['storage']['step']--; } elseif($form_state['clicked_button']['id']=='edit next'){ $form_state['storage']['step']++; } elseif($form_state['clicked_button']['id']=='edit finish'){ //您应该将表单中的值存储在这里的数据库中。 dpm($形式州); //插入数据库 $full_name=$form_state['values']['full_name']; $college=$form_state['values']['college']; $academic=$form_state['values']['academic']; $job_title=$form_state['values']['job_title']; $department=$form_state['values']['department']; $q1=$form_state['values']['q1']; db_query(“插入{multistep_profile}(全名、学院、学术、职称、系、第一季度、已创建)值 ('%s','%s','%s','%s','%s','%s','%s',%d)“,$full\u name,$college,$academic,$job\u title,$department,$q1,time()); drupal_set_消息(t(“您的配置文件已保存”); 未设置($form_state['storage']); //填写表格后,请转到本页。 //$form_state['redirect']='node'; } }
进入数据库的唯一值是“创建”日期时间戳


我运行了一个DPM来检查这些值是否在表单步骤之间进行了传递,而事实上,我就是不知道如何将它们插入到数据库中。有什么帮助吗?

查看提交功能,您(正确地)将在不同步骤中收集的值存储在
$form\u state['storage']['values'][]
下。这与您发布的DPM输出相匹配,即值显示在
$form\u state['storage']['values'][1].
$form\u state['storage']['values'][2].
等下

但在最后的提交处理中,您尝试在
$form\u state['values'][…]
下访问它们,就像这是一个单步表单一样。因为您的最后一步没有发布任何值,所以您在那里找不到任何内容

因此,看起来您只需要更改最终值收集逻辑,就可以从之前放置它们的存储(子)阵列中获取值:)

例如:

需要

$full_name = $form_state['storage']['values'][1]['full_name'];

其他值也是如此。

只是一个猜测,但是这些值不是应该是$form_state['values']['step_two']['job_title']而不是$form_state['values']['job_title']吗?这会
$full_name = $form_state['storage']['values'][1]['full_name'];