2017-05-23 12 views
0

필자가 작성한 스크립트에 문제가있는 것은 단순히 데이터베이스에서 항목을 선택하고 사용자에게 전자 메일을 보내 사용자와 관련된 항목을 업데이트하는 것입니다. 이메일 사용자 기능은 개별 사용자에게 필터링되는 항목과 동일하게 작동합니다. 그러나 나는 전자 메일이 데이터베이스에 항목이 나타나는 동일한 횟수만큼 전송되는 문제가 있습니다. 전자 메일에는 동일한 내용이 들어 있습니다 (4 개의 항목이 모두 동일한 전자 메일에 나타나지만 예제로 4 번 전송되었습니다). 메일러() 함수는 uniqueUsers 배열에 실행해야 내 분석에서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; 
}; 

:

$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); 
}; 

이것은 GetData의() 스크립트입니다

메일 링 스크립트입니다. `

,`기능 메일러 ($ 이메일, $ 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 ( 
     [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)) 

메일러 기능 : 이것은 내가 10 분 전으로 당겨 그의 조각입니다

도움이 될 것 같습니까?

+0

$ array를 만들 때마다 이전 값과 동일한 값이더라도 다른 in_array 검사가 작동하지 않으므로 in_array 검사가 작동하지 않습니다. – zenwraight

답변

0

이 논리는 문제를 해결합니다. 그래도 테스트하지 않았으므로 오류가 발생하면 알려주세요.

$user_lists = array(); 
    foreach($data as $item){ 
    $user = $item[1]; 
    $name = $item[3]; 
    $array = array($user, $name); 

    if(!in_array($user, $user_lists)){ 
     array_push($uniqueUsers, $array); 
     $user_lists[] = $user; 
    }; 
    }; 

희망이 있습니다.

+0

감사합니다. 유일한 문제는 메일러가 작동하지 않는다는 것입니다. 나는 이것이 $ user로 각 $ uniqueUsers에 대해 사용하는 두 번째 부분과 무언가라고 생각하고있다. 이제는 $ user_lists를 $ 사용자로 사용해야합니까? –

+0

메일러 코드도 게시 할 수 있으며 나중에 참조 할 때이를 답변으로 표시 할 수 있습니다. – zenwraight

+0

메일러가 작동 중입니다. 왜 그것이 원래는 아니 었는지 확신 할 수 없습니다. 다중 반복 방법을 지금 테스트하고 있지만 지금까지는 괜찮아 보입니다. –