`查询表格
<div class="row">
<label class="col-md-3" for="zones">Zones in Bangalore</label>
<div class="checkboxes">
<p id="zones"><input type="checkbox" name="zones[]" class="zones">CBD
<input type="checkbox" name="zones[]" class="zones">North
<input type="checkbox" name="zones[]" class="zones">South
<input type="checkbox" name="zones[]" class="zones">East
<input type="checkbox" name="zones[]" class="zones">West</p>
</div>
</div>
<div class="row">
<label class="col-md-3" for="propertytype">Property Type</label>
<div class="checkboxes">
<p id="propertytype">
<input type="checkbox" name="propertytype[]" class="propertytype">Apartment
<input type="checkbox" name="propertytype[]" class="propertytype">Raw House
<input type="checkbox" name="propertytype[]" class="propertytype">Villa
<input type="checkbox" name="propertytype[]" class="propertytype">Residential Plot</p>
</div>
</div>
$('.zones').on('change', function() {
$('.zones').not(this).prop('checked', false);
});
$('.propertytype').on('change', function() {
$('.propertytype').not(this).prop('checked', false);
});
这是脚本代码只选择一个复选框的代码。我无法弄清楚如何存储此复选框值。我在尝试存储这些数据时遇到错误。我试图检查是否有条件,但无法获取代码。我的项目中有4个类似的复选框,我必须将所有数据存储在一个数据库表中。能帮我解决这个问题吗?
在控制器中:
$numreg= '/^[7-9]{1}[0-9]{9}$/';
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
if(isset($_POST['submit'])){
$this->form_validation->set_rules('zones[]', 'zones of Bangalore', 'required');
$this->form_validation->set_rules('propertytype[]', 'Property type', 'required');
}
if ($this->form_validation->run() == TRUE)
{
$data_to_store = array(
'zones'=> $_POST['zones'],
'propertytype'=> $_POST['propertytype']
);
$this->db->insert('enquiry', $data_to_store);
}`
您可以序列化复选框值,并将其存储在表格中。
如下所示:
$data_to_store = array(
'zones'=> serialize($_POST['zones']),
'propertytype'=> serialize($_POST['propertytype'])
);
您可以通过unserialize()
(这是一个php函数)来反序列化数据。
如果两个数组的长度相同,则可以对存储在db中的每个数据使用foreach。
$data_to_store = array(
'zones' => $this->input->post('zones'),
'propertytype' => $this->input->post('propertytype')
);
$data = array();
foreach($data_to_store['zones'] as $keyZone => $valZone)
{
$data['zone'] = $valZone;
$data['propertytype'] = $this->input->post('propertytype')[$keyZone];
$this->db->insert('enquiry', $data);
}
您需要提供要保存的复选框值,否则您将返回没有上下文的数组。
<p id="zones">
<input type="checkbox" name="zones[]" value="CBD" class="zones">CBD
<input type="checkbox" name="zones[]" value="North" class="zones">North
<input type="checkbox" name="zones[]" value="South" class="zones">South
<input type="checkbox" name="zones[]" value="East" class="zones">East
<input type="checkbox" name="zones[]" value="West" class="zones">West
</p>
如果要将所有区域保存在一个表字段中,可以使用implode()创建以分号分隔的列表。
$myZones = implode( ';' , $_POST['zones'] );
print_r($myZones); // North;East;West
对于propertytype也做同样的事情。
编辑:重新阅读问题,你只给每个数组一个复选框。在这种情况下,implode()仍然可以工作,因为如果只有一个数组元素,它不会插入分号。
if ($this->form_validation->run() == TRUE) {
$data_to_store = array(
'zones'=> implode(';', $_POST['zones']), // South
'propertytype'=> implode(';', $_POST['propertytype']) // Apartment
);
$this->db->insert('enquiry', $data_to_store);
};
编辑2:如果您的db insert
由于数组到字符串转换而爆炸,请使用json_encode首先转换数组。
$data_to_store = array('zones' => 'South', 'propertytype' => 'Apartment');
$db_value = json_encode($data_to_store);
print_r($db_value); // {"zones":"South","propertytype":"Apartment"}
$this->db->insert('enquiry', $db_value);