teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

修正

2019/08/20 05:59

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -6,4 +6,32 @@
6
6
 
7
7
  ただ、保存したところでどこにでも出力に使っていないし参照もされてないので
8
8
  「保存することができない」を確認できてませんよね?
9
- `$_SESSION = [];`がある時点でアクセスするたびに初期化もしてますし。
9
+ `$_SESSION = [];`がある時点でアクセスするたびに初期化もしてますし。
10
+
11
+ # 追記
12
+
13
+ ほぼ作り直しになる、という前提でヒントを追記します。
14
+
15
+ **まず`$_SESSION = [];`はやってはダメ、絶対。です。**
16
+ 「対戦履歴を保存していきたい」のであればセッションに保存をずっとし続けなければなりません。
17
+ それなのにクリアしてしまっては全てなしになります。
18
+
19
+ **次にセッションとは**
20
+ セッションには有効期限があります(最初に提示したリンクから辿ってください)
21
+ その有効期限が切れると自動的にセッションが破棄されてそれまで何を保存していたとしても空になります。
22
+ つまり、例えば翌日とかに「昨日の対戦結果を見たいなー」と思った時にはなくなっているということになります。
23
+ セッションはほとんどのケースで「データの保存」には向きません。
24
+ 大抵はログイン状態の保持に使います。あくまで一時的なデータの「保持」ですね。
25
+
26
+ つまりセッションによるデータ保存は悪手です。
27
+
28
+ 先に書いたように連想配列ですので、連想配列に追記していき、その連想配列をforeachによって取り出すように組めばできないことはないですが、それはセッション有効期限内でのみ有効なデータです。
29
+ しばらくアクセスしなかったら履歴はなくなります。
30
+ (勉強のため、というのでしたらとりあえず上記でどうぞ)
31
+
32
+
33
+ ----------以下は「本来どうすべきか」です。----------
34
+
35
+ **データベースを使いましょう**
36
+ データベースであれば意図的にデータを削除したりしなければ半永久的にデータを保持し続けることができます。
37
+ 「履歴を残したい」のであればデータベースが最も良い選択肢になります。

2

修正

2019/08/20 05:59

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -1,5 +1,5 @@
1
1
  [PHPマニュアル:セッション関連](https://www.php.net/manual/ja/refs.basic.session.php)を一通り読んでください。
2
- $_SESSION自体に値は入れません。
2
+ $_SESSIONそのものに値は入れません。
3
3
  key=>valueの連想配列形式です。
4
4
  > [$_SESSION](https://www.php.net/manual/ja/reserved.variables.session.php)
5
5
  現在のスクリプトで使用できるセッション変数を含む**連想配列**です。

1

修正

2019/08/20 05:36

投稿

m.ts10806
m.ts10806

スコア80888

answer CHANGED
@@ -5,5 +5,5 @@
5
5
  現在のスクリプトで使用できるセッション変数を含む**連想配列**です。
6
6
 
7
7
  ただ、保存したところでどこにでも出力に使っていないし参照もされてないので
8
- 「保存することができない」を確認してないの
8
+ 「保存することができない」を確認できてませんよね
9
9
  `$_SESSION = [];`がある時点でアクセスするたびに初期化もしてますし。