function hook_menu(){
$items = array();
$items['multistep'] = array(
'title' => 'Multistep',
'page callback' => 'drupal_get_form',
'page arguments' => array('multistep'),
'access callback' => TRUE,
);
return $items;
}
//--------------------------------------
Form 1 ----------------------------------------------------
function multistep($form, &$form_state) {
if (!empty($form_state['page_num']) && $form_state['page_num'] == 2) {
return multistep_page_two($form, $form_state);
}
if (!empty($form_state['page_num']) && $form_state['page_num'] == 3) {
return multistep_page_three($form, $form_state);
}
$form_state['page_num'] = 1;
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Name'),
'#size' => 20,
'#maxlength' => 20,
'#required' => TRUE,
'#default_value' => !empty($form_state['values']['name']) ? $form_state['values']['name'] : '',
);
$form['next'] = array(
'#type' => 'submit',
'#value' => 'Next >>',
'#submit' => array('multistep_next_submit'),
'#validate' => array('multistep_next_validate'),
);
return $form;
}
//-----------------------------------------
Form 2 -------------------------------------------------
function multistep_page_two($form, &$form_state) {
$form['email'] = array(
'#type' => 'textfield',
'#title' => t('Email'),
'#required' => TRUE,
'#default_value' => !empty($form_state['values']['email']) ? $form_state['values']['email'] : '',
);
$form['back'] = array(
'#type' => 'submit',
'#value' => t('<< Back'),
'#submit' => array('multistep_page_two_back'),
'#limit_validation_errors' => array(),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Next >>'),
'#submit' => array('multistep_page_two_submit'),
);
return $form;
}
//------------------------------------------
Form 3 ------------------------------------------------
function multistep_page_three($form, &$form_state) {
$form['phone'] = array(
'#type' => 'textfield',
'#title' => t('Phone'),
'#required' => TRUE,
'#default_value' => !empty($form_state['values']['phone']) ? $form_state['values']['phone'] : '',
);
$form['back'] = array(
'#type' => 'submit',
'#value' => t('<< Back'),
'#submit' => array('multistep_page_three_back'),
'#limit_validation_errors' => array(),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
'#submit' => array('multistep_page_three_submit'),
);
return $form;
}
//------------------------------------------
Validate -----------------------------------------------
function multistep_next_validate($form, &$form_state) {
// validate code here...
}
//-------------------------------------------
Back ---------------------------------------------------
function multistep_page_two_back($form, &$form_state) {
$form_state['values'] = $form_state['page_values'][1];
$form_state['page_num'] = 1;
$form_state['rebuild'] = TRUE;
}
function multistep_page_three_back($form, &$form_state) {
$form_state['values'] = $form_state['page_values'][2];
$form_state['page_num'] = 2;
$form_state['rebuild'] = TRUE;
}
//-------------------------------------
Submit Handlers ------------------------------------
function multistep_next_submit($form, &$form_state) {
$form_state['page_values'][1] = $form_state['values'];
if (!empty($form_state['page_values'][2])) {
$form_state['values'] = $form_state['page_values'][2];
}
$form_state['page_num'] = 2;
$form_state['rebuild'] = TRUE;
}
function multistep_page_two_submit($form, &$form_state) {
$form_state['page_values'][2] = $form_state['values'];
if (!empty($form_state['page_values'][3])) {
$form_state['values'] = $form_state['page_values'][3];
}
$form_state['page_num'] = 3;
$form_state['rebuild'] = TRUE;
}
function multistep_page_three_submit($form, &$form_state) {
$form_state['page_values'][3] = $form_state['values'];
//dsm($form_state['page_values']);
drupal_set_message(t('The form has been submitted.'));
}
For more information refer Drupal example module:
form_example_tutorial_8