保存已发布的复选框列表
Saving a list of POSTed checkboxes
我有一个 (MySQL) 数据库 table 看起来像:
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;
我想显示此 table 中的所有行并将其保存为复选框
如果选中,将标记 web_only 为 1,未选中将标记 web_only 为 0。
显示它们很简单:
<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>
但是我应该如何保存这个复选框列表?
我可以使用 $_POST['category']
访问所有这些,但这只会 $_POST
个选中的框?
为了回答我自己的问题,我可以将整个 table web_only 字段更新为 0,然后 foreach 发布的结果单独更新为 1,假设所有未包含的都未选中。
SQL: UPDATE dm_webcategory SET web_only = 0
然后PHP:
foreach($this->input->post('category') as $category)
{
$this->db->update('dm_webcategory', array('web_only' => '1'), array('cat_id' => $category));
}
以上感觉不太好'safe'不过,有没有更好的办法呢?如果我没有显示/保存 table 中的每一行,情况会怎样?
您尝试使用以下代码
控制器代码
$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>
型号
$this->db->insert('Tablename', $data);
试试这个。
HTML:
<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:
foreach($this->input->post('category') as $id => $value)
{
$this->db->update('dm_webcategory', array('web_only' => $value), array('cat_id' => $id));
}
试试这种形式:
<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 $cat_id => $web_only)
{
$this->db->update('dm_webcategory', array('web_only' => $web_only), array('cat_id' => $cat_id));
}
我有一个 (MySQL) 数据库 table 看起来像:
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;
我想显示此 table 中的所有行并将其保存为复选框 如果选中,将标记 web_only 为 1,未选中将标记 web_only 为 0。
显示它们很简单:
<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>
但是我应该如何保存这个复选框列表?
我可以使用 $_POST['category']
访问所有这些,但这只会 $_POST
个选中的框?
为了回答我自己的问题,我可以将整个 table web_only 字段更新为 0,然后 foreach 发布的结果单独更新为 1,假设所有未包含的都未选中。
SQL: UPDATE dm_webcategory SET web_only = 0
然后PHP:
foreach($this->input->post('category') as $category)
{
$this->db->update('dm_webcategory', array('web_only' => '1'), array('cat_id' => $category));
}
以上感觉不太好'safe'不过,有没有更好的办法呢?如果我没有显示/保存 table 中的每一行,情况会怎样?
您尝试使用以下代码
控制器代码
$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>
型号
$this->db->insert('Tablename', $data);
试试这个。
HTML:
<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:
foreach($this->input->post('category') as $id => $value)
{
$this->db->update('dm_webcategory', array('web_only' => $value), array('cat_id' => $id));
}
试试这种形式:
<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 $cat_id => $web_only)
{
$this->db->update('dm_webcategory', array('web_only' => $web_only), array('cat_id' => $cat_id));
}