PHP在测验中提交多个问题

时间:2014-05-31 14:32:15

标签: php html

我想创建一个带有动态数量问题的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作为测验计时器。谢谢你的帮助。

2 个答案:

答案 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();
  ...
}