【问题标题】:PHP Generating email bodyPHP 生成电子邮件正文
【发布时间】:2016-04-25 18:23:16
【问题描述】:

我正在尝试让我的 php 页面自动生成一封电子邮件,并在他们的帐户发生更改时将其发送给收件人,并列出帐户更改。

我有什么工作,但只有当我只更改用户的登录名时,如果其他任何更改都不起作用。

如果我只更改用户的登录名,则会发送电子邮件并在电子邮件正文中列出更改。

如果有任何其他更改,则发送电子邮件,但只有表头,没有其他内容(包括登录名)。

这是我所拥有的:

Generate list of things that were changed based on input results vs database

        $ret = $db->query("SELECT * from Users WHERE LoginName='$loginNameFromPost' LIMIT 1;");
        while($row = $ret->fetchArray(SQLITE3_ASSOC) ){
            //list changes
            if(strcmp($row['LoginName'],$loginNameFromPost) != 0) {
                $lnchange = 1;
            }
            if(strcmp($row['Email'],$emailFromPost) != 0) {
                $emchange = 1;
            }
            if(strcmp($row['DisplayName'],$displayNameFromPost) != 0) {
                $dnchange = 1;
            }
            if(strcmp($row['Level'],$levelFromPost) != 0) {
                $lchange = 1;
            }
            if(!empty($passwordFromPost)) {
                $pwchange = 1;
            }           
        }

任何更改的值都将为1

Generate email body

$message = '
        <html>
            <head>
                <title>Changes to your account - TRG Repair Log</title>
            </head>
            <body>
                <p>Some changes were made to your account by an administrator.</p>
                <table style="border:1px solid black;">';
                $message .= '<tr>
                        <th>Setting</th><th>New Setting</th>
                    </tr>';
                if($lnchange == 1) {
                    $message .= '<tr>
                        <td>Login Name</td><td>'.$loginNameFromPost.'</td>
                    </tr>';
                }
                if($emchange == 1) {
                    $message .= '<tr>
                        <td>Email</td><td>'.$emailFromPost.'</td>
                    </tr>';
                }
                if($dnchange == 1) {
                    $message .= '<tr>
                        <td>Display Name</td><td>'.$displayNameFromPost.'</td>
                    </tr>';
                }
                if($lchange == 1) {
                    $message .= '<tr>
                        <td>Clearance Level</td><td>'.$levelFromPost.'</td>
                    </tr>';
                }
                if($pwchange == 1) {
                    $message .= '<tr>
                        <td>Password</td><td>Contact '.$_SESSION['tech'].'</td>
                    </tr>';
                }

                $message .= '</table>
            </body>
        </html>
        ';

这使用if 语句并在值已更改时连接字符串。

我非常卡在这里,不知道为什么它不起作用。近一个小时以来,我一直在尝试不同的事情。

解开疑惑: 我有一个连接到上面脚本的 html 表单。

假设我转到我的表单,并且只更改数据库中任何用户的登录名 - 电子邮件已发送,并且在电子邮件中它具有表中列出的更改后的登录名。

假设我去同一个表单,并更改登录名和显示名称(或电子邮件、密码、级别等) - 电子邮件已发送,但在电子邮件中它只有表的标题假设列出所做的所有更改。表中未列出其他信息。

我的数据库标题:

发布的变量:

    $loginNameFromPost = SQLite3::escapeString($_POST['loginname']);
    $passwordFromPost = SQLite3::escapeString($_POST['password']);
    $emailFromPost = SQLite3::escapeString($_POST['email']);
    $displayNameFromPost = SQLite3::escapeString($_POST['displayname']);
    $levelFromPost = SQLite3::escapeString($_POST['level']);

HTML 表单视图:

仅更改登录名的结果:

如果任何其他(除了登录名)被更改(如果登录名与其他任何内容一起更改,结果相同):

【问题讨论】:

  • LIMIT 1 的目的是什么?超出了它明显的作用。
  • @stackoverfloweth 它不应该有所作为,但在极少数情况下,管理员可能不小心重复了 LoginName,它会被处理。
  • 你能请echo你所有的$row['Email'],$emailFromPost$row['Email'],$emailFromPost,...比较吗?
  • 这可能有助于我们查看表单的代码以确保名称正确,特别是因为您说如果 LoginName 更改它可以正常工作,但您的示例显示显示名称更改成功.
  • @fislerdata 您的评论帮助我找出了哪里出错了。我的意思是将查询设置为按 uniqueID 搜索,但我让它按正在更改的 POST 中提供的名称进行搜索 not sure how I managed that one

标签: php email


【解决方案1】:

如果不查看数据库将很难验证,但您的 php 看起来不错。我期望发生的是,这些字段的拼写方式与查询字符串中的拼写方式不完全一致。例如

$row['Email'] 实际上可能是$row['email']

这可以解释为什么你的 php 看起来不错,但它不起作用。

【讨论】:

  • 用数据库标题的图像更新了我的帖子。
【解决方案2】:

我的问题是我的查询是通过正在更改的 POST 值进行搜索。

$ret = $db-&gt;query("SELECT * from Users WHERE LoginName='$loginNameFromPost' LIMIT 1;");

我需要将 $loginNameFromPost 更改为我的 uniqueID 变量。

【讨论】:

    猜你喜欢
    • 2012-02-05
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 2013-03-17
    • 1970-01-01
    • 2021-05-08
    相关资源
    最近更新 更多