【问题标题】:How to Save Multiple Check-boxes data to database?如何将多个复选框数据保存到数据库?
【发布时间】:2012-03-12 01:42:21
【问题描述】:

我不是专家,所以如果您能具体回答,我将不胜感激。

我有这个注册表单,其中有一个包含很多复选框的部分,我想知道将其保存在数据库中的最佳方法是什么。我不确定是否所有值都应该放在一个列中,或者我是否应该仅为我的注册表单的这一部分创建一个不同的表。同样重要的是要考虑到我稍后需要从数据库中提取所有这些数据并将其显示在“管理后端”中,以供编辑以更新数据库。您可以在下面看到包含复选框的部分的部分 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.!

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

【问题讨论】:

    标签: database database-design database-schema checkbox


    【解决方案1】:

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

    【讨论】:

    • 好的,同意。你会建议哪种表结构?我已经有我的客户表,其中存储了注册表中要求的所有基本信息。所以我想我必须创建一个新表来存储这部分的所有信息[注册表的这部分仅适用于申请零售商帐户的人]
    • 这是正确的,创建一个新的相关表,其中包含客户 ID 和您需要的任何其他字段。确保创建外键关系。
    • 好的,我想知道您是否可以看一下我的注册表,并帮助我设计新表格。我想我至少需要一张新表,但你对复选框有什么建议?我会在这个新表中为每个人创建一个新列吗?如果是,那不就是挤满我原来的客户表吗?
    【解决方案2】:

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

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

    &lt;table cellpadding="15" &gt;&lt;tbody&gt;
    &lt;tr&gt;
    &lt;th&gt;Handbags&lt;/th&gt;
    &lt;th&gt;Jewelry&lt;/th&gt;
    &lt;th&gt;Watches&lt;/th&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
    &lt;td&gt;
    &lt;input type="checkbox" name="av_rtp[]1" value="1" /&gt;$125 or greater&lt;br /&gt;
    &lt;input type="checkbox" name="av_rtp[]1" value="10" /&gt;$75&lt;br /&gt;
    &lt;input type="checkbox" name="av_rtp[]1" value="100" /&gt; $40&lt;br /&gt;
    &lt;/td&gt;
    &lt;td&gt;
    &lt;input type="checkbox" name="av_rtp[]2" value="1" /&gt;$125 or greater&lt;br /&gt;
    &lt;input type="checkbox" name="av_rtp[]2" value="10" /&gt;$75&lt;br /&gt;
    &lt;input type="checkbox" name="av_rtp[]2" value="100" /&gt; $40&lt;br /&gt;
    @987654338 @
    &lt;input type="checkbox" name="av_rtp[]3" value="1" /&gt;$125 or greater&lt;br /&gt;
    &lt;input type="checkbox" name="av_rtp[]3" value="10" /&gt;$75&lt;br /&gt;
    &lt;input type="checkbox" name="av_rtp[]3" value="100" /&gt; $40&lt;br /&gt;
    &lt;/tr&gt;
    &lt;/tbody&gt;
    &lt;/table&gt;
    *请注意每个组的名称不同,以便将它们分开。无论您使用单选按钮还是复选框,都应该这样做,因为它们的含义不同。
    让我知道这是否有帮助。

    【讨论】:

    • 在第二个选项中,这意味着仅针对该问题将三个新列添加到数据库中,对吗?我必须添加 av_rtp[]1、av_rtp[]2 和 av_rtp[]3。您说最好稍后使用 % 操作检查选择了哪些复选框。请解释或举例说明 % 操作是什么?另一方面,如果我选择使用从 1 到 9 的值将所有值仅保存到数据库中的一列,那么从数据库中提取值以在版本页面中显示它们会很困难吗?非常感谢您的回答。
    • 我所说的 av_rtp[]1、av_rtp[]2 和 av_rtp[]3 的意思是您希望将所有这些值的输入分开。例如,您想知道他们想在手袋、时尚首饰、手表、水晶旅行首饰和高级珠宝上花多少钱。这意味着它们不一定具有相同的值。通过在表单中​​给它们不同的名称意味着您可以将这些值分开。数字范围为 1-9 很难使用,因为 1+2=3 这可能与仅将 3 作为首选项相同。 123%100=23…23%10=3…有用吗? @codekmarv
    • 谢谢。我认为这有点超出我的理解水平,但我已经很高兴了解它。谢谢。根据您的建议,这意味着我不必为每个复选框创建一列,而这正是我想要做的。我仍在尝试找出我应该使用的表结构,因为我已经决定这绝对应该放在另一个表(零售商)中,而不是我的默认客户表中。
    猜你喜欢
    • 2018-05-08
    • 2021-12-07
    • 2011-06-27
    • 1970-01-01
    • 2017-09-05
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    相关资源
    最近更新 更多