2011-10-20 57 views
3

我有一個從MySQL數據庫中的表填充的下拉菜單。它的功能,但我想添加一個if/else語句的代碼來改變下拉的默認值根據條件。 這裏是(他在得到這個地步幫助很多感謝AlienWebguy)的下拉代碼:PHP if/else語句不會產生所需的結果

<?php 
    $sql="SELECT techID, tech_userlogin FROM technicians"; 
    $result=mysql_query($sql); 

    while ($row=mysql_fetch_array($result)) 
    { 
     $techID = $row['techID']; 
     $tech_userlogin=$row['tech_userlogin']; 

     // Here - check if the $_GET value in the query matches the tech_userlogin 
     ($selected = ($tech_userlogin == $_GET['wtech_userlogin']) ? 'selected="selected"' : ''); 
     echo '<option value="' . $tech_userlogin . '" ' . $selected . '>' . $tech_userlogin . '</option>' . "\n"; 
    } 
?> 

我已經試過幾件事情來完成我後,但我嚴重由於我缺乏PHP/MySQL的經驗和/或專業知識而受到阻礙。

這是我第一次嘗試這些東西,到目前爲止它已被擊中和錯過。我已經在Stack Overflow處獲得了幫助,我很感激這樣的資源存在。

這是我最近的努力,它未能實現我所追求的。如果if語句中沒有滿足條件,我希望下拉列表的默認值爲「 - 選擇技術人員 - 」。

<?php 
    $sql="SELECT techID, tech_userlogin FROM technicians"; 
    $result=mysql_query($sql); 

    $options=""; 

    while ($row=mysql_fetch_array($result)) 
    { 
     $techID = $row['techID']; 
     $tech=$row['tech_userlogin']; 
     $options.="<option value=\"$tech\">$tech</option>"; 

     // Here - check if the $_GET value in the query matches the tech_userlogin 
     if 
     ($selected = ($tech == $_GET['wtech_userlogin']) ? 'selected="selected"' : '') 
     {echo '<option value="' . $tech . '" ' . $selected . '>' . $tech . '</option>' . "\n";} 

     else 
     {echo '<option value="' . $options . '" . 'selected="selected"'>'--Select Tech--'<. $options .>' . "\n";} 
    } 
?> 

有人可以幫助我還是指向正確的方向?非常感謝。

乾杯

+1

爲什麼選擇投票?這個問題怎麼了? – Iznogood

回答

1

試試這個

<select name="whatever"> 
    <option value="">-- Select Technician --</option> 
    <?php while ($row = mysql_fetch_array($result)) : 
     $techId = $row['techID']; // why isn't this used? 
     $tech = htmlspecialchars($row['tech_userlogin']); 
     $selected = $row['tech_userlogin'] == $_GET['wtech_userlogin'] ? '" selected="selected' : ''; 
    ?> 
    <option value="<?php echo $tech, $selected ?>"><?php echo $tech ?></option> 
    <?php endwhile ?> 
</select> 
+0

謝謝你!這正是我想要的。我已經測試過它,它完美無瑕。你的回答是直接而簡潔的,我總是很佩服。未使用的$ techID從之前的迭代中遺留下來,我已將其刪除。我58歲,擁有大約8周的PHP/MySQL體驗。正是在像我這樣的人的幫助下,我儘可能地獲得了自己的成就。善於亞友!歡呼聲 – Spud

-1

你寫了這個,這不是做你想要什麼:

($selected = ($tech == $_GET['wtech_userlogin']) ? 'selected="selected"' : '') 

改成這樣:

($selected = ($tech == $_GET['wtech_userlogin']) ? 'selected="selected"' : false) 

公告'假'。您需要這樣做,因爲空引號不是錯誤的,它被PHP視爲「真實」。

+0

它正在爲'selected'屬性創建一個字符串。空字符串是正確的。這是條件中的結果的使用是不正確的 – Phil

+0

然後,在獲得所選變量之後:if($ selected ==''){// do stuff} else {// other stuff} – donutdan4114

+1

一個空字符串肯定是在PHP中不是真的。嘗試'如果('')回聲'空字符串是真的';' – grossvogel

-1

我可能是錯的,但我相信問題是與你的if語句。您有:

($selected = ($tech == $_GET['wtech_userlogin']) ? 'selected="selected"' : '') 

的問題是,你正在分配三元聲明變量$選擇,它將始終返回一個真正的成功分配的結果。

+0

這。你基本上是在說「如果我給這個變量賦值」,那麼做一些事情「即使你賦值的值爲假,該語句也不會返回false。 –

+1

並非如此。賦值返回分配的值。 https://gist.github.com/1300229 – grossvogel

+0

我糾正了 –

0

如果整個if/then只是在那裏創建一個默認值,那麼你就太複雜了。

$options = '<option value="">--Select Tech--</option>'; 
while ($row=mysql_fetch_array($result)) 
{ 
    $techID = $row['techID']; 
    $tech = $row['tech_userlogin']; 
    $selected = ($tech == $_GET['wtech_userlogin']) ? 'selected="selected"' : ''; 
    $options .= '<option value="' . $techID . '" ' . $selected . '>' . $tech . '</option>' . "\n"; 
} 

現在$options擁有所有的在它的選項,包括默認選項(--Select Tech--,隨着空值),首先顯示出來,因此,開始時會選擇,如果沒有別的有selected屬性。

請注意,您也有$tech您的選項的價值,但我認爲你的意思是說$techID

+0

感謝您的迴應。我無法讓它工作。 $ techID是從以前的迭代中遺留下來的。我已將其刪除。這裏是我所擁有的,我希望你能告訴我我在哪裏搞錯了它:<?php $ sql =「SELECT * FROM technicians」; $ result = mysql_query($ sql); $ options =''; ($ row = mysql_fetch_array($ result)) ( )\t $ tech = $ row ['tech_userlogin']; \t $ selected =($ tech == $ _GET ['wtech_userlogin'])? 'selected =「selected」':''; \t $ options。=''。 「\ n」 個; } ?>乾杯 – Spud