构建评估表单 PHP



我正在尝试为学生创建一个评估表,所有问题都存储在数据库中。我正在从数据库中检索它们,任何尝试再次将每个问题的答案存储在 db 上。应从单选按钮中选择所有答案,如下所示:

<?php
    $sql = "SELECT Q_body, Q_ID FROM s_evaluation_questions WHERE Ev_ID='1'";
    $result = $conn->query($sql);
    ?>
    <?php
    if ($result->num_rows > 0)
    {
    ?>
    <form action="AnswerS.php" method="POST"> 
    <table align="right"  id="keywords" cellspacing="0" cellpadding="0">
        <thead>
                <tr>
                    <th colspan="4">  </th>
                    <th>Question</th>
                </tr>
        </thead>    
     <tbody>
    <?php
        while($row = $result->fetch_assoc()) 
        {   $answer="s".$row["Q_ID"];
             ?> 
                    <tr>
                    <td>
                 <input type="hidden" name="Q_ID" value="<?php echo $row["Q_ID"]; ?>" >
                    <input type="radio" name=<?php echo $answer?> value="Bad" >Bad
                    <input type="radio" name=<?php echo $answer?> value="Good"> Good
                    <input type="radio" name=<?php echo $answer?> value="VeryGood"> Very Good
                    <input type="radio" name=<?php echo $answer?> value="Excellent"> Excellent</td>                     
                    <td align="right"> <?php echo $row["Q_body"]?></td>
                    </tr>
                    <?php   } ?>                
    </tbody>
        </table></br></br></br></br></br></br></br>
        <input type="submit" value="Send" />
                </form>
        <?php 
        ?></div> 
    <?php
    } else
    {echo "not allowed";}

在 AnswerS.php 页面上,我想将答案存储在 db 上,如下所示:

$UID='1';
$answer=$_POST['answer'];
$Q_ID= $_POST['Q_ID'];

    $sql = "INSERT INTO s_evaluation_answers(Q_ID, A_body, UID) VALUES($Q_ID, $answer, $UID) ";
$result = $conn->query($sql);
if ($result === TRUE) {
    echo "done" ;
    } 
    else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }   

但不幸的是它不起作用!,我试图跟踪Q_ID的值,它只给出了最后一个问题 id,而不是所有问题。如何存储每个问题的单选按钮中的选定值并将其存储为此问题的答案?(注:所有问题均来自DB)

谢谢

如果你看到你的源html,你会发现你有很多名称为Q_ID的字段:

<input type="hidden" name="Q_ID" value="one id" >
<input type="hidden" name="Q_ID" value="another id" >
<input type="hidden" name="Q_ID" value="some more id" >

因此,浏览器会向您发送Q_ID的最后一个值 - 在上述情况下,它是 some more id .要避免这种情况 - 在name属性中使用[]表示法:

<input type="hidden" name="Q_ID[]" value="one id" >
<input type="hidden" name="Q_ID[]" value="another id" >
<input type="hidden" name="Q_ID[]" value="some more id" >

之后,输出$_POST['Q_ID']会给你一个数组。您可以使用foreach迭代它并收集所需的其他信息。像(简化)这样的东西:

foreach ($_POST['Q_ID'] as $q) {
     // answer will be stored in a `s . $q` value of POST
     $answer = $_POST['s' . $q];
     $sql = "INSERT INTO s_evaluation_answers(Q_ID, A_body, UID) VALUES($q, $answer, $UID) ";
     $result = $conn->query($sql);
}

最新更新