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

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

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

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

Q&A

1回答

220閲覧

PHP 三択問題で正当数がうまく反映されません。

amaturePy

総合スコア131

PHP

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

0グッド

1クリップ

投稿2019/05/14 01:53

編集2019/05/16 01:10

DBから問題を10問ランダムで表示し、その正当数をJSのアラートで表示させようとしているのですが、
私のコードではうまく正当数が反映されず、常に1/10で表示されてしまいます。
私のコードで足りないところがあればご教授願いたいです。
また私としては54行目のansに値がないためにこの問題が起きていると考えています。→function関数でユーザーが選択した回答を取得→正解(answer)と照合→一致したなら+1点というロジックで対応。したつもりなのですが、うまく作動しません。ロジックや考え方など自体が間違っているようでしたらご教授願いたいです。
<テーブル:quiz>
<カラム:id/question/choice_1/choice_2/choice_3/answer>

<html> <head> <title>Sample Quiz</title> </head> <body> <?php $dsn='mysql:host=localhost;dbname=ex.sql'; $user='root'; $password='root'; try{ $db=new PDO($dsn,$user,$password); $db ->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); $sql="SELECT * FROM quiz ORDER BY RAND()"; $stmt=$db->query($sql); $stmt->execute(); }catch(PDOException $error){ echo "error".$error->getMessage(); } ///////////////////////////////////////////////////////////////////////////// DB $id='id'; $question='question'; $choice_1='choice_1'; $choice_2='choice_2'; $choice_3='choice_3'; $number=0; $number = 0; for($i=0;$row=$stmt->fetch(); $i++){ $number++; $id = $row['id']; $question = $row['question']; $ans_array = array($row['choice_1'],$row['choice_2'],$row['choice_3']);{ } shuffle($ans_array); ?> <h4> <?php echo $number . ".) " . $question; ?></h4> <label><input type="radio" oncick="choice" value="<?php echo $ans_array[0]; ?>" name="<?php echo $question; ?>"> <?php echo $ans_array[0]; ?></label> <label><input type="radio" onclick="choice" value="<?php echo $ans_array[1]; ?>" name="<?php echo $question; ?>"> <?php echo $ans_array[1]; ?></label> <label><input type="radio" onclick="choice" value="<?php echo $ans_array[2]; ?>" name="<?php echo $question; ?>"> <?php echo $ans_array[2]; ?></label> <?php } ?> <br><br> <button onclick="returnScore()">View Results</button> <script> /////////////////////////////////////////////////////////////////////////////// Showing total score var ans = []; var answers = []; answers[0]="Japanese"; answers[1]="Sushi"; answers[2]="Abe"; answers[3]="Yen"; answers[4]="JAL"; answers[5]="Tokyo"; answers[6]="Naruto"; answers[7]="Reiwa"; answers[8]="Line"; answers[9]="Kento"; function choice(){ if ans=$ans_array===answers;{ score+=1 }else{ score+=0; } return choice; } function getScore(){ var score=0; var numQuestion=10; //return score ; //return numQuestion ; // } // score = getScore(); for(var i=0;i<=numQuestion;i++) { if(ans[i]==answers[i]) { score+=1; } else { score+=0; } } return score;//add } function returnScore(){ console.log('test') alert("Your Score is" + getScore()+"/10"); } </script> </body> </html> コード

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

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

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

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

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

stdio

2019/05/14 01:59

var ans = []; ってところの値をご確認ください。多分ここが原因だと思います。
m.ts10806

2019/05/14 02:00

・ansはどこで値が設定されていますか? ・GETで遷移されているようですが「ユーザーが選択した答え」をどこにどのように保持するつもりですか?(またはどう保持している想定でコード書かれていますか?)
amaturePy

2019/05/14 02:25

ありがとうございます。 var ansの値調べてみます。 すみません。Get はファイルをいじっている最中に入れてしまい、消し忘れて投稿してしまいました。 編集いたします。
amaturePy

2019/05/14 03:06

全然回答にたどり着かないので、再度値などを学習しながら進めます。 PHP初心者で知識量の浅さが出てますね
m.ts10806

2019/05/14 03:13

プログラミングに入る前にデータをどう扱うか考えられたほうが良いかと思います(設計ですね) どこに保持してどう持ち回るのか、どこでどう出すのか、使うのか 集計などはするのか(間違える傾向を見るのか) とかですね。 単に作るだけでは勿体ないので、「ひとつのシステム」と捉えて設計をかためるところからやってみてはどうでしょうか。 いずれにしてもきちんと設計をかためないことには目的のよくわからない単なるスパゲティコードになるだけですし。
amaturePy

2019/05/14 13:59

そうですね。 設計を意識してコードを組んでみます。 ありがとうございます。
guest

回答1

0

ランダムで10問ひろうならこう

PHP

1$sql="SELECT * FROM quiz ORDER BY RAND() LIMIT 10"; 2$stmt=$db->query($sql); 3$rows=$stmt->fetchAll(PDO::FETCH_ASSOC); 4print_r($rows);

投稿2019/05/14 02:04

yambejp

総合スコア114839

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問