Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP表单电子邮件请求未通过表单数据_Php_Html_Forms_Email - Fatal编程技术网

PHP表单电子邮件请求未通过表单数据

PHP表单电子邮件请求未通过表单数据,php,html,forms,email,Php,Html,Forms,Email,我一直在编写一个php脚本和一个html表单(都在单独的文件中),它从表单中获取数据并通过电子邮件发送给我。我在获取用户填写的表单数据以通过电子邮件时遇到困难。 我希望电子邮件包含用户的电子邮件作为电子邮件中的发件人 <?php $ContactName = $_POST['ContactName']; $EmailAddress = $_POST['EmailAddress']; $PhoneNumber = $_POST['PhoneNumber']; $Message = $_POS

我一直在编写一个php脚本和一个html表单(都在单独的文件中),它从表单中获取数据并通过电子邮件发送给我。我在获取用户填写的表单数据以通过电子邮件时遇到困难。 我希望电子邮件包含用户的电子邮件作为电子邮件中的发件人

<?php
$ContactName = $_POST['ContactName'];
$EmailAddress = $_POST['EmailAddress'];
$PhoneNumber = $_POST['PhoneNumber'];
$Message = $_POST['Message'];
$PracticeName = $_POST['PracticeName'];

$to = 'ENTER EMAIL ADDRESS ON WHICH YOU WANT TO SEND EMAIL';

$subject = 'Someone sent you a contact request';

$headers = 'From: '.$EmailAddress.'/r/n';
$headers .= 'MIME-Version: 1.0\r\n';
$headers .= 'Content-Type: text/html; charshet=ISO-8859-1\r\n';

// message
$messagetext = '<html><body>';
$messagetext .= '  <p>Website Form Submit</p>';
$messagetext .= '    <table>';
$messagetext .= '        <tr><td align="right">Name:</td><td>'.$ContactName.'</td></tr>';
$messagetext .= '        <tr><td align="right">Email Address:</td><td align="left">'.$EmailAddress.'</td></tr>';
$messagetext .= '        <tr><td align="right">Phone Number:</td><td align="left">'.$PhoneNumber.'</td></tr>';
$messagetext .= '        <tr><td align="right">Practice Name:</td><td align="left">'.$PracticeName.'</td></tr>';
$messagetext .= '        <tr><td align="right">Message:</td><td align="left">'.$Message.'</textarea></td></tr>';
$messagetext .= '  </table></body></html>'; 

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1'."\r\n";


// Mail it
mail($to, $subject, $messagetext, $headers);
//echo $message;
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$url.'">';
有人能帮我找出这些文件的毛病吗

HTML格式:

<form id="ContactUs" name="ContactUs" method="post" action="sendform/sendform.php">    
<table width="60%" border="0" cellpadding="2px" style="position:relative; left:20%">
<tr>
<td width="25%" align="right">Name:</td>
<td width="75%" align="left"><input name="ContactName" type="text" size="40" maxlength="100" /></td>
</tr>
<tr>
<td align="right">Email Address:</td>
<td align="left"><span id="sprytextfield1">
<input name="EmailAddress" type="text" id="EmailAddress" size="40" maxlength="150" />
<span class="textfieldRequiredMsg">A value is required.</span></span></td>
</tr>
<tr>
<td align="right">Phone Number:</td>
<td align="left"><span id="sprytextfield2">
<label for="PhoneNumber"></label>
<input name="PhoneNumber" type="text" id="PhoneNumber" maxlength="15" />
<span class="textfieldRequiredMsg">A value is required.</span></span></td>
</tr>
<tr>
<td align="right">Practice Name:</td>
<td align="left"><input name="PracticeName" type="text" size="40" maxlength="100" /></td>
</tr>
<tr>
<td align="right">Message:</td>
<td align="left"><textarea name="Message" cols="40" rows="10">&nbsp;</textarea></td>
</tr>
<tr>
<td align="center" width="25%"></td>
<td align="center" width="75%"><input name="SubmitForm" type="submit" id="SubmitForm" onclick="MM_popupMsg('Are you sure you would like to submit this form?\r');return document.MM_returnValue" value="Submit Form" /><input type="reset" name="ResetForm" id="ResetForm" value="Reset Form" /></td>
</table>
</form>

姓名:
电邮地址:
需要一个值。
电话号码:
需要一个值。
机构名称:
信息:
名为sendform.PHP的单独PHP文件

<?php
// Where to redirect after form is processed. 
$url = 'ThankYou.php';


// multiple recipients
$to  = 'T@domain.com'; 

// subject
$subject = 'Someone sent you a contact request';

$headers = 'From: '.$EmailAddress.'/r/n';
$headers .= 'MIME-Version: 1.0\r\n';
$headers .= 'Content-Type: text/html; charshet=ISO-8859-1\r\n';






