我想创建一个带有动态数量问题的html测验,每个问题都有动态数量的答案。我的目标是在测验完成后提交所有问题。我需要对HMTL进行哪些更改以及使用什么php来获取数组?
HTML
<form action="process.php" method="post">
<div class="questions">
<strong class="white">Question 1</strong>
<input name="questions[]" type="hidden" value="1">
<input name="answers[]" type="checkbox" value="a"> <label>answer 1</label><br>
<input name="answers[]" type="checkbox" value="b"> <label>answer 2</label><br>
<input name="answers[]" type="checkbox" value="c"> <label>answer 3</label><br>
<input name="answers[]" type="checkbox" value="d"> <label>answer 4</label><br>
</div>
<div class="questions">
<strong class="white">Question 2</strong>
<input name="questions[]" type="hidden" value="2">
<input name="answers[]" type="checkbox" value="a"> <label>answer 1</label><br>
<input name="answers[]" type="checkbox" value="b"> <label>answer 2</label><br>
<input name="answers[]" type="checkbox" value="c"> <label>answer 3</label><br>
<input name="answers[]" type="checkbox" value="d"> <label>answer 4</label><br>
<input name="answers[]" type="checkbox" value="e"> <label>answer 5</label><br>
<input name="answers[]" type="checkbox" value="f"> <label>answer 6</label><br>
</div>
</form>
PHP
$questionID = $_POST['questions'];
$answers = $_POST['answers'];
foreach( $questionID as $i => $qid ) {
echo "The question id is ".$qid." and selected answer(s) is ".$answers[$i]. "<br>";
}
我相信我的一个html问题与两个问题的答案命名相同。另一个php问题是选择了哪些答案。我不想使用AJAX,因为这会导致服务器上的更多负载,我使用JS作为测验计时器。谢谢你的帮助。
答案 0 :(得分:0)
您应该在输入名称属性中指定问题的编号,例如:
<form action="process.php" method="post">
<div class="questions">
<strong class="white">Question 1</strong>
<input name="questions" type="hidden" value="1">
<input name="answers[1]" type="checkbox" value="a"> <label>answer 1</label><br>
<input name="answers[1]" type="checkbox" value="b"> <label>answer 2</label><br>
<input name="answers[1]" type="checkbox" value="c"> <label>answer 3</label><br>
<input name="answers[1]" type="checkbox" value="d"> <label>answer 4</label><br>
</div>
<div class="questions">
<strong class="white">Question 2</strong>
<input name="questions" type="hidden" value="2">
<input name="answers[2]" type="checkbox" value="a"> <label>answer 1</label><br>
<input name="answers[2]" type="checkbox" value="b"> <label>answer 2</label><br>
<input name="answers[2]" type="checkbox" value="c"> <label>answer 3</label><br>
<input name="answers[2]" type="checkbox" value="d"> <label>answer 4</label><br>
<input name="answers[2]" type="checkbox" value="e"> <label>answer 5</label><br>
<input name="answers[2]" type="checkbox" value="f"> <label>answer 6</label><br>
</div>
</form>
然后当你得到一个$ _POST时,它就像是:
答案[1] ='a', 答案[2] ='b'......
答案 1 :(得分:0)
我认为这会做你想做的事情:
$questionAnswers = array('question1'=>array('answer1','answer2','answer3','answer4'));
$questionText = array('question1'=>'Question 1');
显示表单:
<form>
<?php foreach($questionAnswers as $q => $answers)
{
echo '<div class="questions"><strong class="white">'.$questionText[$q].'</strong>'
for($i = 0; $i < count($answers); $i++)
{
echo '<input name="'.$q.'[]" type="checkbox" value="'.$i.'"> <label>'.$answers[$i].'</label><br>';
}
echo '</div>';
}
?>
</form>
处理提交:
$foreach($questionAnswers as $q => $answers)
{
$userAnswers = isset($_REQUEST[$q]) ? $_REQUEST[$q] : array();
...
}