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

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

PHP(HTML、JavaScriptも?)

クリアボタンを押すことによって、あるセッション変数(ここでは$player1num[0~15]という風に配列を使っており、テキストボックスに数値を入力後submitボタンを押すことによりその数字をこの変数に格納して表示してます)を破棄したいです。 PHP内でechoを使って表示された後、クリアボタンを押すことで$player1num[0~15]を破棄したいのですが、どんなプログラミングをすれば良いのでしょうか? JavaScript内で$player1num=array();として、onClickでそれを呼んで破棄しようとしたのですがうまくいきません。 セッションの使い方をちゃんと分かっていない初心者ですが、どうかよろしくお願いします。

  • PHP
  • 回答数4
  • ありがとう数3

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

  • ベストアンサー
回答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

  • PHP、HTML、JavaScriptで

    初心者で数当てゲーム(プレイヤー2人が互いに4桁の秘密の数字を設定後、それを交互に当てあうというもの。数値とその位置が当たっていれば◎を~個、数値が合っていて位置が違えば○を~個、数値も違えば×を~個表示)を作成中なのですが、現在、◎、○、×の数をそれぞれ表示するところで止まっています。 とりあえず、前段階として◎の数だけを表示するようにプログラミングしようと思っています。 JavaScriptで、秘密の数字とプレイ画面で入力した数字の各桁の数字を照らし合わせ、一致した数だけ◎の個数を表示するためのプログラミング。 本分内のPHPで、if文を使って◎の個数を表示するプログラミングしています。 一応、JavaScript・PHPのプログラミングは下記のようにしています。 <script type="text/javascript"><!-- function check1(){ var countS1="<?php print addslashes($_SESSION['countS1']); ?>"; if(4桁すべてが等しい場合){ countS1=4; }else if(4桁の内3つの数字が等しい場合){ countS1=3; }else if(4桁の内2つの数字が等しい場合){ countS1=2; }else if(4桁の内1つの数字が等しい場合){ countS1=1; }else{ countS1=0; } } //--></script> <?php if($_SESSION['countS1']=4){ echo $_SESSION['countS1']; echo '個'; }else if($_SESSION['countS1']=3){ echo $_SESSION['countS1']; echo '個'; }else if($_SESSION['countS1']=2){ echo $_SESSION['countS1']; echo '個'; }else if($_SESSION['countS1']=1){ echo $_SESSION['countS1']; echo '個'; }else if($_SESSION['countS1']=0){ echo $_SESSION['countS1']; echo '個'; } ?> 例)秘密の数字:1234、プレイ画面の入力値:1268 →◎:2個 という様にしたいのですが、上のままだと入力してからsubmitボタンを押す前から「4個」と表示されてしまいます。 分かりにくくて申し訳ありませんが、よろしくお願いします。

  • PHP、初心者なのですが

    練習で、簡単なプログラムをいろいろ作成していて、現在下のようなプログラムを作成しています。 <?php session_start(); $_SESSION['num1']=$_POST['num1'];        //POSTで送られたnum1をセッション変数に格納$_SESSION['num2']=$_POST['num2'];  //POSTで送られたnum2をセッション変数に格納 //////////// 数字もその位置も一致している数 ////////////// $num1S; ////////////num1の各桁の数字////////////// $X1=$num1 % 10; //num1の一の位の数字$number1=$num1 - $X1; $X2=($number1 % 100)/10; //num1の十の位の数字 $number1=$number1 - $X2 * 10; $X3=($number1 % 1000)/100; //num1の百の位の数字 $number1=$number1 - $X3 * 100; $X4=$number1 / 1000; //num1の千の位の数字 ////////////num2の各桁の数字////////////// $X2_1=$num2 % 10; //num2の一の位の数字 $number2=$num2 - $X2_1; $X2_2=($number2 % 100)/10; //num2の十の位の数字 $number2=$number2 - $X2_2 * 10; $X2_3=($number2 % 1000)/100; //num2の百の位の数字 $number2=$number2 - $X2_3 * 100; $X2_4=$number2 / 1000; //num2の千の位の数字 if($_SESSION['num1']==$_SESSION['num2']){                         //num1とnum2の各桁の数字が全て一致してればnum1S=4 $num1S=4; }else if((($X1==$X2_1)&&($X2==$X2_2)&&($X3==$X2_3))||(($X1==$X2_1)&&($X2==$X2_2)&&($X4==$X2_4))||(($X2==$X2_2)&&($X3==$X2_3)&&($X4==$X2_4))){ //num1とnum2の各桁の数字3つだけ一致してればnum1S=3 $num1S=3; } ?> <html> <head> <title>練習</title> </head> <body> <form method="POST" action="./practice.php/"> <input type="text" name="num1" maxlength="4"> <input type="text" name="num2" maxlength="4"><br> <input type="submit" value="チェック" name="check"><br> <input type="submit" value="クリア" name="clear"><br> <?php if(isset($_POST['check'])){ //チェックボタンが押されると if($num1S==4){ echo "4個"; }else if($num1S==3){ echo "3個"; } } if(isset($_POST['clear'])){ //クリアボタンが押されると $_SESSION=array(); session_destroy(); } ?> </form> </body> </html> (出力例1) 1234(num1)1234(num2) [チェックボタン] [クリアボタン] 4個 (出力例2) 1234(num1)1239(num2) [チェックボタン] [クリアボタン] 3個 私は、もしnum1とnum2の入力値(4桁)の各桁の数字が等しくその数字の位置がすべて同じなら「4個」という表示を、3つだけ等しくその数字の位置が同じなら「3個」という表示をするようにしたいのですが、後者の表示がちゃんと出来ません。(出力例2)という結果にもなるのですが、1234(num1)5678(num2)というように、全く違う数字でも「3個」という表示が出てきてしまいます。 ちゃんと表示させるにはどうすれば良いでしょうか? 長文で分かりにくくなってしまいましたが、ご助力お願いします。

    • ベストアンサー
    • PHP
  • php + javascriptで値の保持

    現在、ラジオボタンによるデータの受け渡しを調べているのですが submitボタンを使わずに、データ遷移がしたいと思い 色々やっているのですが上手く行きません。 これは実現可能なのでしょうか? <input type="radio" name="hoge" value="1" onclick="location.href='<?php echo $_SERVER['REQUEST_URI']; ?>'; test(this.value);" <?php echo $check1; ?>> <input type="radio" name="hoge" value="2" onclick="location.href='<?php echo $_SERVER['REQUEST_URI']; ?>'; test(this.value);" <?php echo $check2; ?>> <input type="radio" name="hoge" value="3" onclick="location.href='<?php echo $_SERVER['REQUEST_URI']; ?>'; test(this.value);" <?php echo $check3; ?>> 上記のソースの様な感じでとりあえずやってみましたが、 「ボタンを押したら即移動」は可能なものの、value値の保持が javascript上でどうやったらいいか分かりません。 ※$check1~3は遷移後のchcked判定の変数です ※test関数においてのvalueを格納する処理が分かりません やはり無難にsubmitボタン+セッション関数等で構築した方が良いのでしょうか?

    • ベストアンサー
    • PHP
  • PHPをjavascriptで表示したいのですが。

    PHPで書いたプログラムをブログパーツにしたいため、 javascriptで表示させたいのですが、 どうしたらよいのでしょうか? ・表示させたいPHPのサンプル(動作は一応確認しました) ~ここから~ <?php $site = array( array("aaa","test1","テスト中なのでございます"), array("bbb","test2","テスト中なのでござる"), ); shuffle($site); $num = 1; for($a = 0; $a < $num; $a++) { echo("<center><p>".$site[$a][0]."</p><p>by <a href=\"http://test-test-sample.org/archives/".$site[$a][1]."\" target=\"_top\">".$site[$a][2]."</a></p></center>"); } ?> ~ここまで~ ネット調べたところ、PHPファイルに header("Content-type: application/x-javascript");を入れて、 echoにdocument.writeを付ければ、 <script type="text/javascript" src="http://test-test-sample.org/○○○.php"></script> で表示できると書いてあったのですが、うまくいきませんでした。 プログラミング素人のため、見当違いなことを言ってるかもしれませんが、 PHPやjavascriptにお詳しい方、どうかご教授を宜しくお願い致します。

    • ベストアンサー
    • PHP
  • javascriptにて、

    javascriptにて、 オブジェクトのactionにphpベースのURLを指定し、javascriptのsubmit()でPOSTを引き継ごうとした場合、セッションで保持していた変数が消えてしまうのですが、これは仕様でしょうか。 ちなみに通常のINPUT TYPE="submit"では、セッションが維持されます。 目的としては、javascriptのsubmit()でも、INPUT TYPE="submit"のボタンを押したときでも、同様にセッションを維持できるようにしたいのですが、javascriptのsubmit()でセッションの内容が消えてしまうのであれば、何か回避方法はないでしょうか。 以上、よろしくご教唆ください。

  • PHP javascript の関係に関して

    現在、MySQLよりPHPを用いてデータを取得し、PHPのある変数にデータを格納しています。 その結果を、javascriptの中でデータとして使用したいと考えていますが、そもそもPHPで格納されている変数をjavascriptの中で使用する事は可能なのでしょうか。。。 //例ですが、   $sql = "select aaa from AAA"; if (!mysql_select_db('db', $con)) { echo 'Could not select database'; exit; } mysql_query("set names sjis"); $result = mysql_query($sql,$con); $row = mysql_num_rows($result); $count = 1; for($i=0;$i<$row;$i++) { $array = mysql_fetch_array($result); $tmp_aaa[$count] = $array[0]; $count++; } <script type="text/javascript"> <!-- msgtxt = new Array(); for (i=0; i<3; i++){ msgtxt[i] = new Array(); } $count = 0; for($i=0;$i<$row_naiyou;$i++) { $msgtxt[$count] = $tmp_aaa[$count]; $count++; } というような形です。 javascript自体、php> ?>の中に囲まれていれば問題ないのでしょうか? 初歩的な質問で申し訳ありませんが、教えて下さい。

    • 締切済み
    • PHP
  • phpでの変数の作り方をsmartyで実現する方法

    phpでの変数の作り方をsmartyで実現する方法を教えていただきたいです。 簡単な例ですが以下のような場合どうすれば実現できるでしょうか? $Out = array("Out_10"=>"test1","Out_20"=>"test2","Out_30"=>"test3"); $Status_Num = array("10","20","30"); $window->assign('Out',$Out); $window->assign('Status_Num',$Status_Num); [表示] {foreach from=$Status_Num item=Num} <!--ここが分かりません。。--> {/foreach} [実現したい事] phpであれば。。 <?php foreach($Status_Num as $Num):?> <a href=""><?php echo $Out['Out_'.$Num];?></a> <?php endforeach;?> 連想配列のvarを表示させたいのです。。 上記の形をsmartyで実現したいです。 エラー続きで困っています。 どなたか教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • セッション PHPとHTML

    form1.htmlのaction先にorder.phpを指定し、そのorder.phpで$_POSTを使ってform1.htmlのフォーム情報を取得します。その後、order.phpはheader(Location)でform2.htmlをブラウザ上に表示させます。 form2.htmlはaction先が同じorder.phpになっており、ifで動作を制御しています。form2.htmlのsubmitボタンを押すと、画面上にorder.phpにより、今まで2つのフォームで入力した内容が表示されます(order.phpはsessionですべての変数を保持しています)。 この時「form1の内容を訂正」「form2の内容を訂正」というリンクないしボタンを設けて、該当フォームに飛べるようにしたいのです。 このリンク/ボタンで該当フォームに飛んだ場合、入力内容がフォームに表示されるようにするには、どのようにすればいいのでしょうか? いまいちsessionの詳しい使い方が分からなくて困っています・・・。

    • ベストアンサー
    • PHP
  • ハッシュの中に格納された配列の要素数を得る方法

    予想配列のあるキーを配列とします。 %hash; @hash{'a'}=['aa','ab','ac']; 一方で普通の配列をスカラ変数として扱うと配列数を表します。 @array=(a,b,c,d,e); $num=@array; # $numは5になる。 それでは $num=@hash{'a}; あるいは  $num=@{hash{'a'}}; としたらどうなるのって ARRAY(0x2438c4) みたいになって、$numに@hash{'a'}の要素数は入りません。 予想配列の中に格納された配列の要素数を取り出す簡便な方法はないものでしょうか。 お手数をお掛けします。

    • ベストアンサー
    • Perl
  • phpのセッションについて質問です。

    今、for文を使ってsession変数に値を入れて行く処理を作っております。そのためにセッション配列を使おうと考えておりますが、使い方が分からないので教えてください。一応、自分なりに書いてみたのですが動きませんでした。処理的には、一つ目のfor文で値をsessionの配列に一つずつ入れていき、二つ目のfor文でその格納したのを表示するようにしたいです。 <?php session_start(); for($a=1;$a<10;$a++){ $_SESSION['no'][$a]=$a; } for($b=1;$b<10;$b++){ print("こんにちわ".$SESSION['no'][$b]); } ?> ご回答のほどをよろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう