У меня многоэтапная форма (всего 6 шагов).Если я выполняю, скажем, шаг 3 и жду несколько минут (около 3), прежде чем нажать кнопку «Следующий» или «Предыдущий», форма возвращает меня к шагу 1, и все данные теряются.Почему это происходит и как я могу это остановить?
Редактировать: Вот код формы (я вынул некоторые части, которые не имеют отношения, например, все поля формы для каждого шага, ничего особенного там):
function display_job_application_form($form_state, $jobid)
{
$form['#multistep'] = TRUE;
$jobappid = get_job_app_id($jobid);
$last_step = get_application_step($jobappid);
if($last_step >= 7)
{
drupal_set_message("You have already applied for this job.", "error");
}
if (!isset($form_state['storage']['step']))
{
if($last_step >= 0)
{
$form_state['storage']['step'] = ($last_step >= 6) ? $last_step : $last_step + 1;
}
else
{
$form_state['storage']['step'] = $_GET['page']?$_GET['page']:1;
}
}
$db_data = decrypt_data($jobid, "data_step".$form_state['storage']['step']);
$default_value = '';
if (isset($form_state['storage']['values'][$form_state['storage']['step']])) {
$default_value = $form_state['storage']['values'][$form_state['storage']['step']];
}
else if(is_array($db_data) && count($db_data) > 0)
{
$default_value = $db_data;
}
$form['step'] = array(
'#type' => 'hidden',
'#value' => $form_state['storage']['step'] + 1,
);
$form['jobid'] = array(
'#type' => 'hidden',
'#value' => $jobid,
);
switch($form_state['storage']['step']){
case 1:
//page 1 form fields
break;
case 2:
//page 2 form fields
break;
case 3:
//page 3 form fields
break;
case 4:
//page 4 form fields
break;
case 5:
//page 5 form fields
break;
case 6:
//page 6 form fields
break;
}
if ($form_state['storage']['step'] > 1)
{
$form['previous'] = array(
'#type' => 'submit',
'#value' => t('<< Previous'),
);
}
if ($form_state['storage']['step'] != 6)
{
$form['next'] = array(
'#type' => 'submit',
'#value' => t('Continue >>'),
);
}
else {
$form['finish'] = array(
'#type' => 'submit',
'#value' => t('Finish'),
);
}
$form['#theme'] = 'theme_display_job_application_form_form';
return $form;
}
function display_job_application_form_submit($form, &$form_state)
{
global $user;
$form_state['storage']['values'][$form_state['storage']['step']] = $form_state['values'];
$jobid = $form_state['values']['jobid'];
$id = get_job_app_id($jobid);
if($form_state['storage']['step'] == 1 && $id < 0)
{
//INSERT INTO DB
}
else
{
//UPDATE DB FOR EACH 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' && $form_state['storage']['values'][6]['checkbox'])
{
//UPDATE DB, SEND EMAIL
unset($form_state['storage']);
$form_state['redirect'] = '';
}
}