php forms drupal drupal-6

php - Drupal multi-forma pierde estado en la actualización de la página



forms drupal-6 (1)

Si usa $ form_state [''rebuild''] = TRUE en la función _submit, el estado del formulario se guarda y se puede usar para los valores predeterminados.

Vea este ejemplo: http://www.ferolen.com/blog/how-to-create-multistep-form-in-drupal-6-tutorial/

Tengo un formulario de varias páginas. Visite la página 1, la página 2 y luego la página 3. Presione Actualizar (f5) y el formulario vuelva a la página 2.

Esto es con drupal-6. El problema es similar a este http://drupal.org/node/1060290 .

Profundizando en el problema, a través de la tabla de base de datos form_cache. Los datos de la página 1 y 2 aparecen allí. En el depurador de php, parece que se ha creado un nuevo form_id. es decir. storage_form-1add3819cbea88139679819935a69686 es la clave en la tabla de la memoria caché de la base de datos y form-bcf9556f57f5352a57dfbba4c2120ee7 es el ''form_id'' al actualizar.

¿Cómo se ve mi código de formulario?

Función de forma principal:

function myform_online(&$form_state) { // $form_state[''storage''][''step''] keeps track of what page we''re on. // start at step 1 if no storage has been set if (!isset($form_state[''storage''][''step''])) { $form_state[''storage''][''step''] = 1; } // If we are saving the form data we should submit rather than display the details. // At least look at saving the step. // Don''t lose our old data when returning to a page with data already typed in. $default_values = array(); if (isset($form_state[''storage''][''values''][$form_state[''storage''][''step'']])) { $default_values = $form_state[''storage''][''values''][$form_state[''storage''][''step'']]; } switch ($form_state[''storage''][''step'']) { case 1: // Your Details module_load_include(''inc'', ''join_online'', ''includes/step1'');

Y nos ocupamos de enviar:

function join_online_submit($form, &$form_state) { //Save the values for the current step into the storage array. //dsm($form_state); $form_state[''storage''][''values''][$form_state[''storage''][''step'']] = $form_state[''values'']; # ahah - bail. if ($form_state[''ahah_submission'']) { return; } // How do we work out if this was a refresh? It currently does start with 1 and think that the step is #2. //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. //We must do this or the form will rebuild instead of refreshing. unset($form_state[''storage'']); //Go to this page after completing the form. $form_state[''redirect''] = ''join_online/form/thank-you''; } }