带有复选框的联系表格几乎正常工作


Contact form with check boxes almost working

我在显示联系人表单中选择的正确答案/值时遇到问题。收到的电子邮件只会显示C作为答案,而不会显示选择的选项。

<tr>
      <td><label for="gategory">Lemosine</label></td>
      <td><input type="checkbox" name="carchoice[]" value="A" /><td>
  </tr>
  <tr>
      <td><label for="gategory">Mini</label></td>
      <td><input type="checkbox" name="carchoice[]" value="B" /></td>
  </tr>
  <tr>
      <td><label for="gategory">Van</label></td>
      <td><input type="checkbox" name="carchoice[]" value="C" /></td>
  </tr>
  <tr>    
      <td><label for="gategory">Off-Road</label></td>
      <td><input type="checkbox" name="carchoice[]" value="D" /></td>
  </tr>
  <tr>
      <td><label for="gategory">Station-car</label></td>
      <td><input type="checkbox" name="carchoice[]" value="E" /></td>
  </tr>

和PHP代码

$check_box_values = "Check box value: ";
  if(isset($_POST['carchoice'])){
    foreach($_POST['carchoice'] as $value){
    $check_box_values .= $value;
    $check_box_values .= ', ';
  }
}

$msg=
  'Name:    '.$_POST['name'].'<br />
  Email:    '.$_POST['email'].'<br />
  IP:   '.$_SERVER['REMOTE_ADDR'].'<br /><br />
  IP:   '.$check_box_values['carchoice[]'].'<br /><br />
  Message:<br /><br />
  '.nl2br($_POST['message']).'
';

这是我在电子邮件中得到的

Name:   awdawd aw
Email:  adasda@live.dk
IP:         195.249.185.254
IP:         C
Message:
awdawdawdd awd awdawd awd awd

不明白我在这里出了什么问题吗?

复选框的值设置为"C",因此将提取C,因为每次尝试都有标签,并在复选框值中给出标签名称。

如注释中所述,您试图访问$check_box_values的属性,就好像它是一个数组一样,而实际上它是一条字符串。因此,PHP将返回方括号之间指定位置的字符,因为这也是一个字符串,它试图将其强制转换为整数,结果为0(所以它基本上返回$check_box_values中位置0的字符,即C)。

读取:按字符访问和修改字符串

此外,您不需要循环来构建值的字符串,您可以使用implode():

if (isset($_POST['carchoice'])) {
    $val = implode(', ', $_POST['carchoice']);
    $check_box_values = "Check box value(s): " . $val;
}