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

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

ただいまの
回答率

90.51%

  • PHP

    24035questions

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

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

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 77

KentoTamura

score 15

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>
コード
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • KentoTamura

    2019/05/14 12:06

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

    キャンセル

  • mts10806

    2019/05/14 12:13

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

    キャンセル

  • KentoTamura

    2019/05/14 22:59

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

    キャンセル

回答 1

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • PHP

    24035questions

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