【问题标题】:Codeigniter passing checkbox array values to mysql databaseCodeigniter 将复选框数组值传递给 mysql 数据库
【发布时间】:2014-02-26 04:18:23
【问题描述】:

只是想在提交表单后将复选框数组值传递给mysql数据库表(表列:id,fanta,cola,sprite)。每个值都应插入单独的字段中(即不使用 implode/explode 函数)。最好的解决方案将只是传递“1”(如果选择)或“0”(如果未选择)。请帮帮我:)

这是我的模型:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Model_example2 extends CI_Model {
  function __construct()
 {
  //Call the Model constructor
   parent::__construct();
 }
public function did_add() {
        $data = array(              
        'fanta' => $this->input->post('fanta'),
        'cola' => $this->input->post('cola'),
        'sprite' => $this->input->post('sprite'),         
                     );
        $query = $this->db->insert('table_example2', $data);
        if ($query) {
            return true;} 
        else {
        return false;}
    }
}

这是我的观点:

             <div >
             <?php              
             $this->load->helper("form","file","html","url");
             echo $message;
             echo validation_errors();
             echo form_open("example2/add");
             echo form_label("Drink:<br>","type");
             ?>                   
<input type="checkbox" name="types[]" value="fanta" <?php echo set_checkbox('types[]', 'fanta', FALSE); ?>/>Fanta<br />
<input type="checkbox" name="types[]" value="cola" <?php echo set_checkbox('types[]', 'cola', FALSE); ?>/>Coca Cola<br />
<input type="checkbox" name="types[]" value="sprite" <?php echo set_checkbox('types[]', 'sprite', FALSE); ?>/>Sprite<br />
             echo form_submit("Submit", "Add");
             echo form_close();
             </div>

这是我的控制器:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Example2 extends MX_Controller {
    public function add() {                 
            $this->load->library('form_validation');
            $this->load->model('model_example2');          
            $this->form_validation->set_rules('types[]', 'Drink','required');           
            if($this->form_validation->run()){
            $this->model_example2->did_add(); 
            $data["message"] = "Great job!";
            $this->load->view("view_add_success",$data);
            }
            else {
            $data["message"] = "";  
            $this->load->view("view_example2",$data);
            }           
    }
}

【问题讨论】:

  • 在 db 中存储类型的列名是什么?你有像“fanta”,“cola”等的列名吗?如果是这样,那么你可以用芬达、可乐等命名复选框。
  • 共有三个列名:fanta、cola、sprite。我将复选框命名为“类型”以验证复选框字段(至少应选择一个 (>=1)): $this->form_validation->set_rules('types[]', 'Drink','required');
  • 然后你可以用字段名命名你的复选框
  • 但是我将无法验证复选框组,因此至少应该选择一个( >=1 )

标签: php mysql codeigniter


【解决方案1】:

你可以这样试试

public function did_add() {

    $types = $this->input->post('types');
    $data = array(
        'fanta' => 0,
        'cola' => 0,
        'sprite' => 0,
    );
    foreach ($types as $type) {
        $data[$type] = 1;
    }

    $query = $this->db->insert('table_example2', $data);
    if ($query) {
        return true;
    }
    else {
        return false;
    }
}

【讨论】:

  • 非常感谢!您的代码是上述问题的完美解决方案。非常感谢您的帮助:)
  • 嗨 Minhaz,也许你可以看看我的问题并帮助我找到解决方案:*.com/questions/22512209/…