// message
$messagetext = '<html><body>';
$messagetext .= '  <p>Website Form Submit</p>';
$messagetext .= '    <table>';
$messagetext .= '        <tr><td align="right">Name:</td><td>'; $_GET[$ContactName] .'</td></tr>';
$messagetext .= '        <tr><td align="right">Email Address:</td><td align="left">'; $EmailAddress .'</td></tr>';
$messagetext .= '        <tr><td align="right">Phone Number:</td><td align="left">'; $PhoneNumber .'</td></tr>';
$messagetext .= '        <tr><td align="right">Practice Name:</td><td align="left">'; $PracticeName .'</td></tr>';
$messagetext .= '        <tr><td align="right">Message:</td><td align="left">'; $Message .'</textarea></td></tr>';
$messagetext .= '  </table></body></html>'; 

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";


// Mail it
mail($to, $subject, $messagetext, $headers);
//echo $message;
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$url.'">'
?>


您正在表单中使用POST,但未引用POST变量。使用
$\u POST[$ContactName]
而不是
$\u GET[$ContactName]
。对所有发布的变量执行此操作。

我已修复了您的代码。以$为单位输入要向其发送电子邮件的电子邮件变量

<?php
$ContactName = $_POST['ContactName'];
$EmailAddress = $_POST['EmailAddress'];
$PhoneNumber = $_POST['PhoneNumber'];
$Message = $_POST['Message'];
$PracticeName = $_POST['PracticeName'];

$to = 'ENTER EMAIL ADDRESS ON WHICH YOU WANT TO SEND EMAIL';

$subject = 'Someone sent you a contact request';

$headers = 'From: '.$EmailAddress.'/r/n';
$headers .= 'MIME-Version: 1.0\r\n';
$headers .= 'Content-Type: text/html; charshet=ISO-8859-1\r\n';

// message
$messagetext = '<html><body>';
$messagetext .= '  <p>Website Form Submit</p>';
$messagetext .= '    <table>';
$messagetext .= '        <tr><td align="right">Name:</td><td>'.$ContactName.'</td></tr>';
$messagetext .= '        <tr><td align="right">Email Address:</td><td align="left">'.$EmailAddress.'</td></tr>';
$messagetext .= '        <tr><td align="right">Phone Number:</td><td align="left">'.$PhoneNumber.'</td></tr>';
$messagetext .= '        <tr><td align="right">Practice Name:</td><td align="left">'.$PracticeName.'</td></tr>';
$messagetext .= '        <tr><td align="right">Message:</td><td align="left">'.$Message.'</textarea></td></tr>';
$messagetext .= '  </table></body></html>'; 

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1'."\r\n";


// Mail it
mail($to, $subject, $messagetext, $headers);
//echo $message;
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$url.'">';

一步一个脚印!暂时忘记电子邮件功能,按顺序做事

制作表单,然后确保它在浏览器中的显示与预期一致。
然后在处理页面(sendform/sendform.php)上,回显将从表单发送的所有数据,以确保它们都在那里、存在并且正常。

然后,一旦您对该阶段感到满意,您就可以在电子邮件功能中应用vars并测试最终结果,在需要时进行调整或修复bug等

但是,目前您没有对发布的数据进行任何处理。在sendform.php中,您有:

$headers = 'From: '.$EmailAddress.'/r/n';
但是,在该文件中没有对它的引用来设置它,也没有将该变量设置为POST或GET data。因此,它将是空的。
您也应该检查您的错误日志,因为这会向您显示这个var是空的,并引导您返回到您的问题。在PHP中编写代码时,即使是pro,错误日志也是必须的

你也有:

$messagetext .= '<tr><td align="right">Name:</td>
                 <td>'; $_GET[$ContactName] .'</td></tr>
                ';
重要提示:
你真的想在发电子邮件之前验证人们的输入,或者你可以公开自己成为垃圾邮件发送者。例如
strlen()
来匹配你的表单最大长度,
是_numeric()
,检查他们输入数据的regex不是一些Javascript或任何试图通过你的站点发送数千封电子邮件的东西(这种情况经常发生!)。
在适当的情况下,将它们相互结合使用,可以确保用户只能输入您允许的数据,并阻止任何不好的事情发生

如果有任何错误,请将其发送回表单并显示错误消息,直到您满意数据可以通过服务器的邮件系统发送,然后允许发送


人们使用你写得很糟糕的代码向全世界发送垃圾邮件,这不仅仅是你不得不解决的麻烦。你可能会把你的域名作为垃圾网站列入黑名单——这不好

这是一个经过测试的版本,其
发件人:
现在显示在电子邮件的适当位置

  • 快速提示:有两个分开的标题主体,它们将您的代码分割开来
一个在
$subject
下面,另一个在
$messagetext
上面。现在它们都在一个标题体中

