现在,每当有人提交评论进入数据库时,我都会尝试发送电子邮件通知。我正在使用mysql_real_escape_string()
来防止注入,我试图在电子邮件通知中发送时删除名称,电子邮件和评论中的删除。数据库条目代码已注释掉,因为我不希望每次测试电子邮件系统时都有条目。
电子邮件发送得很好,但stripslashes()
无效。例如,如果消息是“不能等待!”电子邮件将有“评论:不能等待!”。这对我来说很奇怪,因为当我在页面上显示注释时,striplashses工作正常。
这是因为我没有将stripslashes()
应用于不直接来自数据库的数据吗?
$li = mysql_connect($dbHost, $dbUser, $dbPass) or die("Could not connect");
mysql_select_db($dbDatabase, $li) or die ("could not select DB");
$name = mysql_real_escape_string($HTTP_POST_VARS["name"]);
$email = mysql_real_escape_string($HTTP_POST_VARS["email"]);
$comment = mysql_real_escape_string($HTTP_POST_VARS["comment"]);
$date = Date("Y-m-d h:i:s");
/*
$gb_query = "insert into entries
values(0, '$name', '$email', '$comment', '$date')";
mysql_query($gb_query);
$res = mysql_affected_rows();
// See if insert was successful or not
if($res > 0) {
$ret_str="Your guestbook entry was successfully added!";*/
$name2=stripslashes($name);
$email2=stripslashes($email);
$comment2=stipslashes($comment);
$subject = 'New Guestbook Entry Has been Added!';
$message = "Name: $name2\nEmail: $email2\nComment: $comment2";
$to = "chetg329@yahoo.com";
mail($to, $subject, $message);
//header('Location: guestbook.php?ps=1');
//exit(); // End the request
/*
} else {
$ret_str = "There was a problem with your guestbook entry. Please try again.";
}
// Append success/failure message
$gb_str .= "<span class=\"ret\">$ret_str</span><BR>";*/
mysql_close();
答案 0 :(得分:1)
我的猜测是问题出在magic_quotes
之内。我会看看你的php.ini,看看你是否可以关闭它(等待你不依赖它来阻止SQL注入)。如果你无法访问php.ini来关闭它PHP提供了一种方法供你测试它并采取相应的行动(在使用mysql_real_escape_string
转义它之前对数据进行IE striplashes)它被称为get_magic_quotes_gpc
或者,为什么对未插入数据库的数据使用mysql_real_escape_string
?如果您稍后插入,则将这些呼叫移至mail
呼叫之后。