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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

2990閲覧

じゃんけん(sessionで保存して過去のデータを表示する)

nana727

総合スコア51

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2019/08/20 05:27

編集2019/08/20 06:02
<?php session_start(); //playerの手 $janken= $_POST["janken"]; //computerの手 $janken_com = ["グー","チョキ","パー"]; $rand = mt_rand(0,2); $com = $janken_com[$rand]; $result = ["プレイヤーの勝利","プレイヤーの負け","あいこ!!!!"]; ?> <!DOCTYPE html> <html lang="ja" dir="ltr"> <head> <meta charset="utf-8"> <title>ジャンケン</title> <link rel="stylesheet" href="../reset.css"> <link rel="stylesheet" href="style.css"> </head> <body> <table> <tr> <th>自分の手</th><th>相手の手</th><th>勝敗</th><th>対戦結果</th> </tr> <tr> <td><?php echo $janken; ?></td><td><?php echo $com; ?></td> <td> <?php if($janken == "グー" && $com == "チョキ" || $janken == "チョキ" && $com == "パー" || $janken == "パー" && $com == "グー"){ $_SESSION = $result[0]; echo $result[0]; }elseif($janken == "パー" && $com == "チョキ" || $janken == "グー" && $com == "パー" || $janken == "チョキ" && $com == "グー"){ $_SESSION = $result[1]; echo $result[1]; }else{ $_SESSION = $result[2]; echo $result[2]; } ?> </td> <td> <?php echo $_SESSION++; ?> </td> </tr> </table> </body> </html>

sessionのデータで保存することができない泣

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/08/20 05:37

>sessionのデータで保存することができない泣 回答にも書きましたが、何をどうやって「保存することができない」を確認したのでしょうか。 起きている現象とともに具体的に質問本文に記載してください。 質問本文を編集してください。
nana727

2019/08/20 05:41

ご回答ありがとうございます。 体験結果の列に過去のデータを表示させていきたいのですが、それが単発でしか入らず困っています。 自分の理想では保存されたデータが列ごとに表示されないことから保存されないと判断いたしました。
m.ts10806

2019/08/20 05:42

質問本文を編集してください。 あと「セッションに保存した情報を出力しているコード」も質問本文に追記してください。 具体的に状況説明をし、現象が再現するコードを提示されないとアドバイスしようがありませんので。
m.ts10806

2019/08/20 05:45

ただ、ロジックが全く要件に向かってないので作り直しですね。ほぼ。
nana727

2019/08/20 05:51

じゃんけんの勝敗結果は表示できています。 後はセッションを使ってどうやって保存するかです。 初心者でいろいろやらかしていますが、どうか完成まで知恵を貸していただけると幸いです
m.ts10806

2019/08/20 05:52 編集

質問本文を編集してください。
guest

回答2

0

ベストアンサー

PHPマニュアル:セッション関連を一通り読んでください。
$_SESSIONそのものに値は入れません。
key=>valueの連想配列形式です。

$_SESSION

現在のスクリプトで使用できるセッション変数を含む連想配列です。

ただ、保存したところでどこにでも出力に使っていないし参照もされてないので
「保存することができない」を確認できてませんよね?
$_SESSION = [];がある時点でアクセスするたびに初期化もしてますし。

追記

ほぼ作り直しになる、という前提でヒントを追記します。

まず$_SESSION = [];はやってはダメ、絶対。です。
「対戦履歴を保存していきたい」のであればセッションに保存をずっとし続けなければなりません。
それなのにクリアしてしまっては全てなしになります。

次にセッションとは
セッションには有効期限があります(最初に提示したリンクから辿ってください)
その有効期限が切れると自動的にセッションが破棄されてそれまで何を保存していたとしても空になります。
つまり、例えば翌日とかに「昨日の対戦結果を見たいなー」と思った時にはなくなっているということになります。
セッションはほとんどのケースで「データの保存」には向きません。
大抵はログイン状態の保持に使います。あくまで一時的なデータの「保持」ですね。

つまりセッションによるデータ保存は悪手です。

先に書いたように連想配列ですので、連想配列に追記していき、その連想配列をforeachによって取り出すように組めばできないことはないですが、それはセッション有効期限内でのみ有効なデータです。
しばらくアクセスしなかったら履歴はなくなります。
(勉強のため、というのでしたらとりあえず上記でどうぞ)

----------以下は「本来どうすべきか」です。----------

データベースを使いましょう
データベースであれば意図的にデータを削除したりしなければ半永久的にデータを保持し続けることができます。
「履歴を残したい」のであればデータベースが最も良い選択肢になります。

