Я создал систему конкурса для веб-сайта, как он работает, пользователь регистрируется, представляет бюллетень на основе реального события жизни (продажа определенного объекта), а затем в конце месяца случайный избирается избирательный бюллетень, а победитель - обладатель этого бюллетеня.Как отправлять всем пользователям информацию о пользователе.
Меня попросили создать сценарий, который отправит всем пользователям в базе данных текущее количество бюллетеней, которые они имеют в системе.
Моя текущая система регистрации/регистрации - это сильно отредактированная версия HTML-Form-Guies Simple PHP Registration System.
Я знаю псевдокод для того, что я хочу делать.
Шаг за шагом, необходимый метод подходит для этого.
Call on EmailUsersTotalEntries, заполняет массив всеми пользователями в базе данных, выбирает первую запись в массиве, пользователь 1, находит сумму всех строк в столбце itemsold с идентификатором пользователя 1. затем отправляйте пользователя один электронный адрес с результатами выборки (предметов) из бюллетеней, где userid = 1; пользователю 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;
}
Heres фактический адрес электронной почты
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)
}
Если я гавань была достаточно ясна, пожалуйста, дайте мне знать, и я постараюсь как можно лучше прояснить ситуацию.
Как я могу объединить приведенный выше код с циклом, который будет отправлять всем пользователям электронное письмо по одному, каждый адрес электронной почты, уникальный для пользователя, которому он отправлен?
Что такое u и e? Способ настройки моей базы данных, ее конкурс с двумя таблицами, пользователями и записями. (contest.users и contest.entries) –
В моей базе данных пользователей требуются столбцы id_user и email, а в таблице записей user_id (должен совпадать с id_user от пользователей) и itemsold –
Oh! Я понимаю. Получил запрос на работу, и я точно вижу, что он делает, с этим я могу работать, спасибо! –