0

次のことを行うページがあります。

  1. ボタンをクリックしてフォームを送信する
  2. ページがそれ自体にポストされ、DB 内のフィールドを更新するために SQL クエリが実行されます。
  3. コードは、クエリの実行によって影響を受けた行があったかどうかをチェックし、エコーされます。影響を受ける行「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 で更新されたかどうかを判断します。これは一貫して機能しているようです。

4

1 に答える 1

0

クエリの実行後に PDO の rowCount() を使用するのではなく、SELECT クエリを実行して、フィールドが新しい val で更新されたかどうかを判断します。

擬似コード/SQL:

  1. 更新テーブル セット フィールド = '新しい値' ここで、フィールド = '古い値'
  2. フィールドが「新しい値」であるテーブルから行を選択します
  3. 行が返された場合、フィールドは更新されました
于 2013-03-04T10:58:29.713 に答える