Domanda

Ho una forma in tre fasi in cui ogni passo i messaggi per la propria azione. L'azione reindirizza alla fase successiva. I dati vengono memorizzati nello scope di sessione. Ho un filtro che impedisce all'utente di accedere ai gestori di moduli attraverso qualcosa di diverso da una richiesta POST.

Non c'è niente da impedire a qualcuno di digitare manualmente l'indirizzo di un passo, però. Per far fronte a questo problema ho impostato una variabile currentStep nella sessione.

<!--- Some data is processed here --->
<cfset session.currentStep = "stepTwo">

E nel secondo passaggio vorrei verificare la presenza di uno structkey:

<cfif NOT session.currentStep = "stepTwo">
<!--- redirect to #session.currentStep# --->

Questo funziona approccio, ma ha un grave inconveniente:. Un utente non può premere il pulsante Indietro nella finestra del browser, o modificare qualsiasi dato che lui o lei è già entrato

Quali sono le best practice per l'implementazione di un modulo a più fasi? Posso migliorare il mio processo per incorporare la funzionalità di back-pulsante?

È stato utile?

Soluzione

Invece di utilizzare la variabile di sessione solo permettono loro di accedere al passo corrente, permettono loro di accedere alle operazioni attuali o precedenti. Una sorta di flag "quanto lontano si può andare".

Ora, aggiungere link ai passaggi precedenti, come un filo di Arianna.

Quindi, utilizzare una ricerca nella memoria permanente (db, sessione, xml, borsa conservante, etc.) per i dati già inseriti per quella forma. Creare un insieme vuoto di dati dei moduli, sovrascrivere con qualsiasi cosa trovato nel negozio persistente, quindi sovrascrivere con qualsiasi cosa, dalla forma di applicazione stessa. Qualcosa di simile:

populate = structNew(); // this is the data to populate your form with on load
populate.someValue = "";
structappend(populate, dataFromStorage);
structappend(populate, form); // from things submitted from the form scope, in case validation fails
<input type="text" name="someValue" value="#variables.populate.someValue">

Ora, se qualcuno colpisce lo stesso passo modulo due volte, si vedrà (in ordine di precedenza) i valori hanno presentato, ma che non hanno superato la convalida, i valori del archivio dati persistente, e quindi una forma vuota.

Altri suggerimenti

Si può stare utilizzando l'approccio di sessione, se si desidera.

Per risolvere il grave inconveniente, è possibile modificare la logica di un po '.

Al ultimo passo, assicurarsi che i dati di tutti i passi si trovano nella sessione. In caso contrario, reindirizzare l'utente al primo passo vacanti? Non dovrebbe essere troppo difficile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top