noshi’s diary

ゲームの事、映画やドラマ、思いついた事、プログラミングの事、雑記的なことを書いています

動かないプログラム?

phpの参考書に出ているスクリプトを実際に入力して動作を確認する場面もあるかと思います。 今回、参考書が次のようなものだったので、そのまま入力してみた。 (参考書)

<form method="get" action="form1.php">
<p><input type="submit" value="「おはようございます」" name="morning"></p>
<p><input type="submit" value="「こんにちわ」" name="noon"></p>
<p><input type="submit" value="「こんばんは」" name="night"></p>
<p>↓あいさつが表示されます</p>
<p>
<?php
if($morning){
print("おはようございます\n");
}elseif($noon){
print("こんにちわ\n");
}elseif($night){
print( "こんばんわ\n");
}
?>
</p>
</form>

ここまで 参考書の実行結果は、↓あいさつが表示されます の下に ボタンをクリックした文章が表示されることになっています。 しかし、ボタンを押しても、そこにはなんの表示もされません。 そもそも$GETの値を受け取るロジックを組み込んでいないのに出来るの?と疑問に思いつつ、上記のプログラムをコピペしたのですが、思うような結果は得られませんでした。 やはり、$GETのロジックは必要では?と思い、以下に$_GETで値を取得するようにちょっと変更。

<form method="get" action="form1.php">
<p><input type="submit" value="「おはようございます」" name="morning"></p>
<p><input type="submit" value="「こんにちわ」" name="noon"></p>
<p><input type="submit" value="「こんばんは」" name="night"></p>
<p>↓あいさつが表示されます</p>
<p>
<?php
$morning = @$_GET['morning'];
$noon= @$_GET['noon'];
$night= @$_GET['night'];
if($morning){
print("おはようございます\n");
}elseif($noon){
print("こんにちわ\n");
}elseif($night){
print( "こんばんわ\n");
}
?>
</p>
</form>

こうすると、ボタンをクリックすると、期待どおりの結果が得られました。 さんこうしょーしっかりしっせい!(会津弁) 参考書の初版年度よくみたら、2002年版でした・・・。phpのバージョン違いによる影響?さすがに10年以上前の環境と今の環境の違いを調べる気力もありません。古めのバージョンなら参考書どおりのもので、うまく動いた? 検証する時間もありませんが、参考書で動かないものを動くように考えてみるのもいい勉強になるかもしれませんね。