2012-04-11 17 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个方法/功能中模块化代码!