2016-06-24 3 views
-1

こんにちは、私のクイズアプリケーションのための私の処理ファイル。私のコードはすべての質問に対する答えを実現していますが、正しい答えをクリックするたびにスコアを1に設定します。次の質問に進み、セッションスコアを0にリセットしてから、セッションスコアを追加します。その結果、スコアが3の場合、実際にスコアが1になります。私はスコア変数をどこに置くので、私はいつもプロセスをリセットし続けますか? i echo $_SESSION['score'];最後に、私はいつもあなたがちょうどあなたが上0にスコアをリセットすることを、自分で言っているquestion.phpクイズアプリのスコアをリセット

  <ul class = "choices"> 




        <?php 
        while($row = mysqli_fetch_assoc($choices)): ?> 
        <li><input name = "choice" type = "radio" value = "<?php echo $row['id']; ?>" /> <?php echo $row['text']; ?></li> 
        <?php endwhile ?> 


       </ul> 


      <input type = "submit" name = "submit" value = "submit"> 
      <input type = "hidden" name = "number" value = "<?php echo $number ?>" > 

     </form> 
+1

ページ内の最初のコード行を見てください。そのコード行が何をしていると思われますか? – David

+0

スコアを0にリセットします。しかし、そのラインスコアなしでは、どこからでも始めると定義されていませんか? 0から始める必要はありませんか?私はこれを実装する方法がわかりません –

答えて

1

を処理0または1

$_SESSION['score'] = 0; 
    if (isset($_POST['submit'])) 
    { 
     $number = $_POST['number']; 
     $selected_choice = $_POST['choice']; 
     $next = $number + 1; 

     // get total questions 


     $query = "SELECT * FROM questions"; 


     // get result 

     $results = mysqli_query($connection,$query); 
     $total = mysqli_num_rows($results); 

     // query to get right answer 


     $query = "SELECT * FROM choices WHERE question_number = $number AND is_correct = 1"; 
     $result = mysqli_query($connection,$query); 


     $row = mysqli_fetch_assoc($result); 




     // set correct choice 

     $correct_choice = $row['id']; 
     // Compare 

     if($correct_choice == $selected_choice) 
     { 
      // answer is correct 
      $_SESSION['score']++; 

     } 


     // check is last question 
     if($number == $total) 
     { 
      header("Location:final.php"); 
      exit(); 
     } else 
     { 
      header("Location:question.php?n=$next"); 
     } 
    } 

を取得します新しいページの読み込み。

$_SESSION['score'] = 0; 

そして、あなたは何もしないで1を追加します。そのスコアは0または1とは何か違うのですか?スコアをリセットしないでください。

+0

それはものです。それに0のデフォルト値を与える必要はありませんか?そうでなければスコアは未定義ですか? –

+0

はい、ただし、スコアが定義されているかどうかを確認してから、それをデフォルト値で定義する必要があります。 Davidの追加コードを参照してください。 –

1

あなたは0にページをロードするたびに値を設定している。その代わり

$_SESSION['score'] = 0; 

、値がそれを設定する前に存在しているかどうかを確認します。おそらくのような単純なもの:

if (!isset($_SESSION['score'])) { 
    $_SESSION['score'] = 0; 
} 

ページのロードは、それがすでに設定されていない場合にのみ値を設定するときはいつでもその方法。

+0

どうすれば$ _SESSION ['score'] = 0;を取り出すことができますか?私は0で始まるスコアを定義していないが、それでもプログラムはスコアが0であることを認識していますか?一体? –

+0

@cresjoy:設定されていない値をインクリメントしようとしたときに何が起こるかについてPHPがどのような権限を持っているかについてPHPの詳細については十分に分かっていないと思います。いくつかのデバッグとテストでは、探している情報を見つけることができます。いずれにせよ、私はそれに頼ることはしません。より明白でない機能を巧みに使用するよりも、論理を明確にする方がよいでしょう。 (基本的に、作業コードで行う最後のことは、それを見て、なぜそれが働いているのか分からないことです。) – David

+0

それは本当です。ありがとう、私はそれが0に変数を自動設定すると思います。 –

関連する問題