Php 保存已发布复选框的列表

Php 保存已发布复选框的列表,php,post,codeigniter-3,Php,Post,Codeigniter 3,我有一个(MySQL)数据库表,如下所示: CREATE TABLE `dm_webcategory` ( `cat_id` int(10) DEFAULT NULL, `PUB_CATEGORY` varchar(50) CHARACTER SET utf8 DEFAULT NULL, `web_only` tinyint(1) DEFAULT '0', UNIQUE KEY `dm_webcategory_pk` (`cat_id`) ) ENGINE=InnoDB DEFA

我有一个(MySQL)数据库表,如下所示:

CREATE TABLE `dm_webcategory` (
  `cat_id` int(10) DEFAULT NULL,
  `PUB_CATEGORY` varchar(50) CHARACTER SET utf8 DEFAULT NULL,
  `web_only` tinyint(1) DEFAULT '0',
  UNIQUE KEY `dm_webcategory_pk` (`cat_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
foreach($this->input->post('category') as $category)
{
    $this->db->update('dm_webcategory', array('web_only' => '1'), array('cat_id' => $category));
}
我想将此表中的所有行显示并保存为复选框 如果选中,将仅将web_标记为1,未选中将仅将web_标记为0

foreach($this->input->post('category') as $category)
{
    $this->db->update('dm_webcategory', array('web_only' => '1'), array('cat_id' => $category));
}
显示它们很简单:

<form method="post" action="">
<?php foreach($categories as $category): ?>
    <input type="checkbox" name="category[]" value="<?php echo $category->cat_id;?>" <?php if($category->web_only) echo "checked"; ?> /> <?php echo $category->PUB_CATEGORY;?>
<?php endforeach; ?>
    <input type="submit" class="btn btn-primary" value="Save" />
    <br>
</form>
foreach($this->input->post('category') as $category)
{
    $this->db->update('dm_webcategory', array('web_only' => '1'), array('cat_id' => $category));
}

但上述情况并不十分“安全”,有更好的方法吗?当我没有显示/保存表中的每一行时,情况如何?

您尝试使用以下代码

foreach($this->input->post('category') as $category)
{
    $this->db->update('dm_webcategory', array('web_only' => '1'), array('cat_id' => $category));
}
控制器代码

foreach($this->input->post('category') as $category)
{
    $this->db->update('dm_webcategory', array('web_only' => '1'), array('cat_id' => $category));
}
$array = $this->input->post('s2');
$data['subject'] = implode(',',$array);
$this->student_model->saveForm($data);
<form method="post" action="">
Categories :
<?php foreach($categories as $category): ?>
<input type="checkbox"  name="s2[]" value="<?php echo $category->cat_id;?>">English
   <?php endforeach; ?>
<input type="submit" class="btn btn-primary" value="Save" />
<br>
</form>
查看代码

foreach($this->input->post('category') as $category)
{
    $this->db->update('dm_webcategory', array('web_only' => '1'), array('cat_id' => $category));
}
$array = $this->input->post('s2');
$data['subject'] = implode(',',$array);
$this->student_model->saveForm($data);
<form method="post" action="">
Categories :
<?php foreach($categories as $category): ?>
<input type="checkbox"  name="s2[]" value="<?php echo $category->cat_id;?>">English
   <?php endforeach; ?>
<input type="submit" class="btn btn-primary" value="Save" />
<br>
</form>

您尝试使用以下代码

foreach($this->input->post('category') as $category)
{
    $this->db->update('dm_webcategory', array('web_only' => '1'), array('cat_id' => $category));
}
控制器代码

foreach($this->input->post('category') as $category)
{
    $this->db->update('dm_webcategory', array('web_only' => '1'), array('cat_id' => $category));
}
$array = $this->input->post('s2');
$data['subject'] = implode(',',$array);
$this->student_model->saveForm($data);
<form method="post" action="">
Categories :
<?php foreach($categories as $category): ?>
<input type="checkbox"  name="s2[]" value="<?php echo $category->cat_id;?>">English
   <?php endforeach; ?>
<input type="submit" class="btn btn-primary" value="Save" />
<br>
</form>
查看代码

foreach($this->input->post('category') as $category)
{
    $this->db->update('dm_webcategory', array('web_only' => '1'), array('cat_id' => $category));
}
$array = $this->input->post('s2');
$data['subject'] = implode(',',$array);
$this->student_model->saveForm($data);
<form method="post" action="">
Categories :
<?php foreach($categories as $category): ?>
<input type="checkbox"  name="s2[]" value="<?php echo $category->cat_id;?>">English
   <?php endforeach; ?>
<input type="submit" class="btn btn-primary" value="Save" />
<br>
</form>
试试这个

foreach($this->input->post('category') as $category)
{
    $this->db->update('dm_webcategory', array('web_only' => '1'), array('cat_id' => $category));
}
HTML:

foreach($this->input->post('category') as $category)
{
    $this->db->update('dm_webcategory', array('web_only' => '1'), array('cat_id' => $category));
}
试试这个

foreach($this->input->post('category') as $category)
{
    $this->db->update('dm_webcategory', array('web_only' => '1'), array('cat_id' => $category));
}
HTML:

foreach($this->input->post('category') as $category)
{
    $this->db->update('dm_webcategory', array('web_only' => '1'), array('cat_id' => $category));
}
请尝试以下表单:

foreach($this->input->post('category') as $category)
{
    $this->db->update('dm_webcategory', array('web_only' => '1'), array('cat_id' => $category));
}
<form method="post" action="">
<?php foreach($categories as $category): ?>
    <input type="hidden" name="category[<?php echo $category->cat_id;?>]" value="0" />
    <input type="checkbox" name="category[<?php echo $category->cat_id;?>]" value="1" <?php if($category->web_only) echo "checked"; ?> /> <?php echo $category->PUB_CATEGORY;?>
<?php endforeach; ?>
    <input type="submit" class="btn btn-primary" value="Save" />
    <br>
</form>
请尝试以下表单:

foreach($this->input->post('category') as $category)
{
    $this->db->update('dm_webcategory', array('web_only' => '1'), array('cat_id' => $category));
}
<form method="post" action="">
<?php foreach($categories as $category): ?>
    <input type="hidden" name="category[<?php echo $category->cat_id;?>]" value="0" />
    <input type="checkbox" name="category[<?php echo $category->cat_id;?>]" value="1" <?php if($category->web_only) echo "checked"; ?> /> <?php echo $category->PUB_CATEGORY;?>
<?php endforeach; ?>
    <input type="submit" class="btn btn-primary" value="Save" />
    <br>
</form>


与php无关。未选中的复选框不会与html的其余部分一起提交。这是标准的html/浏览器行为,无论您在服务器上使用哪种语言。@MarcB很好,已经编辑了标题,因此它更通用,基于PHP的答案更可取,但同意,这更多是另一种想法(如果有)你可以在你的复选框前面添加一个隐藏的输入值,而id使用1作为复选框值。使用id
name=“category[]”
时使用相同的名称标签,这样您就可以知道它是否被选中。用一个简单的foreach,它应该可以工作。@JonathanClark请尝试下面的答案作为例子,可能与php无关。未选中的复选框不会与html的其余部分一起提交。这是标准的html/浏览器行为,无论您在服务器上使用哪种语言。@MarcB很好,已经编辑了标题,因此它更通用,基于PHP的答案更可取,但同意,这更多是另一种想法(如果有)你可以在你的复选框前面添加一个隐藏的输入值,而id使用1作为复选框值。使用id
name=“category[]”
时使用相同的名称标签,这样您就可以知道它是否被选中。用一个简单的foreach,它应该会起作用。@JonathanClark请尝试下面的答案作为例子@Fred ii的可能副本-好的updating@Fred-ii-但值将由name@HeemanshuBhalla谢谢,但是你能扩展一下吗。。。特别是模型部分$如果按照内爆线检查所有数据,则数据['subject']将等于“英语、科学、数学”。我不知道这有什么帮助,或者与我的建议不同?@HeemanshuBhalla是的,这个名字将用于发布,你可以删除这个例子中的ID元素:)@JonathanClark更新我的answer@Fred-ii-好的updating@Fred-ii-但值将由name@HeemanshuBhalla谢谢,但是你能扩展一下吗。。。特别是模型部分$如果按照内爆线检查所有数据,则数据['subject']将等于“英语、科学、数学”。我不知道这有什么帮助,或者与我的建议不同?@HeemanshuBhalla是的,这个名字将用于发布,你可以删除这个例子中的ID元素:)@JonathanClark更新我的答案哇,太好了,我不知道你可以在name=“category[]”的方括号内放一个值。此外,我想在复选框上方有一个隐藏的输入是一个久经考验的“把戏”,如果选中该复选框,复选框将覆盖它。我进行了测试,但在下面隐藏输入不起作用。这里的技巧是DOM中的最新值覆盖上一个值,并且复选框仅在选中时给出值。哇,太好了,我不知道您可以将值放在name=“category[]”的方括号内。此外,我想在复选框上方有一个隐藏的输入是一个久经考验的“把戏”,如果选中该复选框,复选框将覆盖它。我进行了测试,但在下面隐藏输入不起作用。这里的诀窍是DOM中的最新值覆盖上一个值,复选框仅在选中时才给出值。谢谢,我恐怕你的答案是肯定的,但是对于
作为$cat\u id=>$web\u only
,仍然+1。我还将使用该部分,因为它的代码可读性更高:)谢谢,我恐怕你的答案是肯定的,但是
仍然是+1,因为$cat\u id=>$web\u only
。我还将使用该部分,因为它的代码更可读:)