茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1671176 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_60D_00036.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

PHP特區 : [轉貼] HTML 表單(Form)以陣列(Array)方式傳遞

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼] HTML 表單(Form)以陣列(Array)方式傳遞
[程式][PHP] HTML 表單(Form)以陣列(Array)方式傳遞

什麼時候會用到這樣的方法,我無法明確表達,可能要靠你自己想像。

我遇到的狀況是要讓user不斷的新增商品與價格。

第一種做法:
<form method="post" action="process.php" >
   <input type="text" name="good1" value="1"/><BR/>
   <input type="text" name="price1" value="V1"/><BR/>
   <input type="text" name="good2" value="2"/><BR/>
   <input type="text" name="price2" value="V2"/><BR/>
   <input type="text" name="good3" value="3"/><BR/>
   <input type="text" name="price3" value="V3"/><BR/>
   <input type="text" name="good4" value="4"/><BR/>
   <input type="text" name="price4" value="V4"/><BR/>
   <input type="submit" value="submit"/>
</form>

之後要新增就透過javascript 去控制,可是還要去count 多少元素前面的名子都相同,現在排到第幾個了。如果移除的話,就更麻煩。要整個從新排序,如果不排序的話。後面的程式要接收會很麻煩。

後來查一查之後。發現PHP有個特性,我不知到其他ASP或是其他語法的接收是否也有一樣的特性。

當你把表單(From)當中的input屬性name設定為good[]的方式,如果你有三個五個或是更多,他在PHP的地方就會自動轉成陣列方式接收。下方舉個例子。

HTML這樣寫,這樣的方式就算移除當中任一個商品及價格,並不會影響,也不需要從新排序。
<form method="post" action="process.php" >
   <input type="text" name="good[]" value="1"/><BR/>
   <input type="text" name="price[]" value="V1"/><BR/>
   <input type="text" name="good[]" value="2"/><BR/>
   <input type="text" name="price[]" value="V2"/><BR/>
   <input type="text" name="good[]" value="3"/><BR/>
   <input type="text" name="price[]" value="V3"/><BR/>
   <input type="text" name="good[]" value="4"/><BR/>
   <input type="text" name="price[]" value="V4"/><BR/>
   <input type="submit" value="submit"/>
</form>

後端PHP編寫接收之後,他會轉換成陣列的方式。

後面用print_r顯示。
print_r($_POST["PRD"]);
print_r($_POST["price"]);

顯示的結果
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
Array ( [0] => V1 [1] => V2 [2] => [3] => V4 )

當然也可以用二維或是三維的方式。

這樣的優點是可以直接知道到底有多少商品,不需要用估算,也不會導致後面回圈的空跑。

至於如果你是用PHP CURL 方式的話:
// 設定擷取的URL網址
curl_setopt($ch, CURLOPT_URL, "http://test.com.tw");
curl_setopt($ch, CURLOPT_HEADER, false);

//將curl_exec()獲取的訊息以文件流的形式返回,而不是直接輸出。
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

//設定要傳的 變數A=值A & 變數B=值B (中間要用&符號串接)
$PostData = "good[]=1&price[]=100&good[]=2&price[]=102&good[]=3&price[]=101";

//設定CURLOPT_POST 為 1或true,表示要用POST方式傳遞
curl_setopt($ch, CURLOPT_POST, 1);
//CURLOPT_POSTFIELDS 後面則是要傳接的POST資料。
curl_setopt($ch, CURLOPT_POSTFIELDS, $PostData);

// 執行
$temp=curl_exec($ch);
echo $temp;
// 關閉CURL連線
curl_close($ch)

上述的那一串紅色的,一樣宣告good[],不給參數,他就會自動由0開始配給!

如果要個別抓取值的話,就是good[0],good[1]依此類推。

需要相關的文章可以參考:
[程式][PHP] 如何使用PHP CURL,基礎教學。

原文出處:[程式][PHP] HTML 表單(Form)以陣列(Array)方式傳遞<input type='text'>資訊。 @ 四處流浪的阿基。I am Vagrant Walker :: 痞客邦 PIXNET ::
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]利用表單傳遞多維陣列
2009-03-27[PHP] 利用表單傳遞多維陣列
有時候在表單傳遞上會需要具有結構性的變數傳遞,在後端的資料處理上會比較方便,不會在變數名稱上的處理花時間,PHP 有提供可以處理多維陣列的傳遞方式,在多維陣列處理上必須要有 inedx 名稱,如果只要傳遞一維無序陣列就不用設定 inedx 名稱,只需要將 name="data[]"就可以了。

表單的命名方式:
<formaction=""method="post">
<ul>
<li>
 <inputtype="checkbox"name="data[0][is]"value="1"/>
 <inputtype="text"name="data[0][value]"value="1"/>
 <selectname="data[0][unit]">
   <optionvalue="km">公里</option>
   <optionvalue="m">公尺</option>
   <optionvalue="cm">公分</option>
 </select>
</li>
<li>
 <inputtype="checkbox"name="data[1][is]"value="1"/>
 <inputtype="text"name="data[1][value]"value="1"/>
 <selectname="data[1][unit]">
   <optionvalue="km">公里</option>
   <optionvalue="m">公尺</option>
   <optionvalue="cm">公分</option>
 </select>
</li>
<li>
 <inputtype="checkbox"name="data[2][is]"value="1"/>
 <inputtype="text"name="data[2][value]"value="1"/>
 <selectname="data[2][unit]">
   <optionvalue="km">公里</option>
   <optionvalue="m">公尺</option>
   <optionvalue="cm">公分</option>
 </select>
</li>
</ul>
 <inputtype="submit"/>
</form>


PHP 的接收格式:
<?php
print_r($_POST['data']);
/*
Array
(
 [0] => Array
 (
   [is] => 1
   [value] => 1
   [unit] => km
 )

 [1] => Array
 (
   [is] => 1
   [value] => 1
   [unit] => m
 )

 [2] => Array
 (
   [is] => 1
   [value] => 1
   [unit] => cm
 )
)
*/
?>


原文出處:Jax 的工作紀錄: [PHP] 利用表單傳遞多維陣列
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|