我的php邮件表单每次发送2封相同的邮件。
我是php的新手。我已经尝试过我可以做的事情,但到目前为止我自己找不到解决方案......
没有任何其他代码的简单代码,非常简单的HTML也无法正常工作。
示例:mb_send_mail(“[电子邮件地址]”,“测试”,“这是测试邮件”,“来自:[电子邮件地址]”);
这是表格中的代码。
form.html
<form action="./confirm.php" method="post">
xxxxxxxxxxxxxxxxxxxxxxxx
<input type="submit" value="Confirm">
</form>
*使用Angular进行验证。
confirm.php
<?php
session_start();
if(!$_POST){
header('Location: ./form.html');
}
foreach ($_POST as $key => $value) {
${$key} = $value;
$_SESSION[$key] = $value;
}
?>
<form action="./send.php" method="post">
xxxxxxxxxxxxxxxxxxxxxxxx
<input type="submit" name="submit" value="Send">
</form>
send.php
session_start();
$email_address = "xxxxx@gmail.com";
$message = "xxxxxxxxxxxxxxxxxxxxxxx";
$message .= "xxxxxxxxxxxxxxxxxxxxxxx";
mb_language("ja");
mb_internal_encoding("UTF-8");
$header = "From:".$email_address."\n";
$header .= "Reply-to:".$email_address."\n";
$header .= "Content-Type: text/plain\n";
$header .= "X-Mailer:PHP/". phpversion();
mb_send_mail($_SESSION['email'],"subjecct",$message,"From:$email_address");
session_destroy();
为什么我的代码每次发送两次邮件,我该如何解决?
答案 0 :(得分:0)
在session_destroy();
之后,添加一些调试标记以检查此PHP是否运行两次。
例如file_put_contents('debug.txt', file_get_contents('debug.txt')+1);
它可以提供帮助。
答案 1 :(得分:0)
感谢@zairwolf提供添加调试行的建议。 现在它正常工作。
不确定哪个解决了它,因为我已经尝试了很少的东西来解决它。 我认为它可能是其中之一:
添加了会话令牌,如:
<强> confirm.php 强>
$token = sha1(uniqid(mt_rand(), true));
<强> send.php 强>
$key = array_search($_POST['token'], $_SESSION['token']);
if ($_SESSION['xxxxx']=="" || $key == false) {
header('Location: ./error.php');
}
将“thankyou.php”与“send.php”分开
我实际上在“send.php”中放了“发送程序”和“显示谢谢你html”。所以注意到可能会以某种方式将它分开。