1

私はここで少し困惑しています...

データベーステーブルに保存されている調査の質問のリストを表示する Web ページを持っています。各質問の評価回答を収集し (強く反対 -> 強く同意)、値を別のテーブルに戻そうとしています。私のデータベースで。

フォーム コードのスニペットを次に示します。

<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] => 送信調査 )

しかし、明らかに私はこれについて間違っています.1つ1つに質問ID番号と応答値を正常に反復して挿入することができないからです。これは比較的単純だと確信していますが、私はまだプログラミングに慣れていないので、何時間もこれを試してきましたが、運がほとんどまたはまったくありませんでした.

誰かがこれを修正するのを手伝ってくれることを願っています。うまくいけば、その過程でより良い説明をしたり、データベースレコードを取得してさまざまな量の情報を db に戻したりする動的にサイズ変更されたフォームを処理する方法をカバーする優れたリソースを教えてくれます。

ありがとう!

4

2 に答える 2

0

より良い解決策があるかもしれませんが、私はこれをなめたと思います。私のフォームでは、ラジオボタンを次のように変更しました。

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

唯一の変更は、name属性のID#にプレフィックスとして「quest」を追加することでした。私の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'プレフィックスが付いているものの投稿値を確認してから、を介してid#を抽出していsubstrます。

もっと良い方法があれば、私はすべての耳です...

于 2012-12-13T19:37:45.247 に答える
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 に答える