我为一个网站建立了一个竞赛系统,它的工作原理是用户登录,根据现实生活中的事件(特定对象的销售)提交选票,然后在月底进行随机选票被选中,并且该选票的所有者是获胜者。
我被要求创建一个脚本,该脚本将通过电子邮件向数据库中的所有用户发送他们在系统中的当前选票数量。
我当前的登录/注册系统是一个经过大量编辑的 HTML-Form-Guies Simple PHP Registration System版本。
我知道我想做的伪代码。
一步一步,所需的方法是这样的。
调用 EmailUsersTotalEntries,用数据库中的所有用户填充一个数组,选择数组中的第一个条目,用户 1,找到 itemold 列中用户 ID 为 1 的所有行的总和。然后向用户发送一封电子邮件从 userid = 1 的选票中选择 sum(itemsold) 的结果;到用户 1。然后循环转到用户 2 并执行相同的操作,直到它向数据库中的每个用户发送了一封电子邮件。
以下是我编写的或来自登录系统的一些方法,它们将用于完成此操作。我唯一的问题是我不知道如何创建一个循环,以便它从用户 1 开始,然后一直到用户 2,我不知道如何在数据库中查询数据库/循环中任何用户的 user_id目前正在开启。
方法如下: 这是主方法,它会调用子方法来收集用户,然后发送实际的电子邮件。我不确定 TotalEntries 是否应该是一个数组
function EmailTotalEntries()
{
if(empty($_POST['email']))
{
$this->HandleError("Email is empty!");
return false;
}
$user_rec = array();
if(false === $this->GetUsers($user_rec))
{
return false;
}
**/* $TotalEntries = array(); */**
if(false === $this->GetTotalEntriesForEmail($user_rec, $TotalEntries)
{
return false;
}
//At this point, I have an array, user_rec, populated with all the data from my users table, and an array $TotalEntries that will have nothing since its trying to pull from user_rec, which usually is one user but right now is all of the users.
//This is where I know I should have already started the loop, so chosen the first element in user_rec, and applied the GetTotalEntriesForEmail method, then the SendUserEmail method, then gone to the top of the loop and gone to the second user_rec element and repeat.
if(false === $this->SendUsersEmail($user_rec, $TotalEntries))
{
return false;
}
return true;
}
这是收集用户的方法
function GetUsers(&$user_rec)
{
if(!$this->DBLogin())
{
$this->HandleError("Database login failed!");
return false;
}
$result = mysql_query("Select * from $this->tablename",$this->connection);
$user_rec = mysql_fetch_assoc($result);
return true;
}
这是我为已登录的用户获取 TotalEntries 的方法(检查他的控制面板以查看他有多少条目)
function GetTotalEntries()
{
if(!$this->CheckLogin())
{
$this->HandleError("Not logged in!");
return false;
}
$user_rec = array();
if(!$this->GetUserFromEmail($this->UserEmail(),$user_rec))
{
return false;
}
$qry = "SELECT SUM(itemsold) AS TotalEntries FROM entries WHERE user_id = '".$user_rec['id_user']."'";
$result = mysql_query($qry,$this->connection);
while($row = mysql_fetch_array($result))
{
echo $row['TotalEntries'];
}
}
这就是我认为需要对其进行调整以在电子邮件中工作的方式。
function GetTotalEntriesForEmail($user_rec, &$TotalEntries)
{
if(!$this->DBLogin())
{
$this->HandleError("Database login failed!");
return false;
}
$qry = "SELECT SUM(itemsold) FROM entries WHERE user_id = '".$user_rec['id_user']."'"; //$user_rec['id_user'] should the be id of the user the loop is currently on.
$result = mysql_query($qry,$this->connection);
$TotalEntries = mysql_fetch_assoc($result);
return true;
}
这是实际的电子邮件
function SendUsers($user_rec, $TotalBallots)
{
$email = $user_rec['email']; //should be the for the user the loop is currently on.
$mailer = new PHPMailer();
$mailer->CharSet = 'utf-8';
$mailer->AddAddress($email,$user_rec['name']); //user the loop is currently on.
$mailer->Subject = "Total Ballots to Date";
$mailer->From = $this->GetFromAddress();
$mailer->Body ="Hello ".$user_rec['name']."\r\n\r\n". //Same thing
"To date you have: "/* .$TotalBallots. */" ballots.\r\n" //Same thing
if(!$mailer->Send())
{
return false;
}
return true;
}
我不太擅长 PHP,这整件事对我来说是一次学习经历,因此非常感谢您的帮助。
如果我还不清楚,也许用另一种语言举一个例子会更清楚,所以这就是我想做的事情,但是在java中
for(x = 0; x <= user_rec.length; x++)
{
int ballots = getTotalEntriesForUser(x);
sendEmailToUser(ballots)
}
如果我还不够清楚,请告诉我,我会尽力澄清。
如何将上述代码与一个循环结合起来,该循环将向所有用户逐一发送一封电子邮件,每封电子邮件对发送到的用户都是唯一的?