非常感谢您对以下内容的一些帮助!我已经在网上和 stackoverflow 上搜索了几个小时。我的 php 邮件功能存在这个问题。
我的网站上有一个表格(该网站使用 wordpress),其中包含两个文本字段,姓名和电话号码。表单中还有一个显示当前 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");
}
?>
提交表格后,访问者将被重定向到我们的感谢页面,并有机会使用第二个表格填写其他信息。先前存储在 php 会话中的信息(表单字段名称、电话和 url)被添加到隐藏的表单字段中。
这在大多数情况下都可以正常工作,但有时我们会收到全部或部分字段为空的电子邮件。当然,这可能是禁用 javascript 的用户或提交空白表单的谷歌机器人,但奇怪的是,有时甚至 url 字段都是空的(表单在我们的主页上不可见)。$_SERVER['REQUEST_URI'] 不应该一直有效吗?
我正在考虑添加 php 表单验证,但我不确定这是否能解决问题。这可能与 wordpress 的超缓存插件有关吗?或者它可能与php会话有关?