0

私はここで正直になります-私は、所有者がさまざまな入力タイプ(テキスト、チェックボックス、ラジオなど)のテキストの質問を作成できるようにする調査ソフトウェアを持っている最善の方法からこれにアプローチしていないと確信しています非常に簡単で、質問テーブルを検索し、テキスト、チェックボックス、ラジオ...および出力を含むフィールドans_typeを見つけました。

                switch ($rowq['ans_type']) {
            case "text":
                echo '<tr bgcolor="#DDDDDD"  align="left" valign="middle"><td width="30"> </td> <td width="350">'.$rowq['question'].'</td><td width="350"><input class="tb8" type="text" name="quest[]" value="'.$rowa['answer'].'" size="40"></td></tr>';
            break;

ご覧のとおり、rowqには質問情報が含まれ、rowaには回答情報が含まれています。

私の問題はチェックボックスとラジオで発生しました。現在、複数のオプションがある可能性があります。現在、私のテーブルはこのように設定されており、チェックボックスとラジオで最大15のオプションを使用できます。

CREATE TABLE `question` (
 `sid` int(10) NOT NULL,
 `qid` double(10,1) NOT NULL,
 `question` varchar(500) NOT NULL,
 `ans_type` varchar(100) NOT NULL,
 `opt_one` varchar(200) DEFAULT NULL,
 `opt_two` varchar(200) DEFAULT NULL,
 `opt_three` varchar(200) DEFAULT NULL,
 `opt_four` varchar(200) DEFAULT NULL,
 `opt_five` varchar(200) DEFAULT NULL,
 `opt_six` varchar(200) DEFAULT NULL,
 `opt_seven` varchar(200) DEFAULT NULL,
 `opt_eight` varchar(200) DEFAULT NULL,
 `opt_nine` varchar(200) DEFAULT NULL,
 `opt_ten` varchar(200) DEFAULT NULL,
 `opt_eleven` varchar(200) DEFAULT NULL,
 `opt_twelve` varchar(200) DEFAULT NULL,
 `opt_thirteen` varchar(200) DEFAULT NULL,
 `opt_fourteen` varchar(200) DEFAULT NULL,
 `opt_fifteen` varchar(200) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1

CREATE TABLE `answers` (
 `surveyid` int(10) NOT NULL,
 `question` double(10,1) NOT NULL,
 `answer` varchar(50000) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1

したがって、最初にこれらのタイプの特定の質問に使用できるオプションの数を決定する必要があります-各opt_numbersでrowq ['...']!= NULLの場合にのみチェックボックスを追加できると考えましたが、これで修正されませんただし、2番目の問題-この調査がすでに記入されていて、その人が編集している場合は、選択済みのチェックボックスをオンにする必要があります(チェックボックスの場合は15個すべて、ラジオの場合は1個の場合もあります)rowa ['answer']には、「」で区切られた私の回答が含まれています。回答にopt_one-fifteenを追加して、チェックされているかどうかに基づいてint1または0を含める方が簡単です。

私は正直なところ、これからどこに行くべきかわかりません-より良い方法がある場合はデータベースを変更することを含めて、どんな助けもありがたいです。

case "radio":

break;
4

1 に答える 1

0

私はあなたのシステムに少し似ているシステムを持っています。answerTypes私が行っている方法は、各質問行に fi​​eldとfield を持たせることanswersです。answerTypes質問に対してどの回答を与えることができるかを示す配列です。

システムは配列をループし、answerTypesから得られる適切な回答を取得します。answersたとえば、answerTypesが配列(1,3) の場合、回答タイプはradiobuttonおよびtext input

answersanswerTypes次に、テキスト入力の最大長、チェックボックスのさまざまな名前、ラジオボタンのさまざまな値など、さまざまな「特定の」設定がすべて含まれています。

私がそれを行う方法の小さなコードスニペット:

  foreach($q->answerTypes AS $type) { 
          if($type == 1) { //radio buttons
            $ans = $q->answers['radioButton'];
            $return .= "<div class=\"radioButtonContainer\">";
            $return .= "<table><tbody>";
            foreach($ans AS $value=>$label) { 
              $return .= "<tr><td><label for=\"radiobutton_{$value}\">{$label}</label> </td><td><input id=\"radiobutton_{$value}\" type=\"radio\" name=\"radioButton\" value=\"{$value}\"".(($_POST['radioButton'] == $value) ? ' checked' : '')."></td></tr>";
            }
            $return .= "</tbody></table>";
            if(!empty($errl['radioButton'])) { 
              $return .= error($errl['radioButton'], 0, false);
            }
            $return .= "</div>";
          } elseif($type == 2) { //checkboxes
            $ans = $q->answers['checkbox'];
            $return .= "<div class=\"checkboxContainer\"><table><tbody>";
            foreach($ans['boxes'] AS $name=>$label) { 
              $return .= "<tr><td><label for=\"checkbox_{$name}\">{$label}</label> </td><td><input id=\"checkbox_{$name}\" type=\"checkbox\" name=\"checkbox_{$name}\" value=\"1\"".(($_POST['checkbox_'.$name] == "1") ? ' checked' : '')."></td></tr>";
            }
            $return .= "</tbody></table>";
            if(!empty($errl['checkbox'])) { 
              $return .= error($errl['checkbox'], 0, false);
            }
            $return .= "</div>";
          } elseif($type == 3) { //text input
            $ans = $q->answers['textInput'];
            $return .= "<div class=\"textInputContainer\">";
            if(!empty($ans['label'])) { 
              $return .= "<div class=\"textInputLabel\"><label for=\"textInput\">{$ans['label']}</label></div>";
            }
            if(isset($errl['textarea'])) { 
              $return .= error($errl['textarea'], 0, false);
            }
            $return .= "<input type=\"text\" onkeyup=\"countText($(this), $('#textInputChars'));\" id=\"textInput\" class=\"textInput\" name=\"textInput\" value=\"".htmlspecialchars($_POST['textInput'])."\"><br>
            <span class=\"smallText\"><span id=\"textInputChars\">".number_format(strlen($_POST['textInput']))."</span>/".number_format($ans['maxChars'])."</span></div>";
          } elseif($type == 4) { //textarea
            $ans = $q->answers['textarea'];
            $return .= "<div class=\"textareaContainer\">";
            if(!empty($ans['label'])) { 
              $return .= "<div class=\"textareaLabel\"><label for=\"textarea\">{$ans['label']}</label></div>";
            }
            if(isset($errl['textarea'])) { 
              $return .= error($errl['textarea'], 0, false);
            }
            $return .= "<textarea onkeyup=\"countText($(this), $('#textareaChars'));\" id=\"textarea\" class=\"textarea\" name=\"textarea\">".htmlspecialchars($_POST['textarea'])."</textarea><br>
            <span class=\"smallText\"><span id=\"textareaChars\">".number_format(strlen($_POST['textInput']))."</span>/".number_format($ans['maxChars'])."</span></div>";
          }
    }

データ形式は次のとおりです。

   [answerTypes] => Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )

[answers] => Array
    (
        [radioButton] => Array
            (
                [a] => Radio button 1 //radio button name => radio button label
                [b] => Radio button 2
                [c] => Radio button 3
            )

       [checkbox] => Array
           (
               [atLeast] => 0 //the minimum number of checkboxes that have to be checked
               [boxes] => Array
                   (
                       [a] => Checkbox 1 //checkbox name => checkbox label
                       [b] => Checkbox 2
                   )

           )

       [textInput] => Array
           (
               [label] => Please fill in:
               [maxChars] => 255
               [required] => 1
           )

   )
于 2012-08-17T14:37:39.770 に答える