данные флажка не вставляются в MySQL с использованием codeigniter - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь вставить свои данные флажка в CodeIgniter.но данные не вставлены в базу данных.Вот мой файл представления:

  <input type="checkbox" name="feature[]" value="WIFI" >
  <input type="checkbox" name="feature[]" value="TV">

Я пытаюсь использовать implode для преобразования массива в строку, но потом не могу добавить, как добавить массив $ data, поэтому они вставляются вместе

вот мой контроллер:

     public function save()
     {
       $this->load->model('Partner_model');
       $feature = $this->input->post('feature');
      $fea=array(
             'feature'=>json_encode(implode(",",$feature)) 
                   );

      $user_data= array(
     'pname' => $this->input->post('pname'),
     'type' => $this->input->post('type'),
     'address' => $this->input->post('address'),
     'about' => $this->input->post('about'),
     'city' => $this->input->post('city'),
      'code' => $this->input->post('code')
     );
    if($this->Partner_model->save($user_data,$fea))
   {
       $msg = "save sucesss" ;
   }
   else
   {
       $msg = "not save";
   }

   $this->session->set_flashdata('msg', $msg);
   $this->load->view('partner_profile');
 }

и вот моя модель:

 public function save($data,$fea)
  {
     return $this->db->insert('property', $data,$fea);
  }

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018
public function save()
 {
   $this->load->model('Partner_model');
   $feature = $this->input->post('feature');

   $user_data= array(
     'pname' => $this->input->post('pname'),
     'type' => $this->input->post('type'),
     'address' => $this->input->post('address'),
     'about' => $this->input->post('about'),
     'city' => $this->input->post('city'),
     'code' => $this->input->post('code'),
     'feature'=>json_encode(implode(",",$feature))
  );
  if($this->Partner_model->save($user_data)){
     $msg = "save sucesss" ;
  }else{
     $msg = "not save";
  }
  $this->session->set_flashdata('msg', $msg);
  $this->load->view('partner_profile');
}

файл модели должен быть:

public function save($data) {
  return $this->db->insert('property', $data);
}
0 голосов
/ 20 декабря 2018

Ваша модель неисправна.

Вы передаете три аргумента insert(), но третий, который вы используете, не подходит.Этот аргумент должен быть логическим, который указывает, следует ли экранировать значения и идентификаторы или нет.Вам нужно включить $fea в $data, что, вероятно, должно быть сделано в контроллере.

Существует более простой способ создания массива $user_data, так как он по сути является копией $_POST, просто используйте$this->input->post().

Кроме того, нет очевидной причины, по которой вы используете json_encode.Если вы не нуждаетесь в таком способе, когда вы извлекаете его из БД, нет причин для беспокойства.Попробуйте удалить json_encode.

Сначала измените модель

public function save($data)
{
    return $this->db->insert('property', $data);
}

Вот пересмотренный метод сохранения

public function save()
{
    $this->load->model('Partner_model');
    $user_data = $this->input->post(); //makes a copy of $_POST
    $feature = $this->input->post('feature');
    if($feature) //because $feature will be null if no boxes are checked
    {
        $user_data['feature'] = json_encode(implode(",", $feature));
    }

    $msg = $this->Partner_model->save($user_data) ? "save sucesss" : "not save";

    $this->session->set_flashdata('msg', $msg);
    $this->load->view('partner_profile');
}

Объяснение, запрошенное в комментариях.

Вызов $this->input->post('pname') возвращает значение $_POST['pname'], если оно существует, но возвращает ноль, если его не существует.

Когда вы создаете $user_data, вы делаетешесть вызовов $this->input() с другим «ключом» каждый раз, чтобы сделать копию $_POST.

$this->input->post() без каких-либо аргументов, возвращает весь массив $_POST.(См. документацию )

$user_data = $this->input->post(); 

Делает копию $_POST, используя одну строку кода.Он будет включать $_POST['feature'], если установлены какие-либо флажки, но $_POST['feature'] не будет установлен, если флажки не установлены.

Есть два способа проверить, были ли отмечены какие-либо флажки.Сначала мы можем проверить, если isset($_POST['feature']) == true, или мы можем проверить, если $this->input->post('feature') == true.Я использую второе с вызовом

 if($feature)

, что почти совпадает с любой из следующих строк

   if($feature != false)...
   if($feature != null)...
   if( ! empty($feature))...
   if( ! is_null($feature))...

Другими словами, if($feature) оценивается как true, если $feature установлен и равен что угодно кроме null, false, 0, "0", "" (пустая строка), array () (пустой массив)

...