PHP生成电子邮件正文

时间:2016-04-25 18:23:17

标签: php email

我正在尝试让我的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表单。

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

让我说我转到相同的表单,并更改LoginName和显示名称(或电子邮件,密码,级别等) - 电子邮件已发送,但在电子邮件中它只有表格的标题假设列出所做的所有更改。表中没有列出其他信息。

我的数据库标题:

enter image description here

张贴变量:

    $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表单视图:

enter image description here

如果仅更改了LoginName,则显示结果:

enter image description here

如果更改了任何ELSE(除了LoginName)之外的结果(如果LoginName与其他任何内容一起更改,结果相同):

enter image description here

2 个答案:

答案 0 :(得分:0)

如果没有看到数据库就很难验证,但你的php看起来很好。我期望发生的是,那些字段的拼写方式与查询字符串中的字段不完全相同。 e.g。

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

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

答案 1 :(得分:0)

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

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

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