【问题标题】:Sending Mail with PHP output content won't display on inbox发送带有 PHP 输出内容的邮件不会显示在收件箱中
【发布时间】:2013-02-08 07:47:42
【问题描述】:

我有忘记密码表格,用户可以在其中输入有效的电子邮件地址。我向用户发送邮件没有问题,我唯一的问题是我想从数据库(用户名和密码)向用户发送他们的帐户信息,以便他们知道他们的用户名和密码。但似乎我很难在用户的收件箱上显示他们的帐户信息。我是 PHP 新手,如果您能帮助我解决这个问题,那就太好了。

这是我的代码:

已编辑:

<?php
if (isset($_POST['submit'])) {
    $email_from = "example@domain.com";
    $datesent = date('D m/d/Y, g:i A');
    $error_message = "";
    $msg = "";
    $subject = "Some text here";


    //some validations here

    $query = "Select * from user_information where EMAIL_ADDRESS = '".$_POST['email']."'";
    $result = mysql_query($query) or die("ERROR: ".mysql_error());
    $check = mysql_num_rows($result);
    if ($check == 0) {
        $row = mysql_fetch_assoc($result);
        $username = $row['USERNAME'];
        $password = $row['PASSWORD'];
        $fname = $row['FIRST_NAME'];
    }
    ob_start(); //Turn on output buffering
?>

    Hi <? php echo $fname; ?>!

        Here is your Account information:

        Username: <? php echo $username; ?>
        Password: <? php echo $password; ?>

    //some text here

<?php
    $message = ob_get_contents();
    ob_get_clean();
    $email_message = "From: ".clean_string($email_from)."\n";
    $email_message. = "Sent: ".clean_string($datesent)."\n";
    $email_message. = "Subject: ".clean_string($subject)."\n";
    $email_message. = "\n".clean_string($message)."\n";
    $headers = 'From: '.$email_from."\r\n";
    $headers. = 'To: '.$email."\r\n";
    $headers. = 'Sent: '.$datesent."\r\n";
    $email_sent = @mail($sendto, $subject, $email_message, $headers);
} ?>

【问题讨论】:

  • 去掉mail()函数前面的@,这样你就可以真正看到是否有任何错误。
  • 当我去掉mail()的@符号时似乎没有发现错误。
  • if (isset($_SESSION['submit'])) 这是错误。 session 变量 submit 永远不会被设置,所以它里面的代码永远不会被执行。当您提交表单时,应该是 $_POST['submit']。基本错误
  • 很抱歉,这只是一个拼写错误,但我的真实代码实际上是 $_POST['sumbit']。

标签: php email mailer


【解决方案1】:

以下代码对您不起作用:

$check = mysql_num_rows($result);
if($check==0){
    ...
 }

应该是:

$check = mysql_num_rows($result);
if($check != false){
    ...
 }

如果没有结果行,您只需设置用户名、密码和 fname

【讨论】:

  • 你有像 xdebug 这样的调试器吗?如果是这样,请调试您的代码。如果没有将error_log('Check: ' . $check); 放在$check = ... 之后,请查看您的error_log 文件
【解决方案2】:

我假设您发布了整个源文件。如果是这样,您的文件开头缺少session_start()。没有它就无法访问$_SESSION。或者,也许您想使用 $_POST 并改为写 $_SESSION

【讨论】:

  • 我已经将 session_start() 放在代码的开头,但这没有任何意义。 :(
【解决方案3】:

改变

if ($check == 0)

if ($check > 0)

注意:不要使用 $_POST , $_GET 变量而不清理它们。如果您不验证和清理 $_POST 和 $_GET 变量,则使用 mysql_query 很容易发生 sql 注入。使用 PHP_PDO

还有

 if (isset($_SESSION['submit'])) {

 if (isset($_POST['submit'])) {

【讨论】:

  • 和其他人一样,这个答案并没有解决问题。还是谢谢。
【解决方案4】:

首先启动会话,然后只有你可以使用会话变量,当从数据库中获取数组时,行数不应该为零,像这样

 if ($check != 0) {
    $row = mysql_fetch_assoc($result);
    $username = $row['USERNAME'];
    $password = $row['PASSWORD'];
    $fname = $row['FIRST_NAME'];
}

这段代码也有错误

  ob_start(); //Turn on output buffering
  ?>
  Hi <?php echo $fname; ?>!

    Here is your Account information:

    Username: <?php echo $username; ?>
    Password: <?php echo $password; ?>

//some text here

您没有使用&lt;?php,而是使用&lt;? php。 希望对您有所帮助。

【讨论】:

  • 感谢您的帮助,但这也没有解决问题。
  • @tek4granted 你能解释一下你的程序是如何运行的吗?
猜你喜欢
  • 2015-08-29
  • 2014-12-25
  • 2016-02-12
  • 2018-12-13
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 2011-03-26
  • 2013-01-10
相关资源
最近更新 更多