【问题标题】:.html form info failing to submit to email via .php.html 表单信息无法通过 .php 提交到电子邮件
【发布时间】:2017-08-24 15:55:53
【问题描述】:

我创建了一个 html 表单,旨在做两件事 - 将表单信息提交到指定的电子邮件地址并将用户重定向到网站上的另一个页面。我创建了一个 .php 表单来管理这些操作。表单成功重定向并发送了一封电子邮件。但是,电子邮件具有正确的目的地、主题和消息,但未能提取用户提交给表单的信息 - 即姓名、地址、电子邮件等。

我对 Web 开发完全陌生,但如果您能提供任何见解,我将不胜感激。谢谢!

HTML:

<section>
   <div class="row">

<div class="col-lg-offset-3 col-lg-6 col-md-12"><form name="Whitepaper 
Request form" method="POST" action="Info-Request.php" class="text-center">

<input name="First_Name" type="text" required class="contact-field-sm" 
id="fname" placeholder="First Name">

<input name="Last_Name" type="text" required class="contact-field-sm" 
id="lname" placeholder="Last Name"><br><br>

<input name="Address" type="text" class="contact-field-sm" id="address" 
placeholder="Address">

<input name="City" type="text" class="contact-field-sm" id="city" 
placeholder="City"><br><br>

<input name="State" type="text" class="contact-field-sm" id="state" 
placeholder="State">

<input name="Zip" type="text" class="contact-field-sm" id="zip" 
placeholder="Zip"><br><br>

<input name="Phone" type="tel" class="contact-field-sm" id="phone" 
placeholder="Phone">

<input name="Email" type="email" class="contact-field-sm" id="email" 
placeholder="Email"><br><br>

<input name="Company" type="text" required class="contact-field-sm" 
id="company" placeholder="Company">

<input name="Title" type="text" required class="contact-field-sm" id="title" 
placeholder="Title"><br><br>

<input id="submit" type="submit" value="Submit"> 
</form>

PHP:

<?php
if(!isset($_POST['submit']))

$to = "email@example.com";
$from = 'Whitepaper Request Form';
$email_subject = " ";
$email_message = "Results from Whitepaper Request Form:\n\n";

    function clean_string($string) {
      $bad = array("content-type","bcc:","to:","cc:","href");
      return str_replace($bad,"",$string);
     }

 $First_Name = $_POST['First_Name'];
 $Last_Name = $_POST['Last_Name'];

    $email_message .= "First Name: ".clean_string($First_Name)."\n";
    $email_message .= "Last Name: ".clean_string($Last_Name)."\n";
    $email_message .= "Address: ".clean_string($Address)."\n";
    $email_message .= "City: ".clean_string($City)."\n";
    $email_message .= "State: ".clean_string($State)."\n";
    $email_message .= "Zip: ".clean_string($Zip)."\n";
    $email_message .= "Phone: ".clean_string($Phone)."\n";
    $email_message .= "Email: ".clean_string($Email)."\n";
    $email_message .= "Company: ".clean_string($Company)."\n";
    $email_message .= "Title: ".clean_string($Title)."\n";

 mail($to,$from,$email_subject,$email_message);
 header('Location: Example_Retro_WhtP.pdf');
 ?>

[编辑] PHP:

 <?php
 if(isset($_POST['submit'])){

 $to = 'example@example.com';
 $subject = 'Whitepaper Request Form';
 $email_message = 'Results from Whitepaper Request Form:\n\n';
 $headers = 'From: example@example.com';

    function clean_string($string) {
      $bad = array("content-type","bcc:","to:","cc:","href");
      return str_replace($bad,"",$string);
      }

   $email_message .= "First Name: ".clean_string($_POST['First_Name'])."\n";
    $email_message .= "Last Name: ".clean_string($Last_Name)."\n";
    $email_message .= "Address: ".clean_string($Address)."\n";
    $email_message .= "City: ".clean_string($City)."\n";
    $email_message .= "State: ".clean_string($State)."\n";
    $email_message .= "Zip: ".clean_string($Zip)."\n";
    $email_message .= "Phone: ".clean_string($Phone)."\n";
    $email_message .= "Email: ".clean_string($Email)."\n";
    $email_message .= "Company: ".clean_string($Company)."\n";
    $email_message .= "Title: ".clean_string($Title)."\n";

 mail($to,$subject,$email_message,$headers);
 header('Location: Example_Retro_WhtP.pdf');
     exit;
 }
 ?>

【问题讨论】:

  • 名字和姓氏应该通过,但没有其他信息,因为您从不引用 POST 变量。例如。 $_POST['Email']
  • 名字和姓氏作为 POST 变量也不起作用。
  • 您已经对名字和姓氏做了正确的事情(仅)所有其他表单变量都没有包含在$_POST[''] 中。尝试在您的 PHP 脚本中添加 print_r($_POST)var_dump() 以查看表单中的内容。
  • @j08691,我不知道你说的print_r($_POST)是什么意思
  • &lt;?php之后将该行添加到您的PHP脚本中

标签: php html forms html-email


【解决方案1】:

(主要)问题在于以下使用的参数,还有一些其他问题。

mail($to,$from,$email_subject,$email_message);

PHP mail() 的语法如下:

  • $to = "致收件人"。
  • $subject = "邮件的主题"。
  • $email_message = "邮件内容"。
  • $headers = "这就是您放置 From: email@example.com 的地方"。 (需要添加但不存在)。

按照手册的语法:

bool 邮件(字符串 $to ,字符串 $subject ,字符串 $message [,字符串 $additional_headers [,字符串 $additional_parameters ]])

遵循该语法,邮件将包含用于发送邮件的所有内容。

注意:您需要添加其他输入缺少的 POST 数组。

但是,您声明电子邮件已发送。在看到以下情况:

if(!isset($_POST['submit']))

这就是您的代码发送邮件的原因,因为没有带有该名称的提交输入,因此它永远不会“设置”。

<input id="submit" type="submit" value="Submit">

应该读作:

<input id="submit" type="submit" name="submit" value="Submit">

并使用适当的支撑技术。

即:注意,我删除了! 运算符,意思是“不是”:

if(isset($_POST['submit'])){

    // run your code in here to be executed

}

同时添加else{...} 条件。

还可以通过 PHP 的错误报告检查错误:

在标头后添加exit; 也不会受到影响,甚至建议防止进一步执行(如果您在其下方有更多代码)。

最好使用empty()isset() 来检查空字段。

【讨论】:

  • 非常感谢您的帮助。你的建议很有意义。这是我更新的代码。我可以很好地重定向到另一个页面,但我的收件箱中不再收到电子邮件。
  • @care_apog 请不要在 cmets 中丢弃代码。我已经向你介绍了它是如何完成的基础知识。顺便说一句,您的标头失败了,不知道为什么要使用 .pdf 文件作为重定向。
  • 我需要用户填写表格,然后才能访问 .pdf 文档。再次感谢你的帮助;非常感谢。
猜你喜欢
  • 2016-10-09
  • 2018-11-05
  • 2014-02-27
  • 2019-02-13
  • 1970-01-01
  • 2013-09-16
  • 1970-01-01
  • 1970-01-01
  • 2012-01-12
相关资源
最近更新 更多