2012-12-15 33 views
0

我有一個使用PHP構建的聯繫表單,並且我有一個無線電選項框(單擊)並將其更改爲組複選框,這意味着可以單擊多個框。聯繫人表單組複選框數組

然而,只有最後一個最點擊通過我的電子郵件,並與代碼玩派已經搞砸了我,我不是很清楚與PHP陣列碼和多個(({{

這裏是HTML代碼

<label><input type="checkbox" name="addon" value="NONE" <?php if (isset($_POST['addon']) && $_POST['addon'] == 'NONE') echo 'checked="checked"'; ?> tabindex="4" /> None <br /></label> 
    <label><input type="checkbox" name="addon" value="HKG" <?php if (isset($_POST['addon']) && $_POST['addon'] == 'HKG') echo 'checked="checked"'; ?> tabindex="5" /> Hong Kong <br /></label> 
    .... 
    <label><input type="checkbox" name="addon" value="Other Start City" <?php if (isset($_POST['trip']) && $_POST['addon'] == 'Other Start City') echo 'checked="checked"'; ?> tabindex="4" /> Other</label> 

這裏是PHP代碼中,我目前所面對的,但這只是給了一個答案。

$Indhold .= "Tour Extension: ".$_POST['addon']."\n"; 

我試圖將其更改爲一個數組(因爲我也跟着教程http://www.html-form-guide.com/php-form/php-form-checkbox.html),但是隻有數組被打印在電子郵件中。

如果可能的話,我還希望在該組合框中包含驗證。所以他們不能選擇NONE和HKG,並且必須至少點擊一個。

+1

' name =「addon」'應該是'name =「addon []」' –

回答

1

如果名稱以[](或[index])結尾,PHP只會使用數組填充$_POST/GET

使用name="addon[]"

數組不是字符串,所以你不能只是將它們連接起來。您可以使用implode將數組的成員轉換爲單個字符串。您也可以使用for循環來逐一處理它們。

+0

因此,我嘗試了$ Indhold。=「Tour Extension:」。$ _ POST ['addon []']。「\ n」;和但它也行不通,只是打印'數組' – yesmaybe

+0

@yesmaybe - 請參閱答案的最後一段。 – Quentin

+0

@yesmaybe - 當您回聲'$ _POST [「addon」]'時,您將獲得'Array'。你需要使用'foreach'來建立一個字符串。 –

0

你只需要處理$_POST['addon']array

// make sure at least one checkbox is checked 
if (isset($_POST['addon'])) 
{ 
    foreach ($_POST['addon'] as $k => $v) 
    { 
     $Indhold .= "Tour Extension: {$v}\n"; 
    } 
} 

或(命名您的複選框"addon[]"後)作爲一種替代方案:

// make sure at least one checkbox is checked 
    if (isset($_POST['addon'])) 
    { 
     $indhold .= 'Tour Extension: ' . implode(', ', $_POST['addon']) . "\n"; 
    } 
+0

所以我改變了HTML如下: 但將下面的代碼放在頂部的php代碼中並沒有改變任何東西。事實上,它根本不會顯示在電子郵件上,我一定在做錯事。對不起,有點厚。 如果(isset($ _ POST [ '插件'])) { 的foreach($ _POST [ '插件']爲$ K => $ v)的 { $ Indhold =「遊擴展:{$ V} \ n「; } } – yesmaybe

0

如果形式有多個輸入元素一個名稱(i.e. not followed by '[]')只能從提交的表單中檢索所有這些元素中的最新元素。因此,如果您在一個組中檢查多個複選框(i.e. the checkboxes having a single name which is not in the format 'name[]'但簡單'name'),則可以從表單提交中獲取上次選中的複選框值,因爲sigle組中的所有先前檢查的值都會被覆蓋。因此,您需要使用數組作爲組名來獲取所有選中的複選框值。

因此請務必使用以下語法如果你在一個組有不止一個複選框

<input type=checkbox name="check1[]" value="v1">v1 
<input type=checkbox name="check1[]" value="v2">v2 
<input type=checkbox name="check1[]" value="v3">v3 
<input type=checkbox name="check1[]" value="v4">v4 

但在單個複選框的情況下使用以下命令:

<input type=checkbox name="check2" value="v1">v1 //No need to append square bracket at the end of the assigned name.