PHPとHTMLで2人対戦の数当てゲームを作る方法

このQ&Aのポイント
  • PHPとHTMLを使用して、2人で対戦する数当てゲームのプログラムを作成中です。
  • 現在、トップ画面はほぼ完成し、プレイ画面のレイアウトもほとんど終わっています。
  • 友達によると、PHPを一番外に用意し、tableなどの要素をprint("...")で囲む必要があるそうです。しかし、これによりsubmitボタンからプレイ画面に移動できなくなりました。初心者なので、分かりやすい方法を教えていただきたいです。
回答を見る
  • ベストアンサー

PHP、HTMLについて

私は今、2人で対戦する数当てゲームのプログラムを作っています。 トップ画面で2人の名前と秘密の数字を入力し、そこから次のプレイ画面に移り、数字を入力し合い先に秘密の数字を当てたプレイヤーの勝ちというものです。 現在はトップ画面はほとんど終わって、プレイ画面はレイアウトだけほとんど終わっているという状態です。 今までのプログラミングは、このプレイ画面のレイアウトをHTMLで作り上げ、その中でPHPが必要な部分にPHPを組み込むというやり方をしていたのですが、友達に「PHPを一番外に用意して、tableなどをprint("");で囲まないとだめ」と言われました。 今までは、 <body> <table>など............... .............................</table> </body>で、 友達が言うには、 <body> <?php print("<table>など.................... ....................................</table>"); ?> </body>みたいな感じです。 これだと、URLからこのPHPのアドレスを直接入力すれば入れるのですが、トップ画面(HTML)からsubmitボタンを押して、プレイ画面に飛べなくなりました。 初心者なのでできるだけ分かり易く教えていただけたらありがたいです。 因みに、print("");の中のHTMLであらかじめ使っていた"はちゃんと\"にしています。 よろしくお願いします。

  • PHP
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
noname#244856
noname#244856
回答No.2

そのお友達の方の方が初心者だと思いますけどね。 私だったら <?php $arr = array( 'a' => 'あ', 'b' => 'い', 'c' => 'う', ); header('Content-Type: text/html; charset=UTF-8'); ?> <!DOCTYPE html> <html> <head> <title>Test</title> </head> <body> <table> <tr><th>キー</th><th>値</th></tr> <?php foreach ($arr as $key => $value): ?> <tr><td><?=$key?></td><td><?=$value?></td></tr> <?php endforeach; ?> </table> </body> </html> のように制御構造の別構文や、echoの短縮構文を利用してHTMLタグの中に値を埋め込みます。 echoで直接HTMLタグを出力するのはよく「汚い」と言われます。

hitosashi
質問者

お礼

回答ありがとうございます。 こんな書き方もあるんですね(^^) 参考になりました。 勉強しなおします。

その他の回答 (2)

  • tracer
  • ベストアンサー率41% (255/621)
回答No.3

PHPはHTMLを埋め込める言語です。 逆に言えば、HTMLの中にPHPを埋め込めるとも言えます。 基本は、print文でhtmlを出力できますが、長文をprintで出力する場合は、ヒアドキュメントが向いています。 print<<<HTML <h1>挨拶</h1> <ul> <li>おはよう</li> <li>こんにちは</li> <li>こんばんわ</li> </ul> HML; これは「ヒアドキュメント」で検索すればすぐにでも出るでしょう。 ただ、管理の上では、PHPプログラムの中でprint文を多用するのはあまり効率がよくないかもしれません。 それは、経験ですのでやってみればわかります。 さて、冒頭で HTMLの中にPHPを埋め込めるとも言えます。と書きましたが、答えはすでに出ていて、No.2さんのような書き方です。 <html> <head> <title><?php print $title</title> </head> <body> <?php print $body?> </body> </html> こういう書き方を覚えると、大枠を全てのページで共通させて、変更部だけをphpプログラムによって分岐させるという手段が簡単にとれます。URLなどをきっかけに内容を変更するのが一般的でしょう。 また、phpは外部ソースを読み込めるので、外部に読み込み用のhtmlを準備し、それを出力するという方法も一般的です。そうすると、htmlとphpを分離できるので、管理が楽になります。 どれが一番すぐれているというものではありません。プログラムの内容によって、適宜手段を選択していけばよいと思います。

