【问题标题】:PHP: Do not email form fields that are left blankPHP:不要通过电子邮件发送留空的表单字段
【发布时间】:2011-06-28 05:52:44
【问题描述】:

目前我正在制作一个在线查询表格,其中包含一组非必填字段。

如果未填写非必填表单字段,我希望它不会出现在已处理的电子邮件中。

例如;如果有人不输入他们的电话号码,则“电话:$atelephone”组件不会通过。

if ($atelephone != '') { 
echo "Telephone: ".$atelephone;  
}

我认为代码中应该包含与上面类似的内容,尽管我正在努力连接这些点。任何帮助将不胜感激。 (我希望这是有道理的)。

<?php 

// Base form items

$asender = $HTTP_POST_VARS['name'] ." <". $HTTP_POST_VARS['email'] .">";
$asubject = "Email Enquiry: ".$HTTP_POST_VARS['subject'];
$arecipient = "recipient@websiteaddress.com.au";

/*******************************************************/
// Mail form variables //

$aname = $HTTP_POST_VARS['name'];
$aemail = $HTTP_POST_VARS['email'];
$atelephone = $HTTP_POST_VARS['telephone'];
$asuburb = $HTTP_POST_VARS['suburb'];
$aenquiry = $HTTP_POST_VARS['enquiry'];

mail("$arecipient","$asubject", 
"
===========================================
Please note: this is an email 
generated from the Website.
=========================================== 

Name: $aname
Email: $aemail
Telephone: $atelephone
Suburb: $asuburb

Message:
$aenquiry 

================================ ","FROM:$asender"); 

header('Location: /thank-you.php');

?>

【问题讨论】:

    标签: php forms email


    【解决方案1】:

    你在正确的轨道上。最后一步是在您的最终消息中输入一个字符串:

    $_POST['telephone'] ?  
      $telephoneString = "Telephone: ".$_POST['telephone'] ."\n" : 
      $telephoneString = "";
    

    (字符串末尾的\n 换行。)

    然后,输出消息中的字符串。它是否为空。

      "foo bar baz
      ===========================================".
      $nameString.
      $emailString.
      $telephoneString.
      $suburbString;
    

    编辑

    这可能对单个表单域更有效。然而,为了优雅,我更喜欢@mazzzzzz 的解决方案。

    【讨论】:

    • 我同意我认为@mazzzzzz 解决方案非常简洁。非常感谢您的解决方案。不幸的是,我认为我将不得不生成单独的表单字段。
    • @Brandrally - 您可能要检查的一件事是代码的安全性。在不先过滤的情况下将原始post 数据发送到任何地方通常是一个坏主意。过滤什么是一个全新的问题。
    【解决方案2】:

    嗯,循环POST数组,如果字段为空,就不要加了..

    类似:

    $acceptedInputs = array('name', 'email', etc.);
    $spacesBA = array('message'=>array(1,2)); //Spaces before/after, first is before, second is after.  Default is none.
    
    $emailBits = array();
    
    foreach ($_POST as $name=>$value)
    {
        if (!in_array($name, $acceptedInputs)) //Don't want them to submit unknown fields
            continue;
        if (!empty($value))
            $emailBits[] = 
    str_repeat("\n",(isset($spacesBA[$name][0])?$spacesBA[$name][0]:0) /* Add before lines */
     . $name . ' : ' . $value . 
    str_repeat("\n",(isset($spacesBA[$name][1])?$spacesBA[$name][1]:0)); /*Add after lines */
    }
    $emailBody = "
    ===========================================
    Please note: this is an email 
    generated from the Website.
    =========================================== 
    ";
    $emailBody .= implode("\n",$emailBits);
    $emailBody .= "
    
    ================================ ";
    

    【讨论】:

    • 谢谢@mazzzzz 以上是一个非常好的解决方案,虽然有问题的查询表单有200多个字段,所以需要稍微具体地设置它的样式。
    • 意外按下返回。这样我就可以将答案集中在一个标题下,并在适当的地方放置额外的回报,以使电子邮件更易于阅读。
    • 我猜你可以创建另一个数组,每个位返回多少个,然后在每个循环中添加那么多。 Tbh,在那边有表格,这是唯一可行的解​​决方案
    猜你喜欢
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 2014-02-12
    • 2014-05-25
    • 2013-09-30
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    相关资源
    最近更新 更多