• ベストアンサー

phpの変数について

fedora3,apache2.0,php4.3.11で構成しています。 参考書やサイトを見ながら学習中なのですが、初歩でつまづいています。 <html><body> <?php print $YourName; ?>さん、こんにちは。 </body></html> というa.phpと名づけたファイルにIEでアクセスしているのですが、このときに「サーバ名/a.php?YourName="kokoro"」と打てば、$YourNameという変数に"kokoro"という文字が代入されるとあるのですが、代入されません。参考書のPHPは4.0です。他の参考にしているサイトのPHPのバージョンは分かりません。

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

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

  • ベストアンサー
  • tecinfo
  • ベストアンサー率52% (32/61)
回答No.3

参考書通りに行かないのは php.iniのregister_globalsの設定のせいかと思います。 詳しくは下のリンク参考にしてみてください。 http://d.hatena.ne.jp/keyword/register_globals orehataroさんの環境がphp4.3.11ですので、PHPのデフォルトでregister_globals=off に設定されているのですが、 参考書のバージョンはphp4.0ですので、 register_globals=on を前提に書かれているのでしょう。 解決法としては先の方のアドバイス通り $_GET,$_POST,$_REQUESTを使うか、 php.iniファイルの設定をregister_globals=onに変更して Webサーバの再起動をかければよいと思います。

orehataro
質問者

お礼

ありがとうございます。 出来ました。今はなぜ、register_globalsがoffになって いるか調べているんですが、中々説明がないですね・・検索の仕方が悪いんでしょう・・(^^;)

その他の回答 (3)

  • tecinfo
  • ベストアンサー率52% (32/61)
回答No.4

この辺の記事に事例が紹介されていますので、よかったら読んでみて下さい^^ http://ns1.php.gr.jp/pipermail/php-users/2003-November/019641.html 自分も、「ちゃんと変数を初期化すればregister_globals=onでも危険はない」と思うのですが、プログラムの汎用性を考えると(仕事でスクリプトを作成する場合や他人に配布する場合)register_globals=off を前提としたプログラムを組んでいく方が良いのかな、と思います。

orehataro
質問者

お礼

ありがとうございます。 自分しかいじらないので「on」でやってみようと思います。情報提供ありがとうございました。

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.2

サーバ名/a.php?YourName="kokoro" ダブルクウォーテーションをつけてはダメですね。 サーバ名/a.php?YourName=kokoro で試してみてください。

orehataro
質問者

お礼

出来ました。ありがとうございました。 今からPOSTとGETの違いを調べてきます。(^^;)

  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.1

参考書全てが、正しいとは限りません たしかに、その参考書の通りの動きをする場合がありますが、その動きはセキュリティ上好ましくありませんので現在のPHPでは最初からは出来ないようにしています その代わりに $_GET[YourName] を使ってみてください ---------- <html><body> <?php print $_GET[YourName]; ?>さん、こんにちは。 </body></html> ------ 又は ------- <html><body> <?php $YourName = $_GET[YourName]; print $YourName; ?>さん、こんにちは。 </body></html> ------ です

orehataro
質問者

お礼

ありがとうございました。出来ました。 自分で環境を組んでいるのに、inu2さんのおっしゃるセキュリティが分かっていないので、勉強し直します。 ありがとうございました。(^0^)

