2012-01-20 40 views
-3

我必須通過使用複選框插入用戶的角色,但插入我寫了一個代碼,但它插入值'1'3次(如果選中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' – footy

回答

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

插入之前使用'mysql_real_escape_string()'函數,如果你想用三個數字開始數字,那你爲什麼要在你的html表單中設置數字1和2 ...?如果不應該設置角色ids 1和2,那麼在你的php scrtip中測試這些值...... – giorgio

+0

另外,我建議在爲'$ role_id'插入前使用'mysql_real_escape_string()'函數,如前所述。 – footy

+0

好吧,他的$ sql對象中已經使用了一些價值sanitizer(爲什麼他會插入一些數組並且名稱前綴爲: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[]" /> 
在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

+0

感謝您的HTML解決方案 – vvr

相關問題