2011-09-29 147 views
0

当我上传后在服务器端渲染它时,我收到一封电子邮件,但它是空白的。来自空白的文本是空白ECHO中的$名称是空白的部分。任何想法我能做些什么来完成这项工作?为什么我的PHP脚本发送空白电子邮件?

这里是我的形式:

<form action="survey.php" method="post" name="survey"> 
     <table>`enter code here` 
     <tr><th colspan="2">Survey</th></tr> 
     <tr><td>Name:</td><td align="center"><input type="text" 
name="name" id="name" /></td></tr> 

     <tr><td>When was your last visit</td><td 
align="center"><select id="long" name="long"> 
     <option value="Select">Please Select</option> 
    <option value="1-2 days">1-2 days ago</option> 
    <option value="3-5 days">3-5 days ago</option> 
    <option value="1-2 weeks">1-2 weeks ago</option> 
    <option value="3-5 weeks">3-5 weeks ago</option> 

    <option value="2 months">2 months</option> 
    <option value="3+months">3+ months </option> 
    <option value="Never">Never Visited</option> 
    </select></td></tr> 
    <tr> 
    <td>Tell us about your experience?</td><td 
align="center"><textarea cols="22" rows="5" id="experience" 
name="experience"></textarea></td></tr> 
    <tr><td>Will you come back 
    to visit again?</td><td align="center"><input type="checkbox" 
id="visit" name="visit" value="Yes" />Yes<input type="checkbox" 
id="visit" name="visit" value="No" />No</td></tr> 

    <tr><td colspan="2"><input type="submit" value="Submit" /><input 
type="reset" value="Reset" /></td></tr> 
    </table> 
    </form> 

我的PHP代码

<?php 

/* subject and e-mail variables*/ 

$emailSubject = $name; 
$webMaster = '[email protected]'; 

/* Gathering data Variables */ 

$nameField = $_POST['name'];  
$selectField = $_POST['long']; 
$commentsField = $_POST['experience']; 
$visitField = $_POST['visit']; 

$body = <<<EOD 
    <br><hr><br> 
    Name: $name<br> 
    Date of last visit: $long<br> 
    Expierence: $experience<br> 
    Visit again: $visit<br> 

EOD; 

$headers = "From: $name\r\n"; 
$headers .= "Content-type: text/html\r\n"; 
$success = mail ($webMaster, $emailSubject, $body, $headers); 

/* Results rendered as HTML */ 
/* When changing the fields please leave the <<<EOD and the EOD; 
If they are deleted this form will not work */ 
$theResults = <<<EOD 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" 
    /> 
    <title>Coupon</title> 
    <script language="javascript" type="text/javascript"> 
    var d=datetime.getDate() 

    var datetime=new Date() 
    var day=datetime.getDay() 
    var month=datetime.getMonth() 
    var year=datetime.getYear() 
    if (year < 1000) 
    year+=1900 
    var days=new 
    Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday") 
    var months=new 
    Array("January","February","March","April","May","June","July","August","September","Octomber","November","December") 
    </script> 
    <style type="text/css"> 
    #frame { 
    position:absolute; 
    top:16px; 
    left:124px; 
    height:355px; 
    width:480px; 
    border:2px dotted red; 
    font:"Trebuchet MS", Veranda, sans-serif; 
    color:red; 
    padding: 10px; 
    } 
    </style> 
    </head> 

    <body> 

    <div id="frame"> 
    <h3 align="center">Thanks for Participating in our survey, 
    $name!</h3> 
    <p align="center">Here is a special offer for you:</p> 
    <h2 align="center">Free Egg Roll!</h2> 
    <p align="center">Please print out this coupon to recieve a free 
    egg roll with the purchase of a meal.</p> 
    <p>&nbsp;</p> 
    <p>&nbsp;</p> 
    <p style="font-size:x-small">Limit one coupon per visit. Coupon 
    valid at all locations. Coupon will expire one month after date on 
    coupon. Cannot be combined with other offers or promotions. Management 
    has the right to refuse this coupon if found to be altered, copied, or 
    fraudulent. Coupon Number : <script> 


    function fakecounter(){ 

    //decrease/increase counter value (depending on perceived 
    popularity of your site!) 
    var decrease_increase=50000 

    var counterdate=new Date() 
    var currenthits=counterdate.getTime().toString() 

    currenthits=parseInt(currenthits.substring(2,currenthits.length-4))+decrease_increase 

    document.write(" # <b>"+currenthits+"</b>") 
    } 
    fakecounter() 
    </script></p> 
    </div> 
    <script language="JavaScript" type="text/javascript"> 
    document.write(days[day]+", "+months[month]+" "+d+" "+year) 
    </script> 
    <form><input type="button" value=" Print this page " 
    onclick="window.print();return false;" /></form> 
    </body> 
    </html> 
EOD; 
echo "$theResults"; 


?> 
+5

*请*您可以更改标题的问题:“我需要我的代码帮助”不是一个问题。 。 –

+2

$ name变量不应该是$ nameField吗?如果不是$ name从哪里来的?而其他变量也是如此 –

+3

然后把你的代码集中到t他的问题。不是整个文件。你会得到更好的帮助。 –

回答

0

从是空白的,因为你已经写$headers = "From: $name\r\n";$name不被任何声明。将其更改为$headers = "From: $nameField\r\n";

同样可以说,对于(应该是$selectField$experience(应该是$commentsField)和$visit(应该是$visitField)至$long引用。

至于echo "$theResults";

  1. 何必存储HTML的字符串,然后回声它呢?只需退出PHP模式并直接开始输出HTML。
  2. 为什么在引号中围绕变量$theResultsecho $theResults;更好,添加引号会首先在内存中创建一个新的字符串,然后回显它。
0

你回荡,你没有声明字段...尝试加入extract($_POST);到您的代码的开头

0

如何被你的错误报告集中?它打印或去日志?回声phpinfo()看。你的日志会告诉你很多。

在以下行中我注意到,你有“邮件”和“(”之间的空间。不应该有任何的空间。

$成功=电子邮件($站长,$ Emailsubject的,$机构,$头);

如果你正在看你的错误日志,你会赶上这样的事情,很容易错过

+0

“我注意到你在”邮件“和”(“ 。不应该有空格。“ - 不正确。你可以在函数名和它的左括号之间有任意的空格,并且在'phpinfo()'前面不需要使用'echo' - 它直接输出在开发过程中,我倾向于将错误报告设置为E_ALL | E_STRICT – megaflop

+0

我试过phpinfo(),你说的对。 –