質問編集履歴

2 アパッチログ追記

Smar

Smar score 40

2016/07/01 12:26  投稿

ブラウザで複数回ページが読み込まれているような動きをしていて困っています。
いつもお世話になります。
仕様言語はPHPで単純にMySQLのテーブルへINSERTを一度行うのみ、という非常にシンプルな内容です。
そこで今までこういったことはなかったのですが、ページをブラウザでロードした際に一度開いただけで複数回INSERTが実行されてしまうという現象が起こり困っております。
当初シンプルなソース内容ではなかった為、別の要因かと思ったのですが、
最終的にただINSERT一文だけ、実行はmysqli_query関数のみ、という状態でも起こるということがわかりました。
ブラウザも始めにgoogle chromeで試していた為、ブラウザ依存の現象かと思ったのですが、firefoxでも同現象が確認できました。
また、100%起こる現象ではなく、新規でタブを開きアドレスを貼り実行、とすると起きたり起きなかったりします。
一度開いた後の更新ボタンやF5キーでのリロードでは起こりにくいような印象がありますが、そちらも0%ではございません。
一度にINSERTされる数は1つ、または3つのことが多いです。
(稀に5,6個入ることもあります…)
タイミングを調べる為にタイムスタンプとSESSION変数で調べてみたのですが、結果も不思議なもので、
```PHP
session_start();
$_SESSION['test']++;
$db = mysqli_connect("localhost", "○○○", "○○○", "○○○");
$sql = "INSERT INTO ~";
$rs = mysqli_query($db, $sql);
```
上記のように+1していき、その値をINSERTしてみたところ、例えば以下のようになりました。
(この際、一気に5つデータが入りました)
- SESSIONの値, タイムスタンプ
- 1, 2016/7/1 10:51:20
- 2, 2016/7/1 10:51:20
- 1, 2016/7/1 10:51:24
- 1, 2016/7/1 10:51:25
- 2, 2016/7/1 10:51:25
5つデータが入ってはいるが、SESSIONの+1は5回行われているわけではなく、
1と2のみでその際のタイムスタンプも時系列的には前後している感じ…?でしょうか…。
また、この際SESSION変数は初期化してない為、初回実行は当然エラーが出ますが、画面上の表示は初回実行時に出るエラー表示が出ますので、
実際にリロードのようなものが5回走った、ということでもなさそうです。
ソースは上記の5行で全てです。
環境としまして、ローカルのXAMPPでもレンタルサーバー上でも同じ現象が起こります。
mysqliでもpdoでも無関係に起こります。
タイミングもバラバラでSESSION変数を変えることでストップかけることもできない状態でかなり困っています…。
同現象を経験された方、解消された方おられましたらお力をお貸しください…。
よろしくお願い致します。
**
---
[追記]
フレームワークなどは使用しておりません。
**
---
[追記:アパッチログ]
```
127.0.0.1 - - [01/Jul/2016:12:19:20 +0900] "GET /test/ HTTP/1.1" 200 273 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"
127.0.0.1 - - [01/Jul/2016:12:19:21 +0900] "HEAD /test/ HTTP/1.1" 200 - "-" "Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20150101 Firefox/44.0 (Chrome)"
127.0.0.1 - - [01/Jul/2016:12:19:21 +0900] "GET /test/ HTTP/1.1" 200 273 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:10.0) Gecko/20150101 Firefox/44.0 (Chrome)"
```
  • PHP

    37364 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MySQL

    11611 questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

1 フレームワーク未使用を追記

Smar

Smar score 40

2016/07/01 12:03  投稿

ブラウザで複数回ページが読み込まれているような動きをしていて困っています。
いつもお世話になります。
仕様言語はPHPで単純にMySQLのテーブルへINSERTを一度行うのみ、という非常にシンプルな内容です。
そこで今までこういったことはなかったのですが、ページをブラウザでロードした際に一度開いただけで複数回INSERTが実行されてしまうという現象が起こり困っております。
当初シンプルなソース内容ではなかった為、別の要因かと思ったのですが、
最終的にただINSERT一文だけ、実行はmysqli_query関数のみ、という状態でも起こるということがわかりました。
ブラウザも始めにgoogle chromeで試していた為、ブラウザ依存の現象かと思ったのですが、firefoxでも同現象が確認できました。
また、100%起こる現象ではなく、新規でタブを開きアドレスを貼り実行、とすると起きたり起きなかったりします。
一度開いた後の更新ボタンやF5キーでのリロードでは起こりにくいような印象がありますが、そちらも0%ではございません。
一度にINSERTされる数は1つ、または3つのことが多いです。
(稀に5,6個入ることもあります…)
タイミングを調べる為にタイムスタンプとSESSION変数で調べてみたのですが、結果も不思議なもので、
```PHP
session_start();
$_SESSION['test']++;
$db = mysqli_connect("localhost", "○○○", "○○○", "○○○");
$sql = "INSERT INTO ~";
$rs = mysqli_query($db, $sql);
```
上記のように+1していき、その値をINSERTしてみたところ、例えば以下のようになりました。
(この際、一気に5つデータが入りました)
- SESSIONの値, タイムスタンプ
- 1, 2016/7/1 10:51:20
- 2, 2016/7/1 10:51:20
- 1, 2016/7/1 10:51:24
- 1, 2016/7/1 10:51:25
- 2, 2016/7/1 10:51:25
5つデータが入ってはいるが、SESSIONの+1は5回行われているわけではなく、
1と2のみでその際のタイムスタンプも時系列的には前後している感じ…?でしょうか…。
また、この際SESSION変数は初期化してない為、初回実行は当然エラーが出ますが、画面上の表示は初回実行時に出るエラー表示が出ますので、
実際にリロードのようなものが5回走った、ということでもなさそうです。
ソースは上記の5行で全てです。
環境としまして、ローカルのXAMPPでもレンタルサーバー上でも同じ現象が起こります。
mysqliでもpdoでも無関係に起こります。
タイミングもバラバラでSESSION変数を変えることでストップかけることもできない状態でかなり困っています…。
同現象を経験された方、解消された方おられましたらお力をお貸しください…。
よろしくお願い致します。
よろしくお願い致します。
**
[追記]
フレームワークなどは使用しておりません。
**
  • PHP

    37364 questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MySQL

    11611 questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る