php - 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">×</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();
}
}
解决方案
首先,使用 name with[]
进行多项选择,如下所示:<select name="LS[]" class="selectpicker" multiple size="2">
. 因为此选择将多个值发送到服务器。其次,我不知道表keeprunner
结构,但是您必须考虑如何将多个值存储到db:
- 每个 LS 值的单独行。它需要使用多个插入;
- 一行,但 LS 值存储在序列化视图中,即
['LRG', 'SML']
. 为此,您需要在插入之前进行一些预处理,如下所示'LS' => json_encode($this->input->post('LS')),
: