私が書いたスクリプトに問題があるのは、単にデータベースから項目を選択し、関連するエントリでそれらを更新するための電子メールをユーザに送信することです。 電子メール機能は、個々のユーザーにフィルタするエントリと同様に機能しています。しかし、私は電子メールがエントリがデータベースに表示される同じ回数送信されている問題があります。電子メールには同じコンテンツが含まれています(4つのエントリはすべて同じ電子メールに表示されますが、例として4回送信されました)。PHP - foreach文の外で繰り返すスクリプト
これは郵送スクリプトです:
mysql_select_db("WBLResources", $con) or die ("Error selecting specified database on mysql server: ".mysql_error());
$query = "SELECT * FROM `Bookings` WHERE `updated` > '" . $date . "'";
$result = mysql_query($query);
$numOfRows = mysql_num_rows($result);
if($numOfRows < 1){
exit();
};
for ($i = 0; $i < $numOfRows; $i++) {
$row = mysql_fetch_array($result);
$result_array[$i] = array($row["equipment_name"],
$row["user"],
$row["approved"],
$row["name"],
$row["updated"],
$row["start"],
$row["end"]);
};
return $result_array;
};
私の分析から、メーラ()関数はuniqueUsersアレイ上で実行する必要があります:
$data = getData();
$uniqueUsers = array();
foreach($data as $item){
$user = $item[1];
$name = $item[3];
$array = array($user, $name);
if(!in_array($array, $uniqueUsers)){
array_push($uniqueUsers, $array);
};
};
echo print_r($uniqueUsers);
echo "<br>";
echo "<hr>";
foreach($uniqueUsers as $user){
$email = $user[0];
$name = $user[1];
$fullName = explode(" ", $name);
$firstName = $fullName[0];
$updates = "";
echo $email;
echo "<br>";
echo $name;
echo "<br>";
foreach($data as $item){
if($user[0] == $item[1]){
$equipmentName = $item[0];
$approved = $item[2];
$start = $item[5];
$end = $item[6];
$updates .= $approved . " - " . $equipmentName . " (Booked from " . date('l, jS F', strtotime($start)) . " to " . date('l, jS F', strtotime($end)) . ")";
$updates .= "<br>";
};
};
echo $updates;
echo "<hr>";
mailer($email, $firstName, $updates);
};
これは函()スクリプトです。これは私が10分前に引っ張らものの抜粋です:
Array (
[0] => Array (
[0] =>
[1] =>)
[1] => Array (
[0] => ####@###.co.uk
[1] => Username)
[2] => Array (
[0] => ####@###.co.uk
[1] => Username)
[3] => Array (
[0] => #####@###.co.uk
[1] => Username)
[4] => Array (
[0] => #####@###.co.uk
[1] => Username)
[5] => Array (
[0] => ######@###.co.uk
[1] => Username)
[6] => Array (
[0] => #####@###.co.uk
[1] => Username))
メーラー機能: `機能メーラー($メール、$ firstNameという、$更新){
$mail = new PHPMailer;
$subject = "Resource Bookings";
$htmlMessageBody = "<div style=font-size:10.0pt;font-family:'Arial',sans-serif;color:black;mso-fareast-language:EN-GB'>Dear " . $firstName . ",<br><br>The following resource bookings have been updated: <br><br>" . $updates . "<br><br>Many thanks,<br>TSW Support</div>";
//$mail->SMTPDebug = 3; // Enable verbose debug output
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = '#######'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = '###@####.co.uk'; // SMTP username
$mail->Password = '######';
$mail->SMTPSecure = 'tls';
$mail->Port = 25; // TCP port to connect to
//$mail->SMTPDebug = 3;
$mail->setFrom('####@#####.co.uk', 'TSW Training Group');
$mail->addAddress($email, $firstName); // Add a recipient
$mail->addReplyTo('#####@######.co.uk', 'TSW Training Group');
$mail->addCC("#####@#####.co.uk", "Support");
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = $subject;
$mail->Body = $htmlMessageBody;
//$mail->AltBody = $plainMessageBody;
if(!$mail->send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent';
};
};`
助けていただければ幸いですか?
$ arrayを作成するたびに、以前のものと同じ値が使用されても、in_arrayのチェックは機能しません。 – zenwraight