Поиск по базе данных почтовых отправлений PHP

#php #database

#php #База данных

Вопрос:

Я создал страницу PHP, которая ищет адреса электронной почты постоянных контактов в базе данных и возвращает таблицу с их именем, адресом электронной почты и списком рассылки, в котором они находятся. Вы вводите адреса здесь: Инструмент поиска контактов вместе с вашим именем пользователя и паролем для постоянного контакта.

По какой-то причине список списков рассылки находится только в последней строке страницы результатов. В других есть слово «Array», которое я удалил, так что теперь эти строки пустые. Вот снимок экрана, показывающий, что я имею в виду:

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

Тем не менее, они все в списке. Вот код для search.php . Форма отправляется в этот файл:

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

<html>
 <заголовок>
 <заголовок>Список контактов</title>
 <тип стиля="текст/css">
 .hdr
 {
 поле внизу: 0px;
 заполнение внизу: 0 пикселей;
 }
 </style>
 </head>
 <тело>
 <ширина таблицы ="75%">
 <tr>
 <td class="hdr">Имя</td>
 <td class="hdr">Адрес электронной почты</td>
 <td class="hdr">Список(ы)</td>
 </tr>
 <tr>
 <td colspan="3">
 <hr style="заполнение: 0; margin:0">
 </td>
 </tr>
 <?PHP
 require_once('./class.cc.php ');

 /*ПЕРЕМЕННЫЕ*/
 $cc = новый cc ($_POST['Имя пользователя'], $_POST['пароль']);
 если ($ cc)
 {
 $strEmails = $_REQUEST['электронные письма'];
 $aryEmails = explode("n", $strEmails);

 $page = (isset($_GET['страница'])) ? $_GET['страница'] : 'списки';
 $lists = $cc->get_lists($страница);

 /*МЕТОДЫ*/
 foreach ($aryEmails как $email)
 { 
 если ($lists)
 {
 foreach ($перечисляется как $k => $ v)
 {
 $list = $v['Name'];
 $page = (isset($_GET['страница'])) ? $_GET['страница'] : 'участники';
 $members = $cc->get_list_members($v['id'], $page);

 если ($members)
 {
 foreach($members как $k => $v)
 { 
 if($v['Адрес электронной почты'] == $email)
 {
 $strLists .= $list . ", ";
 }
 }
 }
 }
 }

 $strLists = str_replace("Массив", "", $strLists);
 $strLists = substr($strLists, 0, -2);

 $contact = $cc->query_contacts (обрезать($email));

 если ($contact)
 {
 $strName = $contact['Имя'];
 if(is_array($strName))
 {
 $strName = "";
 }

 echo
 (
 "<tr><td>".$strName."</td>".
 "<td>".$contact['Адрес электронной почты']."</td>".
 "<td>".$strLists."</td></tr>"
 );
 }

 ещё
 { 
 echo("<tr><td colspan='3'>Не удалось найти {$email}.</td></tr>");
 }
 }
 }

 ещё
 { 
 echo "Неверное имя пользователя или пароль";
 }
 ?>
 </таблица>
 </body>
</html>

Вот class.cc файл: http://advantage-computer.com/tools/class.cc.txt

Комментарии:

1. Попробуйте использовать print_r и проверьте, являются ли strName и strLists массивами или нет.

2. @Coding-Freak: Спасибо за ответ. Когда я добавляю echo(gettype($ strLists)); выше $strLists .= $list . «, «; Я получаю «логическую строку string». По какой-то причине цикл повторяется три раза, хотя есть только два адреса электронной почты. Print_r нигде не выводит «Array».

3. Измените этот раздел echo ( "<tr><td>".$strName."</td>". "<td>".$contact['EmailAddress']."</td>". "<td>".$strLists."</td></tr>" ); и выведите каждое значение по отдельности, используя print_r, чтобы проверить, является ли оно массивом.

4. Помешанный на кодировании: я просто заменил каждый на print_r , но он делает то же самое. Первая ячейка в разделе «Списки» пуста, а вторая содержит список списков.

5. Совет заключается в использовании волшебного ‘var_dump’ для отладки ваших данных var. Попробуйте поставить ‘var_dump’ на каждой итерации и проверьте, соответствуют ли ваши данные вашему плану.

Ответ №1:

Во-первых, вы должны выйти из этого цикла, как только вы сопоставили запись, и вы не используете $ k, чтобы мы могли удалить это из цикла, например:

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

Я бы также добавил туда строку для отладки того, что находится в переменной $ list, когда это массив:

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

Я бы сказал, что все, что устанавливает «$ _list[‘content’][‘ContactList’] [‘Name’]» в вашем классе, делает это неправильно.

Ответ №2:

Спасибо всем за ответы. Мой брат обнаружил проблему. Он изменил

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

Для

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

Похоже, что он соответствовал только последней строке в текстовой области, потому что в массиве электронной почты, оставшемся от текстовой области, все еще были возвраты каретки. Он добавил rtrim, чтобы удалить их.