Board logo

標題: [教學] (PHP+IIS+MsSQL教學第18篇) 表單欄位資料使用 下篇 [打印本頁]

作者: 小誌    時間: 2010-5-14 18:25     標題: (PHP+IIS+MsSQL教學第18篇) 表單欄位資料使用 下篇

核取按鈕(Checkbox)
核取按鈕(Checkbox)適用於多備選案答案且多正確答案選取的場合,如同複選的選擇題,例如興趣、嗜好…等:
  1. <input type=”Checkbox” name=”識別名” value=”資料值”>
複製代碼
與單選按鈕相同的是使用者只需點選答案,不需要填寫資料,所以必須為每一個核取按鈕建立不同的資料值,而且為了讓多個核取按鈕成為複選的群組,故同群組內的核取按鈕其「name」屬性值必須為相同的「識別名」。
  1. <html><head>
  2. <title>核取按鈕元件使用</title>
  3. </head><body>
  4. <form action="checkbox_ans.php" method="Post">
  5. 請選擇您喜歡的水果:<Br>
  6. <Input type="Checkbox" name="food" value="香蕉" Checked>香蕉
  7. <Input type="Checkbox" name="food" value="蘋果">蘋果
  8. <Input type="Checkbox" name="food" value="芭樂">芭樂
  9. <Input type="Checkbox" name="food" value="鳳梨">鳳梨
  10. <Input type="Checkbox" name="food" value="西瓜">西瓜
  11. <Br>
  12. <input type="Submit">
  13. </form>
複製代碼
若要將某個核取按鈕預設為已選取,則加入「Checked」屬性設定即可。與單選按鈕最大的不同是核取按鈕在選取後,可以再點選一次核取按鈕取消選取。
[attach]422[/attach]


當同時點選多個核取按鈕後,因為每個核取按鈕的名稱都相同,因此,當資料傳送後,每個被點選的核取按鈕其資料值之間會以一個「,」逗號與一個空白字元隔開,我們可以利用「str_replace()」函數加以替換。
[attach]423[/attach]
  1. <html><head>
  2. <title>核取按鈕元件使用</title>
  3. </head><body>
  4. <?
  5. $myfood=$_REQUEST["food"];
  6. ?>
  7. 您的選擇(替代前):<?=$myfood?>
  8. <P>
  9. 您的選擇(替代後):<?=str_replace(",",";",$myfood)?>
  10. </body></html>
複製代碼
你騙人!我不管選取幾個項目,它就是只會出現最後一個被選取的項目,呵,您的情形是不是像圖5-28一樣ㄚ!這是PHP中的一個陷阱,像核取方塊這種元件,可以一個識別名稱記錄很多資料內容的狀況,我們用一個識別名來處理當然行不通!因此,表單的核取方塊識別名應該要把它改成陣列形式:
  1. <html><head>
  2. <title>核取按鈕元件使用</title>
  3. </head><body>
  4. <form action="checkbox_2_ans.php" method="Post">
  5. 請選擇您喜歡的水果:<Br>
  6. <Input type="Checkbox" name="food[]" value="香蕉" Checked>香蕉
  7. <Input type="Checkbox" name="food[]" value="蘋果">蘋果
  8. <Input type="Checkbox" name="food[]" value="芭樂">芭樂
  9. <Input type="Checkbox" name="food[]" value="鳳梨">鳳梨
  10. <Input type="Checkbox" name="food[]" value="西瓜">西瓜
  11. <Br>
  12. <input type="Submit">
  13. </form>
  14. </body></html>[/code
  15. ]既然核取項目已經成為陣列變數的元素,那該如何將元素列出呢?想起來了吧!就是我們已經介紹過的for迴圈ㄚ:
  16. [code]<html><head>
  17. <title>核取按鈕元件使用</title>
  18. </head><body>
  19. 您的選擇:
  20. <?
  21. $myfood=$_REQUEST["food"];
  22. $num=count($myfood);
  23. for ($x=0; $x<$num; $x++)
  24. {
  25. echo "$myfood[$x] ,";
  26. }
  27. ?>
  28. </body></html>
複製代碼
上例執行結果如下圖:
[attach]424[/attach]



使用for敘述輸出陣列元素是基本功,難就難在如何在輸出時為每個陣列元素間加入分隔符號,像圖5-29,是在每個陣列元素間加入逗號了,可是,最後一個元素後面卻多了一個逗號,這時候,我們可以利用「join()」函數來解決:
  1. <html><head>
  2. <title>核取按鈕元件使用</title>
  3. </head><body>
  4. 您的選擇:
  5. <?
  6. $myfood=$_REQUEST["food"];
  7. echo join(",",$myfood);
  8. ?>
  9. </body></html>
複製代碼
join()函數不僅可在元素間加入特定的字串,同時也將陣列中的元素一一做輸出,除了join()函數外,「implode()」函數亦有相同功能:
implode()函數格式
  1. string implode ( string glue, array pieces)
