从sql创建表单并从单独的表中插入值

时间:2012-08-17 14:26:13

标签: php mysql

我在这里说实话 - 我很确定我没有从最好的方法接近这个 我有一个我正在研究的调查软件,允许所有者构建不同输入类型的问题(文本,复选框,收音机...)文本很容易搜索问题表,并找到字段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虽然没有解决我的第二个问题 - 如果这个调查已经填写完了并且该人正在编辑它我需要选中他们已选中的复选框(对于复选框,这可能是全部15它可能是1对于收音机自然它只会是一个)rowa ['answer']包含我的答案,这些答案将用“,”分隔,这样可以更容易地将opt_one-fifteen添加到答案中并让它们包含一个基于int 1或0的关闭或未选中。

老实说,我不知道从哪里去,任何帮助都表示赞赏 - 包括如果有更好的方法更改我的数据库。

case "radio":

break;

1 个答案:

答案 0 :(得分:0)

我的系统看起来有点像你的。我采用的方式是让每个问题行都有一个字段answerTypes和一个字段answersanswerTypes是一个数组,用于说明可以为问题提供哪些答案。

系统循环遍历answerTypes数组并获取可以从answers给出的相应答案,例如如果answerTypes是数组(1,3),则answerTypes为radiobuttontext input

然后

answers具有不同answerTypes的所有“特定”设置,例如文本输入的最大长度,复选框的不同名称以及radiobuttons的不同值。

我如何做的一小段代码片段:

  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
           )

   )