2011-06-28 11 views
1

現在、私は必須ではないフィールドのセットを持つオンライン照会フォームを作成しています。PHP:空白になっているフォームフィールドを電子メールで送信しないでください。

必須ではないフォームフィールドが記入されていない場合は、処理された電子メールに入力されないようにしたいと考えています。

たとえば、誰かが電話番号を入力しなかった場合、「Telephone:$ 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

。最後のステップは、あなたの最後のメッセージに入力する文字列を作るです:

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

(文字列の末尾の\nは改行になります。)

その後、メッセージで出力文字列を。それは空でもなくてもかまいません。

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

編集

これは、個々のフォームフィールドのためのより良い動作する可能性があります。しかし、エレガンスのために、私は@ mazzzzzzの解決策を好む。

+0

私は@mazzzzzzソリューションが本当にきれいだと思います。あなたのソリューションをありがとうございました。残念ながら、個々のフォームフィールドを生成する必要があると思います。 – Brandrally

+0

@Brandrally - チェックしたいことの1つは、コード内のセキュリティです。生の '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

私はあなたが別の配列を作ることができると思います。その側では、これは唯一の実用的な解決策です。 – Ben

関連する問題