• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHP(HTML、JavaScriptも?))

PHPでセッション変数を破棄する方法について

このQ&Aのポイント
  • PHP内でechoを使って表示された後、クリアボタンを押すことで$player1num[0~15]を破棄する方法について教えてください。
  • JavaScript内で$player1num=array();として、onClickでそれを呼んで破棄しようとしたがうまくいかなかったので、正しい方法を教えてください。
  • セッションの使い方を理解していない初心者ですが、PHPでセッション変数を破棄する方法についての解説をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

テキストボックスを送信するためのsubmitボタンは、 <form action="input.php" method="post"> <input type="text" name="answer" value="" /><input type="submit" name="answer_button" value="送信" /> </form> のようなものを作成されているのでしょうか。 formの仕様上、複数のsubmitボタンが存在していて、いづれかが押下され、フォーム送信が行われた場合、 押下されたsubmitボタンの変数のみが渡されます。 ソレを利用して、 <form action="input.php" method="post"> <input type="text" name="answer" value="" /> <input type="submit" name="answer_button" value="答える" /> <input type="submit" name="clear_button" value="ログ削除" /> </form> というようにフォームを設置して、送信先のプログラムに、 <?php if(isset($_POST['answer_button'])){ //名前:answer_buttonが押下されていた場合に回答の成否を確認する処理 }elseif(isset($_POST['clear_button'])){ //名前:clear_buttonが押下されていた場合にログの削除を実行する } ?> というような振り分け処理を行えば良いのではないでしょうか。

hitosashi
質問者

補足

回答ありがとうございます。 この回答を参考に変えてみました。 私は今プレイヤー2人で対戦する数当てゲーム(ここでは、トップ画面にてプレイヤー2人の名前とそれぞれの秘密の数字を設定し、プレイ画面でもそれらを表示し続ける。下にある$player1numはプレイ画面でのプレイヤー1の入力値を格納する変数で、0~14の配列を使っています)を作っているのですが、プログラムの最後の方で   <input type="submit" name="clear" value="クリア"> if(isset($_POST['clear'])){ $player1num=array(); } としてみたのですが、何も反応しませんでした。 そこで試しに$player1num=array(); を $_SESSION=array();に変えてみると、 クリアボタンを2回連続押すことで両プレイヤー名・秘密の数字・プレイ画面での入力値が消えました。 さらに$player1num=array(); を session_destroy();に変えてみると、 当然ですが、クリアボタンを1回押すと上の3種類のセッションが消えました。 私はプレイ画面での入力値だけを消したいのですがどうも上手くいきません。 $_SESSION=array();では、3種類のセッションが消えてしまうのは分かりますが、 2回連続押さないと消えないのはよく分かりません。 度々すみませんが、もう一度これについて回答頂けないでしょうか?

すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

$player1num は、どのように吐き出した変数なのでしょうか。 ゲーム自体は、いわゆるヒットアンドエラーというものと思うのですが、 hitosashiさんがどのように設計されているかによるんですが、 セッション変数にある、一部の内容のみ削除されるのであれば、 $_SESSION['player1num'] = array(); と、削除したいキーのみ空にすれば良いのではないでしょうか。

hitosashi
質問者

お礼

なんとか入力値だけを初期化出来るようになりました。 その後1から入力し直すことも出来ました。 ありがとうございます(^^) 相変わらずクリアボタンを2回押さないと初期化出来ませんが(- -||)

すると、全ての回答が全文表示されます。
noname#244856
noname#244856
回答No.3

セッション変数を全て消したいだけであればsession_startした後 $_SESSION = array(); でOK。 ログインなどが絡む場面でセキュリティ上、セッションクッキー自体を削除したい場合はもうちょっと複雑。 http://d.hatena.ne.jp/Kappuccino/20080726/1217049706 JavaScriptの動作だけでPHP上の変数を削除するのはajax等を使わない限り不可能です。 ページ遷移が基本的に必要です。

hitosashi
質問者

補足

またまた回答ありがとうございます。 なんとか入力値のみの破棄(初期化?)は出来るようになったのですが、 なぜかクリアボタンを2回押さないと入力値の破棄ができません。 理由としてはどんなことが考えられるでしょうか? すみませんが、回答を頂ければ幸いですm(__)m

すると、全ての回答が全文表示されます。
回答No.1

僕の理解力がないためか、なんの質問かよくわかりません。 ボタンをクリック後ページ遷移無しにセッションをクリアしたい ということですか?

hitosashi
質問者

補足

すいません、セッションをもう少し理解できていれば説明しやすいんですがm(__)m 例えば、「1234」、「5678」、「9012」と入力した後、プレイ画面ではセッションにより 1234 5678 9012 と表示される様にしているのですが、これをボタンを押すことによって この3つの数字全てを消すようにしたいということです。 で、その後また再入力できるようにもしたいです。 分かりにくいですが、よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A