1

我有一份长问卷(46 个问题),每个问题都有(3)个可能的答案,是、有时和否,(3 个单选按钮)每个都有相应的值,分别为 10、5 和 -10。

我将问题分为 4 个标题,每个标题下有几个问题。通过为每个数据赋予一个与其在数据库中的字段相对应的不同名称属性,我能够将所有数据发布到 mySQL 数据库。

我遇到的问题是我不能再将单选按钮作为一组使用,也就是说,它们都是可选的,违背了拥有它们的目的,基本上使它们成为复选框......

我需要在我的数据库中让每个单选按钮都有自己的值,并且我需要将它们分组为每个问题的 3 个可能的选择...

我将发布我的表单 html 和 php 发送脚本的示例......提前感谢您的任何建议......

html代码一题

          <div class="questionBox">
       <p>1.Have I clearly defined my companies target market?</p>
        <input type="radio" name="ca1y" value="10"/>
          <label for="ca1">YES</label>
      <input type="radio" name="ca1s" value="5"/>
          <label for="ca1">SOMEWHAT</label>
      <input type="radio" name="ca1n" value="-10"/>
        <label for="ca1">NO</label>
        </div>

/* php 发布更新 */

    $radioPost="INSERT INTO questions 
(       ca1y, 
        ca1s, 
        ca1n,...)
VALUES
(   '$_POST[ca1y]',
    '$_POST[ca1s]',
    '$_POST[ca1n]',...)

我试图给每个单选按钮一个 ID 属性并使用它来更新数据库,但我似乎无法让它工作......

任何帮助将不胜感激欢呼。

4

2 回答 2

4

我不确定我是否了解您尝试做的事情,但似乎您需要将个人对不同问题的答案保存到数据库中,但每个问题只能有一个让我们说三个可能的答案. 好吧,在这种情况下,您可能会考虑重新设计您的数据库,使其看起来像这样:

在此处输入图像描述

您将用户详细信息存储在用户表中,将问题详细信息存储在问题表中,并将不同答案存储在答案表中。用户将能够回答多个问题,但只能回答一次特定问题。然后,您将答案保存在一个名为 answer_value 的字段中。无需将答案存储在多个字段中,因为您将存储他们选择的单选按钮的值,即您将存储 10、5 或 -10,具体取决于选择的单选选项。

同样重要的是,在您的 HTML 中,您将特定问题的所有单选按钮命名为相同。这确保了单选选项充当单选按钮而不是复选框。您的 HTML 很可能看起来像这样:

<div class="questionBox">
   <p>1.Have I clearly defined my companies target market?</p>
    <input type="radio" name="q1" value="10"/>
      <label for="ca1">YES</label>
  <input type="radio" name="q1" value="5"/>
      <label for="ca1">SOMEWHAT</label>
  <input type="radio" name="q1" value="-10"/>
    <label for="ca1">NO</label>
</div>
<div class="questionBox">
   <p>2.Have I clearly defined my companies product?</p>
    <input type="radio" name="q2" value="10"/>
      <label for="ca2">YES</label>
  <input type="radio" name="q2" value="5"/>
      <label for="ca2">SOMEWHAT</label>
  <input type="radio" name="q2" value="-10"/>
    <label for="ca2">NO</label>
</div>
.....

请注意,问题 1 有 3 个单选选项,均名为“q1”,问题 2 有 3 个单选选项,均名为“q2”。对所有问题都遵循相同的约定。然后你的 PHP 变得非常简单,可能看起来像这样:

$radioPost="INSERT INTO answers (user_name, question_name, answer_value)
VALUES (('$_POST[user_name]', 'q1', '$_POST[q1]),('$_POST[user_name]', 'q2', '$_POST[q2]), ....)

如果您不确定单选按钮名称是什么,您可以使用 foreach 循环,如下所示:

$user = $_POST[user_name];
foreach ( $_POST as $key => $val )
{   
    If ($key <> 'user_name') //you might need to check that you only reading the radio                  options
    {
       $radioPost="INSERT INTO answers (user_name, question_name, answer_value)
                   VALUES ('$user', $key, '$val')"
        ....
    }
}    

另请注意,即使您只使用单选选项,您仍应清理输入以防止 SQL 注入等攻击。我建议您找到一些有关保护代码免受攻击的更多信息。

顺便说一句,如果您将问题放在它自己的表格中,您可以从该表格动态创建您的问卷,然后您可以随意添加或删除问题,从而使您的整个应用程序更加灵活。将您的答案保存在一个字段而不是三个字段中,将从您的表中删除所有 NULL 值,这将在您执行计算时简化您的查询。我知道 MySQL 通常会将零作为默认整数值,但最好将其保存到一个字段中。如果您想知道用户为特定问题选择了哪个选项,只需检查存储在该字段中的值。

于 2011-02-15T21:28:44.813 回答
0

不是很好的解决方案:编写js取消选择适当的单选按钮。

更严重的是,我不明白需要让所有收音机都用不同的名字。为什么这样的解决方案不适用:在一个同名的问题中命名无线电,让我们说 question1,然后在表单发布后查看值,然后您可以轻松地更新数据库。我想您想收集每个收音机被选中的次数。因此,如果您知道 question1 有选择 1,那么您也知道 question1 没有选择 2 和 3。除非您以其他方式或出于其他目的收集数据,但我认为您需要提供更多关于这样做的目的。虽然我仍然认为你可以像我说的那样做到这一点,但这不需要复杂的处理,我说基本的编程知识就足够了。

于 2011-02-15T19:21:57.450 回答