ループ内のデータベースからデータをフェッチするクエリがあり、ループの各インスタンスごとにフォームが作成されます。ループ自体内の各フォームデータの値と、それはデータベース内の対応する行の列と一致するかどうかを確認します。例えばためPHPは、フォームがデータベースからフェッチされたループ内にあるときにフォームデータを取得します
:
<?php
$marks = 0;
while ($row= mysqli_fetch_assoc($resut)) {
echo '<form method="POST" action="">
<div class="col-sm-8" id="question">'.$row['question'] .'</div>
<input type="radio" placeholder="" name="answer" value = "true" id=""> True
<input type="radio" placeholder="" name="answer" value = "false" id=""> false
</form>';
if (isset($_POST['save'])){ // this is the submit button present outisde the loop at last
if ($_POST['answer'] == $row['answer']) {
$marks++;
} else {
echo "incorrect";
}
}
}
?>
<form role="form" action="" method= "POST">
<button name ="save" id=" class="btn btn-primary">Save</button>
</form>
それでは、私が達成しようとしていることは、私が列を持っているということですデータベース内でループ内で$row['answer']
を取得できます。この行のフォームデータを確認するには、if($_POST['answer'] == $row['answer'])
.. .do smth ...しかし問題は、ループの外側に送信ボタンを残しておかなければならないということですループは機能していません。
私の試み:
私はループの前にformタグを維持しようとしました。これを行うと、データベースに10行あり、ループ内で10個のフォームと10個の値が必要になるとします。しかし、行の1つでラジオボタンを押すと、他のものは選択解除されます。だから私の意見では、フォームタグはループ全体の中だけにあるはずです。
フェッチされた行のすべてのインスタンス内のwhileループ内にフォーム送信ボタン(現時点では最後)を保持しようとしました。再度、それは動機ではないすべての行のすべてのボタンをエコーします。私はすべてのフォームを提出し、それに応じて値を取得するボタンを1つだけ必要とします。
また、ループのすべてのインスタンス、つまり
$row['answer']
のフォームラジオボタンデータのすべてのインスタンス(つまり、$_POST['answer']
)を確認する必要があるため、このチェックを外部または他のページで行うことはできません。
ありがとうございます。
ですから、データベースから正しい答えをロードし、利用者の解答と比較何をここで行うのですか?それは間違ったアプローチです。フォームが提出されたら、回答のチェックを行う必要があります。 – hungrykoala
NO!まずユーザー自身のために存在するフォームがデータベースから作成されます。これらは実際には管理者が質問表にアップロードした質問です。後でそれがquiz.phpに取り込まれます。フォームがループ内で生成されます –
私が間違っていないのであれば、ここで何をしようとしているのですか?質問を表示し、ラジオボタンを選択して保存をクリックすることでユーザーに答えさせます。そのロジックの問題は、 '$ _POST ['answer']'は最後の値を保存するだけなので、現在の実装はうまくいきません。ここで行う必要があるのは、各回答を配列に格納し、その配列を使用してその答えが正しいかどうかを確認することです。 – hungrykoala