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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

HTML

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

Q&A

解決済

2回答

1797閲覧

(PHP)クイズアプリの回答結果の取得について

Monkey217

総合スコア10

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

HTML

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

0グッド

0クリップ

投稿2019/12/19 11:30

Mysqlにquizテーブルに[id,contents(問題文),a,b,c,d,answer(int)]を格納しており、ユーザーがradioボタンで回答した結果をans.phpファイルで確認したいです。

radioボタンの記述の仕方など理解が追いついておらず、手詰まりになってしまいました。Mysql上のanswerには、bが正解ですので、1を入れています。

①radioボタンで回答した結果を送って確認するためには、何が必要ですか?
②このようなwebアプリを作るに便利な教材や見ておくべきサイトをご存知でしたらご教授いただきたいです。

細かなところの理解が進んでおらず、申し訳ありません。

PHP

1<?php 2try { 3 $db = new PDO('mysql:dbname=quizabout;host=localhost;charset=utf8','root','root'); 4 echo "接続OK!"; 5 6 $sql = 'SELECT * FROM quiz'; // 7 $statement = $db -> query($sql); //statementにクエリの実行 8 9 10 while($row = $statement->fetch()){ 11 $rows[] = $row; 12 } 13 14 //データベース接続切断 15 $db = null; 16 17 18 19} catch (PDOException $e) { 20 echo 'DB接続エラー!: ' . $e->getMessage(); 21} 22 23 24?> 25 26<?php 27foreach($rows as $sql){?> 28 29<?php echo "問".$sql['id'].':'.$sql['contents'].':'?> 30 31<?php echo $sql['a'];?> 32<input type="radio" name="question" value="0"/> 33 34<?php echo $sql['b'];?> 35<input type="radio" name="question" value="1"/> 36 37<?php echo $sql['c'];?> 38<input type="radio" name="question" value="2"/> 39 40<?php echo $sql['d'];?> 41<input type="radio" name="question" value="3"/> 42 43 44<?php } ?> 45 46 47<form method="POST" action="ans.php"> <!--ans.phpへ--> 48 49<input type="hidden" name="answer" value="<?php echo $sql['answer'] ?>"> 50<input type="submit" value="回答する"> 51 52

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

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

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

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

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

guest

回答2

0

ベストアンサー

radioボタンのnameはquestionだけだとなんの区別もつけられないので、
例えば1問目はquestion1、2問目はquestion2などとしつつ、
質問ごとにinput type=hiddenにてnameをid1としてidも持たせられればよいのではないかと。
あるいは、questionのあとにidをそのまま出力しちゃうとか。

php

1<?php 2foreach ($rows as $col) : 3 echo "問".$col['id'].':'.htmlspecialchars($col['contents'], ENT_QUOTES).':'; 4 echo htmlspecialchars($col['a'], ENT_QUOTES); 5?> 6<input type="radio" name="question<?php echo $col['id']; ?>" value="a" /> 7<?php 8 echo htmlspecialchars($col['b'], ENT_QUOTES); 9?> 10<input type="radio" name="question<?php echo $col['id']; ?>" value="b" /> 11<?php 12 echo htmlspecialchars($col['c'], ENT_QUOTES); 13?> 14<input type="radio" name="question<?php echo $col['id']; ?>" value="c" /> 15<?php 16 echo htmlspecialchars($col['d'], ENT_QUOTES); 17?> 18<input type="radio" name="question<?php echo $col['id']; ?>" value="d" /> 19<?php 20endforeach; 21?>

(ざっくり書いただけで、動作確認まではしていないけど。)

あと、回答選択肢にquestionって付けるの、意味わからない。
選んだものという意味でchoiceとか回答という意味でanswerとかが無難な気がする。

あと、結果を収めた配列にsqlって付けるのも、意味わからない。
結果セット→rowsなら、1行ごとの個別のデータはカラムなのでcolとか使いたくなる。

aを選んだら回答として0よりもaを得たほうがわかりやすかろう。

投稿2019/12/19 11:48

編集2019/12/19 12:13
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2019/12/20 03:12

回答内容が伝わっているでしょうか。 わからないところなどあれば、ネット検索など駆使していただいて、それでもわからなければ解説を加えなくもないですよ。
Monkey217

2019/12/20 05:06

ご回答ありがとうございます。radioボタンの入力結果の送り方なのですが、 <input type="hidden" name="answer" value="******" > <input type="submit" value="回答する"> *****に、radioから入力された値を送信するような記述をすればよろしいのでしょうか?
Monkey217

2019/12/20 05:40

<input type="radio" name="question<?php echo $col['id']; ?>" value="a" /> の¥$col['id']というのはMysqlのテーブル上にあるカラムを指しているのでしょうか? id(問題番号),contents(問題文),a(選択肢a).....answer(a)というカラムになっています。
退会済みユーザー

退会済みユーザー

2019/12/20 06:41 編集

わたしの中では$rowsを一行処理する変数名に$sqlとするのは完全にありえないので、 サンプルコード中では$colというふうにしています。 foreachの記述でそこは見てわかるはずですが。 htmlフォームでのラジオボタンの振る舞いがわかっていないように見えますね、 <input type="hidden" name="answer" value="******" > なんて用意しなくても、 わたしのサンプルコードを活用すれば$_POST['question999']としてaとかbとかcとかdが得られるようになっていますよ。 (あくまで、送信ボタンを押してphpの処理の中で判定する前提のコードですが。) 回答を判定するのがwebページ上でjsを駆使して行うのか、 それとも送信ボタンを押してphpの処理の中で判定するのか、 それによってやり方がまた変わってきますので、 仕様を明確にしてください。
Monkey217

2019/12/20 08:17

送信ボタンを押して、例えばans.phpでどの選択肢を選んだかを見れるようにしたいと考えていました。 m6u様のおっしゃる通り、<input type="hidden" name="answer" value="******" >の理解が不足しておりました。 ans.php側の中身も修正したところ、選択した回答を表示することもできました! 次は、radioボタンで選択した回答と、Mysql上の[answer]に格納されているものが一致しているかどうかを判断する仕様を追加したいと考えています。取り組む上で理解を深めておいた方が良いものや気をつける点などあればご教授いただきたいです。 本当にありがとうございます。
guest

0

①については既に回答がついていますので②についてのみ回答します。

②このようなwebアプリを作るに便利な教材や見ておくべきサイトをご存知でしたらご教授いただきたいです。

正直なところ、HTMLの理解や適切な使い方も不足していると思います。
そこからリクエストとレスポンスのことをきちんとおさえましょう。

PHPで、となるとPHPマニュアルは絶対です。
こちらを辞書代わりにでも使えるようになると学習や開発の進み具合が全く違ってきます。
今回のようなフォーム送信についてもきちんと書いてあります。
フォームの処理外部から来る変数
そもそも案外理解できている人が多くないのがPHPとHTMLの項です。

あとMDNにもフォーム送信についてのリファレンスがあります。

なるべく公式の資料を読むようにしてください。基礎となる部分です。
基礎となる部分が固められたら、あとは、ある程度発想や設計部分が肝となってきます。

基礎を元に、簡単なコードを沢山作って理解を深め「こういうこともできそう」を広げていきましょう。

※ちなみに私もPHPだけだと10年くらいやってきてますが、PHP技術者認定試験以外では殆ど教材のお世話になってません。PHPマニュアル85%、その他サイト10%、その他諸々5%くらいです。

投稿2019/12/19 19:54

m.ts10806

総合スコア80850

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問