質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
MySQL

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

PHP

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

解決済

【PHP7\.0】処理が飛んでしまう\(?\)

Bokunet
Bokunet

総合スコア0

MySQL

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

PHP

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

2回答

0評価

0クリップ

10閲覧

投稿2017/08/13 11:12

編集2022/01/12 10:58

前提・環境

* 言語 PHP7.0
* サーバー iis7.5
* ブラウザ chrome 60
* DB MySQL
* (仮データ)DB(table)に**入っている**id 16AB
* (仮データ)DB(table)に**入っていない**id 15AB
* ↑ $_SESSION['id']には上記2つのデータが仮に入るとします。

現状のソースコード(簡略したもの)

lang

<\?php session_start\(\); session_regenerate_id\(true\); \$_SESSION\['login'\]=1; \$_SESSION\['id'\]=\$hoge;//15ABか16ABが入っている\$hoge /\*DB接続する記述、try,catchの記述は省略\*/ \$sql='select count\(\*\) from table where id = \?'; \$stmt=\$dbh->prepare\(\$sql\); \$data\[\]=\$_SESSION\['id'\]; \$stmt->execute\(\$data\); \$dbh=null;//DBと接続を切る \$rec=\$stmt->fetch\(PDO::FETCH_ASSOC\); if\(\$rec\['count\(\*\)'\]==0\){ /\*idに15ABが入れられ、DBにそんなレコード 無い、false\.phpへ飛ぶよ\*/ header\('location:\./false\.php'\); exit\(\); }else{ /\*idに16ABが入れられ、DBにそのレコード あるから、true\.phpへ飛ぶよ\*/ header\('location:\./true\.php'\); exit\(\); } \?>

疑問・困っている点

これでfalse.phpとtrue.phpへの遷移切り替え自体はできている状態です。

ここからが苦戦してまして、true.php(レコードにある16ABの方)に遷移すると$_SESSION変数も渡されているのですが、false.php(レコードに無い15ABの方)に飛ぶと、先ほどのソースコードに書いた$_SESSION変数が渡されて無い状態で遷移してしまいます。

lang

<\?php //false\.php, true\.php共通 echo var_export\(\$_SESSION , true\);\?>

**長文になっているので、要約すると$_SESSION['login']=1;と$_SESSION['id']=15ABをfalse.phpに渡したいのです。**

問題の発生条件

さらに、A.phpに$_SESSION変数が渡される条件と渡されない条件がありまして、

**表示されない**
1.$hogeに16ABが入った状態で上記ソース実行→true.phpへ
2.セッション削除
3.$hogeに15ABが入った状態で上記ソース実行→false.phpへ
これだと遷移したときに$_SESSION変数が渡されません。

**表示される**
1 $hogeに15ABを含むDBに入っていないデータが入った状態で上記ソース実行→false.phpへ
2.セッション削除
3.再度$hogeに15ABを含むDBに入っていないデータが入った状態で上記ソース実行→false.phpへ
これなら遷移したときに$_SESSION変数が渡されます。

試したこと

* キャッシュの悪さ、ブラウザ特有の現象かと考え他のブラウザで試してみましたが結果は変わらず
* 処理にウェイトを置く(数秒処理を遅延させる等)

素直にエラーとかでしたら、これくらいのレベルなら簡単に対処できるのですが、特定の条件で思うようにいかず、困っています。

iisの設定が悪いのかなとも思い始めてます…現在進行形で試行錯誤中です。

「もしかしたらこれ書けばいけるんじゃね?」「iisのこの設定書いてる?」等あいまいな回答でもいいので、よろしくお願いします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

MySQL

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

PHP

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