わかりませんが、問題はX (XY問題)であるのに対し、解決策Yを求めているように見えます
XY問題は、Xを実行する必要がある場合であり、Yを使用してXを実行できると考えているため、Yを実行する方法について質問します。実際に実行する必要があるのは、X問題が何であるかを示すことです。Yよりも優れたZソリューションがあるかもしれませんが、Xが言及されていない場合、誰もそれを提案することはできません。
通常、$ _ POST配列を変更したり、質問を含む回答をクライアント側に送信したりしないことはお勧めしません。questions.php
代わりに、答えは必要ないので、アプローチはそうあるべきですが、そうする必要があるので、答えにアクセスできるのはshoulverify.php
だけです。verify.php
たとえば、解答リストが試験の際に質問用紙と一緒に試験会場に運ばれることはありません。
私はあなたのコード構造を自由に変更しました。それでも自分のコードを使いたい場合は、投稿してください。そうすれば、必要な答えを得ることができます。
これを使用してみてください:
question.php:
<form action="verify.php" method="POST">
<fieldset class="Question1"> Complete this: ___<b>bar</b>
<input type="radio" name="answers[]" value="foo">Foo<br>
<input type="radio" name="answers[]" value="too">Too<br>
<input type="radio" name="answers[]" value="cho">Cho<br>
</fieldset>
<fieldset class="Question2"> Complete this: ___<b>overflow</b>
<input type="radio" name="answers[]" value="stack">Stack<br>
<input type="radio" name="answers[]" value="stock">Stock<br>
<input type="radio" name="answers[]" value="stick">Stick<br>
</fieldset>
</form>
answers.php:
//correct answers
$answers = array("foo", "stock");
verify.php:
include("answers.php");
$user_answers = $_POST["answers"];
$user_answers_count = count($user_answers);
$error = "";
for($i=0;$i<$user_answers_count;$i++)
if($user_answers[$i] !== $answers[$i]) //verify
$error[] = "Answer for Question ".($i+1)." is wrong!";
if(empty($error))
//Notify that user has passed the Quiz
else
//Notify that user has NOT passed the Quiz
//print the $error array
いくつかのメモ:
- 私は
answers.php
別のファイルとして使用しましたが、特別な要件がない場合は、answers.php
&verify.php
(answers.php
コードを上に置くverify.php
)をマージすることを検討してください。さらに良いことに、これら3つのファイルすべてを1つにマージすることもできます。
- $_POSTはサニタイズされていると思います。
- 質問と
answers
配列のシーケンスは同じです。つまりanswers[foo]
、正解です$_POST["answers"][foo]