Board logo

標題: 5-6-5 核取按鈕(Checkbox) [打印本頁]

作者: 小誌    時間: 2011-4-19 10:04     標題: 5-6-5 核取按鈕(Checkbox)

5-6-5   核取按鈕(Checkbox)
核取按鈕(Checkbox)適用於多備選案答案且多正確答案選取的場合,如同複選的選擇題,例如興趣、嗜好…等:
  1. <input type=”Checkbox” name=”識別名” value=”資料值”>
複製代碼
與單選按鈕相同的是使用者只需點選答案,不需要填寫資料,所以必須為每一個核取按鈕建立不同的資料值,而且為了讓多個核取按鈕成為複選的群組,故同群組內的核取按鈕其「name」屬性值必須為相同的「識別名」。
checkbox.php
  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]5532[/attach]
圖5-27  核取按鈕範例checkbox.php。
作者: 小誌    時間: 2011-4-19 10:05

當同時點選多個核取按鈕後,因為每個核取按鈕的名稱都相同,因此,當資料傳送後,每個被點選的核取按鈕其資料值之間會以一個「,」逗號與一個空白字元隔開,我們可以利用「str_replace()」函數加以替換。
[attach]5533[/attach]
圖5-28  核取按鈕範例checkbox_ans.php。
checkbox_ans.php
  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>
複製代碼

作者: 小誌    時間: 2011-4-19 10:06

你騙人!我不管選取幾個項目,它就是只會出現最後一個被選取的項目,呵,您的情形是不是像圖5-28一樣ㄚ!這是PHP中的一個陷阱,像核取方塊這種元件,可以一個識別名稱記錄很多資料內容的狀況,我們用一個識別名來處理當然行不通!因此,表單的核取方塊識別名應該要把它改成陣列形式:
checkbox_2.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>
複製代碼
既然核取項目已經成為陣列變數的元素,那該如何將元素列出呢?想起來了吧!就是我們已經介紹過的for迴圈ㄚ:
checkbox_2_ans.php
  1. <html><head>
  2. <title>核取按鈕元件使用</title>
  3. </head><body>
  4. 您的選擇:
  5. <?
  6. $myfood=$_REQUEST["food"];
  7. $num=count($myfood);
  8. for ($x=0; $x<$num; $x++)
  9. {
  10. echo "$myfood[$x] ,";
  11. }
  12. ?>
  13. </body></html>
複製代碼

作者: 小誌    時間: 2011-4-19 10:07

使用for敘述輸出陣列元素是基本功,難就難在如何在輸出時為每個陣列元素間加入分隔符號,像圖5-29,是在每個陣列元素間加入逗號了,可是,最後一個元素後面卻多了一個逗號,這時候,我們可以利用「join()」函數來解決:
checkbox_3_ans.php
  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)
複製代碼
例如:範例ex5_15.php
  1. <?
  2. $Myarray = array("春天","夏天","秋天","冬天");
  3. echo implode("<br>",$Myarray);
  4. //輸出'春天<br>夏天<br>秋天<br>冬天'
  5. ?>
複製代碼

作者: carlkyo    時間: 2012-10-27 10:19

學長,我這個FUNCTION可以寫得再好點嗎
謝謝
  1. function showgroup(){
  2. $sql = 'SELECT * FROM `group` LIMIT 20';
  3. $result = mysql_query($sql);
  4. while ($row = mysql_fetch_assoc($result))
  5.             {
  6.                        
  7. echo $row['groupname']."'<input type='checkbox' name='perm[]' value='".$row['groupid']."'/>";
  8. }
  9. }
複製代碼





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