2010-04-17 63 views
5

我正在創建一個二手車網站(用PHP編寫),並且我堅持從窗體發送高級搜索選項。我有超過30個,我想知道是否有可能,以及如何發送它們在一個變量(例如&options=1,2,3,5,6,10或其他方式..)。發送多個複選框選項

另外我聽說這是可能的「按位」,但我不知道如何做到這一點。或者如果有人有更好的主意,請讓我知道。

謝謝。

回答

5

您可以將它們發送到一個數組中。在處理表單的腳本,通過他們

<form method="post"> 
    <input type="checkbox" name="param[color][]" value="blue" /> 
    <input type="checkbox" name="param[color][]" value="red" /> 
    <input type="checkbox" name="param[color][]" value="orange" /> 
    <input type="checkbox" name="param[color][]" value="green" /> 
    <input type="checkbox" name="param[color][]" value="black" /> 
    <input type="checkbox" name="param[year][]" value="1999" /> 
    <input type="checkbox" name="param[year][]" value="2000" /> 
    <input type="checkbox" name="param[year][]" value="2001" /> 
    <input type="checkbox" name="param[year][]" value="2002" /> 
    <input type="checkbox" name="param[year][]" value="2003" /> 
    <input type="submit" value="Submit" /> 
</form> 

>> $_POST['param']['color'] 
array('blue', 'green') 

>> $_POST['param']['year'] 
array('2001', '2004') 
+0

非常感謝,但我想發送他們使用GET不POST。 – 2010-04-17 23:59:57

+0

它以同樣的方式工作。用method =「get」替換method =「post」,用$ _GET替換$ _POST。 – 2010-04-18 00:02:11

+0

是我的不好:D。但我有一個巨大的「香腸」在URL :) – 2010-04-18 00:07:19

2

它們放置在一個陣列和循環:

<form method="post"> 
    <input type="checkbox" name="param[]" value="blue" /> 
    <input type="checkbox" name="param[]" value="red" /> 
    <input type="checkbox" name="param[]" value="orange" /> 
    <input type="checkbox" name="param[]" value="green" /> 
    <input type="checkbox" name="param[]" value="black" /> 
    <input type="submit" value="Submit" /> 
</form> 

>> $_POST['param'] 
array('blue', 'orange') 

你甚至可以使用多維數組。

<form action="yourscript.php" method="POST"> 
    <label for="option1">Option 1</label> 
    <input id="option1" type="checkbox" name="option[]" value="option1" /> 
    <label for="option2">Option 2</label> 
    <input id="option2" type="checkbox" name="option[]" value="option2" /> 
    <label for="option3">Option 3</label> 
    <input id="option3" type="checkbox" name="option[]" value="option3" /> 
    <input type="submit" name="submit" value=Submit /> 
</form> 

關鍵是將您的複選框值放入數組中。 option[]

然後在您的腳本中,您可以訪問數組並循環通過提交的選項。

if(!empty($_POST['submit']) //process the form 

    if(!empty($_POST['option']) //check to see if any checkboxes were selected 
    { 
      $options = $_POST['option']; 
      foreach($options as $option) //loop through the checkboxes 
      { 
       //do what you need to do with an option 
      } 
    } 

} 
0

您可以編寫一個腳本,通過所有領域(即複選框)迭代,收集信息到一個隱藏字段,在你提出的具體形式(1,3,5將意味着1 3和5被檢查,2和4是未選中的)。將其轉化爲位表示,會使其構造和解構更復雜。例如,在前面的例子中,你可以發送號碼10101 == 17來表示一個位置(即位置1 3 5是「開」,2和4是關閉的)。再次,不是那麼容易,也不是推薦。 [你也可以發送一個二進制表示,在這種情況下,你會發送1000 == 8 == 1 + 3 + 5 ----更復雜]

2

好吧,大家好,謝謝大家的回答。我已經想出了一個使用jQuery的解決方案。我已經從數組中的這些複選框中收集所有值,並將此數組分配給一個隱藏字段。所有這些選項都不在表格之外,它們不受限制。

的javascript:

$('.options').click(function() { 
var selectedItems = new Array(); 
$("input:checkbox[name='opt[]']:checked").each(function() {selectedItems.push($(this).val());}); 
var data = selectedItems.join('|'); 
$("#opts").val(data); 
}); 

和形式:

<form name="search" method="get" action="blabla.php"> 
..... 
<input type="hidden" name="options" id="opts" value=""/> 
.... 
</form> 

和形式之外去獲得

... 
<input type="checkbox" name="opt[]" class="options" value="1"/> 
<input type="checkbox" name="opt[]" class="options" value="2"/> 
<input type="checkbox" name="opt[]" class="options" value="3"/> 
... 
0

GET請求將產生與許多長期的,複雜的網址,所有選項具有默認行爲的選項。

POST請求可以爲您提供短網址,但可以使用「後退」按鈕表現不佳,並且不適合書籤。

要使用GET生成短網址,您需要一個將選定選項轉換爲更緊湊的中間腳本,或者需要使用JavaScript觀察所選選項並創建緊湊URL客戶端。

按位數學計算意味着將單個變量中的每個位或一組位指定給給定的選項和預定義的一組值。例如一個32位整數可以代表每4位8個屬性:

01010010010001001010101010101001 

或者:

0101 0010 0100 0100 1010 1010 1010 1001 
    #8 #7 #6 #5 #4 #3 #2 #1 

所以一個整數可以代表8個屬性,每4比特組16個可能的值。顯然這需要詳細說明,但我確定SO上的某個人已經提出了這個問題,而我現在不打算再打字了。 :)