投稿2019/08/20 05:34

編集2019/08/20 05:59
m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nana727

2019/08/20 06:05

ご回答、解決方法ありがとうございます。 学校の課題で一時保存でいいことが了承されました。 勿論、半永久的に残すならデータベース、csvが向いていると思います。 セッションが不向きなのは承知です。 それでもセッションのやり方でじゃんけんを保存する仕方を教えていただけませんでしょうか?
m.ts10806

2019/08/20 06:50 編集

追加質問をしていおきながら「解決済み」とされたのは良く分かりませんが、 回答に書いてますよ。 > 先に書いたように連想配列ですので、連想配列に追記していき、その連想配列をforeachによって取り出すように組めばできないことはないですが、(以下略) ちなみに「学校の課題」であれば質問の仕方は気を付けないといけません。 https://teratail.com/help/avoid-asking >何かを作りたいのでコードを書いてほしい、学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません。 https://teratail.com/help/question-tips#questionTips1-1 >作業依頼のような投稿をして、課題や仕事を無償でやってもらえる場ではありません。 あなたがそのようなつもりで質問しているのだと他のユーザーから誤解されないように、丁寧な質問を心がけましょう。 もちろん今回の内容はコメントを読む限りあまり「課題を解いてほしい」方向で書いていないので、上記ガイドラインには触れないと思います。 ただ、質問内容だけ見ると”コードだけ投げて「できない」”ですので誰から見ても「丸投げ」です。 「質問への追記・修正、ベストアンサー選択の依頼」でやり取りした内容を質問本文に追記してください(ずっとお願いしていることです)
nana727

2019/08/20 07:35

ご指摘ありがとうございます 先輩の言葉を聞いて勉強になります ただ、質問内容だけ見ると”コードだけ投げて「できない」”ですので誰から見ても「丸投げ」です。 では、いったいどうすればいいんでしょうか? 画像もできないところをしっかりスクショしました。一応個人的には明確にしたと思ったのですが。。。 「質問への追記・修正、ベストアンサー選択の依頼」でやり取りした内容を質問本文に追記してください(ずっとお願いしていることです) これもコードにコメントを打ち、質問内容も分かりやすくしたつもりなのですが m.ts10806様からみるといけないことでしたでしょうか?
m.ts10806

2019/08/20 07:39

「実現したいこと」「前提」や「背景」をきちんと記載してください ということをお願いしています。 「試したこと」も質問本文には書かれていません。 質問テンプレートを利用しては如何でしょうか。 少なくともコメントで書かれた下記は必要です。 >体験結果の列に過去のデータを表示させていきたいのですが、それが単発でしか入らず困っています。 自分の理想では保存されたデータが列ごとに表示されないことから保存されないと判断いたしました。 >じゃんけんの勝敗結果は表示できています。 後はセッションを使ってどうやって保存するかです。 初心者でいろいろやらかしていますが、どうか完成まで知恵を貸していただけると幸いです
m.ts10806

2019/08/20 07:42

>画像もできないところをしっかりスクショしました。一応個人的には明確にしたと思ったのですが。。。 そのスクショも質問本文には提示されていませんしね。 あくまで質問だけを見て「何をしたいのか」「何が起きているのか」「質問者はどこまでわかっていて何がわかっていないのか」「何を調べたのか」「何を試したのか」が見た人に伝わる必要があります。 (問題解決自体の責任は質問者にあるので、問題を進めたいのなら他人に状況をきちんと伝える義務があるということですね) 詳しくは「質問するときのヒント」を参照してください。 https://teratail.com/help/question-tips
nana727

2019/08/20 08:13

ありがとうございます。 勉強になりました。 次から気を付けます。 今後ともよろしくお願いします
m.ts10806

2019/08/20 08:16

えーーっと。。 結局追記もしないし未解決だけど解決にするということでしょうか。(さすがにサイト利用のマナーとしてどうかと)
guest

0

イメージ説明
やりたいことは対戦結果の列に結果を表示していくことです。
説明不足でわかりにくいかもしれないですが、知恵を貸していただけれれば幸いです

投稿2019/08/20 05:32

nana727

総合スコア51

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BluOxy

2019/08/20 05:34

質問は編集できますよ。
nana727

2019/08/20 05:43

間違えて自己解決にしてしまいました、 ご指摘ありがとうございます。
BluOxy

2019/08/20 06:02 編集

ここは質問内容の追記をするスペースではなく、回答をするスペースです。
m.ts10806

2019/08/20 06:49

こちらの回答は削除依頼出されると良いかと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問