関連するQ&A

  • Fedoraでphp

    FedoraでApache+phpを使いたいのですが、phpがうまく作動しません。 具体的には <html> <head> <title>Example</title> </head> <body> Hello World! <?php echo "Hi, I'm a PHP script!"; ?> </body> </html> というファイルをブラウザ(Mozilla)でみると、 Hello World! しか表示されません。 phpのマニュアルをみると http://www.php.net/manual/ja/faq.installation.php#faq.installation.processing に一見答えがかいてあるようにみえますが、ためしてみるとApache1.3用の記述であることがわかります。 ApacheとphpのインストールはFedoraインストール時に「Webサーバー」の項を全て選択して入れました。 何がいけないのでしょうか?

  • PHP 変数の書き方

    初歩的な質問で恐縮なのですが どなたか教えていただけますでしょうか。 変数の書き方で $a="banana"; $$a = 1; print $$a; とした場合にちゃんと出力結果は「1」と出るのですか プログラムの書き方として上記のように$$を続けて書くのは正しいのでしょうか。 例えば配列を使った場合 $a = array("banana"=>0); このbananaを変数名としたい場合 bananaをforeachなどで取り出し $keyとし $$key = 1; print $$key; この書き方はプログラムの書き方として正しいのでしょうか?他によいか書き方ある場合その書き方を教えていただければ幸いです。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • 【PHP】 タグを有効にするには?

    例えば、次の様に $body の変数の中に、ボールドタグを付けてコメントを代入し $body = "<b>おはよう御座います。</b>"; それを次の様に print で出力した時 print "$body"; 【実行結果】 <b>おはよう御座います。</b> 上の【実行結果】の様にボールドタグも出力されてしまうのですが $body の変数の代入時に、ボールドタグを有効にする事は出来ないのでしょうか? また、出きるとしたら、どうしたら良いのでしょうか? 分らないので教えて下さい。 宜しくお願い致します。 ちなみに、print "<b>$body</b>"; とはせず、出きれば代入の時にボールドタグを有効にしたいのです。

    • 締切済み
    • PHP
  • phpでの局所変数

    phpで、perlでいうlocalやmyのような宣言はできないのでしょうか? function a() {  if(1){   $a=2;   print "$a<br>";  }  print "$a<br>"; } としても2が2つ表示されてしまいます。 ある関数内で場所を問わず宣言したグローバル変数でない変数のスコープは、宣言場所がどこであれ、「関数内」となるのでしょうか?

    • ベストアンサー
    • PHP
  • Fedora Core6にApacheとPHPは入っている?

    初歩的な質問ですが、Fedora Core6には既にApacheとPHPは入っているのでしょうか?

  • PHPの変数の渡し方

    現在以下のような位置関係のファイルでa.phpからb.phpに変数を渡したいのですが、うまく行きません。 ├dir1 │ └a.php └dir2   └b.php a.php <?php public function a(){ $value = "test"; } ?> b.php <?php public funcition b(){ print($value); } ?> phpについてwebで調べ、a.phpで$valueをglobalにしてb.phpでは 関数内でinclude('../dir1/a.php')を記述して$GLOBALS['$value']を 使ってみたのですが、うまく値がとれませんでした。 a.phpで変数をテンプレートに設定して $smarty->Set('Value', $value); それをb.phpで取得しようとしたのですが $smarty->getTemplateVars(Value); 取得する事ができませんでした。 同じようにgeTTemplateVarsを使って別のphpでは取得出来たりするのですが、 このsmartyのスコープ?というのもわかりません。 phpScheduleItというスケジュール管理のパッケージを触っていて、 php自体初めてで深い実装が全て追えていません。 勉強不足で申し訳ないのですが、何かヒントとなる事がありましたらご教示頂けますでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • php内のformのvalueに変数の値をいれたい

    どうぞよろしくお願いします。 php内のformのvalueに変数の値をいれたいのですが、下記の様に書くと<?=$a?> がそのままソースに出てしまいます。 どの様に書けば変数の値をvalueに格納できるでしょうか? <?php $a='abcd'; print'<form method="post" action="abc.php">'; print'<input type="hidden" name="a" value="<?=$a?>">'; print'</form>'; ?>

  • 変数について

    Perlを勉強し始めました。 いままでプログラミングを組むことがなかったので、全くの素人 なんですが、いきなり壁に当たりました。 変数のところを勉強してるんですが、 $a=1; $a +=2; print $a みたいな感じで書かれてるのをみて、ふと疑問が。 $aに1を代入する。 $aに、$a+2を代入して、$aを表示ってことですよね。 $b +=2;にして、print $bにしないで、なんで $aに、$a+2を代入するんでしょうか?? $aは、すでに1を代入していて、$aは『1』としてるわけじゃないですか。 その$aに、また$a+2を代入するという発想がさっぱり理解できません。 普通に、$bにすればいいじゃん、その方がすっきりするじゃん、って思うんですが、なんでこんな記述方法にするのかわかりやすく教えていただけたら助かります。

    • ベストアンサー
    • Perl
  • PHP 変数の初期化について教えてください

    PHPを勉強中の者です。他のプログラム言語の使用経験は一切ありません。 PHPにおいては変数の初期化は絶対に必要ではないということで、今まで特に気にすることは無かったのですが、マニュアルにもあるように初期化することは良い習慣とのことで正しい初期化を知りたく質問させていただきます。 他のプログラムにおいては最も最初に解決すべき部分であり、恥を晒すようですが、なにとぞアドバイスをいただけたらと思います。 以下質問になります。 ---------------------------------- 1.私の解釈では変数の初期化とは、変数の型を決め初期値を入れる、と認識していますが、これは正しいのでしょうか。 2.Javaの参考書で変数の部分を読んでみたところ、型を決めただけでは初期化とはいわず、型決めと初期値を入れた工程(工程ってのもおおげさかもしれませんが)が初期化と記載がありました。 PHPにおいては型の宣言は不要とのことで下記のように記載すれば型及び初期値が決まると解釈していますが、この解釈は正しいのでしょうか? $a = 1;  //これは整数 $d = 1.1 //これは浮動小数点 $b = "aa"; //これは文字列 $c = true; //これは論理値 $a = array(); //これは配列 3.他の参考になりそうなサイトで配列を代入する変数を初期化する場合として下記のような記載がありました。 unset($a); $a = array("aa", "bb"); unsetは変数を解放するためのものであり、私だったらこの場合の初期化として $a = array(); を書く方が適しているように思いますが、配列を代入する変数を初期化する場合、上記サンプルと私の考えとどちらが正しいのでしょうか? 4.変数を初期化するタイミングについて 質問のために、サンプルコードを書きました。まず下記サンプルを見てください。 ※このサンプルコードはformエリアからの入力値によって計算を行なうものと想定して下さい。値を受けた後の処理工程を記載しています。また、受ける値の正当性チェックについて省いています。 (1)(2)については質問箇所です。 (1) if(isset($_GET['send'], $_GET['int1'], $_GET['int2'])){ (2) $a = $_GET['int1']; $b = $_GET['int2'] }else{ exit; } $c = $a + $b; echo $c; サンプルコードは以上となります。仮にこういうコードがあったとして、初期化するタイミングがわかりません。コード中に(1)(2)と番号を振りましたが、個人的にこの2箇所のどちらかで初期化すればよいだろうと思い込んでいますが、こういうコードの場合、どの部分で初期化した方がいいのでしょうか? ---------------------------------- 質問は以上となります。 何卒宜しくおねがいします。

    • ベストアンサー
    • PHP
  • php クラス

    phpエクラスの勉強をしているのですが、参考書に書いているメンバ変数に値を代入している意味がよくわからないので教えてください。メンバ変数の値を書かなくtも動作できるのになぜ必要なのでしょうか? 参考書 <html> <head> <title>サンプル</title> </head> <body> <?php $pr = new Person; $pr->name = "鈴木"; $pr->age = 56; ?> <table border="2"> <tr bgcolor="#AAAAAA"> <th>名前</th> <th>年齢</th> </tr> <?php print "<tr><td>"; print $pr->getname(); print "</td><td>"; print $pr->getage(); print "</td></tr>"; ?> </table> <?php class Person { public $name ="姓名"; public $age = 20; function getname(){return $this->name;} function getage(){return $this->age;} } ?> </body> </html> テスト <?php class Person { public $name ;←ここに値を格納する意味 public $age ;←ここに値を格納する意味 function getname(){return $this->name;} function getage(){return $this->age;} } ?>

    • ベストアンサー
    • PHP

専門家に質問してみよう