我必须使用复选框为用户插入角色,但为了插入,我写了一个类似的代码,但它插入了值'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="answerstr"><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>
我的问题:
$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")
)
);
}
请帮我怎么做。
我真的不懂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")
)
);
}
<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