php - 构建 php 评估表

标签 php html mysql

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

<?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 页面上,我想将答案存储在数据库上,如下所示:

$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的最后一个值 - 在上面的情况下它是一些更多的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);
}

关于php - 构建 php 评估表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41789720/

相关文章:

php - PHP中的数组大小限制

php - Yii2 Gii Forbidden code 403 You are not allowed to access this page

php - 使用纬度-经度-邮政编码数据库选择 3 个最近的位置

php - 为什么以下 mySQL 查询失败?

python - 使用 Flask 形成 css

php - 来自数据库的同位素过滤库

php - 在 php 中将整数转换为 double

php - 如何在 Doctrine query builder 的 'orderBy()' 上使用更高级的参数?

javascript - 基于 firebase 数据在 html 上显示 Canvas 时出错

jquery - 通过单击添加类时淡入 1000