【发布时间】:2014-05-05 00:17:23
【问题描述】:
假设我有一堂课,例如:
class User{
function callname(){
$user = $_SESSION['id'];
$query = ("SELECT * FROM user WHERE user.id='$user'");
while ($result=mysql_fetch_array($query)){
echo ($result['username']);}}}
然后,为用户对象创建实例:
$user = new User;
发送邮件的代码:
if($_SERVER["REQUEST_METHOD"] == "POST"){
$username = trim($_POST['username']);
$check = mysql_num_rows(mysql_query("SELECT * FROM user WHERE username='$username'"));
if ($check==TRUE){
$name = $user->callname();
$to = "myemail@domain.com";
$subject = "Example Subject";
$headers = "From: My Domain".'\r\n'.
"MIME-Version: 1.0".'\r\n'.
"Content-Type: text/html; charset=ISO-8859-1".'\r\n'.
'X-Mailer: PHP/' . phpversion();
$message = "Hai $name, this is the new message.";
mail($to, $subject, $message, $headers);
} else {
?>
<script type="text/javascript">
alert("Sorry, username not exist !");
</script>
<?php
}
}
邮件功能正常工作,我也收到了一封电子邮件。问题是
$name未在电子邮件中打印用户名。我已经在没有if()的不同页面上尝试了这个$name = $user->callname();,它正在工作。\r\nMIME-Version: 1.0等被打印在 From 标题中。
【问题讨论】:
-
危险:您使用的是an obsolete database API,应该使用modern replacement。您也容易受到SQL injection attacks的影响,现代 API 可以让您更轻松地从 defend 中获得。
-
同意Quentin,至少你需要在$username上使用mysql_real_escape_string才能在查询中发送!
-
感谢 Quentin 和 Jonas Äppelgran。我真的还是新手。需要了解更多。感谢您的解释。