- ベストアンサー
PHP
ご質問させてください。 只今、PHPでクイズを作成しています。 if ($input_data == 40){ print('正解です。おめでとうございます。'); 上記の様に答えを設定することが出来たのですが 値以外(例えば名前等)の日本語?を記入して答えを出すには どの様に記述したらよろしいでしょうか。 ご教示の程よろしくお願い致します。
- みんなの回答 (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 />'; } }
その他の回答 (2)
- kmee
- ベストアンサー率55% (1857/3366)
基本は同じです。 if ($input_data === "日本" ){ print('正解です。おめでとうございます。'); ですが、数値とは違って、いろんな問題点があります。 ・input_dataに入ってくる文字列が、いわゆるURLエンコードされたものなら、デコードする必要がある ・文字コードが違っているなら(Shift_JIS,EUC-JP,UTF-8等),プログラムで使っているものに変換する必要がある shift_jisで書かれた「日本」 !== UTF-8で書かれた「日本」 ・入力の揺れを、どこまで「正解」と判定するか、決める必要がある。あるいは、揺れが出ないように、問題を工夫する必要がある。 上の例では「日本国」「にほん」「ニッポン」「Japan」「日本である」は全て不正解
お礼
ありがとうございました!
補足
早速の回答ありがとうございます。 kmeeさんの言う if ($input_data === "日本" ){ print('正解です。おめでとうございます。'); を記述したら、日本と入力しても不正解となってしまいます。 【""】を外すと正解になるのですが 日本というキーワードのみならず、全ての文字が対象となってしまい 全部が正解となってしまいます。
- agunuz
- ベストアンサー率65% (288/438)
>上記の様に答えを設定することが出来たのですが そのソースで、$input_dataにはどこで何を代入していますか?POST(もしくはGET)データですよね。データが数字であっても文字列であっても処理は同じです(というか基本的には文字列だが『厳密な型比較』をしなければ数値として比較可能というだけです)。
お礼
ありがとうございました。
補足
早速のご回答ありがとうございます。 はい、この表示させているPHPはPOSTです。 $input_dataには回答の数値【40】をとりあえず記述してるのですが 数値ではなく文字列にすると 指定した文字列ではなく、全ての文字列が正解となってしまうのです。 勿論数値のみでの回答なら問題なく可動するのですが・・・
補足
ありがとうございます! まさにこれでした。 曖昧な質問ですいませんでした。 回答してくださった皆様ありがとうございました。