ページの更新時にフォームデータを再送信する

かつて、ページの更新時にフォームデータが再送信されないようにサイトページを保護する方法(その前に送信があった場合は当然)という質問に戸惑いました。

すべてのウェブマスターと開発者は、フォームに入力してサイトの送信ボタンをクリックした場合、送信後にページを更新しようとすると、ブラウザーに再送信を確認するメッセージが表示されることをおそらく知っています。

いくつかの点で、これは受け入れられません。 たとえば、フィードバックの基本形式の場合。 ユーザーがフォームに記入してメッセージを送信した後、何らかの理由で彼に知られている場合、彼はページを更新し、手紙は再び消えました。 もちろん、これは単なる例としての致命的なケースではないかもしれません。 たとえば、オンラインストアで注文を送信する場合など、すべてが非常に苦痛です。

そこで、私はこの問題の解決策を見つける質問を自問し、解決策は1つしかないことに気付きました。ヘッダー(「場所:アドレス」)フォームを送信した後にリダイレクトを使用することです。 つまり すべてがシンプルです-送信後、リダイレクトを呼び出します(同じページに移動することもできます)。 ページの更新は、POSTやGETを埋めることなく、きれいになります。



すべてはうまくいきますが、私は個人的にこれでいくつかの問題を経験しました。 それらは次のとおりです。 以前は、リダイレクトを使用せずに、サイトでデータを送信するメカニズムは次のように機能していました。

ユーザーがフォームに記入し、「送信」を押し、スクリプトが送信されたデータを受け入れ、正当性(有効性、必要なデータの完全性など)を確認し、答え-操作が成功したか、エラーが発生しエラーのリスト(エラー: 「名前」フィールドは入力されていません。送信ページでは、対応するメッセージが既に発行されています。送信が成功したか、成功していません。

送信が成功しなかった場合、フォームは画面に残り、そのフィールドにはユーザーが入力したデータが入力されます。 つまり データは$ _POST変数(POSTメソッドの場合)から取得され、適切なフィールドに入ります(つまり、ポストからフィールドに戻り、再入力されないようにします)。 結局のところ、フォームに記入したときにすべての人を怒らせ、神があなたが間違って何かを示したこと、そして何かが間違って記入され、フォームが更新されて再び空になったというメッセージを送ろうとすることを神は禁じています。 また、1つのフィールドが誤って入力されているため、再入力する必要があります。

したがって、すでに述べたように、入力に失敗した場合、フォームは$ _POSTから取得したデータで満たされたままであり、ユーザーは誤ったデータを修正してフォームを再度送信できます。

すべてがうまくいき、すべてが機能しました。

しかし、リダイレクトを使用して送信すると、「送信」ボタンをクリックした後、入力に失敗した場合、フォームが更新され、入力されたフィールドがその中に残っていないことが判明しました。 以前は、$ _POST配列から自動的に入力されていましたが、$ _POSTの転送が発生した後、送信がないようにクリアされました。

しかし、このケースには解決策がありました。 セッションを使用します。 つまり ヘッダーを呼び出す前に、データをPOSTからセッション変数に転送し、その後、転送後にそれらを操作します。

その結果、コードはさらに複雑になりました。 デバッグはより複雑です 一般に、自動転送が発生した時点で機能に何が起こるかを判断することは困難です。 コード(送信時に正確に表示されるコード)に何らかの間違いを犯した場合、表示されることさえありません。 リダイレクトが発生し、エラーメッセージは表示されません。

一般に、ヘッダーをコードに導入した後、アプリケーションで作業することがより困難になりました。 エラーの開発/改良/検索はより複雑になりました。 しかし、私はそれを拒否することはできません。

そして、私は疑問を持ち続けています:他にもっとエレガントなソリューションはありますか?



All Articles