• ベストアンサー

条件分岐ができません

エーアイ出版の『MySQL&PHP でつくる Web データベース』という本を使ってPHPの勉強をしています。 条件文のところで以下のようなサンプル(要約)が出てきたので、作成して実行してみました。 -------------------------------------------------------------------------------- <? $RealAnswer = "長篠"; ?> <form method="post" action="sample4.php"> <table width="400" border="1"> <tr> <td><b>問題</b></td> </tr> <tr> <td> 戦国の武将で織田信長が天正3年(西暦1575年)に当時無敵と言われた武田騎馬軍団を撃破した合戦の名前を漢字二文字で答えなさい。 </td> </tr> <tr> <td><input size="10" type="text" name="YourAnswer">の合戦</td> </tr> </table> <input type="submit" value="GO"> </form> <? if($YourAnswer) { if($YourAnswer == $RealAnswer) { print("<font color=\"blue\"><b>その通り!長篠の合戦です!</b></font>"); } else { print("<font color=\"red\"><b>残念!" . $YourAnswer . "の合戦ではありません!</b></font>"); } } ?> </body> </html> -------------------------------------------------------------------------------- 答えは「長篠」のはずなのですが、フォームに「長篠」と入力して実行すると、「残念!長篠YourAnswer=長篠の合戦ではありません!」となってしまいます。 これはどうしてでしょうか? 悩んでしまって先へ進めず困っております。どなたか教えていただけないでしょうか? よろしくお願いいたします。 【動作環境】  PHP      4.2.2  Red Hat Linux 9  Apache     2.0.40  IE       6

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

  • ベストアンサー
  • shi-_-na
  • ベストアンサー率100% (3/3)
回答No.3

logomarkさんの方法を私の環境でしてみたところ動作しました。下記のソースで動かなかったら文字コード等の問題 でしょうか(謎)文字コードはEUC-JPコードでやってますか? ↓ソース <? $RealAnswer = "長篠"; ?> <form method="post" action="sample4.php"> <table width="400" border="1"> <tr> <td><b>問題</b></td> </tr> <tr> <td> 戦国の武将で織田信長が天正3年(西暦1575年)に当時無敵と言われた武田騎馬軍団を撃破した合戦の名前を漢字二文字で答えなさい。 </td> </tr> <tr> <td><input size="10" type="text" name="YourAnswer">の合戦</td> </tr> </table> <input type="submit" value="GO"> </form> <? $YourAnswer = $_POST['YourAnswer']; if($YourAnswer) { if($YourAnswer == $RealAnswer) { print("<font color=\"blue\"><b>その通り!長篠の合戦です!</b></font>"); } else { print("<font color=\"red\"><b>残念!" . $YourAnswer . "の合戦ではありません!</b></font>"); } } ?> </body> </html>

bontodesu
質問者

お礼

わざわざ試してくださったのですね。ありがとうございます。 おかげさまで私のところでも無事動作することを確認しました。PHP4.2.0 からグローバル変数の扱いが変わったとか......。(古い書籍で勉強している初心者はかなり困っているはずだと、http://www.sound-uz.jp/php/tips/security.html に書いてありました。) まさに私がそれで、よく理解せずに Linux と PHP を入れたのが原因かと Linux の再インストールからやり直してしまいました。そんなわけでお礼が遅くなってしまいました。本当にありがとうございました。

その他の回答 (2)

  • logomark
  • ベストアンサー率0% (0/1)
回答No.2

下記の1行を追加してみたら・・。 <? //ここから $YourAnswer = $_POST['YourAnswer']; //ここまで if($YourAnswer) { if($YourAnswer == $RealAnswer) { print("<font color=\"blue\"><b>その通り!長篠の合戦です!</b></font>"); } else { print("<font color=\"red\"><b>残念!" . $YourAnswer . "の合戦ではありません!</b></font>"); } } ?>

bontodesu
質問者

お礼

logomark さん、大きなアドバイスをありがとうございました。 おかげさまで私のところでも無事動作することを確認しました。PHP4.2.0 からグローバル変数の扱いが変わったとか......。(古い書籍で勉強している初心者はかなり困っているはずだと、http://www.sound-uz.jp/php/tips/security.html に書いてありました。) まさに私がそれで、よく理解せずに Linux と PHP を入れたのが原因かと Linux の再インストールからやり直してしまいました。そんなわけでお礼が遅くなってしまいました。本当にありがとうございました。

  • the845t
  • ベストアンサー率33% (246/743)
回答No.1

$_POST['YourAnswer']じゃないとダメかと。 PHP3までは$hogeでいけたようですが・・・。

bontodesu
質問者

お礼

the845t さんのおっしゃる通りでした。でも、初心者の私にはどこをどう直せばよいのかよくわからなかったようです。おかげさまで今はよく理解することができるようになりました。ありがとうございました。

bontodesu
質問者

補足

ご回答ありがとうございます。早速試してみました。 $YourAnswer を $_POST['YourAnswer'] にすべて置換して実行してみればよいのですよね? やってみたのですが......。結果は同じでした。引き続きご協力願えましたら幸いです。よろしくお願いします。

関連するQ&A

専門家に質問してみよう