2011-06-28 145 views
1

目前我正在制作一个非强制性的字段集的在线查询表。PHP:不要通过电子邮件发送表单字段

如果非强制性表单字段没有填写出来,我想使它不会在处理过的电子邮件中出现。

例如;如果有人没有输入他们的电话号码,则“电话:$ 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 = "[email protected]"; 

/*******************************************************/ 
// 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'); 

?> 

回答

1

你在正确的轨道上。最后一步是做一个字符串输入您的最终消息:(该\n字符串的结束使一个换行符)

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

然后,输出消息中的字符串。它将是空的,或不是。

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

编辑

这可以更好地为各个表单字段。不过,为了优雅,我更喜欢@mazzzzzz的解决方案。

+0

我同意我认为@mazzzzzz解决方案是非常整洁。非常感谢您的解决方案。不幸的是,我想我将不得不生成单独的表单域。 – Brandrally

+0

@Brandrally - 您可能想检查的一件事是代码中的安全性。将原始'post'数据发送到任何地方而不先过滤它通常是一个坏主意。要过滤的是一个全新的问题。 – Ben

+0

非常好的一点 – Ben

1

嗯,通过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 .= " 

================================ "; 
+0

谢谢@mazzzzz上面是一个非常好的解决方案,虽然有问题的查询表单有200多个字段,因此需要对它进行一些具体的设置。 – Brandrally

+0

意外按下返回。这样,我可以将答案聚集在标题下方,并在适当的地方添加额外的回报,以使电子邮件更容易阅读。 – Brandrally

+0

我想你可以创建另一个数组,每个位有多少个返回值,然后在每个循环中添加多少个返回值。 Tbh,与形式,这是唯一实用的解决方案 – Ben