2017-08-24 33 views
-2

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

我对网络开发完全陌生,但希望您能提供任何见解。谢谢!

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 protected]"; 
$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'); 
?> 

[EDITED] PHP:

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

$to = '[email protected]'; 
$subject = 'Whitepaper Request Form'; 
$email_message = 'Results from Whitepaper Request Form:\n\n'; 
$headers = 'From: [email protected]'; 

    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; 
} 
?> 
+1

第一个和最后一个名字应该通过,但没有任何其他信息的是未来,因为你永远不引用POST变量。例如。 '$ _POST ['Email']' – j08691

+0

作为POST变量的名字和姓氏也不起作用。 –

+0

你已经在用名字和姓氏做正确的事情(只)你所有其他的表单变量都不会被包装在'$ _POST ['']'中。尝试在您的PHP脚本中添加一个'print_r($ _ POST)'或'var_dump()'来查看表单中的内容。 – j08691

回答

1

的(主)的问题是与在下文中使用的参数,并有还有其他一些问题。

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

为PHP mail()的语法这​​和顺序如下:

  • $到= “到收件人”。
  • $ subject =“邮件的主题”。
  • $ email_message =“邮件内容”。
  • $ headers =“这就是你把From:[email protected]”的地方。 (需要添加并且不存在)。

按手动的语法:

布尔邮件(字符串$到,字符串$主题,字符串$消息[,字符串$ additional_headers [,字符串$ additional_parameters]])

请按照语法和邮件将共同ntain用于发送它的所有内容。

注意:您需要添加其他输入缺少的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()检查空的字段。

+0

非常感谢您的帮助。你的建议很有意义。这是我更新的代码。我得到重定向到其他页面,但我不再收到我的收件箱中的电子邮件。 –

+0

@care_apog请不要在评论中删除代码。我已经给了你如何完成的基础知识。你的标题顺便说一句是失败的,不知道你为什么要使用'.pdf'文件作为重定向。 –

+0

我需要用户在被允许访问.pdf文档之前填写表单。再次感谢你的帮助;非常感激。 –