• ベストアンサー

PHP

ご質問させてください。 只今、PHPでクイズを作成しています。 if ($input_data == 40){ print('正解です。おめでとうございます。'); 上記の様に答えを設定することが出来たのですが 値以外(例えば名前等)の日本語?を記入して答えを出すには どの様に記述したらよろしいでしょうか。 ご教示の程よろしくお願い致します。

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

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.3

>【""】を外すと正解になるのですが それだとエラーになってしまいませんか?エラーがちゃんと捕捉出来ない環境なんでしょうか(ちょっと謎です)。 下記のソースで確認してみてください。これで問題なければ if で書き直してもいいだろうとは思いますが・・・ <form action="" method="post"> <input type="text" name="data" /> <input type="submit" value="送信" /> </form> <?php if ($_POST) { $input_data = isset($_POST['data']) ? $_POST['data'] : ''; switch ($input_data) { case 40: // (緩やかな比較なので'40'でなくてもOK) print '正解です(40)<br />'; break; case 'JP': print '正解です(JP)<br />'; break; case '日本': print '正解です(日本)<br />'; break; default: print '間違いです<br />'; } }

wahaha5959
質問者

補足

ありがとうございます! まさにこれでした。 曖昧な質問ですいませんでした。 回答してくださった皆様ありがとうございました。

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

基本は同じです。 if ($input_data === "日本" ){ print('正解です。おめでとうございます。'); ですが、数値とは違って、いろんな問題点があります。 ・input_dataに入ってくる文字列が、いわゆるURLエンコードされたものなら、デコードする必要がある ・文字コードが違っているなら(Shift_JIS,EUC-JP,UTF-8等),プログラムで使っているものに変換する必要がある shift_jisで書かれた「日本」 !== UTF-8で書かれた「日本」 ・入力の揺れを、どこまで「正解」と判定するか、決める必要がある。あるいは、揺れが出ないように、問題を工夫する必要がある。 上の例では「日本国」「にほん」「ニッポン」「Japan」「日本である」は全て不正解

wahaha5959
質問者

お礼

ありがとうございました!

wahaha5959
質問者

補足

早速の回答ありがとうございます。 kmeeさんの言う if ($input_data === "日本" ){ print('正解です。おめでとうございます。'); を記述したら、日本と入力しても不正解となってしまいます。 【""】を外すと正解になるのですが 日本というキーワードのみならず、全ての文字が対象となってしまい 全部が正解となってしまいます。

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

>上記の様に答えを設定することが出来たのですが そのソースで、$input_dataにはどこで何を代入していますか?POST(もしくはGET)データですよね。データが数字であっても文字列であっても処理は同じです(というか基本的には文字列だが『厳密な型比較』をしなければ数値として比較可能というだけです)。

wahaha5959
質問者

お礼

ありがとうございました。

wahaha5959
質問者

補足

早速のご回答ありがとうございます。 はい、この表示させているPHPはPOSTです。 $input_dataには回答の数値【40】をとりあえず記述してるのですが 数値ではなく文字列にすると 指定した文字列ではなく、全ての文字列が正解となってしまうのです。 勿論数値のみでの回答なら問題なく可動するのですが・・・

関連するQ&A