2010-06-28 106 views
0

新手問題,在這裏:如何在這個PHP文件中添加一個簡單的IF語句?

我有一個簡單的表單,返回一個人的姓名,公司和地址等等。

現在,它們分別返回。如果「公司」字段中沒有條目,則發送的電子郵件中有空白行。

我想編一個IF語句,這樣如果「公司」字段中沒有條目,該「地址」將在沒有額外空間的情況下在「名稱」之後返回,但將包括「公司「信息,如果該字段是填充。

PHP代碼的相關部分看起來是這樣的:

$name = $_POST['name']; 
$company = $_POST['company']; 
$address = $_POST['address']; 
$city = $_POST['city']; 
$state = $_POST['state']; 
$zip = $_POST['zip']; 
$email = $_POST['email']; 
$optin = $_POST['optin']; 
$comments = ($_POST['comments']); 



$body = <<<EOD 

Please send samples to: 

$name 
$company 
$address 
$city, $state $zip 

Email: $email 

Opt-In to occasional email list?: $optin 

Comments: $comments 

EOD; 
$headers = "From: $email\r\n"; 
$success = mail($webMaster, $emailSubject, $body, 
$headers); 

,我將非常感謝您的幫助!

回答

0

我編輯此使用的\n代替<br />

$optin = $_POST['optin']; 
$comments = ($_POST['comments']); 



$body = "Please send samples to:"; 
if($_POST['name'] != '') $body .= "\n".$_POST['name']; 
if($_POST['company'] != '') $body .= "\n".$_POST['company']; 
if($_POST['address'] != '') $body .= "\n".$_POST['address']; 
if($_POST['city'] != '') $body .= "\n".$_POST['city']; 
if($_POST['state'] != '') $body .= ", ".$_POST['state']; 
if($_POST['zip'] != '') $body .= " ".$_POST['zip']; 
if($_POST['email'] != '') $body .= "\n\nEmail: ".$_POST['email']; 
$body .= "Opt-In to occasional email list?: $optin"; 
$body .= "\n\nComments: $comments"; 


$headers = "From: $email\r\n"; 
$success = mail($webMaster, $emailSubject, $body, 
$headers); 
+0

你要使用「\ n」 S代替「
」s:他的腳本使用回車符而不是HTML linebreaks – Mala 2010-06-28 03:36:00

+0

他似乎並不想HTML斷點。 – middus 2010-06-28 03:36:05

+0

「\ n」聽起來很棒!我有HTML,但今天早些時候被討論過。謝謝! – JustBobF 2010-06-28 03:46:50

0
這個

什麼?

$name = $_POST['name']; 
//... 

if(empty($company)){ 
    $nameAndCompany = $name; 
}else{ 
    $nameAndCompany = $name."\n".$company; 
} 
// or using the ternary operator, because it's a rather simple if 
$nameAndCompany = (empty($company))?$name:$name."\n".$company; 
$body = <<<EOD 
... 

$nameAndCompany 
$address 
$city, $state $zip 
... 

\ n在雙引號中表示換行符。有關ternary operator的更多信息,請參閱php.net文檔。

+0

這看起來不錯。試試他們吧,非常感謝你! – JustBobF 2010-06-28 03:47:42

+0

array_filter技巧仍然是最乾淨的解決方案(沒有IF ...) – 2010-06-28 03:50:49

+0

我很高興我可以提供幫助。 @Yanick:爲什麼「IF」不乾淨? – middus 2010-07-13 14:25:53

0

您正在PHP腳本中使用heredoc語法。你不能在那裏使用IF語句。但是你可以使用其他方法:

  • 閉上你的PHP代碼,並在代碼中使用< = $ VAR>
  • 使用的模板,並用了preg_replace()代替關鍵字等
  • 把所有?你的字符串到一個數組和使用破滅(「\ n」,$ ARR)來構造一個不錯的串出來的
  • 串連您的字符串直接

最簡單的方法是第一個(從array_filter EDITED另一個答案):

$name = $_POST['name']; 
$company = $_POST['company']; 
$address = $_POST['address']; 
$city = $_POST['city']; 
$state = $_POST['state']; 
$zip = $_POST['zip']; 
$email = $_POST['email']; 
$optin = $_POST['optin']; 
$comments = ($_POST['comments']); 



ob_start(); 
?> 
Please send samples to: 

<?= implode("\n", array_filter($name, $company, $address)) ?> 
<?= $city ?>, <?= $state ?> <?= $zip ?> 

Email: <?= $email ?> 

Opt-In to occasional email list?: <?= $optin ?> 

Comments: <?= $comments ?> 

?> 
$body = ob_get_clean(); // return the output since ob_start() 

$headers = "From: $email\r\n"; 
$success = mail($webMaster, $emailSubject, $body, $headers); 
+0

實際上,OP已經在使用一種模板:heredoc字符串。我會說使用輸出緩衝區是一種相當古怪的方式來實現OP想要做的事情。不過,我喜歡你所建議的陣列方式。 – middus 2010-06-28 03:44:48

+0

是的,我個人使用陣列。當你得到很多嵌入式中頻並需要用它們構建輸出時,它非常有用...... – 2010-06-28 03:49:53

+0

但是,我嘗試了IF語句,他們確實工作。 Middus的兩個解決方案都奏效了。謝謝大家的幫助!!!!! – JustBobF 2010-06-28 04:40:28

2

你必須擺脫HEREDOC的這一點,或者是預先準備的價值,但這是好的,簡稱:

echo join("\n", array_filter(array($name, $company, $address)));