2012-12-15 3 views
0

У меня есть контактная форма, построенная с PHP, и у меня была опция радио (один клик), и я изменил ее на группу, что означает, что можно щелкнуть несколько ящиков.контактная группа группы checkbox массив

Однако только последний самый щелчок отправляется через на мою электронную почту и играть с кодом испортил меня, я не очень понятно, с кодом 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

PHP заполняет только $_POST/GET массивами, если имя заканчивается на [] (или [index]).

Использование name="addon[]"

Массивы не являются строками, так что вы не можете просто объединить их. Вы можете использовать implode для преобразования элементов массива в одну строку. Вы также можете использовать цикл for, чтобы иметь дело с ними по одному.

+0

Итак, я пробовал $ Indhold. =" Расширение маршрута: ". $ _ POST ['addon []']." \ n "; и , но он также не работает, просто печатает 'array' – yesmaybe

+0

@yesmaybe - См. последний параграф ответа. – Quentin

+0

@yesmaybe - вы получите 'Array', когда вы будете эхом' $ _POST ["addon"] '. Вам нужно использовать 'foreach' для построения строки. –

0

Вам просто нужно обрабатывать $_POST['addon'] как array (после именования флажков "addon[]")

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

Или как альтернатива:

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

Итак, я изменил HTML следующим образом: Но, помещая приведенный ниже код в php-код в верхней части ничего не меняет. На самом деле он вообще не отображается в письме, я должен что-то делать неправильно. Извините за то, что вы немного толсто. если (Исеть ($ _ POST [ 'аддон'])) { Еогеасп ($ _POST [ 'аддон'], как $ к => $ v) { $ Indhold = «Tour Extension:. {$ V} \ п "; } } – yesmaybe

0

Если в форме есть несколько входных элементы с одно имя (i.e. not followed by '[]'), только последний из всех этих элементов можно получить из представленной формы. Поэтому, если вы проверите еще один флажок в одной группе (i.e. the checkboxes having a single name which is not in the format 'name[]', но просто 'name'), вы можете получить последнее установленное значение флажка из формы submit, потому что все ранее проверенные значения в группе 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. 

 Смежные вопросы

  • Нет связанных вопросов^_^