【问题标题】:Emailing form checkbox values with PHP使用 PHP 通过电子邮件发送表单复选框值
【发布时间】:2012-01-19 12:44:41
【问题描述】:

我查看并发现了几个类似的问题,但似乎无法使解决方案适合我。如果有人能指出我所缺少的,那就太好了。

基本上,我有一个表单和 PHP,用于检查字段是否已填写,然后对其进行验证。然后我给他们发电子邮件。我一切正常,除了它只通过电子邮件发送最后检查的值,而不是全部。我相信我的问题是当我将数组添加到电子邮件正文时。这是我的那部分代码:

if (function_exists('htmlspecialchars_decode')) $message[2] = htmlspecialchars_decode($message[2], ENT_QUOTES);     

$body = "$name[0]: $name[2]\r\n\r\n";
$body .= "$email[0]: $email[2]\r\n\r\n";
$body .= "$phone[0]: $phone[2]\r\n\r\n";
$body .= "$service: $service\n";
$body .= "$message[0]:\r\n$message[2]\r\n";

if (!$from) $from_value = $email[2];
else $from_value = $from;

require_once('formfiles2/class.phpmailer.php');

$mail = new PHPMailer();

$mail->SetFrom($from_value);  
$mail->AddReplyTo($email[2]);
$mail->Subject = "$subject";
$mail->Body = $body;
$mail->AddAddress($to);

if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
}

我也试过这个:

$body .= "Service" .(is_array($_REQUEST['service']) ? implode("\n",$_REQUEST['service']) : $_REQUEST['service']);

这是表格的那部分:

<form method="post" class="cForm" action="#cform"> 

.....

<tr>
<td>
<input type="checkbox" name="service" value="sweeping" /> Sweeping<br />
<input type="checkbox" name="service" value="litter" /> Litter Maintenance<br /> 
<input type="checkbox" name="service" value="snow" /> Snow Removal<br />
<input type="checkbox" name="service" value="wash" /> Power Washing<br /> 
</td>
<td>
<input type="checkbox" name="service" value="striping" /> Parking Lot Re-Striping<br />
<input type="checkbox" name="service" value="concrete" /> Asphalt/Concrete Work<br /> 
<input type="checkbox" name="service" value="lawn" /> Lawn Care<br />
</td>
<tr>

....

</form>

所以,我想我只是在将数组添加到正文的语法中遗漏了一些东西。让我知道!提前感谢您的帮助!

【问题讨论】:

标签: php arrays forms checkbox


【解决方案1】:

您不能有多个具有相同名称的复选框。这将像选择选项一样。多个检查值只会相互覆盖。

您应该将您的条目调整为:

<input type="checkbox" name="service[stripping]" value="striping" /> Parking Lot Re-Striping<br />
<input type="checkbox" name="service[concrete]" value="concrete" /> Asphalt/Concrete Work<br /> 
<input type="checkbox" name="service[lawn]" value="lawn" /> Lawn Care<br />

(不需要是关联的。一个简单的services[] 已经可以了。只是看起来更好更明确。)

然后将传入的数组组合成一个文本列表:

$service = join(", ", $_REQUEST["service"]);

【讨论】:

  • 太棒了,谢谢!我非常努力地查看我的 php,以至于我完全忽略了这一点。
【解决方案2】:

将复选框名称更改为数组,例如

<input type="checkbox" name="service[]" value="sweeping" /> Sweeping

【讨论】:

    【解决方案3】:

    如果输入类型的名称相同,则必须将名称添加到数组中,例如name="service[]"

    【讨论】:

      【解决方案4】:

      或将您的复选框命名为不带索引的数组:service[]

      那么你可以

      if (isset($_POST['service'])) {
          foreach ($_POST['service'] as $key => $val) {
              // do what you need
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-05
        相关资源
        最近更新 更多