次のことを行うページがあります。
- ボタンをクリックしてフォームを送信する
- ページがそれ自体にポストされ、DB 内のフィールドを更新するために SQL クエリが実行されます。
- コードは、クエリの実行によって影響を受けた行があったかどうかをチェックし、エコーされます。影響を受ける行「1」がエコーされると思います
Firefox、Safari、Chrome では、この操作は毎回必ず動作します。ただし、IE9では、クエリが正常に実行された (DB が更新された)にもかかわらず、最初に、おそらく 2 回または 3 回動作し、奇妙なことを行います。
ステップ1(フォームの送信)の前にIEでブラウザのキャッシュをクリアすると、毎回必要に応じて動作するため、これはある種のキャッシュの問題だと思います。
このコードを使用してみました:
header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1.
header('Pragma: no-cache'); // HTTP 1.0.
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
そして、これは<head>
タグにあります:
<meta http-equiv="Cache-Control" content="no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="Mon, 26 Jul 1997 05:00:00 GMT" />
何が起こっている?IE がこのように再生されないようにするにはどうすればよいですか?
アップデート:
PHP PDO の rowCount() (影響を受ける行を取得するために使用される) と何らかの矛盾があるようです... 私の場合、どのように想像することはできませんが、矛盾はブラウザのキャッシュにリンクされています。クエリの実行後に rowCount() を使用する代わりに、SELECT を実行して、フィールドが新しい val で更新されたかどうかを判断します。これは一貫して機能しているようです。