2011-07-05 68 views
1

嗨,我試圖通過PHP webform發送HTML電子郵件。表單工作正常,如果我將諸如$ name,$ address這樣的變量傳遞給消息,它會通過OK,但是當我嘗試使用HTML進行格式化時,我似乎無法將這些變量傳遞給消息。這是一個示例代碼我在W3Schools的發現,但我似乎無法調整它做什麼,我想:如何在html郵件中輸入php變量

<?php 
.... 
$to = "[email protected], [email protected]"; 
$subject = "HTML email"; 

$message = " 
<html> 
<head> 
<title>HTML email</title> 
</head> 
<body> 
<p>This email contains HTML Tags!</p> 
<table> 
<tr> 
<th>Firstname</th> 
<th>Lastname</th> 
</tr> 
<tr> 
<td>John</td> 
<td>Doe</td> 
</tr> 
</table> 
</body> 
</html> 
"; 
.... 
?> 

我試圖做的是通過變量$ name它說:「李四「,而且我想我一旦明白了,我也應該能夠通過所有其他變量。

在此先感謝您的幫助。

+0

你能否通過不能傳遞變量來解釋你的意思?如果您將$ name放在'​​'標籤之間,會發送什麼? – EdoDodo

+0

請確保您正在清理從表單收集的數據。如果你不這樣做,你會打開自己的代碼注入攻擊。 –

+0

你的電子郵件形式非常糟糕 - HTML部分必須有mime類型,配置和編碼以及分隔符。雖然有些MUA仍然會呈現它,但您可能需要掌握像phpmailer這樣正確執行的操作。 – symcbean

回答

0

爲了得到你的變量到消息,如果你使用雙引號,你就應該能夠要在字符串中包含變量:

$message = " 
<html> 
... 
<tr> 
<td>$name</td> 
</tr> 
... 
</html> 
"; 

您也可以擺脫ST的環

$message = " 
<html> 
... 
<tr> 
<td>".$name."</td> 
</tr> 
... 
</html> 
"; 

這將工作與單引號或雙引號(我個人更喜歡這種方法與單引號)。

但是,當您收到此電子郵件時,您將看到原始html。爲了使html正確顯示,您需要設置適當的郵件標題。還有如何做到這一點herehere

+0

或者只是使用HEREDOC,它完全圍繞需要逃避內部引號。沒有理由關閉字符串並連接。任何語法高亮的編輯器都會看到內部變量並突出顯示它們。 –

+0

heredoc也會完成這項工作。我更喜歡使用單引號並關閉字符串的原因是因爲我不喜歡PHP自動爲變量等分析雙引號字符串的方式,大部分時間是不必要的。我讀過的所有最佳實踐指南都建議不要使用PHP中的雙引號,除非特別要求性能方面的原因(並非我真的認爲它會產生很大的差異 - 現在更習慣於這種方式!) – Addsy

+0

如果你'不使用變量,那麼就是NOWDOC(http://php.net/nowdoc),它是heredoc的雙引號的單引號等價物。 –

1
$message = " 
    <html> 
<head> 
<title>HTML email</title> 
</head> 
<body> 
<p>This email contains HTML Tags!</p> 
<table> 
<tr> 
<th>Firstname</th> 
<th>Lastname</th> 
</tr> 
<tr> 
<td>".$firstname."</td> 
<td>".$lastname."</td> 
</tr> 
</table> 
</body> 
</html> 
"; 
+0

謝謝,這種方法對我很好用 – Fahad

0

您應該將名稱分成兩個idivdual變量,例如, $first_name$second_name。這可以通過這樣做:

<?php 

$split_names = explode(' ', $name); // assuming you have a space between both 

$first_name = $split_names[0]; 
$last_name = $split_names[1]; 

?> 

然後,你可以這樣做:

$message = " 
<html> 
<head> 
<title>HTML email</title> 
</head> 
<body> 
<p>This email contains HTML Tags!</p> 
<table> 
<tr> 
<th>Firstname</th> 
<th>Lastname</th> 
</tr> 
<tr> 
<td>" . $first_name . "</td> 
<td>" . $second_name . "</td> 
</tr> 
</table> 
</body> 
</html> 
"; 
.... 
?> 
0

你可以這樣做只是像這樣的例子:

$message = " 
<html> 
... 
<tr> 
<td>".htmlspecialchars($name)."</td> 
</tr> 
... 
</html> 
"; 

非常導入逃避不是由你控制的(即收集從內容形式)以防止注入攻擊。在這種情況下,我們使用htmlspecialchars