1

我在这里有点难过...

我有一个网页显示存储在数据库表中的调查问题列表,我正在尝试收集每个问题的评分回复(非常不同意 -> 非常同意)并将值传递回另一个表在我的数据库中。

这是表单代码的片段:

<form action="submitAnswers.php" name="subAns" method="post">
        <fieldset>
            <legend>Survey Questions</legend>
            <input type="hidden" name="survey_id" value="<?php echo ($survey_id); ?>">
            <table width=90% border=0 cellpadding='2' cellspacing='2'?>

            <tr bgcolor=#D0D0D0>

                <th>Question</th>
                <th>Strongly Disagree</th>
                <th>Somewhat Disagree</th>
                <th>Neither Disagree nor Agree</th>
                <th>Somewhat Agree</th>
                <th>Strongly Agree</th>
            </tr>
            <tr>    
            <?php
                while ($row  =  mysql_fetch_array($res, MYSQL_ASSOC)) 
                {
                    echo "<td bgcolor='#E8E8E8'><font size='-1'>$row[quest_order]) $row[quest_text]</font></td>";

                    for ($i = 0; $i < 5; $i++) 
                    {
                    //echo "<input type='hidden' name='qID' value='$quest_id'>";

                    echo "<td bgcolor='#E8E8E8'><input type='radio' name='$row[quest_id]' value='$i'></td>";
                    }           

                    echo "</tr>";
                }
            ?>      

            <br>            
            </table><br>
            <input type="submit" name="submitAnswers" value="Submit Survey"></fieldset>
    </form>

这是“submitAnswers.php”文件中的 PHP:

$survey_id=$_POST['survey_id'];

    $sql = "INSERT INTO survey_responses (survey_id) 
            VALUES ('$survey_id')";

    $res = send_sql($sql, $link, $db);  


    foreach($_POST['quest_id'] as $id=>$value)
    {   

        $sql = "INSERT INTO survey_answers (response_id, quest_id, response_value) 
            VALUES (LAST_INSERT_ID(), $id, '$value')";

        $res = send_sql($sql, $link, $db) or die("Cannot add survey");

    }

我在“survey_responses”表中的插入语句工作得很好,但我不知道如何更正用于获取每个问题的响应分数的单选按钮。这些值是通过 POST 传递的(我通过查看print_r($_POST);返回的 来确认这一点,例如:

数组 ( [survey_id] => 4 [6] => 0 [5] => 1 [4] => 2 [3] => 3 [2] => 4 [1] => 3 [submitAnswers] => 提交民意调查 )

但显然我要解决这个问题,因为我无法成功迭代并为每个问题插入问题 id# 和响应值。我敢肯定这相对简单,但我对编程还是很陌生,并且已经研究了几个小时,几乎没有运气。

只是希望有人可以帮助我解决这个问题,并希望在此过程中更好地解释,或指出一个很好的资源,涵盖如何处理动态大小的表单,这些表单正在检索数据库记录并将各种数量的信息传递回数据库。

谢谢!

4

2 回答 2

0

利用

$sql = "INSERT INTO survey_answers (response_id, quest_id, response_value) 
        VALUES ('".LAST_INSERT_ID()."', '".$id."', '."$value."')";

反而

$sql = "INSERT INTO survey_answers (response_id, quest_id, response_value) 
        VALUES (LAST_INSERT_ID(), $id, '$value')";
于 2012-12-13T16:58:45.993 回答
0

好的,我想我已经解决了这个问题,尽管可能有更好的解决方案。在我的表单中,我将单选按钮更改为如下所示:

echo "<td bgcolor='#E8E8E8'><input type='radio' name='quest".$row[quest_id]."' value='$i'></td>";

唯一的变化是将“quest”作为前缀添加到 name 属性中的 ID#。在我的 PHP 文件中:

foreach ($_POST as $name=>$value)
{
    if (strpos($name, "quest") !== FALSE)
    {
    $qID = substr($name, 5);
    $sql = "INSERT INTO survey_answers (response_id, quest_id, response_value) 
        VALUES (LAST_INSERT_ID(), '$qID', '$value')";

    $res = send_sql($sql, $link, $db) or die("Cannot add survey");
    }
}

我正在检查那些带有 'quest' 前缀的帖子值,然后通过substr.

如果有更好的方法,我会全神贯注...

于 2012-12-13T19:37:45.247 回答