2009-12-13 78 views
2

試圖使我自己的聯繫表格與PHP。有沒有更好的方法來解決這個問題?php聯繫表格清潔代碼

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1 /DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 
<title>Contact Form Practice</title> 


</head> 

<body> 


<form method="POST" action="mailer.php"> 
Name: 
<br> 
<input type="text" name="name" size="19"><br> 
<br> 
Your Email Adress: 
<br> 
<input type="text" name="email" size="19"><br> 
<br> 
Message: 
<br> 
<textarea rows="9" name="message" cols="30"></textarea> 
<br> 
<br> 
<input type="submit" value="Submit" name="submit"> 
</form> 



</body> 
</html> 

---------------- PHP ---------------

<?php 
if(isset($_POST['submit'])) { 

$to = "[email protected]"; 
$subject = "Contact"; 
$name_field = $_POST['name']; 
$email_field = $_POST['email']; 
$message = $_POST['message']; 

$body = "From: $name_field\n E-Mail: $email_field\n Message:\n $message"; 

echo "Data has been submitted to $to!"; 
mail($to, $subject, $body); 

} else { 

echo "4! OH! 4!"; 

} 
?> 
+2

回覆收件人的電子郵件地址或多或少會導致聯繫表格的目的無效,是不是? – 2009-12-13 23:40:26

+0

haha​​ha true dat true dat – Davey 2009-12-14 00:01:32

回答

6

的代碼似乎是正確的,但我強烈建議添加一些數據驗證。您需要確保所有必填字段都填寫了有效信息。出於安全性/可讀性目的,還要確保對任何HTML,JS等進行編碼/去除。

最後,您還應該考慮使用CAPTCHA來防範垃圾郵件。我有一箇舊網站運行類似於此的代碼,並且每天用來獲得超過500封垃圾郵件!

+0

也許你可以爲你的電子郵件提及一些標題 – 2009-12-13 23:55:41

3

這是相當多了,也許就成功完成,你可以做一個header()重定向到一個確認頁面,但至於處理是否有什麼這個形式是非常標準。

另外,您希望將數據清理爲接受任何用戶輸入的標準做法。

您可能想要考慮實施CAPTCHA以防止機器人敲擊您的表單。你一定要做到

PHP Captcha

+0

好主意,謝謝你的鏈接! – Davey 2009-12-14 00:02:33

3

一件事是讓數據多了一點安全在郵件發送。我至少會在輸入數據上運行htmlentities和strip_tags,但是您絕對應該着眼於進一步驗證。

而且代替isset($ _ POST [「提交」])我想可能做這樣的事情......

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    // body code here 
} 
+0

這是爲了讓它更具可讀性嗎?或者還有其他好處?只是好奇。 – Kevin 2009-12-14 02:38:42

+0

我發現最好這樣做,因爲您不必依賴PHP知道提交按鈕的名稱。我想更多的是個人喜好。我還與不會在提交按鈕上放置名稱的開發人員合作。 – 2009-12-14 03:08:55

3

我會強烈建議查找關於PHP mail()劫持的一些信息,並確保你不會讓你的腳本容易受到這種攻擊。另外,其他人都認爲這也是很好的做法。

1

在問題中,您有2個單獨的文件處理表單。問題是如果你得到一個驗證錯誤,你沒有選擇,只有可怕「請點擊你回退按鈕」解決方案。

考慮這個模板PHP文件,它將在一頁上處理所有這些文件,提供數據驗證,錯誤,重新提交以及整個9碼。

<?php 

// Read input variables from _POST 
$FormAction = (isset($_POST['FormAction']) ? $_POST['FormAction'] : ''); 
$FirstName = trim(isset($_POST['FirstName']) ? $_POST['FirstName'] : ''); 
... 

// Define script variables 
$Errors = array(); 

// Process input if data was posted. 
switch($FormAction) 
{ 
    case 'Process': 
     // validation code 

     if(empty($FirstName) or strlen($FirstName) > 20) 
      $Errors[] = "First name is required."; 

     ... 

     if(count($Errors) > 0) 
     break; 

     // Here we have valid data.. Do whatever... 


     // Now, redirect somewhere. 
     header('Location: http://www.next.com/whatever'); 
     exit; 

} 

?> 
<html> 
    <body> 
     <?php if(count($Errors)) { ?> 
      <div class="Error"> 
       <?php foreach($Error as $Error) { ?> 
        <div><?php echo htmlspecialchars($Error); ?></div> 
       <?php } ?> 
      </div> 
     <?php } ?> 

     <form method="POST" action="<?php echo htmlspecialchars($_SERVER['REQUES_URI'], ENT_QUOTES); ?>" /> 
      <input type="hidden" name="FormAction" value="Process" /> 

      First Name: 
      <input type="text" name="FirstName" value="<?php echo htmlspecialchars($FirstName, ENT_QUOTES); ?>" /> 

      ... 

      <input type="submit" /> 
     </form> 

    </body> 
</html>