Php 如果用户选择多个复选框,如何将值插入数据库

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=

我必须通过使用复选框为用户插入角色,但对于插入,我编写了一个类似的代码,但它插入值“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>

用户角色:
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循环更容易读写的foreach
foreach
,它的技巧非常出色

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]
)
);
}

应该修复PHP

oh和顺便说一句,如果你想以三开始数字,那么为什么在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]
         )
    );

}