2012-04-11 21 views
0
// Show the members that are in the Database 
    $query = "SELECT user_id, membership_id, user_email, first_name, last_name, approved  FROM vintage_user ORDER BY user_id "; 
$result = mysql_query($query, $mysql) 
or die(mysql_error()); 

if (mysql_num_rows($result) > 0){ 
$members = "<ul class='theApprovalList'>"; 
while($ev = mysql_fetch_array($result)){ 
    $row_id = $ev['user_id']; 
    $first_name = $ev["first_name"]; 
    $last_name = $ev["last_name"]; 
    $email_member = $ev["user_email"]; 
    $membership_id = $ev["membership_id"]; 
    $members .= "<li><p>Members Name: ".$first_name." ".$last_name."</p></br> <p>Member's Email: ".$email_member."</p></br><p>Membership ID: ".$membership_id."</p></li>"; 
    $members .= "<li><form action=".$myPage." method=\"post\"><input class=\"event_item_box\" id=".$row_id." type=\"checkbox\" name=members_cbox[] value=".$row_id."></li><p class=\"event_item_border\"><p/>"; 


if (sizeof($_POST['members_cbox'])) { 
foreach($_POST['members_cbox'] AS $row_id) { 
       $email_query_member = "SELECT user_email FROM `vintage_user` WHERE user_id='" .$row_id. "'"; 
      $the_result_member = mysql_query($email_query_member, $mysql) 
       or die(mysql_error()); 
      if (mysql_num_rows($the_result_member)){ 
       $email_list_member = ""; 
       while($ev5 = mysql_fetch_array($the_result_member)){ 
        $user_emails_member = $ev5["user_email"]; 
        $email_list_member .= "".$user_emails_member.","; 
       } 
       mysql_free_result($the_result_member); 
      } 
     $to2 = $email_list_member; 
     $from = ""; 
     $subject2 =""; 
     $headers = "From: {$from}" . "\r\n"; 
     $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
     mail($to2, $from, $subject2, $headers); 
     mysql_query("DELETE FROM `vintage_user` WHERE user_id='" .$row_id. "'"); 

使用權,現在是林被刪除,並將其發送基於有多少用戶在列表中,但只被刪除的用戶的電子郵件的數量,它是一個非常奇怪的錯誤。也許我應該使用一個限制或者實際上獲取目標用戶的數量?提前致謝。與發送電子郵件至只有用戶問題從數據庫中

+3

到底是什麼問題了嗎?並非所有的電子郵件都會發生?它發送太多了?只發送一些?你的代碼現在是一個巨大的混亂,根本沒有錯誤檢查。您認爲電子郵件已發送並無條件刪除用戶的帳戶...如果出現電子郵件問題,您現在已經刪除了用戶的帳戶信息,並且無法重新發送電子郵件。 – 2012-04-11 17:32:13

+0

問題是它發送太多了,可以說有3個人檢查刪除,40個在列表中。它會發送4封電子郵件給每個被刪除的人。我認爲電子郵件是在那裏,因爲他們無法登錄/註冊沒有一個,但你是對的我應該使用條件,因爲有任何問題。我通常是唯一一個看着我的代碼的人,這就是爲什麼它有點混亂,不好處理。你認爲這個問題是什麼?但要補充一點,如果複選框沒有被選中,它不會做任何事情,所以它不會意外刪除用戶。 – ApperleyA 2012-04-11 17:41:49

回答

1

看起來像你的問題(而不是實際上這個代碼可以使用的主要重構)是在while循環:

while($ev5 = mysql_fetch_array($the_result_member)){ 
    $user_emails_member = $ev5["user_email"]; 
    $email_list_member .= "".$user_emails_member.","; // Problem 
} 

email_list_member被追加到在foreach循環中找到的每個用戶。嘗試只分配值而不是附加它。

- 更新 -

唉,不想進入一個重構,但試試這個(未經測試):

if (sizeof($_POST['members_cbox'])) { 

    $membersToDelete = $_POST['members_cbox']; 

    // If this doesn't work 
    $membersToDelete = array_map('mysql_real_escape_string', $membersToDelete); 

    // Use this 
    $membersToDelete = array_map('intval', $membersToDelete); 

    $email_query_member = "SELECT user_email FROM `vintage_user` WHERE user_id IN (" . implode(',' $membersToDelete) . ")"; 

    $the_result_member = mysql_query($email_query_member, $mysql) or die(mysql_error()); 

    while($ev5 = mysql_fetch_array($the_result_member)) { 

     $user_emails_member = $ev5["user_email"];   

     $to2 = $user_emails_member; 
     $from = ""; 
     $subject2 =""; 
     $headers = "From: {$from}" . "\r\n"; 
     $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
     mail($to2, $from, $subject2, $headers); 
    } 

    mysql_query("DELETE FROM `vintage_user` WHERE user_id IN (" . implode(',' $membersToDelete) . ")"; 
} 
+0

這就是發送和以前一樣多的電子郵件,感謝你看,它知道代碼不是最好的。我急於做到這一點,所以它是波濤洶涌,但你建議我重做我是怎麼做到的? – ApperleyA 2012-04-11 18:31:14

+0

更新了建議的循環重構。 – 2012-04-11 18:47:42

+0

哇你沒有必要重寫我的代碼,但謝謝你,我會在下班後測試這個。旁邊的問題,其他然後做這樣的項目,我可以在哪裏學習如何編寫像你這樣的代碼,愚蠢的大學讓我自己學習。 – ApperleyA 2012-04-11 18:52:11

0

目前尚不十分清楚你想要什麼,你正在做什麼,但對$_POST['members_cbox']中的每個元素運行SELECT查詢似乎並不是一個好主意。 DELETE聲明也是如此。

的算法應該是:

  1. 得到你想要使用where user_id in(...)語法
  2. 發送電子郵件給他們每個人的
  3. 使用語法類似於刪除所有的人都從數據庫中刪除所有成員之前

而且最重要的是,至少在3個方法/功能中模塊化代碼!