2011-05-29 60 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']」在你的課堂上做得不正確。