2011-02-15 74 views
1

我有一个很长的问卷(46个问题),每个问题都有(3)个可能的答案,是的,有时和不是,(3个单选按钮),每个都有相应的值,分别为10,5和-10。如何通过PHP将多个单选按钮值传递给MYSQL数据库作为所有单个值,但将它们隔离到组中?

我在四个标题之间划分了几个问题,每个标题下有几个问题。 我能够通过给每个与数据库中的字段相对应的不同名称属性发布所有数据到mySQL数据库。

我遇到的问题是,我可以不再使用单选按钮为一组,那就是,他们都是可选的,击败有他们的目的,从根本上让他们来检查盒....

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

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

html code one question

  <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属性,并用它来更新数据库,但我似乎无法得到那个工作。 ...

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

回答

2

我不确定我是否得到了你想要做的事情,但它似乎需要将个人对不同问题的答案保存到数据库,但是每个问题只能有一个让我们说三个可能的答案。那么,在这种情况下,你可能会认为重新设计你的数据库看起来是这样的:

enter image description here

您存储用户信息中的用户表,在问表的问题的细节和不同的答案的答案表。用户将能够回答多个问题,但只能回答一个特定的问题。例如,您将答案保存在一个名为answer_value的字段中。由于您将存储他们选择的单选按钮的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通常会将零作为默认整数值,但将它保存到一个字段中更好。如果您想知道用户为特定问题选择了哪个选项,请检查该字段中存储的值。

0

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

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

+0

谢谢,我会扩大。 的目的是让这个网页填充数据库... 有一个用户名和公司字段,我遗漏了,但这将与特定用户选择每个问题的3个选项的特定用户一起进行。 这是可以访问不同的组织,所以数据库将增长,以及我需要能够区分每个使用个别响应,因此每个广播答案生存在我的数据库自己的领域,大约有146个字段,并被下载到一个电子表格,一些数学,我得到我的数据.... 这是否改变你的答案? – user482024 2011-02-15 20:04:38

+0

例如,我有我的PHP找到电台名称=属性,并与我的数据库字段对齐...我可以以某种方式使其与我的窗体,而不是名称= ID =字段对齐?这似乎是一个简单的修复,但它不会工作 – user482024 2011-02-15 20:09:18

相关问题