麻辣家族討論版版's Archiver

小誌 發表於 2010-5-14 18:25

(PHP+IIS+MsSQL教學第18篇) 表單欄位資料使用 下篇

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


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



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

小誌 發表於 2010-5-14 18:28

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

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

小誌 發表於 2010-5-14 18:30

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

頁: [1]

麻辣家族討論版版為 麻辣學園 網站成員  由 昱得資訊工作室 © Since 1993 所提供