以下の点についてお役に立てれば幸いです。私は何時間もウェブとスタックオーバーフローを検索してきました。私のphpメール機能にはこの問題があります。
私の Web サイト (このサイトでは wordpress を使用しています) には、名前と電話番号の 2 つのテキスト フィールドを含むフォームがあります。フォームには、現在の URL を表示する隠しフィールドもあるため、どのページでフォームが入力されたかがわかります。この情報は、php セッションにも保存されます。
<?php session_start();
$_SESSION['url'] = $_SERVER['REQUEST_URI'];
?>
<form name="callback" action="callme.php" method="post" onsubmit="return(validate());">
<label>Name:</label><input type="text" name="name" size=15 />
<label>Tel:</label><input class="sky" type="text" name="tel" size=15 />
<div id="afterfive"><p>Call after five<input type="checkbox" name="afterfive" value="Call back after five"></p></div>
<input type="hidden" name="url" value="<?php echo $_SESSION['url']; ?>">
<input type="submit" class="classname" value="Call me back!" title="Call me back!" />
</form>
<script>
function validate()
{
if( document.callme.name.value == "" )
{
alert( "Please fill in your name" );
document.callme.name.focus() ;
return false;
}
if( document.callme.tel.value == "" )
{
alert( "Please fill in your phone number" );
document.callme.tel.focus() ;
return false;
}
}
</script>
次の php コードは callme.php です。
<?php session_start();
$name = $_POST['name'];
$tel = $_POST['tel'];
$afterfive = $_POST['afterfive'];
$url = $_POST['url'];
$to = "me@myemail.com";
$subject = "Please call back $name";
$message .= "Hi, the following person would like to be called back: \n";
$message .= "Name: $name \n";
$message .= "Phonenumber: $tel \n";
$message .= "$afterfive \n";
$message .= "This message was send from this page: $url \n";
$headers = "From: meagain@myemail.com" . "\r\n";
$headers .= "BCC: meagain@myemail.com" . "\r\n";
if(mail($to, $subject, $message, $headers)){
$_SESSION['name'] = $_POST['name'];
$_SESSION['tel'] = $_POST['tel'];
header("Location: http://www.mywebsite.thankyou");
}
?>
フォームを送信すると、訪問者はサンキュー ページにリダイレクトされ、2 番目のフォームを使用して追加情報を入力する機会が与えられます。以前に php セッションに保存された情報 (フォーム フィールド名、tel および url) は、非表示のフォーム フィールドに追加されます。
ほとんどの場合、これで問題なく動作しますが、すべてまたは一部のフィールドが空の電子メールを受信することがあります。もちろん、これは JavaScript が無効になっているユーザーや、空白のフォームを送信する Google ボットのユーザーである可能性がありますが、奇妙なことに、URL フィールドでさえ空である場合があります (フォームはホームページに表示されません)。$_SERVER['REQUEST_URI'] は常に機能するはずではありませんか?
PHP フォーム検証を追加することを考えていましたが、これで問題が解決するかどうかはわかりません。これはワードプレスのハイパー キャッシュ プラグインと関係があるのでしょうか? それとも、php セッションに関連している可能性がありますか?