发布到同一页面

时间:2014-07-29 23:05:19

标签: php forms

基本上我正在尝试重新设计一个插件,所以我需要做的是在同一页面上的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); 

 ?>

3 个答案:

答案 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); 

}

 ?>