Как хранить несколько флажков с одним именем в одной ячейке базы данных MySQL в php.?

0

'ЗАПРОС

  <div class="row">
      <label class="col-md-3" for="zones">Zones in Bangalore</label>
      <div class="checkboxes">
        <p id="zones"><input type="checkbox" name="zones[]" class="zones">CBD 
          <input type="checkbox" name="zones[]" class="zones">North 
          <input type="checkbox" name="zones[]" class="zones">South  
          <input type="checkbox" name="zones[]" class="zones">East  
          <input type="checkbox" name="zones[]" class="zones">West</p>
      </div>
    </div>

    <div class="row">
        <label class="col-md-3" for="propertytype">Property Type</label>
        <div class="checkboxes">
          <p id="propertytype">
            <input type="checkbox" name="propertytype[]" class="propertytype">Apartment &nbsp;

            <input type="checkbox" name="propertytype[]" class="propertytype">Raw House &nbsp;

            <input type="checkbox" name="propertytype[]" class="propertytype">Villa  &nbsp;
            <input type="checkbox" name="propertytype[]" class="propertytype">Residential Plot</p>
        </div>

      </div>

$('.zones').on('change', function() {
      $('.zones').not(this).prop('checked', false);
       });
      $('.propertytype').on('change', function() {
        $('.propertytype').not(this).prop('checked', false);
      });

это код, код сценария выбирает только один флажок. Я не могу понять, как сохранить эти значения флажка. Я получаю ошибку при попытке сохранить эти данные. Я пытался проверить, если условие, но не в состоянии получить код. У меня есть еще 4 аналогичных флажка в моем проекте, и я должен хранить все данные в одной таблице базы данных. не могли бы вы помочь мне решить проблему.

В контроллере:

  $numreg= '/^[7-9]{1}[0-9]{9}$/';
  $this->load->helper(array('form', 'url'));
  $this->load->library('form_validation');
 if(isset($_POST['submit'])){
       $this->form_validation->set_rules('zones[]', 'zones of Bangalore',   'required');
       $this->form_validation->set_rules('propertytype[]', 'Property type', 'required');

       }

  if ($this->form_validation->run() == TRUE)
           {
             $data_to_store = array(

               'zones'=> $_POST['zones'],
               'propertytype'=> $_POST['propertytype']

          );

       $this->db->insert('enquiry', $data_to_store);
     }'
Теги:
codeigniter
validation
checkbox

3 ответа

0

Вам нужно указать значения своих флажков для сохранения, или вы получите массив без контекста.

<p id="zones">
  <input type="checkbox" name="zones[]" value="CBD" class="zones">CBD 
  <input type="checkbox" name="zones[]" value="North" class="zones">North 
  <input type="checkbox" name="zones[]" value="South" class="zones">South  
  <input type="checkbox" name="zones[]" value="East" class="zones">East  
  <input type="checkbox" name="zones[]" value="West" class="zones">West
</p>

Если вы хотите сохранить все зоны в одном поле таблицы, вы можете использовать implode() для создания списка с разделителями с запятой.

 $myZones = implode( ';' , $_POST['zones'] );

 print_r($myZones); // North;East;West

И сделайте то же самое для свойства.

EDIT: перечитайте вопрос, что вы возвращаете только один флажок для каждого массива. В этом случае функция implode() будет работать, так как она не вставляет полуточку, если есть только один элемент массива.

 if ($this->form_validation->run() == TRUE) {
         $data_to_store = array(

           'zones'=> implode(';', $_POST['zones']), // South
           'propertytype'=> implode(';', $_POST['propertytype']) // Apartment
      );

   $this->db->insert('enquiry', $data_to_store);
 };

EDIT 2: Если ваша insert db взорвалась из-за преобразования массива в строку, используйте json_encode для преобразования массива в первую очередь.

 $data_to_store = array('zones' => 'South', 'propertytype' => 'Apartment');

 $db_value = json_encode($data_to_store);

 print_r($db_value); // {"zones":"South","propertytype":"Apartment"}

 $this->db->insert('enquiry', $db_value);
0

Вы можете использовать foreach для каждой информации, хранящейся в db, если оба массива имеют одинаковую длину.

$data_to_store = array(
    'zones' => $this->input->post('zones'),
    'propertytype' => $this->input->post('propertytype')
);
$data = array();
foreach($data_to_store['zones'] as $keyZone => $valZone)
{
    $data['zone'] = $valZone;
    $data['propertytype'] = $this->input->post('propertytype')[$keyZone];
    $this->db->insert('enquiry', $data);
}
  • 0
    благодарю вас. но массивы разные по размеру
0

Вы можете сериализовать свои флажки и сохранить их в своей таблице.

Как показано ниже:

$data_to_store = array(

           'zones'=> serialize($_POST['zones']),
           'propertytype'=> serialize($_POST['propertytype'])

      );

Вы можете unserialize datas обратно unserialize() который является php-функциями.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню