• ベストアンサー

変数のパターン処理パート2

前回、http://oshiete1.goo.ne.jp/kotaeru.php3?q=1456597でも質問して可変変数などの意味は理解したつもりでいますが、次のことがなぜかわかりませんでした というより上手くいきませんでした. 間違っているところを指摘していただけると助かります. あるコードの一部で unset($_SESSION['parameter1']); unset($_SESSION['parameter2']); unset($_SESSION['parameter3']); unset($_SESSION['parameter4']); unset($_SESSION['parameter5']); の部分を次のように替えるとエラってしまいます for($i=1;$i<6;$i++){ unset($_SESSION['Parameter'.$i.\']);} こうでなくどう直せばいいかせめて、ヒントだけでも教えていただけないでしょうか. この直し方だと可変変数は関係ないようにも思えますが、 本当は関係あると考えられるのでしょうか?

  • PHP
  • 回答数6
  • ありがとう数7

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

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

ああそうか、構造体の意味はちょっと違うような気もするのですが、でもまあ、PHPでは配列のキーとして文字列を使う事ができる、と考えていいです。 で、文字列であればPHPの場合"や'で括るのがルールです。括ってなければ数値か定数(defineで定義したもの)として扱われます。 $array["key"]/普通の文字列をキーとした配列 $array[KEY]/KEYという定数。どこかでdefine("KEY","key")の形式で定義をした定数として扱う。定義が無ければKEY=NULLになってしまうんじゃないかな。 $array[$key]/変数$keyの中身をキーとする配列。$keyの値が文字列であれば文字列をキーとした配列になるし、数値であれば普通の配列になる $array[0]/数値をキーとした配列 バリエーションとしてはこんな感じかな。 先日からいくつか質問を見ていると、根っ子のところの誤解が実際のコーディングの時の問題になってるような気がしますよ。それと、その誤解の原因がオリジナリティあふれる解釈にあるような気がするので、できるだけ思い込みを排して、素直に考えるようにした方が良いと思います。

SariGEnNu
質問者

お礼

ありがとうございます.いろいろ、あれこれ悩んでいたら、参考にしている本のソースコードを見て、やはり、行き詰まっていました.簡単に本に書いてあることを抜粋します. $list=mysql_query('select name from employee order by income top=100'); $nameID="name"."$ID"; $_SESSION["$nameID"]=" selected"; echo"<select name=name> <option value=$i $_SESSION[name000]> mysql_result($list,0,"name") </option> <option value=$i $_SESSION[name001]> mysql_result($list,1,"name") </option>  … <option value=$i $_SESSION[name099]>" mysql_result($list,99,"name") </option></select>"; 本ではこんな感じになっています. ($_SESSIONの中は定数です) それで、私は上のコードの<option の000~099までの部分を for文を使って書き直したいです. for($i=0;$i<100;$i++){ echo"<option value=$i $_SESSION["$nameID"]> mysql_result($list,$i,"name")</option>";} としてしまうと、やはり$nameIDの部分でダメだと思います. 例えば、for文の{}の中で、 define("name".$i,""); $nameID=name.$i; をechoの前に入れてやったりする必要があるんでしょうか?いろいろ試してみましたが、結果はおおむねフォームに選択項目が表示されない結果になってしまいます. すみません、やはり、これは本のソースコードの内容について解釈が間違っている結果なんでしょうか?

その他の回答 (5)

回答No.6

1)文字列の連結についての基本を確認して下さい。 2)その、本に載っていたというサンプルコードは完全に動作しましたか?見た感じ間違いが多数あるように思うのですが。こちらに転記する際のミスなのかな、とは思いますが。 3)>としてしまうと、やはり$nameIDの部分でダメだと思います. 何がダメなのかがわかりません。 挙げられているサンプルコードに間違いが多すぎて、何をどう説明すればいいのか判りません。このサンプルコード自体、動作を理解してないでしょう?まずはこのサンプルコードを完全に理解してから、for文に書き直すような応用に入ってはいかがですか? それと、また一問一答、個人授業のようになってます。質問が最初とは違っているので、別な質問を立てて下さい。

SariGEnNu
質問者

お礼

