电子邮件表单和php脚本问题

时间:2015-06-09 03:24:47

标签: php email

我是网站开发的新手,想要快速回答我正在撰写的php脚本。我希望这个脚本能够获取所有表单字段并通过电子邮件发送给我,并让填写表单的人知道他们的信息已经发送,并在提交表单后将其带回我的网站。现在,表单会将不完整的字段通过电子邮件发送到我的电子邮件地址,它会让该人知道表单已提交,但填写的信息是空白的。下面是我的表单代码,下面是我的php脚本。谁能看到这两个并告诉我我做错了什么?提前谢谢。

<form action="contact.php" method="post"  id="form">
<input type="text" input name="cf_name" value="Name(Required)"    onfocus="this.value = '';" onblur="if (this.value == '')    {this.value =    'Name';}">
<input type="text" input name="cf_email" value="Email (Required)"   onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Email';>
<input type="text" input name="cf_subject" value="Subject" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Subject';}">
<textarea onfocus="if(this.value == 'Your Message here....') this.value='';" onblur="if(this.value == '') this.value='Your Message here....;" >Your Message here....</textarea>
<span class="pull-right"><input type="submit" value="Submit">                   </span>
</form>
<?php

$mail_to = 'gabriel.vaughn@gmail.com';
$subject = 'Message from a site visitor '.$field_name;

$body_message = 'From: '.$field_name."\n";
$body_message .= 'Email: '.$field_email."\n";
$body_message .= 'Subject: '.$field_subject."\n";
$body_message .= 'Message: '.$field_message;

$headers = 'From: '.$field_email."\r\n";
$headers .= 'Reply-To: '.$field_email."\r\n";

$mail_status = mail($mail_to, $subject, $body_message,$headers);

if ($mail_status) { ?>
<script language="javascript" type="text/javascript">
alert('Thank you for the message.');
window.location = 'index.html';
</script>
<?php
}
else { ?>
<script language="javascript" type="text/javascript">
alert('Message failed. Please, send an email to          
gabriel.vaughn@gmail.com');
window.location = 'index.html';
</script>
<?php
}
?>

3 个答案:

答案 0 :(得分:0)

您的PHP脚本中未填充您的字段名称。

cf_name cf_email cf_subject

你应该在你的脚本中使用这样的东西:

$body_message = 'From: '.$_POST['cf_name']."\n";
$body_message .= 'Email: '.$_POST['cf_email']."\n";

答案 1 :(得分:0)

HTML FORM

中的错误 文本中的

是指定名称字段

<textarea name="cf_message"......
<input type="submit" name="submit" value="submit">

使用

检查数据
if(isset($_POST['submit'])
{
//mail code here
}

在您的代码中,所有变量都为空,因为您没有为它们分配任何值

方法01

$field_name = $_POST['cf_name'];//this will assign your HTML data
$field_email= $_POST['cf_email'];
$field_subject= $_POST['cf_subject'];
$field_message= $_POST['cf_message'];

然后你可以使用上面的代码

方法02

更改此

$subject = 'Message from a site visitor '.$_POST['cf_message'];

$body_message = 'From: '.$_POST['cf_name']."\n";
$body_message .= 'Email: '.$_POST['cf_email']."\n";
$body_message .= 'Subject: '.$_POST['cf_subject']."\n";
$body_message .= 'Message: '.$_POST['cf_message'];

$headers = 'From: '.$_POST['cf_email']."\r\n";
$headers .= 'Reply-To: '.$_POST['cf_email']."\r\n";

答案 2 :(得分:0)

您的表单包含无效的标记,额外的JS以及您不想要的默认值。

以下是我的表格

<form action="contact.php" method="post"  id="form">
    <input type="text" name="cf_name" placeholder='Name (Required)' />
    <input type="text" name="cf_email" placeholder="Email (Required)" />
    <input type="text" name="cf_subject" placeholder="Subject" />
    <textarea placeholder="Your Message here...."></textarea>
    <span class="pull-right">
    <input type="submit" name="submit" value="Submit" />
    </span>
</form>

这就是我写PHP的方式。

<?php
if(!empty($_POST['submit'])) {
    $mail_to = 'gabriel.vaughn@gmail.com';
    $subject = 'Message from a site visitor '.$field_name;
    $body_message = (!empty($_POST['cf_name'])) ? 'From: '. $_POST['cf_name'] ."\n" : '';
    $body_message .=  (!empty($_POST['cf_email'])) ? 'Email: '. $_POST['cf_email'] ."\n" : '';
    $body_message .=  (!empty($_POST['cf_subject'])) ? 'Subject: '. $_POST['cf_subject'] ."\n" : '';
    $body_message .= 'Message: '.$field_message;
    $fromemail = (!empty($_POST['cf_email'])) ? $_POST['cf_email'] : 'DEFAULT EMAIL IF EMPTY';
    $headers = 'From: '. $fromemail . "\r\n";
    $headers .= 'Reply-To: ' . $fromemail . "\r\n";
    if (mail($mail_to, $subject, $body_message, $headers)) { ?>
<script language="javascript" type="text/javascript">
            alert('Thank you for the message.');
            window.location = 'index.html';
        </script>
<?php } else { ?>
<script language="javascript" type="text/javascript">
            alert('Message failed. Please, send an email to gabriel.vaughn@gmail.com');
            window.location = 'index.html';
        </script>
<?php } else {
} else {
     echo 'Form not submitted';
}?>

() ? :是三元运算符,是编写条件的简便方法,http://php.net/manual/en/language.operators.comparison.php

您还可能希望在HTML表单中添加JS验证,以便更友好地回复用户错过了必填字段。目前,如果所有字段都为空,则$body_message将为空(或者我应该对此进行测试)。

另请务必将DEFAULT EMAIL IF EMPTY更新为您的实际默认电子邮件。

使用标准而不是!empty($_POST['cf_email']的三元组也可能更清晰,因为需要设置2个值,但如果需要,可以修改它。