如何将多个复选框数据保存到数据库?

时间:2012-03-12 01:42:21

标签: database database-design database-schema checkbox

我不是专家,所以如果你真的具体说明你的答案,我真的很感激。

我有这个注册表单,其中有一个包含大量复选框的部分,我想知道在数据库中保存它的最佳方法是什么。我不确定是否所有值都应该转到单个列,或者如果我应该只为我的注册表单的这一部分创建一个不同的表。同样重要的是要考虑到我稍后需要从数据库中提取所有这些数据,并在“管理后端”中显示它,以便更新数据库。您可以在下面看到包含复选框的部分的html代码。

<p>4) Please select only the product(s) you are interested in. (Anticipated purchase amounts for the quarter.)</p>
        <table  cellpadding="15" >
         <tbody>
    <tr>
      <th>Handbags</th>
      <th>Fashion Jewelry</th>
      <th>Watches</th>
      <th>Crystal Travel Jewelry</th>
      <th>Fine Jewelry</th>
    </tr>
<tr>
<td>
<input type="checkbox" name="pro_amount[]" value="1" />$2500+ </br>
<input type="checkbox" name="pro_amount[]" value="2"  />$1000-$2500 </br>
<input type="checkbox" name="pro_amount[]" value="3"  />Up to $1000 </br>    
</td>
  <td>
<input type="checkbox" name="pro_amount[]" value="4" />$2500+ </br>
<input type="checkbox" name="pro_amount[]" value="5"  />$1000-$2500 </br>
<input type="checkbox" name="pro_amount[]" value="6"  />Up to $1000 </br>  
<td>
<input type="checkbox" name="pro_amount[]" value="7" />$2500+ </br>
<input type="checkbox" name="pro_amount[]" value="8"  />$1000-$2500 </br>
<input type="checkbox" name="pro_amount[]" value="9"  />Up to $1000 </br>  
<td>
<input type="checkbox" name="pro_amount[]" value="10" />$2500+ </br>
<input type="checkbox" name="pro_amount[]" value="11"  />$1000-$2500 </br>
<input type="checkbox" name="pro_amount[]" value="12"  />Up to $1000 </br>  
<td>
<input type="checkbox" name="pro_amount[]" value="13" />$2500+ </br>
<input type="checkbox" name="pro_amount[]" value="14"  />$1000-$2500 </br>
<input type="checkbox" name="pro_amount[]" value="15"  />Up to $1000 </br>        
</tr>

  </tbody>
        </table>
        <p>5) What are the average retail price points for each of the following items? (Check only those that apply.)</p>
        <table  cellpadding="15" >
         <tbody>
    <tr>
      <th>Handbags</th>
      <th>Jewelry</th>
      <th>Watches</th>
    </tr>
<tr>
<td>
<input type="checkbox" name="av_rtp[]" value="1" />$125 or greater<br>
<input type="checkbox" name="av_rtp[]" value="2"  />$75</br>
<input type="checkbox" name="av_rtp[]" value="3"  /> $40</br>    
</td>
  <td>
<input type="checkbox" name="av_rtp[]" value="4" />$125 or greater<br>
<input type="checkbox" name="av_rtp[]" value="5"  />$75</br>
<input type="checkbox" name="av_rtp[]" value="6"  /> $40</br>    
<td>
<input type="checkbox" name="av_rtp[]" value="7" />$125 or greater<br>
<input type="checkbox" name="av_rtp[]" value="8"  />$75</br>
<input type="checkbox" name="av_rtp[]" value="9"  /> $40</br>     
</tr>
      </tbody>
        </table>

Jsfiddle Demo if that helps.

非常感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:2)

将分隔的数据列表存储在一列中是一种极其糟糕的做法。它会创建查询问题(以及必须使用不可分区的where子句进行查询时的性能问题)。创建一个单独的表。

答案 1 :(得分:1)

你有几个选择......
1)每个类别允许检查一个盒子:
在这种情况下,如果您将复选框更改为单选按钮会更好,因为一次只检查一个复选框,并且您只需要存储在数据库的一列中选择的一个按钮的值。

2)每个类别允许检查多个盒子:
在这种情况下,您可以保留复选框,并建议将复选框的总值存储在一列中,以减轻数据库的负担。但是,这意味着您需要包含某种形式的脚本,以反转在将信息存储到数据库之前所做的添加。您可以通过使每个类别中的三个复选框的值为1,10和100来实现此目的,以便您可以使用一系列%操作轻松检查哪些复选框。

<table cellpadding="15" >
<tbody>
<tr>
<th>Handbags</th>
<th>Jewelry</th>
<th>Watches</th>
</tr>
<tr>
<td>
<input type="checkbox" name="av_rtp[]1" value="1" />$125 or greater<br />
<input type="checkbox" name="av_rtp[]1" value="10" />$75<br />
<input type="checkbox" name="av_rtp[]1" value="100" /> $40<br />
</td>
<td>
<input type="checkbox" name="av_rtp[]2" value="1" />$125 or greater<br />
<input type="checkbox" name="av_rtp[]2" value="10" />$75<br />
<input type="checkbox" name="av_rtp[]2" value="100" /> $40<br />
<td>
<input type="checkbox" name="av_rtp[]3" value="1" />$125 or greater<br />
<input type="checkbox" name="av_rtp[]3" value="10" />$75<br />
<input type="checkbox" name="av_rtp[]3" value="100" /> $40<br />
</tr>
</tbody>
</table>
*注意每个组如何使用不同的名称,以使它们分开。你应该这样做,无论你使用单选按钮还是复选框,因为它们意味着不同的东西 如果这有帮助,请告诉我。