複製代碼
例如:
  1. <?
  2. $Myarray = array("春天","夏天","秋天","冬天");
  3. echo implode("<br>",$Myarray);
  4. //輸出'春天<br>夏天<br>秋天<br>冬天'
  5. ?>
複製代碼

作者: 小誌    時間: 2010-5-14 18:28

下拉式選單(Select)
下拉式選單(Select)元件具有單選按鈕的功能,亦具有核取按鈕的複選功能,下拉式選單元件由「<Select></Select>」標籤所構成,其為一個集合項目元件,選單內的每一個備選項目必須再使用「<Option></Option>」包括起來:
  1. <Select name=”識別名”>
  2. <Option Value=”資料一”>資料一</Option>
  3. <Option Value=”資料二”>資料二</Option>

  4. </Select>
複製代碼
若沒有選定預設值,則選單內的第一項資料就成為預設值,若欲顗其他項目為預設值,則可在<Option>標籤內加入「Selected」屬性設定。
[attach]425[/attach]
  1. <form action="select_ans.php" method="Post">
  2. 請選擇您專長的電腦語言:<Br>
  3. <Select name="language">
  4. <Option Value="VB">VB</Option>
  5. <Option Value="Delphi" Selected>Delphi</Option>
  6. <Option Value="C++">C++</Option>
  7. <Option Value="PHP">PHP</Option>
  8. <Option Value="Java">Java</Option>
  9. </Select>
  10. <input type="Submit">
  11. </form>
複製代碼
由於目前範例為單選式的下拉選單,所以讀取的欄位並不需要特別處理:
  1. <html><head>
  2. <title>下拉式選單元件使用</title>
  3. </head><body>
  4. <?
  5. $mylanguage=$_REQUEST["language"];
  6. ?>
  7. 您的選擇:<?=$mylanguage?>
  8. </body></html>
複製代碼
若要將下拉式選單設為多項目複選,可在<Select>標籤中加入「multiple」屬性設定;預設下拉選單只會出現一個資料項目(高度為1),要讓選單中出現多個資料項目可透過「Size」屬性加以設定,而且下拉選單元件的識別名也應該要把它改成陣列形式:
[attach]426[/attach]
  1. <form action="select_ans_2.php" method="Post">
  2. 請選擇您專長的電腦語言:<Br>
  3. <Select name="language[]" multiple Size=5>
  4. <Option Value="VB">VB</Option>
  5. <Option Value="Delphi">Delphi</Option>
  6. <Option Value="C++">C++</Option>
  7. <Option Value="PHP">PHP</Option>
  8. <Option Value="Java">Java</Option>
  9. </Select>
  10. <input type="Submit">
  11. </form>
複製代碼
當同時選取多個資料項目時,每個資料項目如同核取按鈕一般:都是陣列元素,我們可以利用for迴圈或「join()」函數、「implode()」函數來列舉項目資料:
在下列範例中分別使用「join()」函數與「implode()」函數來處理資料:
  1. <html><head>
  2. <title>下拉式選單元件使用</title>
  3. </head><body>
  4. <?
  5. $mylanguage=$_REQUEST["language"];
  6. ?>
  7. 您的選擇(implode()函數):<Br>
  8. <?
  9. echo implode(">>",$mylanguage);
  10. ?>
  11. <P>
  12. 您的選擇(join()函數):<Br>
  13. <?
  14. echo join("-->",$mylanguage);
  15. ?>
  16. </body></html>
複製代碼
[attach]427[/attach]
作者: 小誌    時間: 2010-5-14 18:30

隱藏欄位(Hidden)
隱藏欄位(Hidden)顧名思義,就是用來傳遞程式中必須用到又不希望使用者資料的資料,隱藏欄位並不會出現在表單中。
  1. <input type=”Hidden” name=”識別名” value=”資料值”>
複製代碼
同樣的,若表單使用中含有隱藏欄位,則表單資料的傳遞方式應採用「Post」,避免使用「Get」的方式傳遞表單資料時,隱藏欄位的資料附在網址後方而顯示在瀏覽器的網址列中。
[attach]428[/attach]
  1. <html><head>
  2. <title>隱藏欄位元件使用</title>
  3. </head><body>
  4. <form action="hidden_ans.php" method="Post">
  5. 您的姓名:<Br>
  6. <Input type="Text" name="Username">
  7. <Input type="Hidden" name="UserIP"
  8. Value="<?=$_SERVER["REMOTE_ADDR"]?>">
  9. <Input type="Submit">
  10. </form>
  11. </body></html>
複製代碼
隱藏欄位的資料讀取只需如單行文字欄位處理即可:
[attach]429[/attach]
  1. <html><head>
  2. <title>隱藏欄位元件使用</title>
  3. </head><body>
  4. <?
  5. $myname=$_REQUEST["Username"];
  6. $myip=$_REQUEST["UserIP"];
  7. ?>
  8. 您的姓名:<Br>
  9. <?=$myname?>
  10. <P>
  11. 您來自(隱藏欄位):<Br>
  12. <?=$myip?>
  13. </body></html>
複製代碼





歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)