【问题标题】:PHP mail() function: Cannot used outside data from databasePHP mail() 函数:不能使用来自数据库的外部数据
【发布时间】:2014-04-01 07:02:16
【问题描述】:

我正在尝试使用 PHP mail() 函数发送电子邮件,但在尝试调用电子邮件中的收件人姓名(来自数据库)时遇到问题。 代码在这里:

class User{
   function callname(){
     $user = $_SESSION['id'];
     $query = ("SELECT * FROM user WHERE user.id='$user'"); // trying
     while ($result=mysqli_fetch_array($query)){            // to call
         return($result['username']);}}}                  // "username" in database

$user = new User;

if($_SERVER["REQUEST_METHOD"] == "POST"){
  $username = mysqli_real_escape_string(trim($_POST['username']));
  $check = mysqli_stmt_num_rows(mysqli_query("SELECT * FROM user WHERE username='$username'"));

  if ($check==TRUE){
    $name = $user->callname(); // call the function
    $to = "myemail@domain.com";
    $subject = "Example Subject";
    $headers = "From: My Example Email"."\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 不叫用户名。所以消息只有这样:

Hai , this is the new message.

请帮忙。任何答案都会非常有帮助。谢谢。


更新 你的意思是这样吗? (我已经改成mysqli

$query = ("SELECT * FROM user WHERE user.id='$user'");
$result = $mysqli->query($query);
while ($row=$resulr->fetch_array()){
   return $row['username'];

   if($$mysqli->num_rows($result) == 0){
      return $row['usern'];
   }

如果是对的,结果还是一样的。用户名未打印在电子邮件中。 }

【问题讨论】:

  • 旁注: 停止使用已弃用的 mysql_* 函数。请改用MySQLiPDO。这是一个很好的 PDO tutorial
  • 是的,我正在迁移人。谢谢提醒。
  • 我已经编辑了代码。对吗?
  • 使用mysqli 更好。您仍然没有运行查询。您需要使用mysqli_query($query),因为mysqli_fetch_array() 不接受字符串,它接受mysql_result 对象。
  • 另外,代码中没有连接MySQLi

标签: php database sendmail


【解决方案1】:

mysql_fetch_array() 采用mysql_query() 返回的对象类型。你需要这样做:

$query = ("SELECT * FROM user WHERE user.id='$user'");
$result = mysql_query($query);
while ($result=mysql_fetch_array($result)){
// ...

您还应该以面向对象的方式使用mysqli,但这是另一个帖子的问题。

【讨论】:

  • 是的,我已经更新到 mysqli。您的代码仍然无法正常工作。该消息仍然产生相同的内容。无论如何,谢谢。
  • 在您返回之前打印$result 会很有帮助,并且可能添加一个 if 语句来处理用户没有结果的情况 (if(mysqli_num_rows($result) == 0)) 并在那里打印一些东西来帮助调试发生了什么。
  • 请看我的更新代码。你是这样的意思吗?非常感谢你的帮助。 +1。
【解决方案2】:

首先你不应该使用mysql,因为它已被贬低尝试使用mysqli,其次你需要从mysql_query获得结果

代码应该是这样的

$query = mysql_query("SELECT * FROM user WHERE user.id='$user'");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 2019-07-01
    相关资源
    最近更新 更多