2012-01-20 7 views
-3

チェックボックスを使用してユーザのロールを挿入する必要がありますが、挿入するには値 '1'を3回挿入しますボックス)。ユーザが複数のチェックボックスを選択した場合、データベースに値を挿入する方法PHP

私の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

を修正する必要が役立つだろうあなたは手の込んだ/適切に言い換えることができます。また、 '$ check_roles'を挿入する前に' mysql_real_escape_string() '関数を使用することをお勧めします。 – footy

答えて

1

私は実際にimplode(',', $_POST['roles'])を理解していません。ロールを1つの列にカンマ区切りで保存する必要がありますか? SQLの列にはuser_role_idと書かれていますが、ids(複数)ではなく、それぞれの役割ごとにレコードがあると思います。

まず、forループというより読み書きがはるかに簡単で、それは素晴らしいことです。このようなものを試してみてください。 HTML側の

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") 
     ) 
    ); 
} 
+0

ああ、btw、3で数字を始める場合は、なぜあなたのHTMLフォームに1と2がセットされていますか?ロールids 1と2を設定しない場合は、PHP scrtipでそれらの値をテストしてください... – giorgio

+0

また、前述のように '$ role_id'を挿入する前に' mysql_real_escape_string() '関数を使うことをお勧めします。 – footy

+0

これは、ある種の値sanitizerがすでに$ SQLオブジェクトで使用されているようです(なぜ彼は配列を挿入し、値の前に:p_?が付いていますか?)。したがって、この場合は必要ではありません。しかし、ポスターに。これが正しいかどうかチェックしてください。それ以外の場合は重大なセキュリティリスクです... – giorgio

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[]" /> 

値の範囲のために

$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

+0

htmlソリューションに感謝 – vvr

関連する問題