PHPの勉強を始めて2週間足らずの初学者です。
質問させていただきます。
環境はwindowsXP+xampp+PHP5.2です。
現在、やや古めのPHP書籍のサンプルを試しています。
register_globals=Onの状態では、問題なく動作しました。
しかし、Offにすると反応しない部分があります。
test.phpにてsupport.phpをincludeしているのですが、
以下の箇所をそれぞれregister_globals=Off用に書き換える知恵が
ありません。ほんの一部のみの抜粋にて恐縮ですがご査収願います。
---「test.phpの一部」-----------------------------------------
echo '<INPUT TYPE="radio" NAME="',$name,'"VALUE="',$kaitoubango,'">',"$val\n<br />";}
---「support.phpの一部」--------------------------------------
$kaitoubango++;
$name = $kaitoubango;
$val = $$name;
--------------------------------------------------------------
繰り返しになりますが、register_globals=Onの状態では、問題なく動作しましたが、Offでこの状態でフォームアクションしても$val = $$name;に値がありません。
「support.php」の$$nameを$_POST['name']に変更すれば、可能かと思いましたが、ダメでした。
なお、部分的な質問になりますが、
(1)「test.php」のNAME="',$name,'"VALUE="',$kaitoubango,'"ですが、
何故、NAME="$name" VALUE="$kaitoubango"でないのでしょうか?
「',」は何を意味しているのでしょうか?
(2)「support.php」の$$nameという変数ですが、$が2つ連続した変数は今のところ、初めて見ました。これはどういう意味なのでしょうか?
お詳しい方がおられましたら、何卒アドバイスのを頂戴できればと思います。よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
部分的にしかソースがないので推測になりますが、まず register_globals=Off で $val = $$name; で値が入らないのは $val = $_GET[$name]; または $val = $_POST[$name]; で対応できると思います。
(formのmethodがGETかPOSTかで違います)(1)のご質問についてですが、カンマ「,」ではなくピリオド「.」ではないでしょうか?
まず基本ルールとして、文字列をダブルコーテーションで囲んでいる中では変数が展開されますが、シングルコーテーションで囲んでいる中では展開されません。
echoの中でシングルコーテーションとダブルコーテーションがごちゃごちゃになっていて解り辛くなってますが、前半部分は文字列をシングルコーテーションで囲んでいて、$valあたりからは文字列をダブルコーテーションで囲んでいるようです。
シングルコーテーション部分では変数が展開されないので、一旦文字列を終わらせて文字列演算子の「.」で変数をくっつけているのだと思います。
見やすくするなら
echo "<INPUT TYPE='radio' NAME='$name' VALUE='$kaitoubango'>$val\n<br />";
と、PHPで扱う文字列をダブルコーテーションで囲んで、HTMLタグ内はシングルコーテーションを使用するようにするのが良いのではないでしょうか。
(2)の$が二つくっついた変数ですが、変数名に変数の値を使用する手法で、変数名を動的に扱う際に使います。
例えば$nameの中が abc だとすると $$name は $abc と同等になります。
====================
$abc = 1;
$name = "abc";
echo $abc // 結果は 1 が出力されます
echo $$name // これも 1 が出力されます
====================
ご回答ありがとうございます。無事に解決いたしました。
ご指摘の通り、$val = $_POST['name'];では無反応でしたが、$val = $_POST[$name];できちんと反応してくれました。
初心者の私にも理解できる非常に丁寧で解りやすいご解説をいただき、誠に感謝いたします。
(1)と(2)の両方の質問に対するご解説も納得できました。ありがとうございます。
なお、(1)のご質問についてですが、
>カンマ「,」ではなくピリオド「.」ではないでしょうか?
とのご指摘ですが、確認しましたところ、ピリオド「.」ではなくカンマ「,」でした。試しにピリオド「.」に置換してみたところ、正常に反応しました。
ただし、カンマ「,」でも正常に反応するのが(といいますか、デフォルトがどうしてピリオド「.」でなくカンマ「,」なのか)今回唯一の未解決案件ではございます。(ただし、動作的には全く問題ありません。)
そのため(すぐに締切ってせめて感謝の意を込めて20ポイントを差し上げたいのですが)この点にもしお気づきがございましたら、
ご教授願えないかとの恐縮な希望もございますので、しばらく締め切らずにおかせていただきます。
それはともかく、お蔭様で昨日、一晩中苦悶していた問題を解決することができました。心より感謝申し上げます。
No.2
- 回答日時:
echo の中でカンマ区切りでも表示できているという件ですが、調べてみたところ echo 関数はカンマ区切りで複数の値を与えるとくっつけて表示してくれるようです。
(私も勉強になりました)私は普段 echo より print を使ってます。
print の方はカンマ区切りで複数の値を与えるとエラーになってしまうので、私の認識の中ではピリオドを使ってくっつけるのが正解だと思ってました。
参考URL:http://www.php.net/manual/ja/function.echo.php
再度のご回答ありがとうございます。たいへん痛み入ります。
わざわざ調べていただいて、まことに恐縮です。
おかげでたいへん勉強になりました。
思い切って初めてこちらのサイトで質問を投稿させていただきましたが、想像以上の有用性の高さに驚いています。今後もPHPの勉強を進めるにあたり、質問させていただくことが多くなりそうです。
また機会がございましたら、たいへんお手数ですが、何卒よろしくお願い申し上げます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- HTML・CSS ただいま勉強始めたての初心者です。フォームを縦並べにしたいです。 2 2022/11/20 17:18
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像が表示出来ません。
-
foreachがうまく動かない
-
ファイル名を変更してアップロ...
-
PHPで入力フォームでデータを確...
-
XMLをツリー形式で表示
-
PHPからデータベースの該当行を...
-
フォームでのリセットを使う方法
-
PHP ボタンが押されたら処理を...
-
フォーム送信後の更新ボタンで...
-
ラジオボタンをsessionで使いたい
-
HTMLで前の画面に戻る時、入力...
-
検索時の選択内容を保持する方法
-
<input type="hidden" >で配列...
-
ラジオボタンを押すと、表示が...
-
【HTML(PHP?)】複数のフォーム...
-
プルダウンとCSVの連動
-
POSTの値を配列として受け取っ...
-
PHPで、ボタンを押すと同じペー...
-
アマゾンのような評価の星を選...
-
フォームへの前回入力値をクリ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
重複を防ぐ記述について教えて...
-
VBA で、スペースを含むファイ...
-
PHPで入力フォームでデータを確...
-
Flaskでサーバー立ち上げに関して
-
phpで変数を使ってcopyできない
-
ファイル名を変更してアップロ...
-
PHPからHTMLへの変数の受け...
-
$_SESSIONに渡した後はそのまま...
-
テキストボックスの値を取得したい
-
openCVのトラックバーについて
-
scanfでの読み込み文字数制限
-
アップロードファイル名の文字化け
-
PHP MySql 画像を取得
-
Fortranでのファイル名操作につ...
-
ポインタ配列をfscanfで読み込...
-
UPDATEできない
-
WordのIDataObject::GetData呼...
-
C# 同じ処理をまとめたい
-
POSTの項目に追加
-
イタリア人がCatherineと聞いた...
おすすめ情報