2010-03-24 64 views
1

我有一個從數據庫中取出'selected'值的表單。
現在我想讓用戶編輯這些值。
當數據發送時,我想顯示新值。
POST後的PHP表單值在下拉列表中

當我提交表格時,我總是得到'綠色'值?
我在這裏做錯了什麼?

<?php 
// pulled from db 
$color = "blue"; 
// update 
if (isset($_POST['Submit'])) { 
    echo "write to db: " . $_POST['name'] . " + " . $_POST['color']; 
} 
?> 

<html> 
<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
<label for="name">Name:</label> 
<input type="text" name="name" size="30" value="<?php echo (isset($_POST['name'])) ? $_POST['name'] : ""; ?>"> 
<br /> 
<label for="color">Color:</label> 
<select name="color"> 
    <option <?php echo (isset($_POST['color']) || $color == "red") ? 'selected="selected"' : ''; ?> value="red">red</option> 
    <option <?php echo (isset($_POST['color']) || $color == "blue") ? 'selected="selected"' : ''; ?> value="blue">blue</option> 
    <option <?php echo (isset($_POST['color']) || $color == "green") ? 'selected="selected"' : ''; ?> value="green">green</option> 
</select> 
<br /> 
<input type="submit" name="Submit" value="Update"> 
</form> 
</html> 

回答

2

您的條件都使用||。帖子設置後,它們都評估爲TRUE。如果您查看HTML輸出,則每個選項都會顯示selected='selected'

只需將$_POST['color']與您指定的字符串進行比較即可。

+0

+1好眼jasonbar。我甚至沒有注意到這一點。 – 2010-03-24 01:21:25

0
<option <?php echo (isset($_POST['color']) || $color == "red") ? 'selected="selected"' : ''; ?> value="red">red</option> 

||是 「或」 操作符。如果$_POST['color']已設置(即表單已提交),則始終評估爲true。你應該只是做

$_POST['color'] == 'red' 

取而代之。忘記isset檢查。