2011-05-29 76 views
3

我做了一个PHP页面,查找数据库中的常量联系人电子邮件地址,并返回一个列出他们的名字,电子邮件地址和邮件列表的表格。您在此输入地址:联系查找工具以及您的常用联系人用户名和密码。PHP邮件数据库搜索

由于某些原因,只有结果页面的最后一行有一个邮件列表列表。其他人有“数组”字样,我删除了,所以现在这些行是空白的。这里是我的意思的屏幕截图:

http://www.advantage-computer.com/images/ScreenCap.png

他们都在列表中,但。这是search.php的代码。该表单提交到该文件:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

<html> 
    <head> 
     <title>List of Contacts</title> 
     <style type="text/css"> 
      .hdr 
      { 
       margin-bottom: 0px; 
       padding-bottom: 0px; 
      } 
     </style> 
    </head> 
    <body> 
     <table width="75%"> 
      <tr> 
       <td class="hdr">Name</td> 
       <td class="hdr">E-mail address</td> 
       <td class="hdr">List(s)</td> 
      </tr> 
      <tr> 
       <td colspan="3"> 
        <hr style="padding:0; margin:0"> 
       </td> 
      </tr> 
      <?PHP 
       require_once('./class.cc.php'); 

       /*VARIABLES*/ 
       $cc = new cc($_POST['userName'], $_POST['password']); 
       if($cc) 
       { 
        $strEmails = $_REQUEST['emails']; 
        $aryEmails = explode("\n", $strEmails); 

        $page = (isset($_GET['page'])) ? $_GET['page'] : 'lists'; 
        $lists = $cc->get_lists($page); 

        /*METHODS*/ 
        foreach ($aryEmails as $email) 
        {  
         if($lists) 
         { 
          foreach($lists as $k => $v) 
          { 
           $list = $v['Name']; 
           $page = (isset($_GET['page'])) ? $_GET['page'] : 'members'; 
           $members = $cc->get_list_members($v['id'], $page); 

           if($members) 
           { 
            foreach($members as $k => $v) 
            { 
             if($v['EmailAddress'] == $email) 
             { 
              $strLists .= $list . ", "; 
             } 
            } 
           } 
          } 
         } 

         $strLists = str_replace("Array", "", $strLists); 
         $strLists = substr($strLists, 0, -2); 

         $contact = $cc->query_contacts(trim($email)); 

         if($contact) 
         { 
          $strName = $contact['Name']; 
          if(is_array($strName)) 
          { 
           $strName = ""; 
          } 

          echo 
          (
           "<tr><td>".$strName."</td>". 
           "<td>".$contact['EmailAddress']."</td>". 
           "<td>".$strLists."</td></tr>" 
          ); 
         } 

         else 
         { 
          echo("<tr><td colspan='3'>Could not find {$email}.</td></tr>"); 
         } 
        } 
       } 

       else 
       { 
        echo "Invalid user name or password"; 
       } 
      ?> 
     </table> 
    </body> 
</html>

这里是class.cc文件:http://advantage-computer.com/tools/class.cc.txt

+0

尝试使用'print_r'并检查strName和strLists是否为数组。 – 2011-05-29 17:26:10

+0

@ Coding-Freak:谢谢你的回复。当我添加回声(gettype($ strLists));在$ strLists。= $ list之上。 “,”;我得到“布尔字符串字符串”。出于某种原因,即使只有两个电子邮件地址,它也会经历三次循环。 Print_r不会在任何地方打印出“阵列”。 – Richard 2011-05-29 17:36:08

+0

修改这个部分'回声 ( “​​”。$则strName。 “”。 “​​”。$接触[ 'EmailAddress的']。 “”。 “​​”。$ strLists。 “” );'并使用print_r单独打印每个值以检查它是否是数组。 – 2011-05-29 17:40:26

回答

0

谢谢大家的回复。我的兄弟发现了这个问题。他改变

foreach ($aryEmails as $email){ 
    ... 
} 

foreach ($aryEmails as $tmpEmail){ 
    $email = rtrim($tmpEmail); 
    ... 
} 

看来,它只是在文本区域相匹配的最后一行,因为仍有从文本区遗留的电子邮件数组中的回车。他添加了rtrim以删除它们。

1

首先,你应该跳出这个循环的,一旦你相匹配的记录,没有使用$ķ所以我们可以从环路去除过多,如:

if($members) 
    foreach($members as $v) 
    if($v['EmailAddress'] == $email) 
    { 
     $strLists .= $list . ", "; 
     break; 
    } 

我也会在里面添加一条线调试什么在$列表变量时,它是一个数组:

if (is_array($list)) 
    var_dump($list); 

我想说的是,无论是设置“$ _list ['content'] ['ContactList'] ['Name']”在你的课堂上做得不正确。