另外,您还有
$headers='From:'.$EmailAddress./r/n'无效

这应该读为
$headers='From:'.$EmailAddress.\r\n'使用
\
而不是
/

有关
mail()
函数的更多信息,请访问

工作代码 我们还可以做更多的改进,例如电子邮件验证,例如
过滤\u验证\u电子邮件

例如:

$email = $_POST['EmailAddress'];
if(empty($_POST['EmailAddress']) || !filter_var($EmailAddress, FILTER_VALIDATE_EMAIL)) {

    die("Please enter a valid email");

}
有关
FILTER\u VALIDATE\u EMAIL
的更多信息,请访问PHP.net网站


您正在表单中使用POST,但未引用POST变量。这是在您自己的服务器上运行,还是在托管服务器上运行?你能给自己发一封简单的邮件吗?你能从其中一个地址给自己发一封简单的邮件吗?您提交表单时是否收到错误消息?@Andy Gee正在现场。看起来您还试图使用$\u GET而不是$\u POST。例如,要引用您的联系人姓名,您可以使用$_POST['ContactName'],因为这会直接“撞到砖墙”:
$headers='From:'。$EmailAddress./r/n'-使用
\r\n
$headers='From:'.$EmailAddress.\r\n'而这将是另一个
回送“”
-不结束分号-使用
回送“”另一件事,这个
$headers.='内容类型:text/html;charshet=ISO-8859-1\r\n'此代码有效。唯一没有的是From:part没有把他们的电子邮件地址放进去…Iqbal发布你的整个代码,包括建议的修复等等,这很好[我没有检查他们发布的内容],但是你需要通过自己编写代码来了解他们做了什么以及为什么这么做。否则,您将永远无法向他人索要脚本:)@tgbrunet这是因为
$headers='From:'.$EmailAddress./r/n'中的
/r/n
将其更改为
$headers='From:'。$EmailAddress.\r\n'
理论上应该是可行的。Iqbal未进行适当的更改。此
$headers.='内容类型:text/html;charshet=ISO-8859-1\r\n'将失败。不是
charshet
而是
charset
您提到的
$headers='From:'.$EmailAddress'/r/n'
但是,您没有提到
/r/n
无效,它应该读为
$headers='From:'。$EmailAddress.\r\n'有很多事情我没有提到。错误,改进,方法我觉得更好。。。有人问我为什么表格没有提供数据,我回答并(我认为)对此做了详细解释。老实说,与其老是从别人的答案中挑出骨头来,为什么不把你的o贴出来呢
<?php
$url = 'ThankYou.php';

$ContactName = $_POST['ContactName'];
$EmailAddress = $_POST['EmailAddress'];
$PhoneNumber = $_POST['PhoneNumber'];
$Message = $_POST['Message'];
$PracticeName = $_POST['PracticeName'];

$to  = "email@example.com";
$subject = 'Someone sent you a contact request';

// message
$messagetext = '<html><body>';
$messagetext .= '  <p>Website Form Submit</p>';
$messagetext .= '  <table>';
$messagetext .= '  <tr><td align="right">Name:</td><td>'.$ContactName.'</td></tr>';
$messagetext .= '  <tr><td align="right">Email Address:</td><td align="left">'.$EmailAddress.'</td></tr>';
$messagetext .= '  <tr><td align="right">Phone Number:</td><td align="left">'.$PhoneNumber.'</td></tr>';
$messagetext .= '  <tr><td align="right">Practice Name:</td><td align="left">'.$PracticeName.'</td></tr>';
$messagetext .= '  <tr><td align="right">Message:</td><td align="left">'.$Message.'</textarea></td></tr>';
$messagetext .= '  </table></body></html>'; 

// To send HTML mail, the Content-type header must be set
$headers = "MIME-Version: 1.0\n";
$headers .= "Content-Type: text/html; charset=iso-8859-1\n";
$headers .= "From: $EmailAddress" . "\r\n" .
            "Reply-To: $EmailAddress" . "\r\n" .
            'X-Mailer: PHP/' . phpversion();

// Mail it
mail($to, $subject, $messagetext, $headers);
//echo $message;
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$url.'">';

//echo "Success"; // my testing method

?>
if(!empty($_POST['EmailAddress']) && (!empty($_POST['ContactName']))

 && (!empty($_POST['PhoneNumber']))

 && (!empty($_POST['PracticeName']))

 && (!empty($_POST['Message']))

)

{

mail($to, $subject, $messagetext, $headers);
//echo $message;
// echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL='.$url.'">';

echo "Success";

}

else {

echo "Mail failed. All fields must be filled.";

}
$email = $_POST['EmailAddress'];
if(empty($_POST['EmailAddress']) || !filter_var($EmailAddress, FILTER_VALIDATE_EMAIL)) {

    die("Please enter a valid email");

}