【问题标题】:php mail form multiple checkbox items [duplicate]php邮件表单多个复选框项目[重复]
【发布时间】:2020-12-09 04:16:28
【问题描述】:

我有一个包含多个复选框的联系表单。我已将 [] 添加到名称中,但不确定在 PHP 中要做什么。如果没有 [],我只会在发送的电子邮件中显示第一个复选框项目。添加[]后,我得到了nada。

(注意:我曾尝试在 StackOverflow 中使用类似的问题,但它们并没有解决我的困境。)

这是我的代码(我已将 HTML 截断为仅显示复选框区域):

<div class="form-check">
  <input type="checkbox" class="form-check-input" name="findout[]" id="checkbox5" value="Advertisement">
  <label for="findout[]" class="form-check-label">Advertisement</label>
</div>

<div class="form-check">
  <input type="checkbox" class="form-check-input" name="findout[]" id="checkbox6" value="Yard Sign">
  <label for="findout[]" class="form-check-label">Yard Sign</label>
</div>

<div class="form-check">
  <input type="checkbox" class="form-check-input" name="findout[]" id="checkbox7" value="Search Engine">
  <label for="findout[]" class="form-check-label">Search Engine</label>
</div>
<?php
    $name = $_POST['name'];
    $email = $_POST['email'];
    $findout = $_POST['findout'];
    $method = $_POST['method'];
    $message = $_POST['message'];
    $subject = $_POST['subject'];
    header('Content-Type: application/json');
    if ($name === ''){
      print json_encode(array('message' => 'Name cannot be empty', 'code' => 0));
      exit();
    }
    if ($email === ''){
      print json_encode(array('message' => 'Email cannot be empty', 'code' => 0));
      exit();
    } else {
      if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
      print json_encode(array('message' => 'Email format invalid.', 'code' => 0));
      exit();
      }
    }
    if ($subject === ''){
      print json_encode(array('message' => 'Subject cannot be empty', 'code' => 0));
      exit();
    }
    if ($message === ''){
      print json_encode(array('message' => 'Message cannot be empty', 'code' => 0));
      exit();
    }
    
    $content="From: $name \nEmail: $email \nHow did you find out about us?: $findout \nPreferred way of contact: $method \nMessage: $message";
    $recipient = "emailaddress@domain.com";
    $mailheader = "From: $email \r\n";
    mail($recipient, $subject, $content, $mailheader) or die("Error!");
    print json_encode(array('message' => 'Email successfully sent!', 'code' => 1));
    exit();
?>

感谢任何帮助。

马哈罗! 克里斯

【问题讨论】:

    标签: php html contact-form


    【解决方案1】:

    所以人们可以选择多个复选框并且您想正确阅读它们吗? 您可以使用下面的代码

    <?php
      if(isset($_POST['findout'])){ // Check if findout had been posted
          foreach($_POST['findout'] as $checked){ // loop trough selected checkboxes
              echo $checked."</br>"; // Display selected checkboxes
          }
      }
    ?>
    

    【讨论】:

    • 尝试了您的代码(将其放在我的 php 开头)并且复选框项目 ($findout) 未显示在发送的电子邮件中。将 $findout 放在 $content 中并不起作用。将 $findout 更改为 $checked 并得到相同的结果,电子邮件中没有显示任何复选框内容。
    【解决方案2】:

    将括号添加到字段名称使其成为一个数组,因此您应该像访问数组一样访问它

    $findout = implode(", ",$_POST['findout']);
    echo $findout; // should output: Advertisement, Yard Sign, or whatever they select
    

    标签的 for 属性也应该指向字段的 id,而不是字段的名称

    <label for="checkbox7" class="form-check-label">Search Engine</label>
    

    【讨论】:

    • 试过了,但检查的项目仍然没有显示在电子邮件中。在 PHP 中,我有电子邮件内容:$content="From: $name \nEmail: $email \n你是怎么知道我们的?:$findout \n首选联系方式:$method \nMessage: $message" ;
    • 所以现在我有以下内容:
    猜你喜欢
    • 2018-09-25
    • 2012-10-06
    • 2011-11-06
    • 2015-07-23
    • 1970-01-01
    • 2015-11-09
    • 2014-10-31
    • 1970-01-01
    • 2014-01-05
    相关资源
    最近更新 更多