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

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

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

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

Q&A

解決済

1回答

1549閲覧

phpでじゃんけんゲーム

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2018/06/10 03:13

前提・実現したいこと

PHPでじゃんけんゲームを作っています.

現在,自分の手を選ぶ前にすでにPCの手が出力されてしまっている状態です.
また自分の手を選んで送信すると結果の勝ち負けあいこの判定も出ていない状態です.

自分の手をラジオボタンで選択し,送信を押すとPCの手とじゃんけん結果が表示されるようにしたいです.
ご教授よろしくお願い致します.

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

グー,チョキ,パーを選んで送信すると以下のエラーが出ます.

Warning: array_rand() expects parameter 1 to be array, string given in /Applications/XAMPP/xamppfiles/htdocs/php_basic/intermediate7_1.php on line 22 Notice: String offset cast occurred in /Applications/XAMPP/xamppfiles/htdocs/php_basic/intermediate7_1.php on line 22

該当のソースコード

php

1<?php 2$hand=array('グー', 'チョキ', 'パー'); 3$my=''; 4$pc=''; 5$result=''; 6 7if(isset($_POST['hand'])===TRUE){ 8 $hand=htmlspecialchars($_POST['hand'], ENT_QUOTES, 'UTF-8'); 9} 10 11// if($hand==='グー'){ 12// $my='<p>グー</p>'; 13// }else if($hand==='チョキ'){ 14// $my='<p>チョキ</p>'; 15// }else if($hand==='パー'){ 16// $my='<p>パー</p>'; 17// } 18 19if($my!==''){ 20 $pc='<p></p>'; 21}else{ 22 $pc=$hand[array_rand($hand)]; 23} 24 25if($my==='グー'&& $pc==='グー'){ 26 $pc='<p>グー</p>'; 27 $result='<p>あいこ</p>'; 28}else if($my==='グー' && $pc==='チョキ'){ 29 $pc='<p>チョキ</p>'; 30 $result='<p>勝ち</p>'; 31}else if($my==='グー' && $pc==='パー'){ 32 $pc='<p>パー</p>'; 33 $result='<p>負け</p>'; 34}else if($my==='チョキ' && $pc==='グー'){ 35 $pc='<p>グー</p>'; 36 $result='<p>負け</p>'; 37}else if($my==='チョキ' && $pc==='チョキ'){ 38 $pc='<p>チョキ</p>'; 39 $result='<p>あいこ</p>'; 40}else if($my==='チョキ' && $pc==='パー'){ 41 $pc='<p>パー</p>'; 42 $result='<p> 勝ち</p>'; 43}else if($my==='パー' && $pc='グー'){ 44 $pc='<p>グー</p>'; 45 $result='<p>勝ち</p>'; 46}else if($my==='パー' && $pc==='チョキ'){ 47 $pc='<p>チョキ</p>'; 48 $result='<p>負け</p>'; 49}else if($my==='パー' && $pc==='パー'){ 50 $pc='<p>パー</p>'; 51 $result='<p>あいこ</p>'; 52} 53 ?> 54 55 <!DOCTYPE html> 56 <html lang="ja"> 57 <head> 58 <meta charset="utf-8" /> 59 <title>じゃんけん</title> 60 </head> 61 <body> 62 <!-- <h1>じゃんけん勝負</h1> --> 63 <label>自分: <?php print $my; ?></label> 64 <label>相手: <?php print $pc; ?></label> 65 <label>結果: <?php print $result; ?></label> 66 67 <form method="post"> 68 <input type="radio" name="hand" value="グー" 69<?php if($hand==='グー'){ print "checked";} ?>/>グー 70 <input type="radio" name="hand" value="チョキ" 71<?php if($hand==='チョキ'){ print "checked";} ?>/>チョキ 72 <input type="radio" name="hand" value="パー" 73<?php if($hand==='パー'){ print "checked";} ?>/>パー 74 <input type="submit" value="勝負" /> 75 </form> 76 77 </body> 78 </html> 79

試したこと

PCの手の判定で自分の手が選ばれていなければ空白という表示にしてみたのですが,何も変わりませんでした.

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

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

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

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

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

guest

回答1

0

ベストアンサー

変数がぐちゃぐちゃになってますね。
配列ならarry_handのように分けたほうがいいでしょう。

$hand=array('グー', 'チョキ', 'パー');
ここで配列をつくっているのに、
$hand=htmlspecialchars($_POST['hand'], ENT_QUOTES, 'UTF-8');
ここで$_POSTを代入してしまってます。

下一応動きます

<?php $arry_hand=array('グー', 'チョキ', 'パー'); $my=''; $pc=''; $result=''; if(isset($_POST['hand'])===TRUE){ $my=htmlspecialchars($_POST['hand'], ENT_QUOTES, 'UTF-8'); $pc=$arry_hand[array_rand($arry_hand)]; } // if($hand==='グー'){ // $my='<p>グー</p>'; // }else if($hand==='チョキ'){ // $my='<p>チョキ</p>'; // }else if($hand==='パー'){ // $my='<p>パー</p>'; // } if($my==='グー'&& $pc==='グー'){ $pc='<p>グー</p>'; $result='<p>あいこ</p>'; }else if($my==='グー' && $pc==='チョキ'){ $pc='<p>チョキ</p>'; $result='<p>勝ち</p>'; }else if($my==='グー' && $pc==='パー'){ $pc='<p>パー</p>'; $result='<p>負け</p>'; }else if($my==='チョキ' && $pc==='グー'){ $pc='<p>グー</p>'; $result='<p>負け</p>'; }else if($my==='チョキ' && $pc==='チョキ'){ $pc='<p>チョキ</p>'; $result='<p>あいこ</p>'; }else if($my==='チョキ' && $pc==='パー'){ $pc='<p>パー</p>'; $result='<p> 勝ち</p>'; }else if($my==='パー' && $pc='グー'){ $pc='<p>グー</p>'; $result='<p>勝ち</p>'; }else if($my==='パー' && $pc==='チョキ'){ $pc='<p>チョキ</p>'; $result='<p>負け</p>'; }else if($my==='パー' && $pc==='パー'){ $pc='<p>パー</p>'; $result='<p>あいこ</p>'; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8" /> <title>じゃんけん</title> </head> <body> <!-- <h1>じゃんけん勝負</h1> --> <label>自分: <?php print $my; ?></label> <label>相手: <?php print $pc; ?></label> <label>結果: <?php print $result; ?></label> <form method="post"> <input type="radio" name="hand" value="グー" <?php if($my==='グー'){ print "checked";} ?>/>グー <input type="radio" name="hand" value="チョキ" <?php if($my==='チョキ'){ print "checked";} ?>/>チョキ <input type="radio" name="hand" value="パー" <?php if($my==='パー'){ print "checked";} ?>/>パー <input type="submit" value="勝負" /> </form> </body> </html>

投稿2018/06/10 04:07

hellommm

総合スコア49

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

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

退会済みユーザー

退会済みユーザー

2018/06/10 07:16

ご指摘ありがとうございます!まだ変数になれておらず理解が追いついていませんでした.無事理想通りに動きました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問