Php 如果用户选择多个复选框,如何将值插入数据库
我必须通过使用复选框为用户插入角色,但对于插入,我编写了一个类似的代码,但它插入值“1”3次(如果选中3个复选框) 我的HTML:Php 如果用户选择多个复选框,如何将值插入数据库,php,Php,我必须通过使用复选框为用户插入角色,但对于插入,我编写了一个类似的代码,但它插入值“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=
<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>
用户角色:
X
Y
Z
我的问题:
$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")
)
);
}
$roles=$\u POST['roles'];
对于($i=0;$iquery(“插入到用户角色外部参照(用户id、用户角色id、已创建的外部参照)”)
值(:p_user_id,:p_user_role_id,:p_created_on)”,
排列(
'p_user_id'=>81,
'p_user_role_id'=>$check_roles,
“p_创建于”=>日期(“Y-m-d H:i:s”)
)
);
}
请帮助我做这件事。我不太理解
内爆(“,”,$\u POST['roles'])
。角色应该以逗号分隔保存到一列中吗?正如sql列所说的用户角色id
,而不是id
(复数)我认为每个单独的角色都有一个记录
首先,尝试使用比for循环更容易读写的foreachforeach
,它的技巧非常出色
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")
)
);
}
...
...
在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]
)
);
}
$roles=$\u POST['roles'];
对于($i=0;$iquery(“插入到用户角色外部参照(用户id、用户角色id、已创建的外部参照)”)
值(:p_user_id,:p_user_role_id,now())“,
排列(
'p_user_id'=>81,
'p_user_role_id'=>$roles[$i]
)
);
}
应该修复PHPoh和顺便说一句,如果你想以三开始数字,那么为什么在html表单中设置数字1和2…?如果不应该设置角色ID 1和2,在PHP scrtip中测试这些值…我还建议使用
mysql\u real\u escape\u string()
函数,然后再插入,$role\u id
,如前所述。似乎在他的$sql对象中已经使用了某种值净化剂(为什么他要插入一些数组,并将值名称前缀为:p?)。因此,在这种情况下,这是没有必要的。但要张贴海报;请检查这是否正确,否则会造成严重的安全风险…您能否详细说明/重新措辞正确。此外,我建议在插入$check\u角色之前使用mysql\u real\u escape\u string()
函数
$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]
)
);
}