2017-05-23 6 views
0

私が書いたスクリプトに問題があるのは、単にデータベースから項目を選択し、関連するエントリでそれらを更新するための電子メールをユーザに送信することです。 電子メール機能は、個々のユーザーにフィルタするエントリと同様に機能しています。しかし、私は電子メールがエントリがデータベースに表示される同じ回数送信されている問題があります。電子メールには同じコンテンツが含まれています(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'; 
}; 

};`

助けていただければ幸いですか?

+0

$ arrayを作成するたびに、以前のものと同じ値が使用されても、in_arrayのチェックは機能しません。 – zenwraight

答えて

0

このロジックは問題を解決するはずです。しかし、それをテストしていないので、もしあなたが何かエラーを打つ私に知らせてください。

これが役に立ちます。

+0

ありがとう! 唯一の問題は、メーラが機能していないことです。私はこれが何かであると考えています。彼は2番目の部分で$ userとして各$ uniqueUsersを使用しています。 これは、$ user_listsを$ userとして使用する必要がありますか? –

+0

メーラーコードも転記できますか?これを将来の参照のための回答としてマークすることができます。 – zenwraight

+0

メーラーが機能しています。なぜそれが元々ではなかったのか分かりません。マルチリピートメソッドをテストしていますが、これまでのところよく見えます。 –

関連する問題