2009-07-30 35 views
0

我寫了一些PHP代碼,可以讓我創建一個html下拉框,然後選擇應該選擇的值。代碼是:PHP/HTML下拉框代碼問題(選定值)

$role_drop = "<select name='role'>"; 

$role_drop .= "\r\n<option value='Resident Assistant'>Resident Assistant</option>"; 

$role_drop .= "\r\n<option value='Community Assistant'>Community Assistant</option>"; 

$role_drop .= "\r\n<option value='Head RA'>Head RA</option>"; 

$role_drop .= "\r\n</select>"; 

$result = mysql_query("SELECT role FROM users"); 

if (@mysql_num_rows($result)) { 

     while ([email protected]_fetch_assoc($result)) { 

      $role = $r["role"]; 
      $role_drop = str_replace(">$role</option>", "selected=\"\" >$role</option>",$role_drop); 
      echo $role_drop; 
     } 
} 

實際上,這段代碼有一堆HTML混入,但這裏是所有的PHP。當我運行它時,它似乎工作。但是,假設查詢返回了4個帶有角色(來自4個用戶)的下拉框,並且我要爲返回的第二個下拉框(使用UPDATE查詢)編輯或選擇一個新角色,然後當頁面刷新時,所有包括和之後我更新的下拉框將顯示他們的選定值作爲我在第二個下拉框中選擇的新的值。

並不是實際數據庫中的值是錯誤的,他們只是顯示錯誤的選定值。下面是第三個下拉框的源代碼,我選擇第二個新值後:

<select name="role"> 
     <option selected="" value="Resident Assistant">Resident Assistant</option> 
     <option value="Community Assistant">Community Assistant</option> 
     <option selected="" value="Head RA">Head RA</option> 
</select> 

所以,似乎它選擇正確的值(居民助理),但其同時選擇「頭RA」 ,這是我改變之前的下拉框。

這很奇怪,我不知道爲什麼會發生這種情況。有任何想法嗎?

謝謝!

回答

1

這是因爲您每次更新$role_drop,因此所有以前的更改將在隨後的下拉菜單中顯示。我會改變這樣的循環:

if (@mysql_num_rows($result)) { 
    while ([email protected]_fetch_assoc($result)) { 
      $role = $r["role"]; 
      $temp_role_drop = str_replace(">$role</option>", "selected=\"\">$role</option>", $role_drop); 
      echo $temp_role_drop; 
    } 
} 

這樣你就不會覆蓋原來的下拉標記。

+0

工作。你是一個救生員。非常感謝你! – littleK 2009-07-30 14:25:31

0

不知道是否有幫助,但根據HTML規範,您不應該將每個OPTION的SELECTED屬性與值一起傳遞。只是 。

+0

@SOF「只是。」 - 這只是時期?對不起,我不確定你的意思。我應該只是說<選項選擇值=「H ....>? – littleK 2009-07-30 14:12:07

1

堅果 - 忘了逃脫我的代碼。我的意思是,「這只是<OPTION VALUE="foo" SELECTED>」。

+0

你可以使用你之前的答案下的」編輯「鏈接來修復那個,然後刪除這個新的答案 – Charles 2009-07-30 14:19:15