2013-11-25 121 views
0

我发现一个很好的html邮件webform在线感谢CSS技巧的人,一切似乎工作正常。该表单使用PHP作为安装在Apache上的模块。在表格中,我要求用户的姓名,电子邮件地址和评论。除用户名外的所有内容都到达我的邮箱。我似乎无法找到这不起作用的原因。这是我的HTML代码:

<div id="form_container"> 
     <form method="post" name="contact_form" action="contactengine.php"> 
      <table> 
      <tr> 
      <td class="description-column"> 
       <label class="description" for="Name">Name </label> 
      </td> 
      <td> 
      <span><input id="Name" type="text" maxlength="455" value=""/ size="41></span> 
      </td> 
      </tr> 

      <tr> 
      <td class="description-column"> 
       <label class="description" for="Email">Email </label> 
      </td> 
      <td> 
      <span><input id="Email" name="Email" type="text" maxlength="455" value=""/ size="41"> 
      </span> 
      </td> 
      </tr> 

      <tr> 
       <td class="description-column"> 
       <label class="description last" for="Message">Message </label> 
      </td> 
      <td> 
      <span> 
       <textarea id="Message" class="comment-box" name="Message" maxlength="455">          
       </textarea> 
      </span> 
      </td> 
      </tr> 

      <tr colspan="2"> 
      <td></td> 
      <td class="buttons"> 
      <input type="hidden" name="form_id" value="" /> 
      <input type="submit" name="submit" value="Submit" class="submit-button" /> 
      </td> 
      </tr> 
     </table> 
     </form> 
    </div> 

这是PHP代码:

<?php 

$EmailFrom = "[email protected];" 
$EmailTo = "[email protected]"; 
$Subject = "Mail"; 
$Name = Trim(stripslashes($_POST['Name'])); 
$Email = Trim(stripslashes($_POST['Email'])); 
$Message = Trim(stripslashes($_POST['Message'])); 

// validation 
$validationOK=true; 
if (!$validationOK) { 
    print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">"; 
    exit; 
} 

// prepare email body text 
$Body = ""; 
$Body .= "Name: "; 
$Body .= $Name; 
$Body .= "\n"; 
$Body .= "Email: "; 
$Body .= $Email; 
$Body .= "\n"; 
$Body .= "Message: "; 
$Body .= $Message; 
$Body .= "\n"; 

// send email 
$success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>"); 

// redirect to success page 
if ($success){ 
    print "<meta http-equiv=\"refresh\" content=\"0;URL=contactthanks.php\">"; 
} 
else{ 
    print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">"; 
} 
?> 

我假设下的PHP代码//发送邮件会插入用户进入邮箱的一切,发送到我的邮箱。这意味着它将在$ Body下输入所有数据,其中包括$ Name。但它永远不会给我起名字。 我也想知道为什么在第一个字段“$ EmailFrom”中,我应该输入一个固定的电子邮件地址(在这种情况下是'[email protected]'),而用户在html表单中输入他的地址并在邮件中发送我收到。 $ EmailFrom字段仅供我查看谁发送了邮件而无需打开邮件。它也应该是用户的邮件地址或用户的名字。

我希望自己明白了吗?

在此先感谢,我已经找到了许多有价值的答案在本网站关于其他主题:)

B带name属性

+0

'stripslashes'?为什么?你是否在启用Magic Quotes的过时服务器上停留,或者你是否想要中断用户输入? – Quentin

+0

你为什么用'meta'而不是'Location' HTTP头重定向人? – Quentin

+0

我在2007年通过在线教程发现了此表单,因此我假设某些功能可能会被弃用。但只是要通知,我可以删除反斜杠,如果是的话,我会怎么做? –

回答

1

只有表单控件能成功。你没有。

<input id="Name" type="text" maxlength="455" value=""/ size="41> 

应该

<input id="Name" name="Name" type="text" maxlength="455" value="" size="41"> 
+0

我显然忽略了这一点,非常感谢! –

0

你忘记了除了设置name="Name"id="Name";)

0

您应该添加name属性为输入标签,

<input id="Name" name="Name" type="text" maxlength="455" value="" size="41>

1

你忘了把name属性输入标签

<td> 
<span><input id="Name" type="text" maxlength="455" value="" size="41></span> 
</td> 

变化

<td> 
<span><input id="Name" type="text" name="Name" maxlength="455" value="" size="41></span> 
</td>