Как сохранить данные нескольких флажков в базу данных? - PullRequest
1 голос
/ 12 марта 2012

Я не эксперт, поэтому буду очень признателен, если вы действительно конкретны в своих ответах.

У меня есть эта регистрационная форма, в которой есть раздел с множеством флажков, и мне интересно, как лучше всего сохранить это в базе данных. Я не уверен, должны ли все значения указываться в одном столбце, или если мне нужно создать другую таблицу только для этого раздела моей регистрационной формы. Также важно принять во внимание, что позже мне нужно будет извлечь все эти данные из базы данных и показать их в «административной части», где они будут доступны для редакции для обновления базы данных. Ниже вы можете увидеть часть 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, если это поможет. !

Заранее большое спасибо за любую помощь, которую вы можете оказать.

Ответы [ 2 ]

2 голосов
/ 12 марта 2012

Чрезвычайно плохая практика хранить список данных с разделителями в одном столбце.Это создает проблемы с запросами (и проблемы с производительностью, когда вам нужно выполнить запрос, используя необъяснимое условие where).Создайте отдельную таблицу.

1 голос
/ 12 марта 2012

У вас есть пара вариантов ...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>* Обратите внимание, как каждая группа имеет свое имя, чтобы разделить их.Это следует делать независимо от того, используете ли вы переключатели или флажки, поскольку они означают разные вещи.Дайте мне знать, если это помогает или нет.

...