基本上我正在尝试重新设计一个插件,所以我需要做的是在同一页面上的Cart.php表单上发布表单数据。以下是我的设置,但$_POST
信息在发送电子邮件时没有返回任何内容:
Cart.php
<form id='SimpleEcommCartCartForm' action="" method="post">
<div id="emailForm">
<p>Please fill out the form below and one of our associates will contact you with more information.</p>
<div class="col-xs-4">
Name: <input type="text" name="name" id="name">
</div>
<div class="col-xs-4">
E-mail: <input type="email" name="email" id="email">
</div>
<div class="col-xs-4">
Phone: <input type="tel" name="phone" id="phone">
</div>
</div>
</form>
<?php
//Send the email
$to = "test@gmail.com";
$name = $_POST['name'] ;
$from = $_POST['email'] ;
$phone = $_POST['phone'] ;
$headers = "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\n";
$headers .= "From: $from";
$subject = "Pump Part Inquiry";
$emailBody = "
<html>
<head>
<style>
</style>
</head>
<body>
<h1> Pump Inquiry</h1>
<h3>From:".$name."<h3>
<h3>Phone:".$phone."<h3>
<p>Minetuff Parts".$mine."</p>
<p>Flygt Parts".$flygt."</p>
</body>
</html>";
$send = mail($to, $subject, $emailBody, $headers);
?>
答案 0 :(得分:2)
如果您立即加载邮件,它会发送没有任何内容的邮件(或缺少信息),并且由于特定原因而发送邮件。
目前,您的代码会在您加载页面后立即向您发送电子邮件,因此最好将您的(PHP)代码包装在isset()
中以与...一起使用(命名)提交按钮,在您最初发布的问题/代码中似乎缺失。
另外,您有两个未定义的变量:
$mine
和$flygt
,因此您需要根据自己的需要定义这些内容。
即:if(isset($_POST['submit']))
和<input type="submit" name="submit" value="Send">
旁注:最好检查空白字段,但这是另一个话题;看我的脚注。
经过测试和工作,并收到所有信息,并用if(mail($to, $subject, $emailBody, $headers)){...}
<form id='SimpleEcommCartCartForm' action="" method="post">
<div id="emailForm">
<p>Please fill out the form below and one of our associates will contact you with more information.</p>
<div class="col-xs-4">
Name: <input type="text" name="name" id="name">
</div>
<div class="col-xs-4">
E-mail: <input type="email" name="email" id="email">
</div>
<div class="col-xs-4">
Phone: <input type="tel" name="phone" id="phone">
<input type="submit" name="submit" value="Send">
</div>
</div>
</form>
<?php
//Send the email
if(isset($_POST['submit'])){
$to = "test@gmail.com";
$name = $_POST['name'] ;
$from = $_POST['email'] ;
$phone = $_POST['phone'] ;
$headers = "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\n";
$headers .= "From: $from";
$subject = "Pump Part Inquiry";
// $mine = " Mine variable"; // replace this
// $flygt = " Flygt variable"; // replace this
$emailBody = "
<html>
<head>
<style>
</style>
</head>
<body>
<h1> Pump Inquiry</h1>
<h3>From:".$name."<h3>
<h3>Phone:".$phone."<h3>
<p>Minetuff Parts".$mine."</p>
<p>Flygt Parts".$flygt."</p>
</body>
</html>";
// $send = mail($to, $subject, $emailBody, $headers);
if(mail($to, $subject, $emailBody, $headers)){
echo "Mail sent.";
}
else{
echo "Sorry, something went wrong.";
}
} // brace for if(isset($_POST['submit']))
?>
如果您仍然遇到问题:
在打开<?php
标记后立即将error reporting添加到文件顶部,这有助于在生产测试期间。
error_reporting(E_ALL);
ini_set('display_errors', 1);
<强> 脚注: 强>
您可以使用XSS attacks(跨站点脚本)。
使用以下(PHP)过滤功能:FILTER_SANITIZE_FULL_SPECIAL_CHARS
$name = filter_var($_POST['name'], FILTER_SANITIZE_FULL_SPECIAL_CHARS);
相当于使用
ENT_QUOTES
设置调用htmlspecialchars()
。可以通过设置禁用编码引号。
要检查空字段,可以在if(isset($_POST['submit'])){
if(empty($_POST['name']) || empty($_POST['email']) || empty($_POST['phone'])){
echo "Fill out all the fields";
exit;
}
||
表示&#34; OR&#34;如果需要,可以很好地替换为OR
,但||
优先于OR
。< / p>
这是一种非常基本的方法;还有其他方法可以实现这一点,但你得到了它的要点。
答案 1 :(得分:0)
发送电子邮件后,您还没有告诉PHP向页面输出任何内容。
您可以在PHP的末尾添加echo 'Mail sent';
之类的内容,这样如果脚本正确执行,那么您就会知道它。
如果问题出在根本没有发送的电子邮件中,这可能是您服务器的问题,您应该查找有关如何正确设置邮件的教程。如果你正在使用共享主机,有些公司不允许使用PHP mail()
功能,所以我会先与他们核对。
其中我建议您使用PHPMailer之类的东西,这是一个完整的PHP电子邮件库。然后,您可以配置从支持SMTP的任何地方发送您的电子邮件(不确定是否支持其他人,但最有可能)。 PHPMailer将与共享主机一起使用。
已更新 - 您可以尝试的代码
尝试更换$emailBody
:
$emailBody = <<<EOT
<html>
<head>
<style type="text/css">
</style>
</head>
<body>
<h1>Pump Inquiry</h1>
<h3>From: $name<h3>
<h3>Phone: $phone<h3>
<p>Minetuff Parts $mine</p>
<p>Flygt Parts $flygt</p>
</body>
</html>
EOT;
NB:某些电子邮件客户端只允许使用内联CSS,因此,如果您决定在<style>
中的<head>
标记中添加任何内容,请不要在某些情况下,我希望它能够很好地工作或完全没用。
如前所述,您还需要防范跨站点脚本。
答案 2 :(得分:0)
这里的问题是邮件是在提交之前发送的,因为你没有测试$_POST
变量是否存在,尝试这样的事情:
<form id='SimpleEcommCartCartForm' action="" method="post">
<input type="hidden" name="action" value="mailing"/>
<div id="emailForm">
<p>Please fill out the form below and one of our associates will contact you with more information.</p>
<div class="col-xs-4">
Name: <input type="text" name="name" id="name">
</div>
<div class="col-xs-4">
E-mail: <input type="email" name="email" id="email">
</div>
<div class="col-xs-4">
Phone: <input type="tel" name="phone" id="phone">
</div>
<input name="submit" type="submit"/>
</div>
</form>
<?php
if(isset($_POST['mailing'])){
// Send the email
$to = "test@gmail.com";
$name = $_POST['name'] ;
$from = $_POST['email'] ;
$phone = $_POST['phone'] ;
$headers = "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\n";
$headers .= "From: $from";
$subject = "Pump Part Inquiry";
$emailBody = "
<html>
<head>
<style>
</style>
</head>
<body>
<h1> Pump Inquiry</h1>
<h3>From:".$name."<h3>
<h3>Phone:".$phone."<h3>
<p>Minetuff Parts".$mine."</p>
<p>Flygt Parts".$flygt."</p>
</body>
</html>";
$send = mail($to, $subject, $emailBody, $headers);
}
?>