ありがとうございます. 1)本などで確認します. 2)本に書いてあったものは一応、  エラーが見つからない(=正しいと思われる)動作を  してることを見ました.  まちがいがいくつか見受けられました、m(__)mです.  $nameID="name"."$ID"; は正しくは、$nameID="name".$ID;  value=$i でなく value=0から99の整数などです  もう少し確認して、わからない所を絞ってきます.  

回答No.4

なんか、いまいち納得してない雰囲気を感じるんですが(^^;。 先の回答の参考URLを見て、「配列とは何ぞや」を理解して下さい。 $_POST,$_GET,$_SESSIONなどの変数は「配列」です。その添字(キー、インデックス)に、フォームのタグのnameが使われる、という事です。 一応フォローしておきますが、以前に比べると着実にやってる事も質問も進化しているとは思ってますよ(^^)。

SariGEnNu
質問者

お礼

ありがとうございます. 私の理解が至らないばかりにご期待に応えられなくてすみません(←何も期待してないですよね^^;). 一応、#3の参考URLも見ていますが、まだまだ、理解に苦しいので、少しずつ見ていき、何がわからないのかをハッキリさせたいと思います. それと別に、PHPではインデックスが文字列でも配列と言うんですね! 例えば、Cでは、添え字がintのものを配列といって、それ以外の範囲の添え字も扱おうとするときは、配列でなく、構造体という言い方をしますが. まあ、これは、PHPの場合、そういう意味(=添え字がint以外でも配列で扱える)だと思ってればいいですよね. すいません、後よく分らないことがありました. $_SESSION[]の中が''や""で囲ってある場合とそうでない場合があります.この違いはどういう風に理解しておけばいいんでしょうか?

回答No.3

>$_SESSION[]の[]が変数を意味しているからという関係なんだと思いました. すみません、ちょっと意味がわからないのですが・・・。 $_SESSION変数は単なる配列です。で、この場合は配列の文字列の添字が使われています。つまり[]の内側は単なる文字列と考える事ができます。 そしてここでする事は$iに格納されている数値を使って"parameterX"という文字列を作るだけです。"parameter"という文字列と$iの数値の文字列を連結するだけですよね。そう考えると「"parameter".$i」が正解だという事が理解できると思いますが、いかがですか?

参考URL:
http://jp.php.net/manual/ja/language.types.array.php
SariGEnNu
質問者

お礼

ありがとうございます. >>$_SESSION[]の[]が変数を意味しているからという関係なんだと思いました. >すみません、ちょっと意味がわからないのですが・・・。 すみません、あまりきちんと理解してないことから発せられた言葉だと思います. $_POST,GET,REQUEST,COOKIE,SESSIONなどの[]の中は外部からの値を取得するから[]の中に$マークはないですが、変数のように思ってしまいました. 単に文字列の連結ということで理解しておきます

回答No.2

この場合は$iより後ろの文字が不要だからです。仮に$iに1が入ってたとすると、"parameter'.$iで"parameter1"と同じ意味になります。

SariGEnNu
質問者

お礼

ありがとうございます. ということはやはり、$_SESSION[]の[]が変数を意味しているからという関係なんだと思いました. あれから、私も少し考えてみたのですが、そういう解釈にしておこうと思います.これからもよろしくお願いします.

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

試してないのですが .\' がいらないのでは?

SariGEnNu
質問者

お礼

ありがとうさまさまです. .\' を削除したら直ってしまいました. これは、どういうことなのだろうと思いますが、 また、調べてみます.

関連するQ&A

  • 変数のパターン処理パート3

    すみません、以前  http://oshiete1.goo.ne.jp/kotaeru.php3?q=1456597 でも質問していますが セッションの初期化の段階で HTMLの様々なname属性の属性値で指定した$_SESSIONの値を解放してやりたいんです.name属性の属性値は、全てダブルクオーテーションで囲んであります. そして  <tag1 name="name1" …>  <tag2 name="name2" …>   …  <tagX name="nameX" …> などとなっていた場合 unsetの記述は以下です.  unset($_SESSION["name1"]);  unset($_SESSION["name2"]);   …  unset($_SESSION["nameX"]); です.これをfor文で書くには,おそらく次のようになります.  for($i=1;$i<X+1;$i++){  unset($_SESSION["name".$i]);} ですが,私は,この記述に対しては,次のような疑問を持っています. 疑問1. ["name".$i] でなく ['"name'.$i.'"']とすべきではないか この疑問を解消する説明を見つけることができずに悩んでます.その説明あるいは,その説明が書いてあるサイトを教えていただけないでしょうか.

    • ベストアンサー
    • PHP
  • 変数のパターン処理

    配列ではありませんが次のような番号がついた変数に連番の値を入れる処理をしたいときどうするのが一番賢いやり方でしょうか $parameter1="taro1号"; $parameter2="taro2号"; $parameter3="taro3号"; $parameter4="taro4号"; … $parameter100="taro100号"; for文を使ったりして、もっとスッキリ表すこととかできないでしょうか? そのときの考え方やヒントを教えてほしいです

    • ベストアンサー
    • PHP
  • 同じ変数名で値がいくつかある場合の処理

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=731400の質問の続きなのですが、変数名もいくつデータが送られてくるかもわからない状態なのですが、同じ変数名で違う値が送られてくる場合(例えばチェックボックスとかセレクトボックスのマルチプル)はどのようにすればすべての値を拾えるでしょうか。 また、変数名をすべて日本語にしたいのですが、何か問題などあるでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • Excelで変数名に変数を使用(前はできたのに…)

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=614375 で以前も教えていただいたんですが、なぜかできなくて…。 Sub Hensuu() For i = 1 To 5 Gyou(i) = i * i MsgBox Gyou(i) Next i End Sub と試しにしてみたんですが、 「コンパイルエラー:  Sub または Function が定義されていません。」 と出てしまいました。 どこがいけないのでしょうか?

  • セッションの有効期限の設定方法とログアウト方法

    会員システムをPHPのセッション管理を使って作っているのですが、 1.セッションの有効期限の時間を変更するためにはsession_cache_expireを使うんだと思うんですが、これは全ページのsession_start()の前に書かないといけないのでしょうか? それとも、ログインするときに必ず通るPHPファイルに書いておけば大丈夫なのでしょうか? 2.会員ログアウトをする場合は、 unset($_SESSION['****']); でログインするときに入れた変数をunsetするだけで大丈夫なのでしょうか? もっと他に一般的な方法があったりするのでしょうか? どちらかだけでもお分かりの方がいれば教えていただければうれしいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 変数の代入

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=620304 の続きなのです。変数の取得の仕方はわかったのですが、 require '../lib/cgi-lib.pl'; &ReadParse(*in); $year=$in{'year'}; $month=$in{'month'}; のように値を .html からひらってきているような場合、値が0(なし)になってしまうと思うのですが、こういった場合、どういう方法をとるのでしょうか?

    • ベストアンサー
    • CGI
  • ログアウト処理

    <?php if(isset($_SESSION["sdata"])) { print "ようこそ".$_SESSION["sdata"]."さん"; print "<INPUT type=\"button\" value=\"ログアウト\" onClick=\"location.href='自分自身'\">"; unset ($_SESSION["sdata"]); } else { print "ようこそゲストさん"; print "<INPUT type=\"button\" value=\"ログイン\" onClick=\"location.href='ログイン画面'\">"; exit; } ログイン画面で認証できたら、$_SESSION["sdata"]=ユーザー名 として、他の画面では上のような処理をしようかと思ったのですがこれではブラウザの更新ボタンを押してもログアウト扱いになってしまうことに気づきました。 onClick=\"unset ($_SESSION["sdata"]);\" にしたらいけるかと思ったのですが、エラーになってしまいました。ログアウトボタンを押したらセッション変数を削除したいのですが、どうしたらいいでしょうか? それと、ログイン処理はクッキーとかも使ったほうがいいのでしょうか?

    • 締切済み
    • PHP
  • セッション変数について

    48歳独学でプログラムを勉強しているものです。誰も教えてくれる人がいないので、教えてgooさんには大変お世話になっております。 現在PHPを使用して無料レンタルサーバーに会員画面を作ろうとしているのですが、一般的に無料レンタルサーバーでもセッション変数は使えるものなのでしょうか。どうも上手くセッション変数がフォルダに保存されません。無料レンタルサーバーでは不可なのでしょうか。 セッション保存先に「kaiintmp」というフォルダを作成しています。 そして、 session_start(); session_save_path("kaiintmp"); session_register("simei","pass"); $_SESSION[simei]=$simei; $_SESSION[pass]=$pass; のようにしていますが・・・。 自分のパソコンでは、セッション変数が作成されますがレンタルサーバーにUPしても作成されません。 レンタルサーバーにUPしたときのpathがダメなのでしょうか? レンタルサーバーでセッション変数を使用されている方おりましたら宜しくご教授お願いいたします。

    • ベストアンサー
    • PHP
  • 変数名を変数で指定するのに$_POST[

    http://oshiete1.goo.ne.jp/qa2691790.html の#1さんに,変数名を変数で指定できることを教わりました. 下記の3行目のように,です. for ($i=1;$i<=5;++$i){ if (${"var".$i}=="") { ${"errMsg".$i}=$i."が未入力"; } } ここで, (1) $_POST["form"] には「str」という文字列が入っています. (2) $Var には「10」という数値が入っています. (3) これらを結合し, どうしても $_POST["str10"] みたいな変数を作らなければならないのですが, ・<? echo $_POST["str" . $Var]; ?>では何も起こらず. ・<? echo $_POST[{"str" . $Var}]; ?>などと{}で括っても, Parse error: parse error, unexpected '{', expecting ']' in C:\temp.php on line 10. みたいなエラーになります. どういうのが正しい書き方でしょうか?

    • 締切済み
    • PHP
  • [PHP]セッション破棄について

    はじめまして。 phpを始めて1週間の初心者です。 現在、ホームページでログイン処理とログアウト処理をphpのセッションを使って作成しています。 今回質問させて頂くのはログアウト処理についてです。 ログアウト処理をでセッションを破棄する際に http://oshiete1.goo.ne.jp/qa3224862.html を参考にして下記の処理を行わせています。 -------------------- logout01.php -------------------- <?php session_start(); $_SESSION = array(); if(isset($_COOKIE[session_name()])){setcookie(session_name(),'',time()-4200,'/');} session_destroy(); header("location: http://~トップページのURL~/"); ?> -------------------- 確認をしたところ、ログインしたユーザの情報は削除されているようでした。 また、http://oshiete1.goo.ne.jp/qa3224862.htmlを参考に下記のようなログアウト処理も行わせてみました。 -------------------- logout02.php -------------------- <?php session_start(); unset($_SESSION['access']); header("location: http://~トップページのURL~/"); ?> -------------------- 同じく確認したところ、ログインしたユーザ情報は削除されているようでした。 -------------------- 環境 -------------------- <サーバ> 【OS】 windows XP(テスト環境)、CentOS 5.2(公開環境) 【PHP】 5.2.6 【Apache】 2.2 <クライアント> 【OS】 windows XP 【ブラウザ】 Firefox 3.0.8 IE 7 -------------------- -------------------- 質問 -------------------- (1)logout01.phpとlogout02.phpの違いは何でしょうか。 (2)「unset($_SESSION);」は使用すると「$_SESSION」が使えなくなるとのことですが、  それはphpを再インストールしない限りは使えなくなるということでしょうか。  それとも、ブラウザを再起動すれば使えるという意味でしょうか。 (3)「unset($_SESSION);」と「unset($_SESSION['access']);」では何が違うのでしょうか。 (3)セッションを使用するとサーバ側にセッションIDを保存したファイルが保存され、  クッキーがクライアント側に保存されるとのことですが、logout01.phpとlogout02.phpを  実行した場合、サーバ側のセッションIDを保存したファイルとクライアント側のクッキーを  保存したファイルは削除されているのでしょうか。 (4)セッションの有効期限を指定していないため、logout01.phpとlogout02.phpを実行せずに  ブラウザを終了させた時もログインしたユーザ情報は削除されているようでしたが、  この場合もサーバ側のセッションIDを保存したファイルとクライアント側のクッキーを  保存したファイルは削除されているのでしょうか。 初歩的な質問で申し訳御座いませんがよろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう