我必须使用复选框为用户插入角色,但是为了插入我写的代码,但它插入值'1'3次(如果选中3个复选框)。
我的HTML:
<tr>
<td align="right" width="47%" valign="top"><img
src="images/required_field.gif" /> User Role:</td>
<td width="40%" id="anstr"><input type="checkbox" id="roles_1"
value="1" name="roles[]" /> <label for="roles_1">X</label><span
id="levelRole"></span><br />
<input type="checkbox" id="roles_2" value="2" name="roles[]" /> <label
for="roles_2">Y</label><br />
<input type="checkbox" id="roles_3" value="3" name="roles[]" /> <label
for="roles_3">Z</label>
</td>
</tr>
我的qry:
$roles = $_POST['roles'];
for ($i=0; $i<count($roles); $i++) {
$check_roles = implode(',', $_POST['roles']);
$sql1 = $db ->query ( "INSERT INTO user_role_xref( user_id, user_role_id, created_on)
VALUES ( :p_user_id, :p_user_role_id, :p_created_on)",
array (
'p_user_id' => 81,
'p_user_role_id' => $check_roles,
'p_created_on' => date("Y-m-d H:i:s")
)
);
}
请帮我怎么做。
答案 0 :(得分:1)
我真的不懂implode(',', $_POST['roles'])
。是否应将角色保存为逗号分隔为一列?由于sql列说user_role_id
,而不是ids
(复数),我认为每个单独的角色都有记录。
首先,尝试foreach
,比for循环更容易阅读和写入,并且它可以很好地完成这一操作。试试这样的事情;
foreach ($roles as $role_id) {
$sql1 = $db ->query ( "INSERT INTO user_role_xref( user_id, user_role_id, created_on)
VALUES ( :p_user_id, :p_user_role_id, :p_created_on)",
array (
'p_user_id' => 81,
'p_user_role_id' => $role_id,
'p_created_on' => date("Y-m-d H:i:s")
)
);
}
答案 1 :(得分:1)
<input type="checkbox" id="roles_3" value="3" name="roles[]" />
...
<input type="checkbox" id="roles_4" value="4" name="roles[]" />
...
<input type="checkbox" id="roles_5" value="5" name="roles[]" />
HTML端的将有助于值范围
$roles = $_POST['roles'];
for ($i=0; $i<count($roles); $i++) {
$sql1 = $db ->query ( "INSERT INTO user_role_xref( user_id, user_role_id, created_on)
VALUES ( :p_user_id, :p_user_role_id, now())",
array (
'p_user_id' => 81,
'p_user_role_id' => $roles[$i]
)
);
}
应该修复PHP