为什么收到的电子邮件没有任何内容?

时间:2015-12-22 09:59:05

标签: php html

我有一个表单,用于捕获和转发用户的姓名,电子邮件和评论。

我在收件箱中收到了电子邮件,但值为空。

收到的电子邮件示例:

Name:
Email:
Comment:

以下是我的index.php文件中的代码

<?php 
 $name="";
 $from="";
 $message="";
 if(isset($_POST['submit'])){
  $name=mysql_real_escape_string($_POST['name']);
  $from=mysql_real_escape_string($_POST['email']);
  $message=mysql_real_escape_string($_POST['comments']);
  $to="email@exampel.com";
  include("library/send_email.php");
 }
?>

<form id="contactform" name="contactform" action="" method="post">
 <input type="text" id="name" placeholder="Name" name="name" value="<?php echo $name;?>" required>
 <input type="text"  id="email" placeholder="Email" name="email" value="<?php echo $from;?>" required>
 <textarea id="comments" name="comments" placeholder="Message" required><?php echo $message;?></textarea>
 <button name="submit" id="submit" class="contact-btn-submit" type="submit">Send</button>
</form>

还有一个send_email.php文件,其中包含以下内容:

<?php
 $send_email= new class_email_sender($name,$from,$to,$message);
 $send_email->send_email();
?>

为什么电子邮件不包含用户的姓名,电子邮件或评论?

2 个答案:

答案 0 :(得分:2)

此:

$name=mysql_real_escape_string($_POST['name']);
$from=mysql_real_escape_string($_POST['email']);
$message=mysql_real_escape_string($_POST['comments']);

由于您没有有效的mysql_*关联,mysql_real_escape_string会返回false所以您的所有值都为false,这会导致您发送空字符串时出现空字符串邮件。

注意除了准备插入数据库中的数据之外,不应该使用此函数,即使这样,您也应该切换到PDO或mysqli和准备好的语句mysql_*函数已弃用,已从php 7中删除。

答案 1 :(得分:1)

如果你已经分配了变量(在if语句之前)以避免PHP错误,那么这样做是为了避免冲突等。

$name=isset($_POST['name']) ? mysql_real_escape_string($_POST['name']) : "";
$email=isset($_POST['email']) ? mysql_real_escape_string($_POST['email']) : ""; 
$message=isset($_POST['comments']) ? mysql_real_escape_string($_POST['comments']) : ""; 

还要注意jeroen说的话。请改用mysqli