台灣最大程式設計社群網站
線上人數
965
 
會員總數:246135
討論主題:189716
歡迎您免費加入會員
討論區列表 >> PHP >> 多個下拉式選單用if判斷
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
多個下拉式選單用if判斷
價值 : 30 QP  點閱數:3226 回應數:12
樓主

小但
門外漢
0 3
142 14
發送站內信

因為我要使用迴圈產生多個下拉式選單
並且我連接資料庫讀出的資料要放入下拉式選單當作預設值
<?php
header('Content-Type: text/html; charset=utf-8');
include("connectSQL.php");
echo "<table border='1'>";
$search = "select * from interior_report";
$temp = mysql_query($search);
if(mysql_num_rows($temp)>0){
while($row = mysql_fetch_array($temp)){
$st=$row['st_id'];
$test=$row['st_math'];
echo $mosquito;
echo '<tr><td><input type=checkbox name=people[] value=$st></td>';
echo "<td>{$row['name']}</td>";
echo "<td>{$row['room_id']}</td>";
echo '<td><select name="test1">
<option value="A">A</option>
<option value="B">B</option>
<option value="C">C</option>
<option value="D">D</option></td></selected>';
}
echo '</table>';
}
?>
我查過用IF做判斷式放在OPTION標籤內但是因為在PHP內使用ECHO寫出option標籤
所以無法寫成像
<OPTION VALUE="A" <?PHP if($row['st_k']="A"){echo 'selected';}?>>
或是用javascript但是因為使用迴圈也無法成功
如果直接用
<script>
document.test.test1.value = 'B';
</script>
但是因為在迴圈內又會失敗而且因為是用迴圈產生的下拉式選單每個都是相同的名稱
使用javascript的方式的時候應該也會出錯

因為這個問題我想了很久一直找不到方法解決
感覺用IF做判斷式時是最好的方式但是找不到方法解決
請問各位大大我該怎麼解決??

搜尋相關Tags的文章: [ 下拉式選單 ] , [ if ] , [ option ] ,
本篇文章發表於2012-12-08 23:40
1樓
回應

keny
捐贈 VP 給 keny 檢舉此回應
1.</td></selected>'; 這裡反了
2.<select name="test1"> name 要加入變數讓每個 select 都不同名稱
3.$row['st_k']="A" if 判斷要用 == 而不是 =
4.其他的再仔細檢查一下吧 應該是可以做的出來的


本篇文章回覆於2012-12-09 01:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

小但
檢舉此回應
3.echo "<td><select name='$b'>
<option value='A' <?php if($row['st_k']=='A'){echo 'selected';}?> > </option>
<option value='B' <?php if($row['st_k']=='B'){echo 'selected';}?> >O</option>
<option value='C' <?php if($row['st_k']=='C'){echo 'selected';}?> >X</option>
<option value='D' <?php if($row['st_k']=='D'){echo 'selected';}?> >△</option>
</selected></td>';
應該沒辦法寫成這樣吧~ECHO裡面還能夾<?php if($row['st_k']=='A'){echo 'selected';}?>嗎???
本篇文章回覆於2012-12-09 10:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

皮皮快跑
檢舉此回應
你有一個選擇,就是html不要用echo的。
你還有另一個選擇,就是三元運算子。

本篇文章回覆於2012-12-09 10:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

小但
檢舉此回應
echo "<td><select name='$b'>
<option value='A' if($mosquito == 'A'){echo 'selected';} > </option>
<option value='B' if($mosquito == 'B'){echo 'selected';} >O</option>
<option value='C' if($mosquito == 'C'){echo 'selected';} >X</option>
<option value='D' if($mosquito == 'D'){echo 'selected';} >△</option>
</selected></td>";
如果直接寫成這樣也沒辦法顯示~
要怎麼做判斷式呢???
本篇文章回覆於2012-12-09 10:17
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

小但
檢舉此回應
恩~我有試過
如果改成用html就可以了
但是因為我再連接資料庫的時候
要顯示的資料會有很多筆所以在產生下拉式選單的時候要用迴圈產生
這樣就沒辦法不用echo產生下拉式選單
三元運算子???
小弟是php的新手有很多地方還不太懂


本篇文章回覆於2012-12-09 10:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

小但
檢舉此回應
echo '<td><select name="$b">
<option value="A" $mosquitp=="A"?"selected":"";} > </option>
<option value="B" $mosquitp=="B"?"selected":"";} >O</option>
<option value="C" $mosquitp=="C"?"selected":"";} >X</option>
<option value="D" $mosquitp=="D"?"selected":"";} >△</option>
</selected></td>';
剛剛查了一下三元運算子
是寫成像這樣嗎??可是還是不行
本篇文章回覆於2012-12-09 10:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

小高
檢舉此回應
在下的方法比較土法練鋼...
但應該都通用....
先判斷$row['st_k']的值來指定那一個 option selected

如果 option 內也是陣列型態那就要多一層陣列判斷...

本篇文章回覆於2012-12-09 10:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

小高
檢舉此回應
土法練鋼

先判斷st_k的值來決定那個option selected

若option也是陣列型態,那就把判斷值改一下就行了

本篇文章回覆於2012-12-09 10:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

小高
檢舉此回應
用土法練鋼試試
if($mosquito == 'D'){
<option value='A'> </option>
<option value='B'>O</option>
<option value='C'>X</option>
<option value='D' selected="selected">△</option>
} else {
<option value='A' selected="selected"> </option>
<option value='B'>O</option>
<option value='C'>X</option>
<option value='D'>△</option>
}
本篇文章回覆於2012-12-09 10:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

小高
檢舉此回應
¿u»~ '80070070'
/webClass.asp, |C83

發文出現這個,害我一直重打重發.....
本篇文章回覆於2012-12-09 10:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
最有價值解答

皮皮快跑
檢舉此回應
我覺得我把重新整理的code寫出來,小但大概會想:怎麼會有這樣的寫法……

如你所看到的,我把html全部移出echo。
也就是讓html自身直接顯示就好了。
而php就只是被視為一個樣板的輸出。
這麼一來不論是php或是html才會獲得較好的編輯和維護性。
因為縮減了echo html這件事,效能上來說相對也會快一些。
這邊注意一下這一段:

這個東西就是三元運算子:
三元運算子:依條件非1即2。
A ? B : C
意思就是如果A成立則傳回B,否則就傳回C。
要注意的是三元運算子不能亂用。
你不能用整段程式碼塞進去做處理,這樣違反他的使用意義。
他是針對僅傳回單一值去使用,你可別讓他跑整段程式。
(註:函式或物件的方法是例外,這邊對你來說可能會難懂些,但我還是說明如果是函式或是物件的方法也僅是獲取的單一回傳值。)
另外,向上面將你整CODE重新整理成較容易閱讀及維護的作法就叫做『重構』。
『重構』是寫程式非常重要的步驟。
他可以讓你的程式變得有條有理且清楚。
而且通常經過重構的程式碼因為是依循一定的規則走,所以有時就可以省略對其的註解。
通常只有混亂的程式碼才會需要大量的註解。
本篇文章回覆於2012-12-09 13:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

小但
檢舉此回應
感覺又學到了很多
謝謝皮皮快跑
也謝謝小高
本篇文章回覆於2012-12-10 20:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.