初心者の質問でわかりにくくてすみません。
first.phpからsecond.phpへaタグで遷移してセッション変数の値を共有しているのですが、遷移元のパラメータの違いで、うまくいったりいかなかったりで困っております。
first.phpは毎回メニューからPOSTでパラメータを書き換えて表示しており、その際セッション変数もPOSTされた値で上書きしています。今回はセッション変数に関しては同じパラメータで上書きされているものとします。
first.php
<?php session_start(); $_SESSION = array(); $_SESSION['AAA'] = $_POST['AAA']; $_SESSION['BBB'] = $_POST['BBB']; $_SESSION['CCC'] = $_POST['CCC']; echo "{$_SESSION['AAA']}<br>"; echo "{$_SESSION['BBB']}<br>"; echo "{$_SESSION['CCC']}<br>"; echo session_id(); ?> <p><a href="second.php?ID=674">あいうえお</a></p>
first.phpの表示は
______________________
AA
AB
AC
dqhfp1l570jl1agjf801176n32
あいうえお
______________________
second.phpに遷移すると ↓
second.php
<?php session_start(); echo "{$_GET['ID']}<br>"; echo "{$_SESSION['AAA']}<br>"; echo "{$_SESSION['BBB']}<br>"; echo "{$_SESSION['CCC']}<br>"; echo session_id(); ?>
この状態でsecond.phpには
______________________
674
AA
AB
AC
dqhfp1l570jl1agjf801176n32
______________________
と表示されセッション変数の値が渡っています。
ここまでは問題ありません。
first.php内のメニューでPOSTでパラメータを切り替えてセッション変数を上書き。
ただし今回のケースではセッション変数に同じ値(AA,AB,AC)を上書きしました。
first.php
<?php session_start(); $_SESSION = array(); $_SESSION['AAA'] = $_POST['AAA']; $_SESSION['BBB'] = $_POST['BBB']; $_SESSION['CCC'] = $_POST['CCC']; echo "{$_SESSION['AAA']}<br>"; echo "{$_SESSION['BBB']}<br>"; echo "{$_SESSION['CCC']}<br>"; echo session_id(); ?> <p><a href="second.php?ID=1234">かきくけこ</a></p>
first.phpの表示は
______________________
AA
AB
AC
dqhfp1l570jl1agjf801176n32
かきくけこ
______________________
second.phpに遷移すると ↓
second.php
<?php session_start(); echo "{$_GET['ID']}<br>"; echo "{$_SESSION['AAA']}<br>"; echo "{$_SESSION['BBB']}<br>"; echo "{$_SESSION['CCC']}<br>"; echo session_id(); ?>
この状態で
______________________
1234
dqhfp1l570jl1agjf801176n32
______________________
となることがあり、肝心のセッション変数の中身が消えてなくなってしまいます。
毎回消えるならわかるのですが、概ねうまくゆき、一部のPOSTパラメータのときだけ消えます。
first.phpのスクリプト全体をお見せできないので、これだけでは原因の掴みようが無いかもしれませんが、
同じスクリプトで同じ値にセッション変数を書き換えてうまくいったりゆかなかったりするのが解せません。
second.phpにセッションIDが渡っているのでセッションが切れているわけでもありません。
second.phpで消えているパターンでも遷移元のfirst.phpでは値が表示されていますので、セッション変数に一度は値が格納されているようです。
原因として考えられることってなんでしょうか?
$_SESSION = array();の使い方が間違っているとか?
ヒントで結構ですので、ここを確認してみろってことがあれば是非ご指摘ください。
かえってややこしくなるかもしれませんが少し追記します。
first.phpのPOSTパラメータですが、メニューで使用しています。
下記のようなリンクがあってDBからメニュー名$TITLEとvalueをwhile文でメニューの数だけループして複数マッピングしています。
今回は内容がかわりませんが、条件によっては$AAA,$BBB,$CCCは書き換わります。
<form method="POST" action="first.php" name="form123"> <input type ="text" value ="{$DDD}" name ="DDD" style="display:none;"> <input type ="text" value ="{$AAA}" name ="AAA" style="display:none;"> <input type ="text" value ="{$BBB}" name ="BBB" style="display:none;"> <input type ="text" value ="{$CCC}" name ="CCC" style="display:none;"> <a href="javascript:form123.submit()">{$TITLE}</a> </form
first.phpのaタグは実はTinyMCEでユーザーが挿入するもので、ユーザーに$AAA,$BBB,$CCCの変化を意識させず、IDだけをGETで書いてもらい、$AAA,$BBB,$CCCはsecond.phpがセッションから取得して適切な内容で返すといったことをやろうとしています。
