#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, чтобы удалить их.