我正在構建一個通過使用PHP的POST方法發送的電子郵件聯繫表單。表單是../register.shtml,並且動作重定向到../register.php停止發送基於PHP的電子郵件
問題是,當register.php直接打開時(如不通過表單)空白電子郵件發送到我的收件箱。有沒有辦法阻止這種情況發生?
謝謝!
我正在構建一個通過使用PHP的POST方法發送的電子郵件聯繫表單。表單是../register.shtml,並且動作重定向到../register.php停止發送基於PHP的電子郵件
問題是,當register.php直接打開時(如不通過表單)空白電子郵件發送到我的收件箱。有沒有辦法阻止這種情況發生?
謝謝!
在您的../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)
}
if ($_SERVER['REQUEST_METHOD'] == "POST") {
.....
}
是什麼你正在尋找...
if(!empty($_POST)){
// send email logic
}
這樣,如果事情被髮布到網頁的電子郵件將只發送。
這將始終評估爲true,因爲'$ _POST'數組總是被設置,但不一定包含任何元素。 – MrCode
謝謝,我修好了 – clementine
在您的register.php腳本前,你應該檢查是否有任何電子郵件在發佈數據中發送消息,並且如果沒有重定向回表單:
<?php
if (!isset($_POST['message']) || $_POST['message'] == '') {
header('Location: register.shtml');
exit;
}
// the rest of your php code here
顯然將'message'更改爲表單中的某個實際字段。
您可能還想檢查每個字段或僅檢查所有必填字段。您可能需要更改重定向網址以告知用戶需要填寫哪個字段。
檢查是否發佈了表單,但是也驗證了輸入。 – MrCode