首页 > 解决方案 > Codeigniter,Bootstrap,下拉列表,一个值而不是全部,保存到数据库

问题描述

我要提前感谢大家。

我在codeigniter中使用这段代码,

我需要有人帮助为作为模式的一部分的下拉列表创建 php 代码。

我已经完成了简单的部分,需要帮助解决困难的部分。

[![Drop-down list][1]][1]

上面的示例,我想将所有值保存到数据库中。

现在使用这段代码,它只保存一个值,而不是全部。

使用下面的代码完成此操作的最佳方法是什么。

这是我到目前为止所拥有的,只保存一个值,谢谢。




    <label class="control-label col-md-3">LS</label>
    <div class="col-md-9">     
    <select name="LS" class="selectpicker" multiple size = 2>
    <option value='LRG'>LRG</option>
    <option value='SML'>SML</option>
    </select>



我添加了视图以显示我到目前为止所拥有的。


    <!DOCTYPE html>
    <html lang="en">
    <tr>
    <th>First Name</th>
    <th>LS</th>
    </tr>
    </thead>
    <tbody>
    </tbody>
    </table>
    </div>
    <script type="text/javascript">
    var table;
    $(document).ready(function() {
    table = $('#table').DataTable({ 
    "lengthMenu": [[25, 50, -1], [25, 50, "All"]],    
    "processing": true,
    "serverSide": true,
    "order": [],
    "ajax": {
    "url": "<?php echo site_url('runner/ajax_list')?>",
    "type": "POST",
    "data": function ( data ) {
     data.FirstName = $('#FirstName').val();
    data.LS = $('#LS').val();
    }
    },
    "columnDefs": [
    { 
    "targets": [ 0 ],
    "orderable": false
     }
    ]
    });
    $('#btn-filter').click(function(){
    table.ajax.reload();
    });
    $('#btn-reset').click(function(){ 
    $('#form-filter')[0].reset();
    table.ajax.reload();
    });
    });
    </script>
    <div class = "row">
    <div class="modal fade" id="modal_form" role="dialog">
    <div class="modal-dialog">
    <div class="modal-content">
    <div class="modal-header">
    <button type="button" class="close" aria-label="Close"><span aria- 
    hidden="true">&times;</span></button>
    <h3 class="modal-title">Person Form</h3>
    </div>
    <div class="modal-body form">
    <form action="#" id="form" class="form-horizontal">  
    <input type="hidden" value="" name="id"/> 
    <div class="form-body">
    <div class="form-group">
    <label class="control-label col-md-3">FirstName</label>
    <div class="col-md-9">
    <input name="FirstName" placeholder="First Name" class="form-control" 
    type="text">
    <span class="help-block"></span>
    </div>
    </div> 
    <div class="form-body">
    <div class="form-group">
    <label class="control-label col-md-3">LS</label>
    <div class="col-md-9">     
    <select name="LS" class="selectpicker" multiple size = 2>
    <option value='LRG'>LRG</option>
    <option value='SML'>SML</option>
    </select>
    </div>
    </div>
    </div> 
    </div>
    </form>
    </div>
    <div class="modal-footer" style="padding:2px 2px;">
    <button type="button" id="btnSave" onclick="save()" class="btn btn- 
    primary">Save</button>
    <button type="button" class="btn btn-danger" data- 
    dismiss="modal">Cancel</button>
    </div>
    </div>
    </div>
    </div>
    </div>
    <script type="text/javascript">
    var save_method;
    var table;
    var arr = $(this).val();
    $(document).ready(function() {
    $("input").change(function(){
    $(this).parent().parent().removeClass('has-error');
    $(this).next().empty();
    });
    $("textarea").change(function(){
    $(this).parent().parent().removeClass('has-error');
    $(this).next().empty();
    });
    $("select").change(function(){
    $(this).parent().parent().removeClass('has-error');
    $(this).next().empty();
    });
    });
    function add_person()
    {
    save_method = 'add';
    $('#form')[0].reset();
    $.fn.modal.prototype.constructor.Constructor.DEFAULTS.backdrop = 'static';
    $.fn.modal.prototype.constructor.Constructor.DEFAULTS.keyboard =  false;
    $('.form-group').removeClass('has-error');
    $('.help-block').empty();
    $('#modal_form').modal('show');
    $('.modal-title').text('Add New Resident'); 
    }
    function reload_table()
    {
    table.ajax.reload(null,true); //reload datatable ajax 
    }
    function save()
    {
    $('#btnSave').text('saving...');
    $('#btnSave').attr('disabled',true);
    var url;
    if(save_method === 'add') 
    {
    url = "<?php echo site_url('runner/ajax_add')?>";
    }
    else
    {
    url = "<?php echo site_url('runner/ajax_update')?>";
    }
    $.ajax({
    url : url,
    type: "POST",
    data: $('#form').serialize(),
    dataType: "JSON",
    success: function(data)
    {
    if(data.status)
    {
    $('#modal_form').modal('hide');
    reload_table();
    }
    else
    {
    for (var i = 0; i < data.inputerror.length; i++) 
    {
    $('[name="'+data.inputerror[i]+'"]').parent().parent().addClass('has- 
    error'); 
    $('[name="'+data.inputerror[i]+'"]').next().text(data.error_string[i]);
    }
    }
    $('#btnSave').text('save');
    $('#btnSave').attr('disabled',false);
    },
    error: function (jqXHR, textStatus, errorThrown)
    {

    alert('Error adding / update data!!!!');
    $('#btnSave').text('save'); 
    $('#btnSave').attr('disabled',false);
    }
    });
    }
    </script>
    </body>
    </html> 



控制器


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

    class Runner extends CI_Controller {
    public function __construct()
    {
    parent::__construct();
    $this->load->model('runner_model','runner');
    }
    public function index()
    {
    $this->load->helper('url');
    $this->load->helper('form');
    $persons = $this->runner->get_list_countries();
    $opt = array('' => 'All person');
    foreach ($persons as $person) {
    $opt[$person] = $person;
    }       
    $this->load->view('runner_view', $person);
    }
    public function ajax_list()
    {
    $list = $this->runner->get_datatables();
    $data = array();
    $no = $_POST['start'];
    foreach ($list as $residents) {
    $no++;
    $row = array();
    $row[] = $residents->FirstName;
    $row[] = $residents->LS;
    $data[] = $row;
    }
    $output = array(
    "draw" => $_POST['draw'],
    "recordsTotal" => $this->runner->count_all(),
    "recordsFiltered" => $this->runner->count_filtered(),
    "data" => $data,
    );
    //output to json format
    echo json_encode($output);
    }
    public function ajax_add()
    {
    $data = array(
    'FirstName' => $this->input->post('FirstName'),
    'LS' => $this->input->post('LS'),
    );
    $insert=$this->runner->save($data);
    echo json_encode(array("status" => TRUE));
    }
    }



该模型。




    class Runner_model extends CI_Model {

    var $table = 'keeprunner';
    var $column_order = array(null, 'FirstName','LS'); //set column field 
    database for datatable orderable
    var $column_search = array('FirstName','LS'); //set column field database 
    for datatable searchable 
    var $order = array('id' => 'DESC'); // default order 

    public function __construct()
    {
    parent::__construct();
    $this->load->database();
    }
    private function _get_datatables_query()
    {
    if($this->input->post('FirstName'))
    {
    $this->db->like('FirstName', $this->input->post('FirstName'));
    }

    if($this->input->post('LS'))
    {
    $this->db->like('LS', $this->input->post('LS'));
    }
    $this->db->from($this->table);
    }

    public function get_datatables()
    {
    $this->_get_datatables_query();
    if($_POST['length'] != -1)
    $this->db->limit($_POST['length'], $_POST['start']);
    $query = $this->db->get();
    return $query->result();
    }

    public function count_filtered()
    {
    $this->_get_datatables_query();
    $query = $this->db->get();
    return $query->num_rows();
    }

    public function count_all()
    {
    $this->db->from($this->table);
    return $this->db->count_all_results();
    }

    public function get_list_countries()
    {
    $this->db->select('FirstName');
    $this->db->from($this->table);
    $this->db->order_by('FirstName','asc');
    $query = $this->db->get();
    $result = $query->result();
    $persons = array();
    foreach ($result as $row) 
    {
    $persons[] = $row->FirstName;
    }
    return $persons;
    }
    public function get_by_id($id)
    {
    $this->db->from($this->table);
    $this->db->where('id',$id);
    $query = $this->db->get();
    return $query->row();
    }    
    public function save($data)
    {
    $this->db->insert($this->table, $data);
    return $this->db->insert_id();
    }   
    }


标签: phpajaxcodeigniter

解决方案


首先,使用 name with[]进行多项选择,如下所示:<select name="LS[]" class="selectpicker" multiple size="2">. 因为此选择将多个值发送到服务器。其次,我不知道表keeprunner结构,但是您必须考虑如何将多个值存储到db:

  • 每个 LS 值的单独行。它需要使用多个插入;
  • 一行,但 LS 值存储在序列化视图中,即['LRG', 'SML']. 为此,您需要在插入之前进行一些预处理,如下所示'LS' => json_encode($this->input->post('LS')),

推荐阅读