• ベストアンサー

PHPで$_GET[’m’]の意味が分かりません。

市販の本を参考にPHPを勉強しています。 以下の(2箇所あります)$_GET['m']の'm'とは何なのでしょうか。mを得たらリセット・・?でもmを得るってなんなんでしょう?? 突然出てきて困っております。 初歩的な質問かもしれませんが、よろしくお願いします。 <?php //------------------------------------------------------- //宝探しゲーム //----------------------------------------------------- //セッションの開始 session_start(); //タイトルと説明表示 echo "<h1>宝探し</h1>"; echo "<p>マップ上の適当な場所をクリック!</p>"; //ゲーム状態を判定する $stat = $_SESSION['stat']; if (!$stat || $_GET['m'] == "reset"){ //初めての場合、リセット時 init_game(); draw_map(); exit; } //パネルを開くとき if ($_GET['m'] == 'click'){ click_panel(); } // ゲームパラメータの初期化 function init_game() { //ゲームの初期化 $_SESSION['stat'] ='playing'; $_SESSION['turn'] =0; //宝の位置を設定する $_SESSION['takara_x'] = rand(0,8); $_SESSION['takara_y'] = rand(0,8); //マップを初期化 for ($y = 0; $y < 9; $y++){ for ($x = 0; $x < 9; $x++){ $_SESSION["map"][$y][$x] = "*"; } } } //マップの描画(tableタグ表示) function draw_map() { //マップを描画する $map = $_SESSION['map']; $s = "<table border='1'>"; for ($y = 0; $y < 9; $y++) { $s .="<tr>"; for ($x = 0; $x < 9; $x++){ $v = $_SESSION["map"][$y][$x]; $color = "#FFFFFF"; if ($v == "*"){ $v = "<a href ='?m=click&x=$x&y=$y'>*</a>"; $color = "#COCOCO"; } $s .= "<td width='24' align='center' bgcolor='$color'>"; $s .= "$v</td>"; } $S .="</tr>"; } $s .= "</table>"; echo $s; echo "<p>現在、{$_SESSION['turn']}手目です。</p>"; echo "<p><a href='?m=reset'>* RESTART *</a></p>"; } //パネルクリック時の処理 function click_panel() { $x = intval($_GET['x']); $y = intval($_GET['y']); $takara_x = $_SESSION['takara_x']; $takara_y = $_SESSION['takara_y']; $_SESSION['turn']++; //宝を有無を判定 if ($takara_x == $x && $takara_y == $y) { //宝を見つけた判定 $_SESSION["map"][$y][$x] = '<font color="red">@</font>'; echo '<h1>☆大当たり☆</h1>'; draw_map(); init_game(); }else{ //間違えた場合は宝までの距離を表示 $dist = abs($takara_x - $x) + abs($takara_y - $y); $_SESSION['map'][$y][$x] = $dist; echo "<p>残念でした!ヒント・・あと $dist の距離のところ</p>"; draw_map(); exit; } } ?>

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

コメントの「//初めての場合、リセット時」は、 「初めての場合はリセットする」という意味ではなく、 「初めての場合、または、リセット操作した場合、以下の処理を行う」という意味です。 $_GET は、呼び出し元のHTMLに記述された引数を取得する変数です。 HTMLがどうなっているのか挙げられていませんので想像ですが、 おそらく「最初から遊ぶ」という操作を指示するボタンがあって、 そのボタンでは、名前が「m」値が「reset」な引数を渡すように設定しているのでしょう。 それが、「リセット時」 「初めての場合」は、「!$stat」を指しているのだと思います。 $_SESSIONは、PHP内部のセッション管理によって、 PHPプログラムが終了した後も、次回起動時にまで ユーザー(ブラウザ)ごとに変数値を覚えることが出来ます。 $stat の元になった $_SESSION['stat'] は、PHPコード内で値を設定していますから、 それが設定されていないということは、そのサイトを訪れた「初めての場合」である、 ということがわかります。

maca_to
質問者

お礼

おおなるほど・・大方理解出来ました! ありがとうございました。

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

その他の回答 (1)

  • kyotokyo
  • ベストアンサー率35% (27/77)
回答No.2

すでに書かれてますが HTMLからPHPが呼び出された場合 GETとPOSTという二つの方法でデータを受信することが出来ます。 $_GET[]は、GETメソッドで名前がmのフォーム部品からデータをとる という意味になります。

maca_to
質問者

お礼

