我正在尝试让我的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和显示名称(或电子邮件,密码,级别等) - 电子邮件已发送,但在电子邮件中它只有表格的标题假设列出所做的所有更改。表中没有列出其他信息。
我的数据库标题:
张贴变量:
$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表单视图:
如果仅更改了LoginName,则显示结果:
如果更改了任何ELSE(除了LoginName)之外的结果(如果LoginName与其他任何内容一起更改,结果相同):
答案 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。