我有问题将我的复选框发布到数据库。请帮帮我......
以下是我的观点:
<table>
<tr>
<td>
<input type='hidden' name='userid[]' value='1'>
<input type='text' name='username[]' value='username1'>
</td>
<td>
<input type='checkbox' name='as_admin[]' value=1>
</td>
</tr>
<tr>
<td>
<input type='hidden' name='userid[]' value='2'>
<input type='text' name='username[]' value='username2'>
</td>
<td>
<input type='checkbox' name='as_admin[]' value=1>
</td>
</tr>
</table>
这是我的控制者:
$this->Model_user->insert_user();
这是我的模特:
function insert_user(){
$user_count = count($this->input->post('userid'));
$userid = $this->input->post('userid');
$username = $this->input->post('username');
$as_admin = $this->input->post('as_admin');
for ($i=0; $i < $user_count; $i++){
$info_user = array(
'user_id' => $userid[$i],
'user_name' => $username[$i],
'as_admin' => $as_admin[$i],
);
$this->db->insert($info_user);
}
}
问题是'username2'标记为admin(选中第二行复选框),在数据库中将是这样的:
|user_id|user_name|as_admin|
| 1 |username1| 1 |
| 2 |username2| 0 |
它应该是这样的:
|user_id|user_name|as_admin|
| 1 |username1| 0 |
| 2 |username2| 1 |
现在有人如何保存这些东西,请...
提前致谢...
答案 0 :(得分:5)
在您的视图中尝试使用用户ID作为as_admin的键
<table>
<tr>
<td>
<input type='hidden' name='userid[]' value='1'>
<input type='text' name='username[]' value='username1'>
</td>
<td>
<input type='checkbox' name='as_admin[1]' value=1>
</td>
</tr>
<tr>
<td>
<input type='hidden' name='userid[]' value='2'>
<input type='text' name='username[]' value='username2'>
</td>
<td>
<input type='checkbox' name='as_admin[2]' value=1>
</td>
</tr>
</table>
在您的模型中
function insert_user(){
$user_count = count($this->input->post('userid'));
$userid = $this->input->post('userid');
$username = $this->input->post('username');
$as_admin = $this->input->post('as_admin');
for ($i=0; $i < $user_count; $i++){
$info_user = array(
'user_id' => $userid[$i],
'user_name' => $username[$i],
'as_admin' => isset($as_admin[$userid[$i]]) ? 1 : 0,
);
$this->db->insert($info_user);
}
}
您遇到此问题是因为,如果您只选中1个复选框,则只会检查已检查的值,因此如果您计算$ as_admin,则只能获得2个as_admin中的1个。
如果您将admin设为仅限用户名2
然后你的帖子将如下
Array
(
[userid] => Array
(
[0] => 1
[1] => 2
)
[username] => Array
(
[0] => username1
[1] => username2
)
[as_admin] => Array
(
[2] => 1
)
)
答案 1 :(得分:1)
问题是未发布未选中的复选框,并且可能没有选中任何框。如果检查了某些内容,则需要一种方法将复选框与userid相关联。此回答要求userid[]
的值为复选框的value
。所以html改为此。
<table>
<tr>
<td>
<input type='hidden' name='userid[]' value='1'>
<input type='text' name='username[]' value='username1'>
</td>
<td>
<input type='checkbox' name='as_admin[]' value=1>
</td>
</tr>
<tr>
<td>
<input type='hidden' name='userid[]' value='2'>
<input type='text' name='username[]' value='username2'>
</td>
<td>
<input type='checkbox' name='as_admin[]' value=2>
</td>
</tr>
</table>
基本上,如果用户ID为&#39;则控制器功能将设置$info_user['as_admin'] = 1
。是$ _POST [&#39; as_admin&#39;]中的值,如果不是,则会设置$info_user['as_admin'] = 0
。
此答案使用$this->db->insert
而不是重复拨打$this->db->insert_batch
。数组$data
是$info_user
数组的数组。
function insert_user()
{
//get the all of $_POST from $this->input
//eliminates multiple calls to $this->input
$posted = $this->input->post();
//It's possible that no "admin" boxes are checked, if none provide empty array
$as_admin = isset($posted['as_admin']) ? $posted['as_admin'] : array();
$data = array();
if(isset($posted['userid']))
{
foreach($posted['userid'] as $key => $value)
{
$info_user = array(
'user_id' => $value,
'user_name' => $posted['username'][$key],
'as_admin' => in_array($posted['userid'][$key], $as_admin) ? 1 : 0,
);
$data[] = $info_user;
}
$this->db->insert_batch('some_table', $data);
}
}