我是php / codeignitor的新手,并尝试将表单复选框上的更改发布到我的数据库。要修改的行由下面的gl_id分配。 我不知道如何在模型中使用我的update_checked函数 对其中每个字段发送TRUE,其中gl_id = x和FALSE使用不在数组中的其余字段。我可以使用控制器中的$ _POST ['checked']创建和查看已检查值的数组 并将其传递给模型。现在我需要使用这个数组发布到数据库,其中gl_id =视图中表单的值。
在视图中
<h1>Update GL id <?php echo $gl_field['gl_id'];?></h1>
<label>Stat</label>
<input type="checkbox" <?php if ($gl_field['stat'] == "TRUE") {echo "checked = checked";} ?>
name = "checked[]" id="stat" value= "stat" /><BR CLEAR="all">
<label>Exclude</label>
<input type="checkbox" <?php if ($gl_field['exclude'] == "TRUE") {echo "checked = checked";} ?>
name="checked[]" id="exclude" value= "exclude"><BR CLEAR="all">
<label>Override</label>
<input type="checkbox" <?php if ($gl_field['override'] == "TRUE") {echo "checked = checked";} ?>
name= "checked[]" id= "override" value = "override"/><BR CLEAR="all">
在控制器
中 public function update_table(){
$this->load->helper('form');
$this->page_nav_model->update_table();
$checked_array = $_POST['checked'];
$this->page_nav_model->update_checked($checked_array);
$this->load->view('pages/success');
}
在模型中
foreach($checked_array as $true){
echo $true;
}
为了澄清当我将信息提取到上面示例中的表单时,所有复选框都在数据库中设置为“TRUE”,以便检查它们。如果我取消选中stat并单击提交,我可以看到一个包含值的数组(排除,覆盖)。
我感谢任何能帮助我朝着正确方向前进的帮助。
答案 0 :(得分:0)
如果HTML中未选中复选框,则不会通过$ _POST发送该值。这在CodeIgniter中没有考虑到。这就是我处理这个问题的方法。在控制器中:
/**
* Set post values for unchecked boxes.
*
* @access private
* @return void
*/
private function _section_checkboxes()
{
if (!$this->input->post('is_active')) {$_POST['is_active'] = 0;}
// other checkboxes here...
}
/**
* if form validation passes, run this to edit a section
*
* @access public
* @return void
*/
public function do_edit_section()
{
$this->_section_checkboxes();
if ($this->section_model->edit_section($this->input->post()))
{
redirect('success_page');
}
}
在模型中:
/**
* updates a section with active record, returns success.
*
* @access public
* @param array $data
* @return bool
*/
public function edit_section(array $data)
{
$this->db->where('id', $data['id']);
return $this->db->update('sections', $data);
}
在视图中,使用表单助手:
<?=form_checkbox(array('name' => 'is_active', 'id' => 'is_active_field', 'value' => '1', 'checked' => (bool)$item->is_active))?>
现在未经检查的复选框在未选中时设置为0,在选中时设置为1。我希望这能回答你的问题。
答案 1 :(得分:0)
要一次性更新CI,您需要一个这样的数组:
$data = array(
'column_1_name' => 'value_to_insert'
'column_2_name' => 'value_to_insert'
'column_2_name' => 'value_to_insert'
);
现在,你有一个像这样的数组$ checked_array =('stat','exclude','override') - 有更多或更少的成员。
要创建可在update语句中使用的数组(如上面的$ data),您需要做的是创建另一个数组,其中包含每列的名称,如果它位于$ checked_array中,则值等于1或0如果它不在$ checked数组中。
下面的函数add_values()可以为您完成。你必须提供两个参数:
此功能在您的控制器中。
function add_values($all_possibilities, $selected) {
$array_for_query = array();
// this goes through each possible box that can be checked to see if that possibility was actually selected
foreach($all_possibilities as $array_member) {
// this checks to see if the current member of $all_possibilities is found in the $selected array
if (in_array($array_member, $selected)) {
// if it is, it adds that as a member of a new query $array_for_query and gives it a value of 1 (true)
$array_for_query[$array_member] = 1;
} else {
// if it is not, same as above, but gives it a value of 0
$array_for_query[$array_member] = 0;
}
}
// once all the possibilities have been checked and added to the query array, that array is returned
return $array_for_query;
}
现在你可以调用函数并传入两个参数。返回的数组被赋值给$ checked_and_unchecked。
$data['checked_and_unchecked'] = add_values($possibilities, $checked_array);
确保你也从表单中获取gl_id。您可以在视图中使用隐藏字段执行此操作:
<input type="hidden" name="gl_id" value="<?php echo $gl_field['gl_id'];?>" />
在控制器中,使用
获取该值 $data['gl_id'] = $this->input->post('gl_id');
然后,您可以将信息传递给模型,并通过表格名称和您创建的数组更新表格。
$this->model_name->model_method($data);
然后将进入模型:
$this->db->update('table_name', $checked_and_unchecked);
$this->db->where('gl_id', $gl_id);
答案 2 :(得分:0)
所以我仍然需要帮助对整个项目进行最后的修改,所以我想在这里发布最终结果给任何人绿色,因为我希望控制数据库中的复选框和复选框中的数据库。
控制器:
[function from Tayler and]
$all_checkbox_fields = array('stat','exclude','override');
$checked_array = $_POST['checkbox'];
$data['checkbox'] = $this->add_values($all_checkbox_fields, $checked_array);
$data['gl_id'] = $this->input->post('gl_id');
$this->page_nav_model->update_checked($data);
$this->load->view('pages/success');
型号:
public function update_checked($data){
$this->default_db->where('gl_id', $data['gl_id']);
$this->default_db->update('oracle_table', $data['checkbox']);
}
查看:
<label>Stat</label>
<input type="checkbox" <?php if ($gl_field['stat'] == "1") {echo "checked = checked";} ?>
name = "checkbox[]" id="stat" value= "stat"/><BR>
<label>Exclude</label>
<input type="checkbox" <?php if ($gl_field['exclude'] == "1") {echo "checked = checked";} ?>
name="checkbox[]" id="exclude" value= "exclude"/><BR>
<label>Override</label>
<input type="checkbox" <?php if ($gl_field['override'] == "1") {echo "checked = checked";} ?>
name= "checkbox[]" id= "override" value = "override" ><BR>