この投稿は lljl2009 によって最終編集されました: 2013-12-09 19:59:49
私は全くの初心者です、アドバイスをお願いします!
要件は次のとおりです:
1. ページ上にフォームがあり、1 つは保存、もう 1 つはキャンセルです。
2. フォームのコンテンツが変更された後。 、 [保存] をクリックします データをファイル a に保存した後、[キャンセル] をクリックして変更をキャンセルします。 問題は、[更新] をクリックするとフォームが繰り返し送信されることです。次のような単純なコード:
#include
#include
char text_value []={"AAAAAAAAA"} // text_value はファイルからのものです
void htmlPage()
{
fprintf(cgiOut, "n");
fprintf(cgiOut, " ;テスト フォーム< /head>n");
fprintf(cgiOut, " n");
fprintf(cgiOut, "n");
fprintf(cgiOut, " n");
}
show_data .c:
#include
#include "cgic.h"
#include
#include
#include
#include "mypage.h"
int cgiMain()
{
if (cgiFormSubmitClicked("save") == cgiFormSuccess)
{
// データをファイルに保存します。 ...
// ページをリロードします
cgiHeaderContentType("text/html");
return 0;
}
// ファイルからデータを読み取ります
// ...
cgiHeaderContentType("text/ html");
htmlPage();
return 0;
}
4. インターネット上でいくつかの方法を試しました: JavaScript でグローバル変数を使用したり、隠しコントロールを使用したりすることは、この値が常に初期値であるため、機能しませんでした。ページがリロードされた後、非表示の iframe を使用し、フォームのターゲットがこのフレームをポイントすると機能しません。そのため、送信後に保存コントロールを無効にすることはできません。 cgiMain でデータの保存やその他の処理を行う必要があり、これを無効にすると、この部分は実装されなくなります。 。 。
他のセッション、ajax、その他のメソッドがどのように使用されるのか理解できません。目的は達成できますか?どうすればよいかアドバイスをいただけますか?全く分からない。 。 。
ありがとうございます!
ディスカッションに返信 (解決策)
ページの最後にランダムなタイムスタンプを生成します
バックグラウンド抽出の前にセッションを比較します
例:
http://www.baidu.com?p=12345678912
サーバー-サイド抽出
if( isset( $_GET["p"] ) && $_GET["p"] != session["submit"] ){ // do sth. // session["submit"] = $_GET["p"];};
ログイン後にコピー
ログイン後にコピー
ページの後ろでランダムなタイムスタンプを生成します バックグラウンド抽出の前にセッションを比較します
例: http://www.baidu.com?p=12345678912
サーバーサイドフェッチ
if( isset( $_GET["p"] ) && $_GET["p"] != session["submit"] ){ // do sth. // session["submit"] = $_GET["p"];};
ログイン後にコピー
ログイン後にコピー
お返事ありがとうございます!ページの裏側とはどういう意味ですか?このコードのどこでこれを実行すればよいでしょうか?また、コードに直接適用できるこの Php コードはありますか?