hitosashi
質問者

お礼

回答ありがとうございます。 とても参考になりました。

回答No.1

> 友達に「PHPを一番外に用意して、tableなどをprint("");で囲まないとだめ」と言われました。 これが「だめ」である,とは少なくとも私は思いません。 というよりも,プログラムの世界で理由も無しに「だめ」ということはないはずです。 # セキュリティ上云々,効率上云々,少なくとも理由は付けられますが。 まずは,なぜ「だめ」なのかを納得いくまでそのお友達に訊ねてみてはいかがでしょうか。 ちなみに,私がHTMLをechoやprintでのみ出力するようなコードを見たら,まず理由を聞くでしょう。 コードの記述効率,メンテナンス性,どちらも通常は悪くなるので。 # タグ1つくらいなら構わないですが……。

hitosashi
質問者

お礼

回答ありがとうございます。 まあ私は初心者で、その人が高専なんでちょっとレベルに差があって その人の言っていることが私には理解しがたいということもあるんですが(‥;)

関連するQ&A

  • PHP、HTML、JavaScriptで

    初心者で数当てゲーム(プレイヤー2人が互いに4桁の秘密の数字を設定後、それを交互に当てあうというもの。数値とその位置が当たっていれば◎を~個、数値が合っていて位置が違えば○を~個、数値も違えば×を~個表示)を作成中なのですが、現在、◎、○、×の数をそれぞれ表示するところで止まっています。 とりあえず、前段階として◎の数だけを表示するようにプログラミングしようと思っています。 JavaScriptで、秘密の数字とプレイ画面で入力した数字の各桁の数字を照らし合わせ、一致した数だけ◎の個数を表示するためのプログラミング。 本分内のPHPで、if文を使って◎の個数を表示するプログラミングしています。 一応、JavaScript・PHPのプログラミングは下記のようにしています。 <script type="text/javascript"><!-- function check1(){ var countS1="<?php print addslashes($_SESSION['countS1']); ?>"; if(4桁すべてが等しい場合){ countS1=4; }else if(4桁の内3つの数字が等しい場合){ countS1=3; }else if(4桁の内2つの数字が等しい場合){ countS1=2; }else if(4桁の内1つの数字が等しい場合){ countS1=1; }else{ countS1=0; } } //--></script> <?php if($_SESSION['countS1']=4){ echo $_SESSION['countS1']; echo '個'; }else if($_SESSION['countS1']=3){ echo $_SESSION['countS1']; echo '個'; }else if($_SESSION['countS1']=2){ echo $_SESSION['countS1']; echo '個'; }else if($_SESSION['countS1']=1){ echo $_SESSION['countS1']; echo '個'; }else if($_SESSION['countS1']=0){ echo $_SESSION['countS1']; echo '個'; } ?> 例)秘密の数字:1234、プレイ画面の入力値:1268 →◎:2個 という様にしたいのですが、上のままだと入力してからsubmitボタンを押す前から「4個」と表示されてしまいます。 分かりにくくて申し訳ありませんが、よろしくお願いします。

  • 「$tag = <<< HTML ~ HTML;」の【~】内でphpを使うには?

    はじめまして、よろしくお願いいたします。 以下のようなphpファイルを作りました、[123]と出力したいのですがうまくいきません・・ 「$tag = <<< HTML ~ HTML;」の【~】内でphpを使うにはどのようにすればよろしいのでしょうか? 教えていただけると幸いです。 __________________________ 【phpファイル】 <? $tag = <<<HTML <html> <body> for($a = 1; $a < 4; $a++) { print($a); } </body> </html> HTML; echo $tag; ?> ___________________________ 【出力結果】 for( = 1; < 4; ++) { print(); } ___________________________ 【希望する出力】 123

    • 締切済み
    • PHP
  • HTMLとPHPについて

    こんにちは、質問させてください。 HTMLとPHPを用いて簡単なアプリケーションを作成しています。 画面に入力した情報でSQLを発行して 結果を別画面に表示するものです。 今問題になっているのが入力した情報が渡らないことです。 ---------------------------------------- <html側> (省略) 名前:<input type="text" name="p_name"> (省略) ---------------------------------------- <php側> (省略) $sql="select value1 from T_Table where name= '$p_name'"; (省略) ---------------------------------------- となる簡単なものなんですが、SQL文でどうしても "where name= ''"となってしまいます。 どうしてでしょうか?何か設定の問題でもあるのでしょうか?

    • ベストアンサー
    • PHP
  • PHPがHTMLのformの値を受け取らない

    状況: ファイルアップロードを作成しようとしたところPHPがHTMLのformのsubmitした物を受け取らない。 しかしHTML側にjavascriptを読み込ませ XMLHttpRequest によってsendすると受け取れる。 環境: apache 2.2.4 php 5.2.3 ------------HTML <html><body> <form action="test.php" enctype="multipart/form-data"> <input type="text" id="name"> <input type="file" id="file"> </form> </body></html> ------------PHP <?php header('Content-type: text/plain; charset=UTF-8'); print "\$_POST:";var_dump($_POST);print "\n"; print "\$_FILES:";var_dump($_FILES);print "\n"; ?> ------------結果 $_POST:array(0) { } $_FILES:array(0) { } ------------ 原因がphp.iniなのか、httpd.confなのか、はたまたそれ以外に原因があるのかがさっぱり判らず質問しました。 どうやったらHTMLのformの値をPHPで受け取れますか?

  • PHPでHTMLをXMLに変換したときに消える内容

    教えてください。 スクレイピングのために、よく分からないままに、 PHPでHTMLをXMLに変換して、Xpathで参照しようとしています。 が。 その前段で、「HTML内に存在する内容が、XMLに変換した際に 消えてしまう」という現象に悩まされております。 例を挙げますと、 --------------------------------------- <html> <body> <table> <tr> <td><b>foo</b> bar<br> </td> </tr> </table> </body> </html> --------------------------------------- みたいなページを、 --------------------------------------- <?php $html = file_get_contents('http://xxxxxxxxxxxxxxxxx.com/foobar.html'); $dom = new DOMDocument(); @$dom->loadHTML($html); $xml = simplexml_import_dom($dom); print_r($xml); ?> --------------------------------------- のように処理すると、 --------------------------------------- SimpleXMLElement Object ( [body] => SimpleXMLElement Object ( [table] => SimpleXMLElement Object ( [tr] => SimpleXMLElement Object ( [td] => SimpleXMLElement Object ( [b] => foo [br] => SimpleXMLElement Object ( ) ) ) ) ) ) --------------------------------------- のような結果になって、「あれ?fooはいるけど、barは何処いった?」となります。 分かっている方には、「そりゃ、おまえ、あたりまえだよwww」 「つーか、なにやっとんのwww」って感じなのかもしれませんが、 さっぱり分かりません。 元のHTMLの書きぶりがダメだからということでしょうか。 お手数をお掛けしますが、どうぞ、ご教授ください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPの中にHTMLを入れるには

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <body> <?php $test = てすと; print '<p>$testしています。</p>'; ?> </body> </head> 「てすとしています。」と書き出したいのですが、このソースだと 「$testしています。」と表示されてしまいます。 うまく表示するにはどうすればいいのでしょうか?

    • ベストアンサー
    • PHP
  • 全てのhtml部分をphpで出力

    はじめまして、php初心者です。 全てのHTML部分をprint文で出力してコードを記述しています。 <?php print("<HTML><BODY>~") print("</BODY></HTML>") ?> ↑こんな感じです。 ですが、よくみる参考書などでは下のように php部分とhtml部分を分けて記述しています。 <?php phpコード ?> <HTML><BODY>~ </BODY></HTML> ↑このように記述することに特に意味はあるのでしょうか? 見やすいだけですか? 個人的には全てphpで出力して記述するほうが書きやすいのですが print文だと処理速度が結構遅くなるとか、何かあるのでしょうか?

    • 締切済み
    • PHP
  • HTMLでPHPを動かすには?

    さまざまなサイトでよく、ログイン画面(ID/PW)を入力する画面がありますが、私の担当しているサイトはログイン認証はJavaScriptで行っています。 最近になって、ログイン認証をJSではなく、サーバー側(PHP)で認証チェックをかけようという話になりました。 しかし、PHPをいじるのは膨大な作業になってしまうため、HTML(画面) でPHPのログイン認証処理を行いたいと考えています。 いろいろなサイトをみていて http://digit-01.com/ownpage/php_exct_html.html のようにできないかな?と思いました。 (1)Apacheの設定を追加  →AddType application/x-httpd-php .htmlを追加 (2)htmlファイルを用意  →.htmlですが、中身はPHP(ログイン認証チェック処理) (3)HTML(画面)で、(2)のファイルをインクルードさせる 上記の方法ではたして、うまくPHPが実行されるのか心配です。。。 アドバイス頂けないでしょうか?よろしくお願いします。

    • 締切済み
    • PHP
  • Dreamweaver+PHPの効率化、生成について

    初めまして、どうぞ宜しく御願いします 只今、PHP学習と並行して先日購入したDreamweaverMX2004を使いHTML&PHPの効率よく生成する事を独学して学んでいます。 そこで以下のようなプログラムを作ったときにDreamweaverのライブデータの表示機能について質問があります。 *------php1------* <?php $red = "赤"; $html = <<<__HTML__ <html><body> <table width="50" height="50"> <tr><td bgcolor="#FF0000">$red</td></tr> </table> </body></html> __HTML__; echo $html; ?> *----------------* *------php2------* <?php $red = "赤"; ?> <html><body> <table width="50" height="50"> <tr><td bgcolor="#FF0000"> <?php echo $red; ?> </td></tr> </table> </body></html> *----------------* PHPページを作る時『PHP1』のように変数にHTMLを入れてからechoして表示しているのですが、ライブデータの表示機能を使うとtableタグのwidthとheightの大きさは表示されていますが背景やHTMLの編集がデザインでできなくなってしまい、悩んでいます。 DreamweaverでPHPを作成する時の書き方は『PHP2』のように埋め込めて書かないと上手く表示してくれないのでしょうか?もし『PHP1』の書き方で考えられる対処法のしかたや、もっといい方法がございましたら是非お教えください。 又、皆さんがどのようにPHPの生成しているのかとても興味があります、もし宜しければ『こんな方法がある』『この機能が便利』などございましたらアドバイス頂きたいです、どうぞ宜しく御願い致します。 長文で解り難い文章でスミマセン、最後まで読んで頂いて有難うございます。

  • PHPとHTMLを混在させる方法

    phpで、MySqlに登録している顧客データを編集するフォームを作っています。 HTMLの中にPHPのif文を埋め込む方法がわからないので、質問します。 select.php で顧客データのID番号を入力して form.php に指定したID番号の顧客データを表示するところをやっているのですが、 チェックボックスを使う項目があります。 「登録データが1だったら、チェックボックスをオンにする」 というところの記述の仕方がわかりません。 スクリプトの構造上、どうしてもフォーム全体を 変数:$body に入れて書かなければなりません。 変数に入れずに、htmlにif文のところだけを埋め込む方法ならわかるのですが。 form.phpに書いているその部分のコードは下記です。これだと、if文のコードがそのままhtmlソースに出てきてしまいます。 form.phpより抜粋-------------------------------------------- $body="<form action='conf.php' method='post' enctype='multipart/form-data'> <table><tr> <td ><input type='checkbox' name='view_flag' value='1'> <?php if($col[view_flag]=='1') { echo 'checked' ;}; ?> />表示する</td> </tr></table> ...以下省略"; ----------------------------------------------------------------- 変数の中に入れてできる方法がわかる方いたら、教えて下さい。

    • ベストアンサー
    • PHP

専門家に質問してみよう