2012-10-17 29 views
1

我正在構建一個通過使用PHP的POST方法發送的電子郵件聯繫表單。表單是../register.shtml,並且動作重定向到../register.php停止發送基於PHP的電子郵件

問題是,當register.php直接打開時(如不通過表單)空白電子郵件發送到我的收件箱。有沒有辦法阻止這種情況發生?

謝謝!

+0

檢查是否發佈了表單,但是也驗證了輸入。 – MrCode

回答

2

在您的../register.shtml頁面的表單中創建一個隱藏的輸入字段。然後,在register.php上,檢查是否設置了隱藏的輸入值。如果是,則處理表單。如果沒有設置(用戶不是從表單來的),那麼重定向回原來的頁面。

下面是一些代碼:

../register.shtml

<form action="register.php" method="POST"> 

... your form fields 

<input type="hidden" name="cameFromForm" value="Yes" /> 
</form> 

然後,在../register.php

if(!isset($_POST['cameFromForm'])) { 
    header('location: http://www.example.com/register.shtml'); 
    exit(); 
} else { 

    .... your send mail code (or whatever register.php does) 

} 
1
if ($_SERVER['REQUEST_METHOD'] == "POST") { 
    ..... 
} 
0

是什麼你正在尋找...

if(!empty($_POST)){ 
    // send email logic 
} 

這樣,如果事情被髮布到網頁的電子郵件將只發送。

+2

這將始終評估爲true,因爲'$ _POST'數組總是被設置,但不一定包含任何元素。 – MrCode

+0

謝謝,我修好了 – clementine

1

在您的register.php腳本前,你應該檢查是否有任何電子郵件在發佈數據中發送消息,並且如果沒有重定向回表單:

<?php 

if (!isset($_POST['message']) || $_POST['message'] == '') { 
    header('Location: register.shtml'); 
    exit; 
} 

// the rest of your php code here 

顯然將'message'更改爲表單中的某個實際字段。

您可能還想檢查每個字段或僅檢查所有必填字段。您可能需要更改重定向網址以告知用戶需要填寫哪個字段。

相關問題