我有一个表单,用于捕获和转发用户的姓名,电子邮件和评论。
我在收件箱中收到了电子邮件,但值为空。
收到的电子邮件示例:
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();
?>
为什么电子邮件不包含用户的姓名,电子邮件或评论?
答案 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
。