Ich habe eine mehrstufige Knotenform. Auf halbem Weg durch das Formular durch ein Popup-Dialogfeld wird der Benutzer aufgefordert, sich anzumelden, wenn er sich nicht zuvor angemeldet hat.
Bei erfolgreicher Anmeldung erhalte ich beim Fortfahren mit der nächsten Seite des Knotenformulars den folgenden Überprüfungsfehler:
Das Formular ist veraltet. Kopieren Sie alle nicht gespeicherten Arbeiten in das unten stehende Formular und laden Sie diese Seite erneut.
Ich verstehe, es liegt daran, dass es drupal_validation_form()
überprüft $form['#token']
und $form_state['values']['form_token']
dasselbe ist.
Wie vermeide ich das, da dies ein spezieller Anwendungsfall ist (und nicht durch einige externe Dinge gefälscht wird).
Irgendwelche Eingaben an dieser Front?
<input name='form_token' type='hidden' value='<?php print drupal_get_token('MY_FORM_ID'); ?>'>
des Formulars konnte ordnungsgemäß eingereicht werden.Antworten:
Ihr Beitrag hat mich gerade vor ernstem Elend bewahrt. Ich weiß nicht genau, wie diese Verbindung hergestellt wurde, aber Ihr Beitrag hat mich zu einer kleinen Änderung in meinem Modulcode geführt. Es ist jedoch leicht zu verstehen, warum der Fehler "Das Formular ist veraltet" jetzt auftrat. So sehen Sie, ob dies Ihre Gedanken und Hilfe für Ihren Fall joggen könnte.
Auf meiner Seite admin / mymod wurde ein Menüpunkt eingerichtet, der Folgendes enthielt.
In
mymod_main($op = '')
baue ich bedingt eine von 2 Formen, aber jede Form ist natürlich eine neue Form, zB$build['mymod_admin'] = drupal_get_form('mymod_admin')
oder$build['mymod_delete'] = drupal_get_form('mymod_delete')
.Kein Problem, wenn die Seite admin / mymod zum ersten Mal geladen und mymod_admin aufgerufen wird. Wenn Sie jedoch auf die in mymod_admin erstellte Senden-Schaltfläche klicken, wird mymod_delete aufgerufen und das Formular erstellt. Es kommt der Fehler "Das Formular ist veraltet", der die Formularverarbeitung ruiniert hat. Das Update ist einfach
mymod_main()
als Seitenrückruf zu verwenden.Jetzt gibt es kein Vertauschen von Formularen, wenn die Admin / MyMod-Seite für jedes der Formulare neu geladen wird, da es kein Startformular vom manuellen Rückruf und dann das zweite in definierte Formular gibt
$build
.quelle
mymod_main()
.Der Fehler bedeutet, dass
form_token
needs ungültig ist und neu generiert werden muss. Dies ist im Grunde ein verstecktes Formularfeld (das im Allgemeinen zum Schutz vor Fälschungen zwischen Standorten verwendet wird).Normalerweise wird jedem Drupal-Formular von automatisch ein Token-Element hinzugefügt
drupal_prepare_form()
, sodass Sie im Allgemeinen kein Token selbst hinzufügen müssen, es sei denn, Sie schreiben Ihren eigenen Code.Wenn Sie versuchen, ein mehrseitiges Formular zu programmieren, müssen Sie das Token wahrscheinlich bei jeder Übermittlung mit neu generieren
drupal_get_token()
, z. B. wie hier gezeigt :Überprüfen Sie das folgende Beispiel, um die Wiederherstellung des Formulartokens in form_alter zu erzwingen:
Fehlerbehebung
Überprüfen Sie noch einmal, ob Ihr Formular nicht fest codiert ist, oder fügen Sie das Token wie von vorgeschlagen hinzu @thirdender hinzu :
Überprüfen Sie, ob der Fehler in Ihrem Formular auftritt, wie dies auch in einem anderen Formular (z. B. Formular innerhalb des Formulars) der Fall ist.
drupal_valid_token()
.quelle