ふむふむ。 初学者にも分かりやすい説明ありがとうございました! これからますます勉強しなければ・・ですね。 ありがとうございました。

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

関連するQ&A

  • PHPで作成した2つのプログラムが不安定だが、原因不明。宝探しゲーム編

    キチンと動作する場合と、上手く動作しない場合のあるプログラムがあるのですが、原因が全く分かりません。いずれも、「たまに」動作します。原因が分かる方はぜひ御回答ください。環境はWin XAMPP1.7.2を使用しました。非常に長くなってしまい、申し訳ありません。 宝探しゲーム(文字は表示されるが、ゲーム部分がスッポリ無い) <?php //------------------------------------------------------- //宝探しゲーム //----------------------------------------------------- //セッションの開始 session_start(); //タイトルと説明表示 echo "<h1>宝探し</h1>"; echo "<p>マップ上の適当な場所をクリック!</p>"; //ゲーム状態を判定する $stat = $_SESSION['stat']; if (!$stat || $_GET['m'] == "reset"){ //初めての場合、リセット時 init_game(); draw_map(); exit; } //パネルを開くとき if ($_GET['m'] == 'click'){ click_panel(); } // ゲームパラメータの初期化 function init_game() { //ゲームの初期化 $_SESSION['stat'] ='playing'; $_SESSION['turn'] =0; //宝の位置を設定する $_SESSION['takara_x'] = rand(0,8); $_SESSION['takara_y'] = rand(0,8); //マップを初期化 for ($y = 0; $y < 9; $y++){ for ($x = 0; $x < 9; $x++){ $_SESSION["map"][$y][$x] = "*"; } } } //マップの描画(tableタグ表示) function draw_map() { //マップを描画する $map = $_SESSION['map']; $s = "<table border='1'>"; for ($y = 0; $y < 9; $y++) { $s .="<tr>"; for ($x = 0; $x < 9; $x++){ $v = $_SESSION["map"][$y][$x]; $color = "#FFFFFF"; if ($v == "*"){ $v = "<a href ='?m=click&x=$x&y=$y'>*</a>"; $color = "#COCOCO"; } $s .= "<td width='24' align='center' bgcolor='$color'>"; $s .= "$v</td>"; } $S .="</tr>"; } $s .= "</table>"; echo $s; echo "<p>現在、{$_SESSION['turn']}手目です。</p>"; echo "<p><a href='?m=reset'>* RESTART *</a></p>"; } //パネルクリック時の処理 function click_panel() { $x = intval($_GET['x']); $y = intval($_GET['y']); $takara_x = $_SESSION['takara_x']; $takara_y = $_SESSION['takara_y']; $_SESSION['turn']++; //宝を有無を判定 if ($takara_x == $x && $takara_y == $y) { //宝を見つけた判定 $_SESSION["map"][$y][$x] = '<font color="red">@</font>'; echo '<h1>☆大当たり☆</h1>'; draw_map(); init_game(); }else{ //間違えた場合は宝までの距離を表示 $dist = abs($takara_x - $x) + abs($takara_y - $y); $_SESSION['map'][$y][$x] = $dist; echo "<p>残念でした!ヒント・・あと $dist の距離のところ</p>"; draw_map(); exit; } } ?>

    • ベストアンサー
    • PHP
  • 「ようこそ○○様」をPHPで出力するためには

    下記スクリプトを実行しても反映されません。 エラーが数個出てしまいます。非力ながら訂正をしますが、動きません。 下記の場合何を変更すればよろしいでしょうか。 .恐れ入りますがご指導頂ければ幸いでございます。 <?php session_set_cookie_params(50000,$_SERVER['PHP_SELF']); session_start(); $_SESSION["vars"]; $pagetitle="Travel Route planner"; $id=$_COOKIE['PHPSESSID']; if($id==""){ //初回の処理 $mode="init"; $vars['count']=0; }else{ //二回目以降の処理 $mode="normal"; $x=$_POST['map_x']; //x座標 $y=$_POST['map_y'];//y座標 if($x && $y){ if(($x>466 && $x<518)&&($y>475 && $y<501)){ $_SESSION['vars']['count']=0; }else{ //座標を保存 $namex=sprintf("xpos%d",$_SESSION['vars']['count']); $namey=sprintf("ypos%d",$_SESSION['vars']['count']); $townname=sprintf("townname%d",$_SESSION['vars']['count']); $_SESSION['vars'][$namex]=$_POST['map_x']; $_SESSION['vars'][$namey]=$_POST['map_y']; $_SESSION['vars'][$townname]=$_POST['townname']; $_SESSION['vars']['count']++; } } //名前の処理 if(isset($_POST['cmd'])=="登録"){ if($_POST['username']==""){ $_SESSION['vars']['username']="[Unknown]"; }else{ $_SESSION['vars']['username']=$_POST['username']; } } //image.phpにわたす $param="?count={$_SESSION['vars']['count']}&"; $param.="username={$_SESSION['vars']['username']}&"; for($i=0;$i<$_SESSION['vars']['count'];$i++){ $namex=sprintf("xpos%d",$i); $namey=sprintf("ypos%d",$i); $townname=sprintf("townname%d",$i); $str=sprintf("%s=%s&%s=%s&%s=%s&", $namex,$_SESSION['vars'][$namex], $namey,$_SESSION['vars'][$namey], $townname,$_SESSION['vars'][$townname]); $param.=$str; } //ユーザー名付加 $pagetitle.=" for {$_SESSION['vars']['username']}"; } ?> <!DO..省略.> <form action="<?php echo"{$_SERVER['PHP_SELF']}";?>" method="POST"> 名前<input type="text" name="username"> <input type="submit" name="cmd" value="登録"> </form> .. .. </body> <?php endif;?> <?php if($mode=="normal"):?> <head><title><?php echo"$pagetitle";?></title></head> <form action="<?php echo"{$_SERVER['PHP_SELF']}";?>" method="POST"> <input type="text" name="townname"> <input type="image" src="./image.php<?php echo"$param";?>" name="map"> .. </html> お願い申し上げます。

    • 締切済み
    • PHP
  • file_get_contentsについて

    file_get_contents()で、 <time datetime="<?php echo $mtime = date('Y-m-d\TH:i:s', getlastmod()); ?>"><?php echo $mtime; ?></time> を取得すると、 <time datetime="<?php echo $mtime = date('Y-m-d\TH:i:s', getlastmod()); ?>"><?php echo $mtime; ?></time> (全く同じ文字列)を吐き出しますよね。 そして、それをechoすると、<?php ~ ?>はそのままHTML上に表示されます。 これを、PHPを実行して、 <time datetime="2010-02-19T23:40:10">2010-02-19T23:40:10</time> のように表示させるようにするには、どのようにするのが一般的なのでしょうか。 先人の皆さんの知恵をおかしください。よろしくお願いします。

    • ベストアンサー
    • PHP
  • 解答の意味が良くわかりません

    放物線y^2=4px(P>0)の焦点Fを通る弦の両端P.Qから準線へ下した垂線の足をそれぞれ、R.Sとする。 (1)RFはSFに垂直である事を示せ (2)線分RSの中点をMとし、2線分PR,QSの長さをそれぞれa、bとする時、線分MF=√{P(a+b)}を示せ。 <解答>直線PFはx軸に平行でなく、F(p,0)を通るので、x=my+pと表せる。 <質問1>x=my+pはPFではなくて、F(p.0)を通過する直線ですか?あと、どうしてx=my+nの式のnは確かに切片なので、焦点Fのx座標はpなのでnにpを代入するのは解るのですけど、フト思ったのは、xには代入しては駄目なのですか?p=my+nとしては駄目ですか>_<? <解答続き>これとy^2=4pxとの交点P.Qのy座標はy^2=4p(my+p) ∴y^2-4pmy-4p^2=0この式の解α、βである。∴P(mα+p、α)Q(mβ+p、β) <質問2>P(mα+p、α)Q(mβ+p、β)はどのようにすれば求まるのですか?y^2-4pmy-4p^2=0この式にαをyに代入しても、α^2-4pmα-4p^2=0となって、P(x、y)のxの部分mα+pが求まりません。 <解答続き> ここで解と係数の関係より α+β=4pm、αβ=ー4p^2 (A) よってR(-p、α)、S(-p、β)であり、RF、SFの傾きの積は(A)より、(-α/2p)(-β/2p)=αβ/4p^2 = -1 よってRFとSFは垂直である。 <質問3>(-α/2p)(-β/2p)=αβ/4p^2 = -1 はどのようにして、式を作ったのですか?mとm^はどうやって求められるのですか?あとP(mα+p,α)Q(mβ+β,β)の式って最後答えまで見ても、何処にも使われてないように見えますケド>_<??? (2)はM(-p、2pm)までは解ったのですけど、ココから先が解りませんでした! 宜しくお願いします>_<!!

  • y.phpをブラウザできない

    のですがどうしたらいいのでしょうか? y.php: <?php $txt="本日は青天なり。";//$txt="ok";ならば問題無 header("Location:x.php?txt=$txt"); ?> x.php: <?php $txt=preg_replace("|\s|",'',$_GET[txt]); echo "$txt<br/>"; ?> 日本語のため "Location:x.php?txt=$txt" の表記方法が問題だと思われますがどの様に修正したらいいのでしょうか?

    • ベストアンサー
    • PHP
  • file_get_contentsでなにもとれない

    file_get_contentsでなにもとれない $url = 'http://xxxxxxxxxx'; $html = file_get_contents($url ); echo $html; とした時何も表示されません 他のサーバーに移植したらとれるのでインフラの問題だと思うのですが何が考えられますでしょうか。 iptablesで外部にポート80あけてもだめでした。 ちなみにうったコマンドは iptables -A OUTPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT iptables -A OUTPUT -p tcp -m state --state NEW --dport 443 -j ACCEPT

    • ベストアンサー
    • PHP
  • 任意のkに対し、f(m)がk個の素因数を持つ様なm

    f(x)を整数係数のmonic polynomialとしたとき 任意の整数kに対して、f(m)がk個の異なる素因数をもつような整数mは存在するか という問題なのですが、 素数を小さい順にp_1 ,p_2, p_3, ...とし、 f(m)の素因数がp_1, p_2, ... , p_kとなるようなmが存在することを示す。 f(x)は問題文の条件より f(x)=(x-a_1)(x-a_2)....(x-a_n)とおける (a_iは整数) p_iは素数なので互いに素 中国の剰余定理より y≡a_1 (mod p_1) y≡a_2 (mod p_2) y≡a_3 (mod p_3) ... y≡a_k (mod p_k) を満たすyが存在する。 y-a_1≡0 (mod p_1) y-a_2≡0 (mod p_2) y-a_3≡0(mod p_3) ... y-a_k≡0(mod p_k) となるためf(y)はp_1, p_2, ..., p_kのすべてで割り切れる。 間違いがあったら指摘ください。

  • 他のクラスから呼び出した関数の戻り値がおかしい

    今、アクションゲームのようなものを作成しています。 このプログラムには Map_Draw クラスと Jchara クラスの二つのクラスが存在しており、 Map_Draw クラスには mapdata というプライベートな二次元配列が存在し、マップのデータを格納しています。 Map_Drawクラスにはmapdata の要素を参照するために、re_mapdata という関数があります。 このre_mapdata関数は、引数x,yをとり、mapdata[x][y]の値を返します。 ここで、Jcharaクラス内の関数からre_mapdata関数を呼び出したところ、 戻り値が滅茶苦茶な数字になり、正常に動作しません。 このre_mapdata関数は、Map_Drawクラスから呼び出すと正常に動作します。 なお、JcharaクラスにはMap_Drawクラスのオブジェクトjmdがあり、 jmd.re_mapdata という形で呼び出しています。 どなたか、回答をお願いします。 //re_mapdata関数のコード int re_mapdata(int x,int y){return mapdata[x][y];}

  • 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
  • エラー

    java初心者です ある図形を描くプログラムなのですが★★のところで「Exception in thread "main" java.lang.NullPointerException」というエラーが出てまったく何も描きません。 コンストラクタなどがまだよく理解できていません。 それも含めてどなたか解説/アドバイス/模範回答などしていただけないでしょうか? public class ExOrbit{ public static void main(String[] args){ BodyOrbit orbit = new BodyOrbit(); BodyOrbit S = new BodyOrbit(); S.init(); /*orbit.init(170, 170, 10, 190);*/ while(true){   orbit.setD1(); ★ orbit.step();★ if(orbit.setD2() >= orbit.max0){ orbit.init(170, 170, 10); } } } } public class BodyOrbit{ public int x0, y0, dist0, max0; private int dist; public Turtle t; public BodyOrbit(){ x0=170; y0=170; dist0=10; max0=190; } public void init(){ this.x0 = x0; this.y0 = y0; this.dist0 = dist0; this.max0 = max0; this.dist = dist0; this.t = new Turtle(); this.t.move(this.x0, this.y0); this.t.penDown(); } public void init(int x0, int y0, int dist0){ this.dist = dist0; this.t.move(this.x0, this.y0); } public void setD1(){ this.dist+=10; } public void step(){ ★this.t.go(this.dist);★ this.t.rotate(120); } public int setD2(){ return this.dist; } }