PHP帖子复选框帮助

时间:2010-07-08 17:31:06

标签: php html arrays post

我无法接收在复选框字段中检查的项目列表,这些复选框是表单的一部分。

我有一个带有几个复选框的HTML表格:

HTML

 <input type="checkbox" name="carry[]" value="1" />
 <input type="checkbox" name="carry[]" value="2" />
 <input type="checkbox" name="carry[]" value="3" />

PHP - 这就是我用来将表单发布到电子邮件地址

foreach($_POST as $key => $val) {

$body .= $key . " : " . $val . "\r\n";

我在电子邮件中获取的值为:“carry:Array” - 而不是所选的实际值。如何处理在表单中选择的复选框数组并将其发布?

理想情况下,我想要:“随身携带:1; 2; 3”(不带引号)

3 个答案:

答案 0 :(得分:2)

如果你想要字符串'1; 2; 3',你应该将数组中的项连接在一起:

$carry= implode('; ', $_POST['carry']);

但是,如果数组中的任何项本身都带有分号,那么这样做会自然导致模糊的结果。

迭代post数组,允许其任何成员为数组:

foreach($_POST as $key=>$val) {
    if (is_array($val))
        $val= implode('; ', $val);
    $body.= "$key: $val\r\n";
}

或者,如果您不需要对确切的格式进行如此多的控制,并且调试转储很好(但您需要查看的不仅仅是无用的字符串'Array'

$body= var_export($_POST, TRUE);

答案 1 :(得分:2)

您可以检查该值是否为数组并以不同方式处理:

foreach($_POST as $key => $val) {
  if (is_array($val)) {
    $body .=  $key . " : " . implode(",",$val) . "\r\n";
  } else {
   $body .= $key . " : " . $val . "\r\n";
  }
}

答案 2 :(得分:1)

它是打印进位:数组,因为它正是它的本质。你需要遍历它(第一个内部的另一个循环)来访问里面的值:

foreach($_POST as $key => $val) {
    if($key == 'carry') {
        foreach($val as $carry) {
            $body .= $carry;
        }
    }
    else {
        $body .= $key . " : " . $val . "\r\n";
    }
}

那是完全未经测试的,但希望逻辑是合理的:)