【问题标题】:How to I get multiple groups of checkbox values in php form processor?如何在 php 表单处理器中获取多组复选框值?
【发布时间】:2015-11-02 22:42:54
【问题描述】:

四处寻找,但找不到解决方案。每个人都这样谈论一个群体:

<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']。

我有这个 sn-p,它可以抓取所有未知名称并构建一条消息,以便稍后插入到电子邮件脚本中,以通过电子邮件发送提交表单的值:

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

但您可能知道,当它到达一组复选框时,它表示值是“数组”,因此它不仅需要将数组拆分或内爆为复选框的多个值,然后还需要这样做用于多组复选框。

例如,这可能是 $msg 在特定表单上的内容:

first_name: first
last_name: last
email_address: email@email.com
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";
}

双向语法错误。

【问题讨论】:

  • 查看已编辑的问题。

标签: php forms post


【解决方案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);

【讨论】:

  • 对此感到抱歉。我跑偏了。是的,这很好用。我很感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-24
  • 2012-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多