2015-11-02 56 views
0

寻找无处不在,但找不到解决方案。每个人都在谈论一组像这样:如何在php表单处理器中获得多组复选框值?

<input type="checkbox" value="red" name="colors[]"> red<br /> 
<input type="checkbox" value="purple" name="colors[]"> purple<br> 
<input type="checkbox" value="blue" name="colors[]"> blue<br> 
<input type="checkbox" value="black" name="colors[]"> black<br> 

,但我需要做多个组在一个单一的形式是这样的:

<input type="checkbox" value="red" name="colors[]"> red<br /> 
<input type="checkbox" value="purple" name="colors[]"> purple<br> 
<input type="checkbox" value="blue" name="colors[]"> blue<br> 
<input type="checkbox" value="black" name="colors[]"> black<br> 
<input type="checkbox" value="sm" name="sizes[]"> small<br /> 
<input type="checkbox" value="med" name="sizes[]"> medium<br> 
<input type="checkbox" value="lrg" name="sizes[]"> large<br> 
<input type="checkbox" value="xlrg" name="sizes[]"> x-large<br> 

,并在此之上的形式是动态的。名称是可变的和未知的,所以在PHP后代码中,它不能是$ _POST ['colors']。

我有这样的片段,可以抓住所有未知的名字,并建立一个消息后插入到邮件脚本电子邮件提交的表单值:

foreach ($_POST as $field=>$value) { 
    if ($field != "submit") $msg .= $field . ": " . $value . "\n"; 
} 

但正如你可能知道,当它到达一组复选框,它表示值是“数组”,因此不仅需要将数组拆分或分解为复选框的多个值,还需要为多组复选框执行此操作。

因此,例如,这可能是味精是一种特定形式是什么$:

first_name: first 
last_name: last 
email_address: [email protected] 
phone: 1234567890 
variable_radio_name: answer 
variable_selectbox_name: answer 
colors_from_checkbox_group_one: red,blue 
sizes_from_checkbox_group_two: med,lrg 
variable_textarea_name: blah blah blah 

文本框,文本域,收音机,下拉框都容易,因为它是一个答案了一块,但这些复选框是疼痛。

编辑

这样做是这样的:

if ($field != "submit") $msg .= $field . ": " . is_array($value) ? implode(',', $value) . "\n" ? $value . "\n"; 

像这样:

if ($field != "submit") { 
    $msg .= $field . ": " . is_array($value) ? implode(',', $value) . "\n" ? $value . "\n"; 
} 

语法错误两种方式。

+0

见编辑的问题。 – leoarce

回答

1

您的语法错误是使用?两次而不是:作为三元发送部分。另外,你需要括号正确使级联工作:

$msg .= $field . " : " . (is_array($value) ? implode(',', $value) . "\n" : $value . "\n"); 

这可能是更具可读性:

if ($field != "submit") { 
    if(is_array($value)) { 
     $msg[] = "$field : " . implode(',', $value); 
    } else { 
     $msg[] = "$field : $value"; 
    } 
} 
$msg = implode("\n", $msg); 
+0

抱歉。我受到了追踪。是的,这很好。我很感激。 – leoarce