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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

294閲覧

phpでコイントスの裏表が出るプログラムを作りたいが、エラーが発生する。

YuRyo8586

総合スコア7

PHP

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2025/05/26 11:53

編集2025/05/26 11:54

実現したいこと

phpで、セレクトボックスで選択した回数(10回、100回、1000回)コイントスを行い、コインの裏表が出た回数をそれぞれ表示するプログラムを作りたいです。

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

ページを表示しても「このページは動作していません」と出てエラーになります。

該当のソースコード

<?php $times=''; if(isset($_POST['times'])===TRUE){ $times=htmlspecialchars($_POST['times'], ENT_QUOTES, 'UTF-8'); } $front =0; $back =0; $sum=0; for($i=0; $i<($times+1); $i++){ $score = mt_rand(0,1); $sum +=$score; } $front =$sum; $back = $times - $front ; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>課題</title> </head> <body> <article id="wrap"> <section> <?php if($times==='10'||$times==='100'||$times==='1000'){?> <p>表:<?php print $front; ?>回</p> <p>裏:<?php print $back; ?> 回</p> <?php }?> </section> <form method="post"> <select name="number"> <option value="">回数選択</option> <option name="times" value="10" <?php if($times==='10')?>>10</option> <option name="times" value="100" <?php if($times==='100')?>>100</option> <option name="times" value="1000" <?php if($times==='1000')?>>1000</option> </select>回 <button type="submit">コイントス</button> </form> </article> </body> </html>

試したこと

同様の質問があったのでそれを参考に、POST内容を反映させるコードも書いたつもりなのですが、エラーが発生します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

PHP

1if(isset($_POST['times'])===TRUE){

HTML

1<select name="number">

取得すべきパラメータ名が違っているので、選択した値を PHPスクリプトに伝える事が出来ていないはずです。

PHP

1$times='';

トスする回数ですから、スクリプト内部では数値では?
文字列として初期化するのは間違いだと思います。

PHP

1for($i=0; $i<($times+1); $i++){

指定した回数より1回多くトスしていませんか?

PHP

1 $front =$sum; 2 $back = $times - $front ;

この影響で、それが見えなくなっているでしょう。

PHP

1 $score = mt_rand(0,1); 2 $sum +=$score;

こんな手抜きじゃなく、$scoreの値で $front / $back をそれぞれカウントアップするのが正攻法だと思います。

PHP

1$times=htmlspecialchars($_POST['times'], ENT_QUOTES, 'UTF-8');

htmlspecialchars()は、HTML(の一部)として出力する際のエスケープなので、外部から来る値を取り込むところで使うのは使い方が間違っています。

投稿2025/05/26 12:50

編集2025/05/26 12:53
tezcello

総合スコア443

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

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

YuRyo8586

2025/05/26 13:02

ありがとうございます。 大きく、$timesとしていたところを$numberに変更したことで動くようになりました。 まだ少し気になる部分があるので、まだチェックしてみます。
tezcello

2025/05/26 15:54

デバッグの手順として、「何が渡されているか」の確認は必要でしょうね。 そして、どんな値が来ることを期待しているかに基いて渡された値に対してバリデーションを行うのは必要な事だと思います。 それをしていれば期待した値が渡されていない事に一発で気が付いたでしょう。 「渡された値の無害化」という例がとても多いのですが、必要なのは「無害化(サニタイズ)」ではなく、期待しているあるいは想定している値(=有効な値)であるかの確認という意味でのバリデーションだと思います。 有効(=バリッド)な値であるかの検証(=バリデーション)だと思います。 __validationは妥当性確認と訳されるようですね __「要求事項が満たされていることを確認すること」by IPA
YuRyo8586

2025/05/26 20:48

もともと「$times='';」と書いていたところですが、ご教示いただいたように数値を渡しているので、変数名も正しいものに変更し、「$number=0;」と書き換えました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問