質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

803閲覧

if文の結果について

nozawa1615

総合スコア11

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/05/12 12:26

編集2019/05/12 12:43

前提・実現したいこと

じゃんけん勝負のプログラムで、グーチョキパーのどれかを選択したら相手の手がランダムで表示され「自分の手」「相手の手」「勝負の結果」が表示されるプログラムを作ってます。

PHPでじゃんけん勝負のプログラム作成中に以下の現象が起こるようになりました。

発生している問題・エラーメッセージ

更新した直前、まだ何も選択していないのにif文の「あいこ」の時の条件である「draw」が勝負の結果に表示されてしまっています。
選択後からは問題なくじゃんけんが出来ます。

該当のソースコード

<?php $hands = array('グー','チョキ','パー'); $playerHand = ''; $pcHand = ''; $result = ''; if(isset($_POST['hand']) === TRUE){ $playerHand = htmlspecialchars($_POST['hand'], ENT_QUOTES, 'UTF-8'); $pcHand = $hands[array_rand($hands)]; } if($playerHand === $pcHand){ $result = ' draw'; }else if( $playerHand === 'グー' && $pcHand === 'チョキ' || $playerHand === 'チョキ' && $pcHand === 'パー' || $playerHand === 'パー' && $pcHand === 'グー' ){ $result = ' Win!!'; }else{ $result = ' lose...'; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>課題中級</title> </head> <body> <h1>じゃんけん勝負</h1> <p>自分:<?php print $playerHand;?></p> <p>相手:<?php print $pcHand;?></p> <p>結果:<?php print $result;?></p> <form method="post"> <input type="radio" name="hand" value="グー">グー <input type="radio" name="hand" value="チョキ">チョキ <input type="radio" name="hand" value="パー">パー<br> <input type="submit" value="勝負!"> </form> </body> </html>

試したこと

打ち間違えがないかの確認
if文の「draw」を違う文字にしてみる(表示が変わるのでif文の条件が更新とともに既に行われているような様子)

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/05/12 12:28

質問テンプレート文言が沢山残っていて要件がくみ取りずらいのでなるべく削ってください (あとそのままの項目はちゃんと埋めるか、削ってください) あと、「コードの見直し」だけでは具体的なことは何もわかりません。 見直しの方向性や試したこと(デバッグ)を具体的に記載してください。
nozawa1615

2019/05/12 12:46

初めての利用だったものですみませんでした。訂正して見ました。よろしくお願いします。
guest

回答1

0

ベストアンサー

最初は両方とも空文字列なので$playerHand === $pcHandで一致してあいこになるのでは?両方が空文字列の時の処理を入れましょう。

あと、
$playerHand = htmlspecialchars($_POST['hand'], ENT_QUOTES, 'UTF-8');
と、ここでhtmlspecialcharsを実行するのは間違っています。
ここは単に代入して、htmlspecialcharsは出力の時に行います。

PHP

1<p>自分:<?php print htmlspecialchars($playerHand, ENT_QUOTES, 'UTF-8');?></p> 2<p>相手:<?php print htmlspecialchars($pcHand, ENT_QUOTES, 'UTF-8');?></p> 3<p>結果:<?php print htmlspecialchars($result, ENT_QUOTES, 'UTF-8');?></p>

投稿2019/05/12 12:46

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nozawa1615

2019/05/12 13:01

回答ありがとうございます。 htmlspecialcharsは出力時に記載するのですね。ありがとうございます。 空文字列の時の処理についてなのですが、まだプログラミングの勉強を初めて数日なので、調べてみましたがいまいち意味を理解することが出来ませんでした。すみません。
otn

2019/05/12 13:08

空文字列というのは、$playerHand = ''; と書いている右辺の '' のことです。
nozawa1615

2019/05/12 14:50

返答ありがとうございます!理解できました!助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問