【问题标题】:checkbox data not insert in mysql using codeigniter未使用 codeigniter 将复选框数据插入 mysql
【发布时间】:2018-12-20 16:32:03
【问题描述】:

我尝试在 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);
  }

【问题讨论】:

    标签: mysql codeigniter checkbox sql-insert


    【解决方案1】:

    你的模型有问题。

    您将三个参数传递给insert(),但您使用的第三个参数不合适。 该参数应该是一个布尔值,指示是否转义值和标识符。您需要将$fea 合并到$data 中,这可能应该在控制器中完成。

    有一种更简单的方法可以创建数组$user_data,因为它本质上是$_POST 的副本,只需使用$this-&gt;input-&gt;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');
    }
    

    通过 cmets 要求的解释。

    $this-&gt;input-&gt;post('pname') 的调用如果存在则返回$_POST['pname'] 的值,如果不存在则返回null。

    当您创建$user_data 时,您每次使用不同的“密钥”对$this-&gt;input() 进行六次调用,以复制$_POST

    $this-&gt;input-&gt;post() 不带任何参数返回整个$_POST 数组。 (见documentation

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

    使用一行代码复制$_POST。如果选中任何框,它将包括$_POST['feature'],但如果没有选中任何框,则不会设置$_POST['feature']

    有两种方法可以测试是否选中了任何框。首先我们可以测试isset($_POST['feature']) == true 或者我们可以测试$this-&gt;input-&gt;post('feature') == true。我在通话中使用第二个

     if($feature)
    

    这与以下任何一行几乎相同

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

    换句话说,如果$feature 被设置并且是任何除了nullfalse、0、“0”、“”(一个空字符串)之外,if($feature) 评估为真), array() (一个空数组)

    【讨论】:

    • 我不明白您要说的关于复制 $_POST 的内容,我更改了模型和控制器,但也许我做错了:
    • 控制器:$user_data= $this->input->post(); $feature = $this->input->post('feature'); if($feature) //因为如果没有选中任何框,$feature 将为空 { $user_data['feature'] = implode(",", $feature); } $user_data= array( //其他数据发布);
    • 我添加了更多细节。欢迎提出更多问题。
    • 顺便说一句,@SimbuDev 和我给出了相同的答案,只是我使用更少的代码行来获得相同的结果。另外我的考虑到没有选中框的情况。
    【解决方案2】:
    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);
    }
    

    【讨论】:

    • 您将哪种数据类型用于“属性”表中的“特征”列?如果有错误信息,您可以发送吗?
    • varchar 数据类型
    • 尝试在将 $user_data 变量发送到模型之前打印它。如果它打印“功能”的值,它应该可以正常工作。还尝试在 $user_data 数组中不带“功能”列发送。上面的代码没有错误。请使用以下代码告诉我们您从模型中得到的错误消息。 print_r($this->db->_error_message());
    • 然后打印你的 $feature 变量并检查 $feature 变量是一维还是多维数组
    • 删除 json_encode 并尝试。我认为@DFriend 编辑的版本很好。你可以试试吗?
    猜你喜欢
    • 2017-01-25
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 2012-02-07
    • 1970-01-01
    相关资源
    最近更新 更多